diff --git a/src/gallium/drivers/d3d12/d3d12_public.h b/src/gallium/drivers/d3d12/d3d12_public.h index 12dd39f3cba..bd947e2701b 100644 --- a/src/gallium/drivers/d3d12/d3d12_public.h +++ b/src/gallium/drivers/d3d12/d3d12_public.h @@ -32,8 +32,10 @@ typedef struct _LUID LUID; extern "C" { #endif +#ifdef _WIN32 struct pipe_screen * d3d12_create_dxgi_screen(struct sw_winsys *winsys, LUID *adapter_luid); +#endif struct pipe_screen * d3d12_create_dxcore_screen(struct sw_winsys *winsys, LUID *adapter_luid); diff --git a/src/gallium/drivers/d3d12/d3d12_screen.cpp b/src/gallium/drivers/d3d12/d3d12_screen.cpp index 666875e045c..4ec192e004d 100644 --- a/src/gallium/drivers/d3d12/d3d12_screen.cpp +++ b/src/gallium/drivers/d3d12/d3d12_screen.cpp @@ -633,9 +633,12 @@ d3d12_flush_frontbuffer(struct pipe_screen * pscreen, winsys->displaytarget_unmap(winsys, res->dt); } +#ifdef _WIN32 + // WindowFromDC is Windows-only, and this method requires an HWND, so only use it on Windows ID3D12SharingContract *sharing_contract; if (SUCCEEDED(screen->cmdqueue->QueryInterface(IID_PPV_ARGS(&sharing_contract)))) sharing_contract->Present(d3d12_res, 0, WindowFromDC((HDC)winsys_drawable_handle)); +#endif winsys->displaytarget_display(winsys, res->dt, winsys_drawable_handle, sub_box); } diff --git a/src/gallium/drivers/d3d12/meson.build b/src/gallium/drivers/d3d12/meson.build index 7203fe1694c..6132654863b 100644 --- a/src/gallium/drivers/d3d12/meson.build +++ b/src/gallium/drivers/d3d12/meson.build @@ -28,7 +28,6 @@ files_libd3d12 = files( 'd3d12_descriptor_pool.cpp', 'd3d12_draw.cpp', 'd3d12_dxcore_screen.cpp', - 'd3d12_dxgi_screen.cpp', 'd3d12_fence.cpp', 'd3d12_format.c', 'd3d12_gs_variant.cpp', @@ -45,6 +44,10 @@ files_libd3d12 = files( 'd3d12_surface.cpp', ) +if host_machine.system() == 'windows' + files_libd3d12 += files('d3d12_dxgi_screen.cpp') +endif + libd3d12 = static_library( 'd3d12', files_libd3d12,