vl: add Windows kopper support

this passes through the LUID when provided by the caller

Reviewed-by: Jesse Natalie <jenatali@microsoft.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/31240>
This commit is contained in:
Mike Blumenkrantz
2024-09-18 15:09:25 -04:00
committed by Marge Bot
parent f294b8262b
commit e079116cf0
3 changed files with 33 additions and 4 deletions

View File

@@ -447,7 +447,7 @@ if with_platform_x11
files_libgalliumvlwinsys += files('vl/vl_winsys_dri3.c')
endif
endif
if with_platform_x11 and with_gallium_zink
if with_gallium_zink
files_libgalliumvlwinsys += files('vl/vl_winsys_kopper.c')
endif
@@ -575,7 +575,7 @@ endif
libgalliumvlwinsys = static_library(
'galliumvlwinsys',
files_libgalliumvlwinsys,
include_directories : [inc_gallium, inc_include, inc_loader, inc_src],
include_directories : [inc_gallium, inc_include, inc_loader, inc_src, include_directories('../drivers/zink')],
dependencies : [dep_libdrm, vlwinsys_deps, idep_mesautil],
link_with : [libloader_x11],
build_by_default : false,

View File

@@ -110,6 +110,7 @@ vl_kopper_screen_create_x11(void *display, int screen) { return NULL; };
#ifdef _WIN32
struct vl_screen *vl_win32_screen_create(LUID *adapter);
struct vl_screen *vl_win32_screen_create_from_d3d12_device(IUnknown* d3d12_device, struct sw_winsys* winsys);
struct vl_screen *vl_kopper_screen_create_win32(LUID *adapter);
#else
/* Always enable the DRM vl winsys */
struct vl_screen *

View File

@@ -33,10 +33,11 @@
#include "vl/vl_compositor.h"
#if defined(HAVE_X11_PLATFORM) && defined(HAVE_LIBDRM)
#include <X11/Xlib-xcb.h>
#include "gallium/drivers/zink/zink_kopper.h"
#include <vulkan/vulkan_xcb.h>
#include "x11/loader_x11.h"
#include "gallium/drivers/zink/zink_kopper.h"
#endif
#include "zink_public.h"
struct vl_kopper_screen
{
@@ -76,7 +77,8 @@ vl_kopper_screen_destroy(struct vl_screen *vscreen)
struct vl_kopper_screen *scrn = (struct vl_kopper_screen *) vscreen;
#if defined(HAVE_X11_PLATFORM) && defined(HAVE_LIBDRM)
close(scrn->fd);
if (scrn->fd != -1)
close(scrn->fd);
if (scrn->drawable_texture)
pipe_resource_reference(&scrn->drawable_texture, NULL);
#endif
@@ -230,3 +232,29 @@ error:
return NULL;
}
#endif
#ifdef _WIN32
struct vl_screen *
vl_kopper_screen_create_win32(LUID *luid)
{
struct vl_kopper_screen *scrn = CALLOC_STRUCT(vl_kopper_screen);
uint64_t adapter_luid = 0;
if (luid)
memcpy(&adapter_luid, luid, sizeof(adapter_luid));
scrn->base.pscreen = zink_win32_create_screen(adapter_luid);
if (!scrn->base.pscreen)
goto error;
scrn->base.destroy = vl_kopper_screen_destroy;
scrn->pipe = scrn->base.pscreen->context_create(scrn->base.pscreen, NULL, 0);
return &scrn->base;
error:
vl_kopper_screen_destroy(&scrn->base);
return NULL;
}
#endif