Mesa (staging/22.1): zink: support win32 wsi
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Wed Apr 27 02:59:41 UTC 2022
Module: Mesa
Branch: staging/22.1
Commit: 888b4de9d4fc4174cd9dcfd670e3f85d75179c6c
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=888b4de9d4fc4174cd9dcfd670e3f85d75179c6c
Author: Sidney Just <justsid at x-plane.com>
Date: Wed Apr 20 17:50:39 2022 -0400
zink: support win32 wsi
Reviewed-by: Jesse Natalie <jenatali at microsoft.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/16087>
---
src/gallium/drivers/zink/zink_kopper.c | 24 +++++++++++++++++++++++-
src/gallium/drivers/zink/zink_kopper.h | 1 +
2 files changed, 24 insertions(+), 1 deletion(-)
diff --git a/src/gallium/drivers/zink/zink_kopper.c b/src/gallium/drivers/zink/zink_kopper.c
index 28b303ec33a..3773d925e4c 100644
--- a/src/gallium/drivers/zink/zink_kopper.c
+++ b/src/gallium/drivers/zink/zink_kopper.c
@@ -45,6 +45,11 @@ init_dt_type(struct kopper_displaytarget *cdt)
case VK_STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR:
cdt->type = KOPPER_WAYLAND;
break;
+#endif
+#ifdef VK_USE_PLATFORM_WIN32_KHR
+ case VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR:
+ cdt->type = KOPPER_WIN32;
+ break;
#endif
default:
unreachable("unsupported!");
@@ -69,6 +74,11 @@ kopper_CreateSurface(struct zink_screen *screen, struct kopper_displaytarget *cd
case VK_STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR:
error = VKSCR(CreateWaylandSurfaceKHR)(screen->instance, &cdt->info.wl, NULL, &surface);
break;
+#endif
+ #ifdef VK_USE_PLATFORM_WIN32_KHR
+ case VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR:
+ error = VKSCR(CreateWin32SurfaceKHR)(screen->instance, &cdt->info.win32, NULL, &surface);
+ break;
#endif
default:
unreachable("unsupported!");
@@ -124,6 +134,11 @@ find_dt_entry(struct zink_screen *screen, const struct kopper_displaytarget *cdt
case KOPPER_WAYLAND:
he = _mesa_hash_table_search(&screen->dts, cdt->info.wl.surface);
break;
+#endif
+#ifdef VK_USE_PLATFORM_WIN32_KHR
+ case KOPPER_WIN32:
+ he = _mesa_hash_table_search(&screen->dts, cdt->info.win32.hwnd);
+ break;
#endif
default:
unreachable("unsupported!");
@@ -182,7 +197,7 @@ kopper_CreateSwapchain(struct zink_screen *screen, struct kopper_displaytarget *
cswap->scci.pQueueFamilyIndices = NULL;
cswap->scci.compositeAlpha = has_alpha ? VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR : VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR;
// TODO: This is where you'd hook up GLX_EXT_swap_interval and friends
- cswap->scci.presentMode = cdt->type == KOPPER_X11 ? VK_PRESENT_MODE_IMMEDIATE_KHR : VK_PRESENT_MODE_FIFO_KHR;
+ cswap->scci.presentMode = cdt->type == KOPPER_WAYLAND ? VK_PRESENT_MODE_FIFO_KHR : VK_PRESENT_MODE_IMMEDIATE_KHR;
cswap->scci.clipped = VK_TRUE;
}
cswap->scci.minImageCount = cdt->caps.minImageCount;
@@ -193,6 +208,7 @@ kopper_CreateSwapchain(struct zink_screen *screen, struct kopper_displaytarget *
/* different display platforms have, by vulkan spec, different sizing methodologies */
switch (cdt->type) {
case KOPPER_X11:
+ case KOPPER_WIN32:
/* With Xcb, minImageExtent, maxImageExtent, and currentExtent must always equal the window size.
* ...
* Due to above restrictions, it is only possible to create a new swapchain on this
@@ -299,6 +315,7 @@ zink_kopper_displaytarget_create(struct zink_screen *screen, unsigned tex_usage,
_mesa_hash_table_init(&screen->dts, screen, NULL, _mesa_key_pointer_equal);
break;
case KOPPER_WAYLAND:
+ case KOPPER_WIN32:
_mesa_hash_table_init(&screen->dts, screen, _mesa_hash_pointer, _mesa_key_pointer_equal);
break;
default:
@@ -360,6 +377,11 @@ zink_kopper_displaytarget_create(struct zink_screen *screen, unsigned tex_usage,
case KOPPER_WAYLAND:
_mesa_hash_table_insert(&screen->dts, cdt->info.wl.surface, cdt);
break;
+#endif
+#ifdef VK_USE_PLATFORM_WIN32_KHR
+ case KOPPER_WIN32:
+ _mesa_hash_table_insert(&screen->dts, cdt->info.win32.hwnd, cdt);
+ break;
#endif
default:
unreachable("unsupported!");
diff --git a/src/gallium/drivers/zink/zink_kopper.h b/src/gallium/drivers/zink/zink_kopper.h
index da083dfdcb5..5b7a10b17f9 100644
--- a/src/gallium/drivers/zink/zink_kopper.h
+++ b/src/gallium/drivers/zink/zink_kopper.h
@@ -46,6 +46,7 @@ struct kopper_swapchain {
enum kopper_type {
KOPPER_X11,
KOPPER_WAYLAND,
+ KOPPER_WIN32
};
struct kopper_displaytarget
More information about the mesa-commit
mailing list