5 #include "flutter/testing/testing.h"
6 #include "fml/macros.h"
9 #include "impeller/renderer/backend/vulkan/test/mock_vulkan.h"
13 TEST(BlitPassVKTest, MipmapGenerationTransitionsAllLevelsCorrectly) {
14 auto context = testing::MockVulkanContextBuilder().Build();
15 ASSERT_TRUE(context->IsValid());
17 auto cmd_buffer = context->CreateCommandBuffer();
18 ASSERT_TRUE(cmd_buffer);
19 auto blit_pass = cmd_buffer->CreateBlitPass();
20 ASSERT_TRUE(blit_pass);
22 auto vk_blit_pass =
reinterpret_cast<BlitPassVK*
>(blit_pass.get());
23 auto vk_cmd_buffer =
reinterpret_cast<CommandBufferVK*
>(cmd_buffer.get());
29 auto texture = context->GetResourceAllocator()->CreateTexture(desc);
32 ASSERT_TRUE(vk_blit_pass->OnGenerateMipmapCommand(texture,
"TestMipmap"));
35 testing::GetImageMemoryBarriers(vk_cmd_buffer->GetCommandBuffer());
37 ASSERT_EQ(barriers.size(), 8u);
39 EXPECT_EQ(barriers[0].oldLayout, VK_IMAGE_LAYOUT_UNDEFINED);
40 EXPECT_EQ(barriers[0].newLayout, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL);
41 EXPECT_EQ(barriers[0].subresourceRange.baseMipLevel, 0u);
42 EXPECT_EQ(barriers[0].subresourceRange.levelCount, 6u);
44 for (uint32_t i = 1; i < 7; ++i) {
45 EXPECT_EQ(barriers[i].oldLayout, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL) << i;
46 EXPECT_EQ(barriers[i].newLayout, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL) << i;
47 EXPECT_EQ(barriers[i].subresourceRange.baseMipLevel, i - 1) << i;
48 EXPECT_EQ(barriers[i].subresourceRange.levelCount, 1u) << i;
51 EXPECT_EQ(barriers[7].oldLayout, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL);
52 EXPECT_EQ(barriers[7].newLayout, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL);
53 EXPECT_EQ(barriers[7].subresourceRange.baseMipLevel, 0u);
54 EXPECT_EQ(barriers[7].subresourceRange.levelCount, 6u);
A lightweight object that describes the attributes of a texture that can then used an allocator to cr...