diff options
| author | Treehugger Robot <treehugger-gerrit@google.com> | 2020-08-27 18:51:31 +0000 |
|---|---|---|
| committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2020-08-27 18:51:31 +0000 |
| commit | 5de9e02f169969ba6b12e6089bfb2386a498261d (patch) | |
| tree | c7e6e7ea376d929130882a5aad610d2d91ba1060 | |
| parent | 909d58988893783c6802e8672ad55671dfedd95e (diff) | |
| parent | a8624061046aadac7a45f9ce7a99142331193f1b (diff) | |
| download | device_generic_goldfish-opengl-5de9e02f169969ba6b12e6089bfb2386a498261d.tar.gz device_generic_goldfish-opengl-5de9e02f169969ba6b12e6089bfb2386a498261d.tar.bz2 device_generic_goldfish-opengl-5de9e02f169969ba6b12e6089bfb2386a498261d.zip | |
Merge "vulkan_enc: check image format for external images on Fuchsia." am: a862406104
Original change: https://android-review.googlesource.com/c/device/generic/goldfish-opengl/+/1413090
Change-Id: Iccd914cd43a5339c305fb67a4c39f44694000500
| -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 |
