zink: Only #include <vulkan/vulkan_core.h> instead #include <vulkan/vulkan.h> in kopper_interface.h

It's pulled too much system dependent headers before this commit
when #include <vulkan/vulkan.h> directly,

Signed-off-by: Yonggang Luo <luoyonggang@gmail.com>
Reviewed-by: Adam Jackson <ajax@redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/19491>
This commit is contained in:
Yonggang Luo 2022-11-03 06:32:23 +08:00 committed by Marge Bot
parent 5425e05f2f
commit 26a6d16db0
7 changed files with 88 additions and 59 deletions

View File

@ -35,17 +35,7 @@
#define KOPPER_INTERFACE_H
#include <GL/internal/dri_interface.h>
#include <vulkan/vulkan.h>
#ifdef VK_USE_PLATFORM_XCB_KHR
#include <xcb/xcb.h>
#include <vulkan/vulkan_xcb.h>
#endif
#ifdef VK_USE_PLATFORM_WAYLAND_KHR
#include <vulkan/vulkan_wayland.h>
#endif
#ifdef VK_USE_PLATFORM_WIN32_KHR
#include <vulkan/vulkan_win32.h>
#endif
#include <vulkan/vulkan_core.h>
typedef struct __DRIkopperExtensionRec __DRIkopperExtension;
typedef struct __DRIkopperLoaderExtensionRec __DRIkopperLoaderExtension;
@ -80,19 +70,23 @@ struct __DRIkopperExtensionRec {
* Kopper loader extension.
*/
/**
* struct for storage the union of all platform depdendent
* Vk*SurfaceCreateInfo* type, all platform Vk*SurfaceCreateInfo* contains
* uint32_t flags and at most two extra pointer besides bos header.
* For example:
* VkWin32SurfaceCreateInfoKHR contains flags, hinstance and hwnd besides bos header
*/
struct kopper_vk_surface_create_storage {
/* First two fields are copied from VkBaseOutStructure for easily access shared properties */
VkStructureType sType;
struct VkBaseOutStructure *pNext;
intptr_t padding[3];
};
struct kopper_loader_info {
union {
VkBaseOutStructure bos;
#ifdef VK_USE_PLATFORM_XCB_KHR
VkXcbSurfaceCreateInfoKHR xcb;
#endif
#ifdef VK_USE_PLATFORM_WAYLAND_KHR
VkWaylandSurfaceCreateInfoKHR wl;
#endif
#ifdef VK_USE_PLATFORM_WIN32_KHR
VkWin32SurfaceCreateInfoKHR win32;
#endif
};
struct kopper_vk_surface_create_storage bos;
int has_alpha;
int initial_swap_interval;
};

View File

@ -34,6 +34,7 @@
#include <dlfcn.h>
#include <errno.h>
#include <unistd.h>
#include <vulkan/vulkan.h>
#include <fcntl.h>
#include <xf86drm.h>
#include "drm-uapi/drm_fourcc.h"
@ -2653,12 +2654,14 @@ static const __DRIswrastLoaderExtension swrast_loader_extension = {
.putImage2 = dri2_wl_swrast_put_image2,
};
static_assert(sizeof(struct kopper_vk_surface_create_storage) >= sizeof(VkWaylandSurfaceCreateInfoKHR), "");
static void
kopperSetSurfaceCreateInfo(void *_draw, struct kopper_loader_info *out)
{
struct dri2_egl_surface *dri2_surf = _draw;
struct dri2_egl_display *dri2_dpy = dri2_egl_display(dri2_surf->base.Resource.Display);
VkWaylandSurfaceCreateInfoKHR *wlsci = &out->wl;
VkWaylandSurfaceCreateInfoKHR *wlsci = (VkWaylandSurfaceCreateInfoKHR *)&out->bos;
wlsci->sType = VK_STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR;
wlsci->pNext = NULL;

View File

@ -35,6 +35,7 @@
#include <fcntl.h>
#include <errno.h>
#include <unistd.h>
#include <vulkan/vulkan.h>
#ifdef HAVE_LIBDRM
#include <xf86drm.h>
#endif
@ -1323,19 +1324,22 @@ static const __DRIswrastLoaderExtension swrast_loader_extension = {
.getImage = swrastGetImage,
};
static_assert(sizeof(struct kopper_vk_surface_create_storage) >= sizeof(VkXcbSurfaceCreateInfoKHR), "");
static void
kopperSetSurfaceCreateInfo(void *_draw, struct kopper_loader_info *ci)
{
struct dri2_egl_surface *dri2_surf = _draw;
struct dri2_egl_display *dri2_dpy = dri2_egl_display(dri2_surf->base.Resource.Display);
VkXcbSurfaceCreateInfoKHR *xcb = (VkXcbSurfaceCreateInfoKHR *)&ci->bos;
if (dri2_surf->base.Type != EGL_WINDOW_BIT)
return;
ci->xcb.sType = VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR;
ci->xcb.pNext = NULL;
ci->xcb.flags = 0;
ci->xcb.connection = dri2_dpy->conn;
ci->xcb.window = dri2_surf->drawable;
xcb->sType = VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR;
xcb->pNext = NULL;
xcb->flags = 0;
xcb->connection = dri2_dpy->conn;
xcb->window = dri2_surf->drawable;
ci->has_alpha = dri2_surf->depth == 32;
}

View File

@ -85,19 +85,25 @@ kopper_CreateSurface(struct zink_screen *screen, struct kopper_displaytarget *cd
VkStructureType type = cdt->info.bos.sType;
switch (type) {
#ifdef VK_USE_PLATFORM_XCB_KHR
case VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR:
error = VKSCR(CreateXcbSurfaceKHR)(screen->instance, &cdt->info.xcb, NULL, &surface);
case VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR: {
VkXcbSurfaceCreateInfoKHR *xcb = (VkXcbSurfaceCreateInfoKHR *)&cdt->info.bos;
error = VKSCR(CreateXcbSurfaceKHR)(screen->instance, xcb, NULL, &surface);
break;
}
#endif
#ifdef VK_USE_PLATFORM_WAYLAND_KHR
case VK_STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR:
error = VKSCR(CreateWaylandSurfaceKHR)(screen->instance, &cdt->info.wl, NULL, &surface);
case VK_STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR: {
VkWaylandSurfaceCreateInfoKHR *wlsci = (VkWaylandSurfaceCreateInfoKHR *)&cdt->info.bos;
error = VKSCR(CreateWaylandSurfaceKHR)(screen->instance, wlsci, 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);
case VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR: {
VkWin32SurfaceCreateInfoKHR *win32 = (VkWin32SurfaceCreateInfoKHR *)&cdt->info.bos;
error = VKSCR(CreateWin32SurfaceKHR)(screen->instance, win32, NULL, &surface);
break;
}
#endif
default:
unreachable("unsupported!");
@ -176,19 +182,25 @@ find_dt_entry(struct zink_screen *screen, const struct kopper_displaytarget *cdt
struct hash_entry *he = NULL;
switch (cdt->type) {
#ifdef VK_USE_PLATFORM_XCB_KHR
case KOPPER_X11:
he = _mesa_hash_table_search_pre_hashed(&screen->dts, cdt->info.xcb.window, (void*)(uintptr_t)cdt->info.xcb.window);
case KOPPER_X11: {
VkXcbSurfaceCreateInfoKHR *xcb = (VkXcbSurfaceCreateInfoKHR *)&cdt->info.bos;
he = _mesa_hash_table_search_pre_hashed(&screen->dts, xcb->window, (void*)(uintptr_t)xcb->window);
break;
}
#endif
#ifdef VK_USE_PLATFORM_WAYLAND_KHR
case KOPPER_WAYLAND:
he = _mesa_hash_table_search(&screen->dts, cdt->info.wl.surface);
case KOPPER_WAYLAND: {
VkWaylandSurfaceCreateInfoKHR *wlsci = (VkWaylandSurfaceCreateInfoKHR *)&cdt->info.bos;
he = _mesa_hash_table_search(&screen->dts, wlsci->surface);
break;
}
#endif
#ifdef VK_USE_PLATFORM_WIN32_KHR
case KOPPER_WIN32:
he = _mesa_hash_table_search(&screen->dts, cdt->info.win32.hwnd);
case KOPPER_WIN32: {
VkWin32SurfaceCreateInfoKHR *win32 = (VkWin32SurfaceCreateInfoKHR *)&cdt->info.bos;
he = _mesa_hash_table_search(&screen->dts, win32->hwnd);
break;
}
#endif
default:
unreachable("unsupported!");
@ -425,19 +437,25 @@ zink_kopper_displaytarget_create(struct zink_screen *screen, unsigned tex_usage,
simple_mtx_lock(&screen->dt_lock);
switch (cdt->type) {
#ifdef VK_USE_PLATFORM_XCB_KHR
case KOPPER_X11:
_mesa_hash_table_insert_pre_hashed(&screen->dts, cdt->info.xcb.window, (void*)(uintptr_t)cdt->info.xcb.window, cdt);
case KOPPER_X11: {
VkXcbSurfaceCreateInfoKHR *xcb = (VkXcbSurfaceCreateInfoKHR *)&cdt->info.bos;
_mesa_hash_table_insert_pre_hashed(&screen->dts, xcb->window, (void*)(uintptr_t)xcb->window, cdt);
break;
}
#endif
#ifdef VK_USE_PLATFORM_WAYLAND_KHR
case KOPPER_WAYLAND:
_mesa_hash_table_insert(&screen->dts, cdt->info.wl.surface, cdt);
case KOPPER_WAYLAND: {
VkWaylandSurfaceCreateInfoKHR *wlsci = (VkWaylandSurfaceCreateInfoKHR *)&cdt->info.bos;
_mesa_hash_table_insert(&screen->dts, wlsci->surface, cdt);
break;
}
#endif
#ifdef VK_USE_PLATFORM_WIN32_KHR
case KOPPER_WIN32:
_mesa_hash_table_insert(&screen->dts, cdt->info.win32.hwnd, cdt);
case KOPPER_WIN32: {
VkWin32SurfaceCreateInfoKHR *win32 = (VkWin32SurfaceCreateInfoKHR *)&cdt->info.bos;
_mesa_hash_table_insert(&screen->dts, win32->hwnd, cdt);
break;
}
#endif
default:
unreachable("unsupported!");

View File

@ -421,8 +421,9 @@ kopper_get_pixmap_buffer(struct kopper_drawable *cdraw,
__DRIscreen *cur_screen;
struct kopper_loader_info *info = &cdraw->info;
assert(info->bos.sType == VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR);
xcb_connection_t *conn = info->xcb.connection;
pixmap = info->xcb.window;
VkXcbSurfaceCreateInfoKHR *xcb = (VkXcbSurfaceCreateInfoKHR *)&info->bos;
xcb_connection_t *conn = xcb->connection;
pixmap = xcb->window;
if (cdraw->image)
return cdraw->image->texture;

View File

@ -37,6 +37,7 @@
#include "stw_winsys.h"
#ifdef GALLIUM_ZINK
#include <vulkan/vulkan.h>
#include "kopper_interface.h"
#endif
@ -125,14 +126,18 @@ stw_pipe_blit(struct pipe_context *pipe,
}
#ifdef GALLIUM_ZINK
static_assert(sizeof(struct kopper_vk_surface_create_storage) >= sizeof(VkWin32SurfaceCreateInfoKHR), "");
static void
stw_st_fill_private_loader_data(struct stw_st_framebuffer *stwfb, struct kopper_loader_info *out)
{
out->win32.sType = VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR;
out->win32.pNext = NULL;
out->win32.flags = 0;
out->win32.hinstance = GetModuleHandle(NULL);
out->win32.hwnd = stwfb->fb->hWnd;
VkWin32SurfaceCreateInfoKHR *win32 = (VkWin32SurfaceCreateInfoKHR *)&out->bos;
win32->sType = VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR;
win32->pNext = NULL;
win32->flags = 0;
win32->hinstance = GetModuleHandle(NULL);
win32->hwnd = stwfb->fb->hWnd;
out->has_alpha = true;
}
#endif

View File

@ -33,6 +33,7 @@
#include "drisw_priv.h"
#include <X11/extensions/shmproto.h>
#include <assert.h>
#include <vulkan/vulkan.h>
#include "util/u_debug.h"
#include "kopper_interface.h"
#include "loader_dri_helper.h"
@ -367,16 +368,19 @@ static const __DRIswrastLoaderExtension swrastLoaderExtension = {
.getImage2 = swrastGetImage2,
};
static_assert(sizeof(struct kopper_vk_surface_create_storage) >= sizeof(VkXcbSurfaceCreateInfoKHR), "");
static void
kopperSetSurfaceCreateInfo(void *_draw, struct kopper_loader_info *out)
{
__GLXDRIdrawable *draw = _draw;
VkXcbSurfaceCreateInfoKHR *xcb = (VkXcbSurfaceCreateInfoKHR *)&out->bos;
out->xcb.sType = VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR;
out->xcb.pNext = NULL;
out->xcb.flags = 0;
out->xcb.connection = XGetXCBConnection(draw->psc->dpy);
out->xcb.window = draw->xDrawable;
xcb->sType = VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR;
xcb->pNext = NULL;
xcb->flags = 0;
xcb->connection = XGetXCBConnection(draw->psc->dpy);
xcb->window = draw->xDrawable;
}
static const __DRIkopperLoaderExtension kopperLoaderExtension = {