diff options
-rw-r--r-- | system/vulkan_enc/ResourceTracker.cpp | 34 | ||||
-rw-r--r-- | system/vulkan_enc/vk_struct_id.h | 1 |
2 files changed, 35 insertions, 0 deletions
diff --git a/system/vulkan_enc/ResourceTracker.cpp b/system/vulkan_enc/ResourceTracker.cpp index bbd755ce..907e3c54 100644 --- a/system/vulkan_enc/ResourceTracker.cpp +++ b/system/vulkan_enc/ResourceTracker.cpp @@ -2469,6 +2469,11 @@ public: if (hasDedicatedImage) { VkResult res = setBufferCollectionConstraints( &collection, pImageCreateInfo); + if (res == VK_ERROR_FORMAT_NOT_SUPPORTED) { + ALOGE("setBufferCollectionConstraints failed: format %u is not supported", + pImageCreateInfo->format); + return VK_ERROR_OUT_OF_DEVICE_MEMORY; + } if (res != VK_SUCCESS) { ALOGE("setBufferCollectionConstraints failed: %d", res); abort(); @@ -4701,6 +4706,35 @@ public: VkEncoder* enc = (VkEncoder*)context; (void)input_result; +#ifdef VK_USE_PLATFORM_FUCHSIA + + constexpr VkFormat kExternalImageSupportedFormats[] = { + VK_FORMAT_B8G8R8A8_SINT, + VK_FORMAT_B8G8R8A8_UNORM, + VK_FORMAT_B8G8R8A8_SRGB, + VK_FORMAT_B8G8R8A8_SNORM, + VK_FORMAT_B8G8R8A8_SSCALED, + VK_FORMAT_B8G8R8A8_USCALED, + VK_FORMAT_R8G8B8A8_SINT, + VK_FORMAT_R8G8B8A8_UNORM, + VK_FORMAT_R8G8B8A8_SRGB, + VK_FORMAT_R8G8B8A8_SNORM, + VK_FORMAT_R8G8B8A8_SSCALED, + VK_FORMAT_R8G8B8A8_USCALED, + }; + + VkExternalImageFormatProperties* ext_img_properties = + vk_find_struct<VkExternalImageFormatProperties>(pImageFormatProperties); + + if (ext_img_properties) { + if (std::find(std::begin(kExternalImageSupportedFormats), + std::end(kExternalImageSupportedFormats), + pImageFormatInfo->format) == std::end(kExternalImageSupportedFormats)) { + return VK_ERROR_FORMAT_NOT_SUPPORTED; + } + } +#endif + VkAndroidHardwareBufferUsageANDROID* output_ahw_usage = vk_find_struct<VkAndroidHardwareBufferUsageANDROID>(pImageFormatProperties); diff --git a/system/vulkan_enc/vk_struct_id.h b/system/vulkan_enc/vk_struct_id.h index b720edf6..0aaf7a9a 100644 --- a/system/vulkan_enc/vk_struct_id.h +++ b/system/vulkan_enc/vk_struct_id.h @@ -52,5 +52,6 @@ REGISTER_VK_STRUCT_ID(VkSamplerYcbcrConversionInfo, VK_STRUCTURE_TYPE_SAMPLER_YC REGISTER_VK_STRUCT_ID(VkFenceCreateInfo, VK_STRUCTURE_TYPE_FENCE_CREATE_INFO); REGISTER_VK_STRUCT_ID(VkExportFenceCreateInfo, VK_STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO); REGISTER_VK_STRUCT_ID(VkImportBufferGOOGLE, VK_STRUCTURE_TYPE_IMPORT_BUFFER_GOOGLE); +REGISTER_VK_STRUCT_ID(VkExternalImageFormatProperties, VK_STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES); #undef REGISTER_VK_STRUCT_ID |