7 #include "flutter/testing/testing.h"
8 #include "gtest/gtest.h"
16 #include "impeller/renderer/backend/vulkan/test/mock_vulkan.h"
17 #include "vulkan/vulkan_enums.hpp"
22 TEST(AllocatorVKTest, ToVKImageUsageFlags) {
28 vk::ImageUsageFlagBits::eInputAttachment |
29 vk::ImageUsageFlagBits::eColorAttachment |
30 vk::ImageUsageFlagBits::eTransientAttachment);
37 vk::ImageUsageFlagBits::eDepthStencilAttachment |
38 vk::ImageUsageFlagBits::eTransientAttachment);
41 TEST(AllocatorVKTest, MemoryTypeSelectionSingleHeap) {
42 vk::PhysicalDeviceMemoryProperties properties;
43 properties.memoryTypeCount = 1;
44 properties.memoryHeapCount = 1;
45 properties.memoryTypes[0].heapIndex = 0;
46 properties.memoryTypes[0].propertyFlags =
47 vk::MemoryPropertyFlagBits::eDeviceLocal;
48 properties.memoryHeaps[0].size = 1024 * 1024 * 1024;
49 properties.memoryHeaps[0].flags = vk::MemoryHeapFlagBits::eDeviceLocal;
56 TEST(AllocatorVKTest, MemoryTypeSelectionTwoHeap) {
57 vk::PhysicalDeviceMemoryProperties properties;
58 properties.memoryTypeCount = 2;
59 properties.memoryHeapCount = 2;
60 properties.memoryTypes[0].heapIndex = 0;
61 properties.memoryTypes[0].propertyFlags =
62 vk::MemoryPropertyFlagBits::eHostVisible;
63 properties.memoryHeaps[0].size = 1024 * 1024 * 1024;
64 properties.memoryHeaps[0].flags = vk::MemoryHeapFlagBits::eDeviceLocal;
66 properties.memoryTypes[1].heapIndex = 1;
67 properties.memoryTypes[1].propertyFlags =
68 vk::MemoryPropertyFlagBits::eDeviceLocal;
69 properties.memoryHeaps[1].size = 1024 * 1024 * 1024;
70 properties.memoryHeaps[1].flags = vk::MemoryHeapFlagBits::eDeviceLocal;
79 TEST(AllocatorVKTest, ImageResourceKeepsVulkanDeviceAlive) {
80 std::shared_ptr<Texture> texture;
81 std::weak_ptr<Allocator> weak_allocator;
83 auto const context = MockVulkanContextBuilder().Build();
84 weak_allocator =
context->GetResourceAllocator();
85 auto allocator =
context->GetResourceAllocator();
95 ASSERT_TRUE(weak_allocator.lock());
98 TEST(AllocatorVKTest, RetriesUncompressedOnCompressionExhausted) {
103 MockVulkanContextBuilder()
104 .SetDeviceExtensions(
105 {
"VK_KHR_swapchain",
"VK_EXT_image_compression_control"})
106 .SetCompressionExhaustedCreateImageFailures(1)
109 auto allocator =
context->GetResourceAllocator();
110 ASSERT_TRUE(allocator);
124 ASSERT_TRUE(texture);
125 EXPECT_TRUE(texture->IsValid());
129 auto const called = GetMockVulkanFunctions(
context->GetDevice());
130 EXPECT_EQ(std::count(called->begin(), called->end(),
"vkCreateImage"), 2);
133 #ifdef IMPELLER_DEBUG
135 TEST(AllocatorVKTest, RecreateSwapchainWhenSizeChanges) {
136 auto const context = MockVulkanContextBuilder().Build();
137 auto allocator =
context->GetResourceAllocator();
139 EXPECT_EQ(
reinterpret_cast<AllocatorVK*
>(allocator.get())
152 EXPECT_EQ(
reinterpret_cast<AllocatorVK*
>(allocator.get())
153 ->DebugGetHeapUsage()
constexpr uint64_t GetByteSize() const
static int32_t FindMemoryTypeIndex(uint32_t memory_type_bits_requirement, vk::PhysicalDeviceMemoryProperties &memory_properties)
Select a matching memory type for the given [memory_type_bits_requirement], or -1 if none is found.
static vk::ImageUsageFlags ToVKImageUsageFlags(PixelFormat format, TextureUsageMask usage, StorageMode mode, bool supports_memoryless_textures)
Bytes DebugGetHeapUsage() const override
TEST(AllocationSizeTest, CanCreateTypedAllocations)
AllocationSize< 1 '024u *1 '024u > MebiBytes
std::shared_ptr< ContextGLES > context
A lightweight object that describes the attributes of a texture that can then used an allocator to cr...