From ab89e17faf95f6180907067b5f79023972ef48c0 Mon Sep 17 00:00:00 2001 From: Yilong Li Date: Fri, 18 Sep 2020 10:07:59 -0700 Subject: fuchsia: Set sysmem constraints only if format/tiling/usage valid on host. Host Vulkan driver may not support some specific format, tiling and image usage combinations. Before guest ICD set up sysmem buffer collection constraints, guest needs to verify the image properties to ensure that this works on host Vulkan driver, otherwise it may cause further issues with the ColorBuffer/guest Vulkan image. TEST=chromium test on FEMU. Change-Id: I391c564a39cfecf35e8e2ca6486f8e35bed5ee96 --- system/vulkan_enc/ResourceTracker.cpp | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/system/vulkan_enc/ResourceTracker.cpp b/system/vulkan_enc/ResourceTracker.cpp index c20e394f..b00a5627 100644 --- a/system/vulkan_enc/ResourceTracker.cpp +++ b/system/vulkan_enc/ResourceTracker.cpp @@ -1830,6 +1830,32 @@ public: VK_FORMAT_B8G8R8A8_UNORM, VK_FORMAT_R8G8B8A8_UNORM, }; + } else { + // If image format is predefined, check on host if the format, + // tiling and usage is supported. + AutoLock lock(mLock); + auto deviceIt = info_VkDevice.find(device); + if (deviceIt == info_VkDevice.end()) { + return VK_ERROR_INITIALIZATION_FAILED; + } + auto& deviceInfo = deviceIt->second; + + VkImageFormatProperties format_properties; + auto result = enc->vkGetPhysicalDeviceImageFormatProperties( + deviceInfo.physdev, pImageInfo->format, pImageInfo->imageType, + pImageInfo->tiling, pImageInfo->usage, pImageInfo->flags, &format_properties); + if (result != VK_SUCCESS) { + ALOGE( + "%s: Image format (%u) type (%u) tiling (%u) " + "usage (%u) flags (%u) not supported by physical " + "device", + __func__, static_cast(pImageInfo->format), + static_cast(pImageInfo->imageType), + static_cast(pImageInfo->tiling), + static_cast(pImageInfo->usage), + static_cast(pImageInfo->flags)); + return VK_ERROR_FORMAT_NOT_SUPPORTED; + } } constraints.image_format_constraints_count = formats.size(); uint32_t format_index = 0; -- cgit v1.2.3