Module: Mesa Branch: main Commit: de3890daa548b698382a44d02740b1fd2b8918b5 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=de3890daa548b698382a44d02740b1fd2b8918b5
Author: Mike Blumenkrantz <[email protected]> Date: Wed Apr 27 09:33:32 2022 -0400 zink: add supported present modes to kopper displaytarget for use later Reviewed-by: Adam Jackson <[email protected]> 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;
