Mesa (main): zink: add supported present modes to kopper displaytarget
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Wed Apr 27 17:12:49 UTC 2022
Module: Mesa
Branch: main
Commit: de3890daa548b698382a44d02740b1fd2b8918b5
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=de3890daa548b698382a44d02740b1fd2b8918b5
Author: Mike Blumenkrantz <michael.blumenkrantz at gmail.com>
Date: Wed Apr 27 09:33:32 2022 -0400
zink: add supported present modes to kopper displaytarget
for use later
Reviewed-by: Adam Jackson <ajax at redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/16193>
---
src/gallium/drivers/zink/zink_kopper.c | 22 +++++++++++++++++++---
src/gallium/drivers/zink/zink_kopper.h | 1 +
2 files changed, 20 insertions(+), 3 deletions(-)
diff --git a/src/gallium/drivers/zink/zink_kopper.c b/src/gallium/drivers/zink/zink_kopper.c
index bc9d9e68be2..12156989653 100644
--- a/src/gallium/drivers/zink/zink_kopper.c
+++ b/src/gallium/drivers/zink/zink_kopper.c
@@ -89,12 +89,28 @@ kopper_CreateSurface(struct zink_screen *screen, struct kopper_displaytarget *cd
VkBool32 supported;
error = VKSCR(GetPhysicalDeviceSurfaceSupportKHR)(screen->pdev, screen->gfx_queue, surface, &supported);
- if (!zink_screen_handle_vkresult(screen, error) || !supported) {
- VKSCR(DestroySurfaceKHR)(screen->instance, surface, NULL);
- return VK_NULL_HANDLE;
+ if (!zink_screen_handle_vkresult(screen, error) || !supported)
+ goto fail;
+
+ unsigned count = 10;
+ VkPresentModeKHR modes[10];
+ error = VKSCR(GetPhysicalDeviceSurfacePresentModesKHR)(screen->pdev, surface, &count, modes);
+ if (!zink_screen_handle_vkresult(screen, error))
+ goto fail;
+
+ for (unsigned i = 0; i < count; i++) {
+ /* VK_PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR and VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR
+ * are not handled
+ */
+ assert(modes[i] <= VK_PRESENT_MODE_FIFO_RELAXED_KHR);
+ if (modes[i] <= VK_PRESENT_MODE_FIFO_RELAXED_KHR)
+ cdt->present_modes |= BITFIELD_BIT(modes[i]);
}
return surface;
+fail:
+ VKSCR(DestroySurfaceKHR)(screen->instance, surface, NULL);
+ return VK_NULL_HANDLE;
}
static void
diff --git a/src/gallium/drivers/zink/zink_kopper.h b/src/gallium/drivers/zink/zink_kopper.h
index 7c11d804040..61e0db96738 100644
--- a/src/gallium/drivers/zink/zink_kopper.h
+++ b/src/gallium/drivers/zink/zink_kopper.h
@@ -59,6 +59,7 @@ struct kopper_displaytarget
void *loader_private;
VkSurfaceKHR surface;
+ uint32_t present_modes; //VkPresentModeKHR bitmask
struct kopper_swapchain *swapchain;
struct kopper_swapchain *old_swapchain;
More information about the mesa-commit
mailing list