vl_win32_screen_create: Take ownership of winsys injected to created d3d12_screen

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/28546>
This commit is contained in:
Sil Vilerino 2024-04-03 08:24:09 -04:00 committed by Marge Bot
parent 37cafd53ef
commit 5bb72e05d1

View file

@ -34,6 +34,7 @@ struct vl_win32_screen
{
struct vl_screen base;
LUID *adapter_luid;
struct sw_winsys* winsys;
};
static void
@ -42,6 +43,10 @@ vl_win32_screen_destroy(struct vl_screen *vscreen)
if (vscreen == NULL)
return;
struct vl_win32_screen* w32screen = (struct vl_win32_screen*) vscreen;
if (w32screen->winsys)
w32screen->winsys->destroy(w32screen->winsys);
if (vscreen->pscreen)
vscreen->pscreen->destroy(vscreen->pscreen);
@ -58,12 +63,12 @@ vl_win32_screen_create(LUID *adapter)
if (!vscreen)
return NULL;
struct sw_winsys* winsys = gdi_create_sw_winsys(gdi_sw_acquire_hdc_by_value, gdi_sw_release_hdc_by_value);
if (!winsys)
vscreen->winsys = gdi_create_sw_winsys(gdi_sw_acquire_hdc_by_value, gdi_sw_release_hdc_by_value);
if (!vscreen->winsys)
goto release_pipe;
/* If adapter is null, d3d12_create_dxcore_screen will choose one */
vscreen->base.pscreen = d3d12_create_dxcore_screen(winsys, adapter);
vscreen->base.pscreen = d3d12_create_dxcore_screen(vscreen->winsys, adapter);
if (!vscreen->base.pscreen)
goto release_pipe;
@ -78,8 +83,6 @@ vl_win32_screen_create(LUID *adapter)
return &vscreen->base;
release_pipe:
if(winsys)
winsys->destroy(winsys);
vl_win32_screen_destroy(&vscreen->base);
return NULL;
}