diff options
author | 2023-11-14 10:59:05 +0000 | |
---|---|---|
committer | 2023-11-14 10:59:05 +0000 | |
commit | 7a8443153599ca8c3e143b152044fca6b6a4c37e (patch) | |
tree | 5ef8d8e09168eb07b580dda76d535338e90a90c6 /vulkan/libvulkan/swapchain.cpp | |
parent | b06d413004c599ed7249ba18ce876b72b9527408 (diff) |
Pass in VkImageCompressionControlEXT for swapchain usage query
When using vkGetPhysicalDeviceImageFormatProperties2KHR to query usage
flags, pass the application provided VkImageCompressionControlEXT struct
to get the correct usage flags.
Bug: 307696078
Change-Id: Idcad0589a1e05bd8e7574fbb1bdd1346aad325f9
Diffstat (limited to 'vulkan/libvulkan/swapchain.cpp')
-rw-r--r-- | vulkan/libvulkan/swapchain.cpp | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/vulkan/libvulkan/swapchain.cpp b/vulkan/libvulkan/swapchain.cpp index 0c48611639..4f7b0f4c57 100644 --- a/vulkan/libvulkan/swapchain.cpp +++ b/vulkan/libvulkan/swapchain.cpp @@ -1485,10 +1485,33 @@ static VkResult getProducerUsage(const VkDevice& device, return VK_SUCCESS; } + // Look through the create_info pNext chain passed to createSwapchainKHR + // for an image compression control struct. + // if one is found AND the appropriate extensions are enabled, create a + // VkImageCompressionControlEXT structure to pass on to GetPhysicalDeviceImageFormatProperties2 + void* compression_control_pNext = nullptr; + VkImageCompressionControlEXT image_compression = {}; + const VkSwapchainCreateInfoKHR* create_infos = create_info; + while (create_infos->pNext) { + create_infos = reinterpret_cast<const VkSwapchainCreateInfoKHR*>(create_infos->pNext); + switch (create_infos->sType) { + case VK_STRUCTURE_TYPE_IMAGE_COMPRESSION_CONTROL_EXT: { + const VkImageCompressionControlEXT* compression_infos = + reinterpret_cast<const VkImageCompressionControlEXT*>(create_infos); + image_compression = *compression_infos; + image_compression.pNext = nullptr; + compression_control_pNext = &image_compression; + } break; + default: + // Ignore all other info structs + break; + } + } + // call GetPhysicalDeviceImageFormatProperties2KHR VkPhysicalDeviceExternalImageFormatInfo external_image_format_info = { .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO, - .pNext = nullptr, + .pNext = compression_control_pNext, .handleType = VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID, }; |