Add missing vkGetPhysicalDevicePresentRectanglesKHR function
This wasn't ever called by previous versions of deqp.
Test: dEQP-VK.wsi.xlib.surface.query_devgroup_present_modes
Bug: b/140182247
Change-Id: Id77bdc726681922b99f3fa8d098cad7853293d29
Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/35648
Tested-by: Chris Forbes <chrisforbes@google.com>
Presubmit-Ready: Chris Forbes <chrisforbes@google.com>
Reviewed-by: Ben Clayton <bclayton@google.com>
Kokoro-Presubmit: kokoro <noreply+kokoro@google.com>
diff --git a/src/Vulkan/VkGetProcAddress.cpp b/src/Vulkan/VkGetProcAddress.cpp
index c8e5ace..06a8cc9 100644
--- a/src/Vulkan/VkGetProcAddress.cpp
+++ b/src/Vulkan/VkGetProcAddress.cpp
@@ -87,6 +87,7 @@
MAKE_VULKAN_INSTANCE_ENTRY(vkGetPhysicalDeviceSurfaceCapabilitiesKHR),
MAKE_VULKAN_INSTANCE_ENTRY(vkGetPhysicalDeviceSurfaceFormatsKHR),
MAKE_VULKAN_INSTANCE_ENTRY(vkGetPhysicalDeviceSurfacePresentModesKHR),
+ MAKE_VULKAN_INSTANCE_ENTRY(vkGetPhysicalDevicePresentRectanglesKHR),
#endif
#ifdef VK_USE_PLATFORM_XLIB_KHR
// VK_KHR_xlib_surface
diff --git a/src/Vulkan/libVulkan.cpp b/src/Vulkan/libVulkan.cpp
index 4a71cc5..e4d7698 100644
--- a/src/Vulkan/libVulkan.cpp
+++ b/src/Vulkan/libVulkan.cpp
@@ -2852,6 +2852,15 @@
return VK_SUCCESS;
}
+VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDevicePresentRectanglesKHR(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, uint32_t* pRectCount, VkRect2D* pRects)
+{
+ TRACE("(VkPhysicalDevice physicalDevice = %p, VkSurfaceKHR surface = %p, uint32_t* pRectCount = %p, VkRect2D* pRects = %p)",
+ physicalDevice, static_cast<void*>(surface), pRectCount, pRects);
+
+ return vk::Cast(surface)->getPresentRectangles(pRectCount, pRects);
+}
+
+
#endif // ! __ANDROID__
#ifdef __ANDROID__
diff --git a/src/WSI/VkSurfaceKHR.cpp b/src/WSI/VkSurfaceKHR.cpp
index 18447ac..a9d2bd9 100644
--- a/src/WSI/VkSurfaceKHR.cpp
+++ b/src/WSI/VkSurfaceKHR.cpp
@@ -186,4 +186,27 @@
return (associatedSwapchain != nullptr);
}
+VkResult SurfaceKHR::getPresentRectangles(uint32_t *pRectCount, VkRect2D *pRects) const
+{
+ if (!pRects)
+ {
+ *pRectCount = 1;
+ return VK_SUCCESS;
+ }
+
+ if (*pRectCount < 1)
+ {
+ return VK_INCOMPLETE;
+ }
+
+ VkSurfaceCapabilitiesKHR capabilities;
+ getSurfaceCapabilities(&capabilities);
+
+ pRects[0].offset = {0,0};
+ pRects[0].extent = capabilities.currentExtent;
+ *pRectCount = 1;
+
+ return VK_SUCCESS;
+}
+
}
\ No newline at end of file
diff --git a/src/WSI/VkSurfaceKHR.hpp b/src/WSI/VkSurfaceKHR.hpp
index 2badec7..48f25ce 100644
--- a/src/WSI/VkSurfaceKHR.hpp
+++ b/src/WSI/VkSurfaceKHR.hpp
@@ -86,6 +86,8 @@
uint32_t getPresentModeCount() const;
VkResult getPresentModes(uint32_t* pPresentModeCount, VkPresentModeKHR* pPresentModes) const;
+ VkResult getPresentRectangles(uint32_t *pRectCount, VkRect2D *pRects) const;
+
virtual void attachImage(PresentImage* image) = 0;
virtual void detachImage(PresentImage* image) = 0;
virtual void present(PresentImage* image) = 0;