diff options
Diffstat (limited to 'vulkan/libvulkan/swapchain.cpp')
-rw-r--r-- | vulkan/libvulkan/swapchain.cpp | 57 |
1 files changed, 35 insertions, 22 deletions
diff --git a/vulkan/libvulkan/swapchain.cpp b/vulkan/libvulkan/swapchain.cpp index 48a75c5c05..2e22c36f35 100644 --- a/vulkan/libvulkan/swapchain.cpp +++ b/vulkan/libvulkan/swapchain.cpp @@ -950,27 +950,36 @@ VkResult GetPhysicalDeviceSurfaceFormats2KHR( return GetPhysicalDeviceSurfaceFormatsKHR(physicalDevice, pSurfaceInfo->surface, pSurfaceFormatCount, nullptr); - } else { - // temp vector for forwarding; we'll marshal it into the pSurfaceFormats - // after the call. - std::vector<VkSurfaceFormatKHR> surface_formats(*pSurfaceFormatCount); - VkResult result = GetPhysicalDeviceSurfaceFormatsKHR( - physicalDevice, pSurfaceInfo->surface, pSurfaceFormatCount, - surface_formats.data()); - - if (result == VK_SUCCESS || result == VK_INCOMPLETE) { - const auto& driver = GetData(physicalDevice).driver; - - // marshal results individually due to stride difference. - uint32_t formats_to_marshal = *pSurfaceFormatCount; - for (uint32_t i = 0u; i < formats_to_marshal; i++) { - pSurfaceFormats[i].surfaceFormat = surface_formats[i]; - - // Query the compression properties for the surface format - if (pSurfaceFormats[i].pNext) { + } + + // temp vector for forwarding; we'll marshal it into the pSurfaceFormats + // after the call. + std::vector<VkSurfaceFormatKHR> surface_formats(*pSurfaceFormatCount); + VkResult result = GetPhysicalDeviceSurfaceFormatsKHR( + physicalDevice, pSurfaceInfo->surface, pSurfaceFormatCount, + surface_formats.data()); + + if (result != VK_SUCCESS && result != VK_INCOMPLETE) { + return result; + } + + const auto& driver = GetData(physicalDevice).driver; + + // marshal results individually due to stride difference. + uint32_t formats_to_marshal = *pSurfaceFormatCount; + for (uint32_t i = 0u; i < formats_to_marshal; i++) { + pSurfaceFormats[i].surfaceFormat = surface_formats[i]; + + // Query the compression properties for the surface format + VkSurfaceFormat2KHR* pSurfaceFormat = &pSurfaceFormats[i]; + while (pSurfaceFormat->pNext) { + pSurfaceFormat = + reinterpret_cast<VkSurfaceFormat2KHR*>(pSurfaceFormat->pNext); + switch (pSurfaceFormat->sType) { + case VK_STRUCTURE_TYPE_IMAGE_COMPRESSION_PROPERTIES_EXT: { VkImageCompressionPropertiesEXT* surfaceCompressionProps = reinterpret_cast<VkImageCompressionPropertiesEXT*>( - pSurfaceFormats[i].pNext); + pSurfaceFormat); if (surfaceCompressionProps && driver.GetPhysicalDeviceImageFormatProperties2KHR) { @@ -1012,12 +1021,16 @@ VkResult GetPhysicalDeviceSurfaceFormats2KHR( return compressionRes; } } - } + } break; + + default: + // Ignore all other extension structs + break; } } - - return result; } + + return result; } VKAPI_ATTR |