9#include "gtest/gtest.h"
25 static bool IsValid(AHardwareBuffer* value) {
return value !=
nullptr; }
26 static void Free(AHardwareBuffer* value) { ::AHardwareBuffer_release(
value); }
33 const AHardwareBuffer_Desc& desc) {
34 AHardwareBuffer* buffer =
nullptr;
35 EXPECT_EQ(AHardwareBuffer_allocate(&desc, &buffer), 0);
42 auto instance_proc_addr =
43 vulkan_dylib->ResolveFunction<PFN_vkGetInstanceProcAddr>(
44 "vkGetInstanceProcAddr");
46 if (!instance_proc_addr.has_value()) {
61TEST(AndroidVulkanTest, CanImportRGBA) {
63 GTEST_SKIP() <<
"Hardware buffers are not supported on this platform.";
71 auto ahb = std::make_unique<HardwareBuffer>(desc);
74 ASSERT_TRUE(context_vk);
82 context_vk->Shutdown();
85TEST(AndroidVulkanTest, CanImportWithYUB) {
87 GTEST_SKIP() <<
"Hardware buffers are not supported on this platform.";
90 AHardwareBuffer_Desc desc;
93 desc.format = AHARDWAREBUFFER_FORMAT_Y8Cb8Cr8_420;
98 desc.usage = AHARDWAREBUFFER_USAGE_GPU_SAMPLED_IMAGE |
99 AHARDWAREBUFFER_USAGE_CPU_WRITE_MASK |
100 AHARDWAREBUFFER_USAGE_CPU_READ_MASK;
102 EXPECT_EQ(AHardwareBuffer_isSupported(&desc), 1);
105 ASSERT_TRUE(buffer.is_valid());
108 ASSERT_TRUE(context_vk);
115 context_vk->Shutdown();
118TEST(AndroidVulkanTest, CreateImageViewForOpaqueAlpha) {
120 GTEST_SKIP() <<
"Hardware buffers are not supported on this platform.";
123 AHardwareBuffer_Desc desc;
126 desc.format = AHARDWAREBUFFER_FORMAT_R8G8B8X8_UNORM;
131 desc.usage = AHARDWAREBUFFER_USAGE_GPU_SAMPLED_IMAGE |
132 AHARDWAREBUFFER_USAGE_CPU_WRITE_MASK |
133 AHARDWAREBUFFER_USAGE_CPU_READ_MASK;
135 EXPECT_EQ(AHardwareBuffer_isSupported(&desc), 1);
138 ASSERT_TRUE(buffer.is_valid());
141 ASSERT_TRUE(context_vk);
144 ASSERT_EQ(context_vk->GetDevice().getAndroidHardwareBufferPropertiesANDROID(
145 buffer.get(), &ahb_props.get()),
146 vk::Result::eSuccess);
149 context_vk->GetDevice(), ahb_props, desc);
153 image.get(),
nullptr, ahb_props, desc);
155 EXPECT_EQ(image_info.get().components.a, vk::ComponentSwizzle::eOne);
157 context_vk->Shutdown();
160TEST(AndroidVulkanTest, TextureSourceDeleteAfterContextDelete) {
161 AHardwareBuffer_Desc desc;
164 desc.format = AHARDWAREBUFFER_FORMAT_R8G8B8X8_UNORM;
169 desc.usage = AHARDWAREBUFFER_USAGE_GPU_SAMPLED_IMAGE |
170 AHARDWAREBUFFER_USAGE_CPU_WRITE_MASK |
171 AHARDWAREBUFFER_USAGE_CPU_READ_MASK;
173 EXPECT_EQ(AHardwareBuffer_isSupported(&desc), 1);
176 ASSERT_TRUE(buffer.is_valid());
185 std::make_shared<AHBTextureSourceVK>(
context, buffer.get(), desc);
186 ASSERT_TRUE(
texture->IsValid());
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)
static bool IsAvailableOnPlatform()
MockVulkanContextBuilder & SetDeviceExtensions(const std::vector< std::string > &device_extensions)
std::shared_ptr< ContextVK > Build()
Create a Vulkan context with Vulkan functions mocked. The caller is given a chance to tinker on the s...
FlutterVulkanImage * image
std::shared_ptr< ContextVK > CreateContext()
TEST(AndroidAHBSwapchainTest, AHBSwapchainNoFenceWaitAfterAcquireNextImageFailure)
fml::UniqueObject< AHardwareBuffer *, UniqueAHardwareBufferTraits > UniqueAHardwareBuffer
UniqueAHardwareBuffer AllocateAHardwareBuffer(const AHardwareBuffer_Desc &desc)
const std::vector< std::string > kAndroidDeviceExtensions
std::shared_ptr< std::vector< std::string > > GetMockVulkanFunctions(VkDevice device)
std::shared_ptr< ContextGLES > context
bool enable_surface_control
std::vector< std::shared_ptr< fml::Mapping > > shader_libraries_data
PFN_vkGetInstanceProcAddr proc_address_callback
A descriptor use to specify hardware buffer allocations.
HardwareBufferUsage usage
HardwareBufferFormat format
static bool IsValid(AHardwareBuffer *value)
static AHardwareBuffer * InvalidValue()
static void Free(AHardwareBuffer *value)