vl/vl_win32_screen_create_from_d3d12_device: Allow winsys to be injected

Reviewed-by: Jesse Natalie <jenatali@microsoft.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/30996>
This commit is contained in:
Sil Vilerino
2024-01-23 17:44:02 -05:00
committed by Marge Bot
parent fe98f32af3
commit 2548471ca1
2 changed files with 2 additions and 8 deletions
+1 -1
View File
@@ -102,7 +102,7 @@ vl_dri3_screen_create(void *display, int screen) { return NULL; };
#ifdef _WIN32 #ifdef _WIN32
struct vl_screen *vl_win32_screen_create(LUID *adapter); struct vl_screen *vl_win32_screen_create(LUID *adapter);
struct vl_screen *vl_win32_screen_create_from_d3d12_device(IUnknown* d3d12_device); struct vl_screen *vl_win32_screen_create_from_d3d12_device(IUnknown* d3d12_device, struct sw_winsys* winsys);
#else #else
/* Always enable the DRM vl winsys */ /* Always enable the DRM vl winsys */
struct vl_screen * struct vl_screen *
+1 -7
View File
@@ -88,16 +88,12 @@ release_pipe:
} }
struct vl_screen * struct vl_screen *
vl_win32_screen_create_from_d3d12_device(IUnknown* d3d12_device) vl_win32_screen_create_from_d3d12_device(IUnknown* d3d12_device, struct sw_winsys* winsys)
{ {
struct vl_win32_screen *vscreen = CALLOC_STRUCT(vl_win32_screen); struct vl_win32_screen *vscreen = CALLOC_STRUCT(vl_win32_screen);
if (!vscreen) if (!vscreen)
return NULL; return NULL;
struct sw_winsys* winsys = gdi_create_sw_winsys(gdi_sw_acquire_hdc_by_value, gdi_sw_release_hdc_by_value);
if (!winsys)
goto release_pipe;
vscreen->base.pscreen = d3d12_create_dxcore_screen_from_d3d12_device(winsys, d3d12_device, &vscreen->adapter_luid); vscreen->base.pscreen = d3d12_create_dxcore_screen_from_d3d12_device(winsys, d3d12_device, &vscreen->adapter_luid);
if (!vscreen->base.pscreen) if (!vscreen->base.pscreen)
@@ -111,8 +107,6 @@ vl_win32_screen_create_from_d3d12_device(IUnknown* d3d12_device)
return &vscreen->base; return &vscreen->base;
release_pipe: release_pipe:
if(winsys)
winsys->destroy(winsys);
vl_win32_screen_destroy(&vscreen->base); vl_win32_screen_destroy(&vscreen->base);
return NULL; return NULL;
} }