Flutter Engine Uber Docs
Docs for the entire Flutter Engine repo.
 
Loading...
Searching...
No Matches
ahb_texture_source_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 <memory>
7
9#include "gtest/gtest.h"
15
17
19 static AHardwareBuffer* InvalidValue() { return nullptr; }
20 static bool IsValid(AHardwareBuffer* value) { return value != nullptr; }
21 static void Free(AHardwareBuffer* value) { ::AHardwareBuffer_release(value); }
22};
23
26
28 const AHardwareBuffer_Desc& desc) {
29 AHardwareBuffer* buffer = nullptr;
30 EXPECT_EQ(AHardwareBuffer_allocate(&desc, &buffer), 0);
31 return UniqueAHardwareBuffer(buffer);
32}
33
34// Set up context.
35std::shared_ptr<ContextVK> CreateContext() {
36 auto vulkan_dylib = fml::NativeLibrary::Create("libvulkan.so");
37 auto instance_proc_addr =
38 vulkan_dylib->ResolveFunction<PFN_vkGetInstanceProcAddr>(
39 "vkGetInstanceProcAddr");
40
41 if (!instance_proc_addr.has_value()) {
42 VALIDATION_LOG << "Could not setup Vulkan proc table.";
43 return nullptr;
44 }
45
47 settings.proc_address_callback = instance_proc_addr.value();
48 settings.shader_libraries_data = {};
49 settings.enable_validation = false;
50 settings.enable_gpu_tracing = false;
51 settings.enable_surface_control = false;
52
53 return ContextVK::Create(std::move(settings));
54}
55
56TEST(AndroidVulkanTest, CanImportRGBA) {
58 GTEST_SKIP() << "Hardware buffers are not supported on this platform.";
59 }
60
62 desc.size = ISize{1, 1};
65
66 auto ahb = std::make_unique<HardwareBuffer>(desc);
67 ASSERT_TRUE(ahb);
68 auto context_vk = CreateContext();
69 ASSERT_TRUE(context_vk);
70
71 AHBTextureSourceVK source(context_vk, std::move(ahb),
72 /*is_swapchain_image=*/false);
73
74 EXPECT_TRUE(source.IsValid());
75 EXPECT_EQ(source.GetYUVConversion(), nullptr);
76
77 context_vk->Shutdown();
78}
79
80TEST(AndroidVulkanTest, CanImportWithYUB) {
82 GTEST_SKIP() << "Hardware buffers are not supported on this platform.";
83 }
84
85 AHardwareBuffer_Desc desc;
86 desc.width = 16;
87 desc.height = 16;
88 desc.format = AHARDWAREBUFFER_FORMAT_Y8Cb8Cr8_420;
89 desc.stride = 0;
90 desc.layers = 1;
91 desc.rfu0 = 0;
92 desc.rfu1 = 0;
93 desc.usage = AHARDWAREBUFFER_USAGE_GPU_SAMPLED_IMAGE |
94 AHARDWAREBUFFER_USAGE_CPU_WRITE_MASK |
95 AHARDWAREBUFFER_USAGE_CPU_READ_MASK;
96
97 EXPECT_EQ(AHardwareBuffer_isSupported(&desc), 1);
98
100 ASSERT_TRUE(buffer.is_valid());
101
102 auto context_vk = CreateContext();
103 ASSERT_TRUE(context_vk);
104
105 AHBTextureSourceVK source(context_vk, buffer.get(), desc);
106
107 EXPECT_TRUE(source.IsValid());
108 EXPECT_NE(source.GetYUVConversion(), nullptr);
109
110 context_vk->Shutdown();
111}
112
113TEST(AndroidVulkanTest, CreateImageViewForOpaqueAlpha) {
115 GTEST_SKIP() << "Hardware buffers are not supported on this platform.";
116 }
117
118 AHardwareBuffer_Desc desc;
119 desc.width = 16;
120 desc.height = 16;
121 desc.format = AHARDWAREBUFFER_FORMAT_R8G8B8X8_UNORM;
122 desc.stride = 0;
123 desc.layers = 1;
124 desc.rfu0 = 0;
125 desc.rfu1 = 0;
126 desc.usage = AHARDWAREBUFFER_USAGE_GPU_SAMPLED_IMAGE |
127 AHARDWAREBUFFER_USAGE_CPU_WRITE_MASK |
128 AHARDWAREBUFFER_USAGE_CPU_READ_MASK;
129
130 EXPECT_EQ(AHardwareBuffer_isSupported(&desc), 1);
131
133 ASSERT_TRUE(buffer.is_valid());
134
135 auto context_vk = CreateContext();
136 ASSERT_TRUE(context_vk);
137
139 ASSERT_EQ(context_vk->GetDevice().getAndroidHardwareBufferPropertiesANDROID(
140 buffer.get(), &ahb_props.get()),
141 vk::Result::eSuccess);
142
144 context_vk->GetDevice(), ahb_props, desc);
145 ASSERT_TRUE(image);
146
148 image.get(), nullptr, ahb_props, desc);
149
150 EXPECT_EQ(image_info.get().components.a, vk::ComponentSwizzle::eOne);
151
152 context_vk->Shutdown();
153}
154
155} // namespace impeller::android::testing
static fml::RefPtr< NativeLibrary > Create(const char *path)
A texture source that wraps an instance of AHardwareBuffer.
static vk::UniqueImage CreateVKImageWrapperForAndroidHarwareBuffer(const vk::Device &device, const AHBProperties &ahb_props, const AHardwareBuffer_Desc &ahb_desc)
Create a VkImage that wraps an Android hardware buffer.
std::shared_ptr< YUVConversionVK > GetYUVConversion() const override
When sampling from textures whose formats are not known to Vulkan, a custom conversion is necessary t...
vk::StructureChain< vk::AndroidHardwareBufferPropertiesANDROID, vk::AndroidHardwareBufferFormatPropertiesANDROID > AHBProperties
static ImageViewInfo CreateImageViewInfo(const vk::Image &image, const std::shared_ptr< YUVConversionVK > &yuv_conversion_wrapper, const AHBProperties &ahb_props, const AHardwareBuffer_Desc &ahb_desc)
static std::shared_ptr< ContextVK > Create(Settings settings)
int32_t value
FlutterVulkanImage * image
std::shared_ptr< ContextVK > CreateContext()
TEST(AndroidAHBSwapchainTest, AHBSwapchainNoFenceWaitAfterAcquireNextImageFailure)
fml::UniqueObject< AHardwareBuffer *, UniqueAHardwareBufferTraits > UniqueAHardwareBuffer
UniqueAHardwareBuffer AllocateAHardwareBuffer(const AHardwareBuffer_Desc &desc)
std::vector< std::shared_ptr< fml::Mapping > > shader_libraries_data
Definition context_vk.h:81
PFN_vkGetInstanceProcAddr proc_address_callback
Definition context_vk.h:80
A descriptor use to specify hardware buffer allocations.
#define VALIDATION_LOG
Definition validation.h:91