vulkan: Implement KHR_get_surface_capabilities2
Implemented by forwarding to the KHR_surface equivalents. This requires
a bit of rejigging in the case of GetPhysicalDeviceSurfaceFormats2KHR
to deal with the stride difference.
Change-Id: I0f1cc83cfc885955a39fc02d4a15609e83d36798
Test: dEQP-VK.wsi.android.surface.*2
diff --git a/vulkan/libvulkan/swapchain.cpp b/vulkan/libvulkan/swapchain.cpp
index 7e96b4c..32c2955 100644
--- a/vulkan/libvulkan/swapchain.cpp
+++ b/vulkan/libvulkan/swapchain.cpp
@@ -649,6 +649,50 @@
}
VKAPI_ATTR
+VkResult GetPhysicalDeviceSurfaceCapabilities2KHR(
+ VkPhysicalDevice physicalDevice,
+ const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo,
+ VkSurfaceCapabilities2KHR* pSurfaceCapabilities) {
+ VkResult result = GetPhysicalDeviceSurfaceCapabilitiesKHR(
+ physicalDevice, pSurfaceInfo->surface,
+ &pSurfaceCapabilities->surfaceCapabilities);
+
+ return result;
+}
+
+VKAPI_ATTR
+VkResult GetPhysicalDeviceSurfaceFormats2KHR(
+ VkPhysicalDevice physicalDevice,
+ const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo,
+ uint32_t* pSurfaceFormatCount,
+ VkSurfaceFormat2KHR* pSurfaceFormats) {
+ if (!pSurfaceFormats) {
+ return GetPhysicalDeviceSurfaceFormatsKHR(physicalDevice,
+ pSurfaceInfo->surface,
+ pSurfaceFormatCount, nullptr);
+ } else {
+ // temp vector for forwarding; we'll marshal it into the pSurfaceFormats
+ // after the call.
+ android::Vector<VkSurfaceFormatKHR> surface_formats;
+ surface_formats.resize(*pSurfaceFormatCount);
+ VkResult result = GetPhysicalDeviceSurfaceFormatsKHR(
+ physicalDevice, pSurfaceInfo->surface, pSurfaceFormatCount,
+ &surface_formats.editItemAt(0));
+
+ if (result == VK_SUCCESS || result == VK_INCOMPLETE) {
+ // marshal results individually due to stride difference.
+ // completely ignore any chained extension structs.
+ uint32_t formats_to_marshal = *pSurfaceFormatCount;
+ for (uint32_t i = 0u; i < formats_to_marshal; i++) {
+ pSurfaceFormats[i].surfaceFormat = surface_formats[i];
+ }
+ }
+
+ return result;
+ }
+}
+
+VKAPI_ATTR
VkResult GetPhysicalDeviceSurfacePresentModesKHR(VkPhysicalDevice pdev,
VkSurfaceKHR /*surface*/,
uint32_t* count,