Flutter Engine
 
Loading...
Searching...
No Matches
blit_pass_vk_unittests.cc
Go to the documentation of this file.
1// Copyright 2013 The Flutter Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
6#include "fml/macros.h"
10
11namespace impeller {
12
13TEST(BlitPassVKTest, MipmapGenerationTransitionsAllLevelsCorrectly) {
15 ASSERT_TRUE(context->IsValid());
16
17 auto cmd_buffer = context->CreateCommandBuffer();
18 ASSERT_TRUE(cmd_buffer);
19 auto blit_pass = cmd_buffer->CreateBlitPass();
20 ASSERT_TRUE(blit_pass);
21
22 auto vk_blit_pass = reinterpret_cast<BlitPassVK*>(blit_pass.get());
23 auto vk_cmd_buffer = reinterpret_cast<CommandBufferVK*>(cmd_buffer.get());
24
26 desc.size = ISize(100, 65);
28 desc.mip_count = 6;
29 auto texture = context->GetResourceAllocator()->CreateTexture(desc);
30 ASSERT_TRUE(texture);
31
32 ASSERT_TRUE(vk_blit_pass->OnGenerateMipmapCommand(texture, "TestMipmap"));
33
34 auto& barriers =
35 testing::GetImageMemoryBarriers(vk_cmd_buffer->GetCommandBuffer());
36
37 ASSERT_EQ(barriers.size(), 8u);
38
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);
43
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;
49 }
50
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);
55}
56
57} // namespace impeller
std::shared_ptr< ContextVK > Build()
Create a Vulkan context with Vulkan functions mocked. The caller is given a chance to tinker on the s...
FlTexture * texture
std::vector< VkImageMemoryBarrier > & GetImageMemoryBarriers(VkCommandBuffer buffer)
TEST(RationalTest, Make)
ISize64 ISize
Definition size.h:162
A lightweight object that describes the attributes of a texture that can then used an allocator to cr...