Commit 644d00d5 authored by Zhiyi Zhang's avatar Zhiyi Zhang Committed by Alexandre Julliard

winex11.drv: Implement X11DRV_D3DKMTCheckVidPnExclusiveOwnership.

parent e08dd25f
...@@ -737,7 +737,6 @@ static IDXGIAdapter *get_adapter_(unsigned int line, IUnknown *device, BOOL is_d ...@@ -737,7 +737,6 @@ static IDXGIAdapter *get_adapter_(unsigned int line, IUnknown *device, BOOL is_d
hr = IDXGIFactory_QueryInterface(factory, &IID_IDXGIFactory4, (void **)&factory4); hr = IDXGIFactory_QueryInterface(factory, &IID_IDXGIFactory4, (void **)&factory4);
ok_(__FILE__, line)(hr == S_OK, "Got unexpected hr %#x.\n", hr); ok_(__FILE__, line)(hr == S_OK, "Got unexpected hr %#x.\n", hr);
hr = IDXGIFactory4_EnumAdapterByLuid(factory4, luid, &IID_IDXGIAdapter, (void **)&adapter); hr = IDXGIFactory4_EnumAdapterByLuid(factory4, luid, &IID_IDXGIAdapter, (void **)&adapter);
ok_(__FILE__, line)(hr == S_OK, "Got unexpected hr %#x.\n", hr);
IDXGIFactory4_Release(factory4); IDXGIFactory4_Release(factory4);
IDXGIFactory_Release(factory); IDXGIFactory_Release(factory);
} }
...@@ -5512,13 +5511,18 @@ static void test_output_ownership(IUnknown *device, BOOL is_d3d12) ...@@ -5512,13 +5511,18 @@ static void test_output_ownership(IUnknown *device, BOOL is_d3d12)
if (!pD3DKMTCheckVidPnExclusiveOwnership if (!pD3DKMTCheckVidPnExclusiveOwnership
|| pD3DKMTCheckVidPnExclusiveOwnership(NULL) == STATUS_PROCEDURE_NOT_FOUND) || pD3DKMTCheckVidPnExclusiveOwnership(NULL) == STATUS_PROCEDURE_NOT_FOUND)
{ {
skip("D3DKMTCheckVidPnExclusiveOwnership() is unavailable.\n"); win_skip("D3DKMTCheckVidPnExclusiveOwnership() is unavailable.\n");
return; return;
} }
get_factory(device, is_d3d12, &factory); get_factory(device, is_d3d12, &factory);
adapter = get_adapter(device, is_d3d12); adapter = get_adapter(device, is_d3d12);
ok(!!adapter, "Failed to get adapter.\n"); if (!adapter)
{
skip("Failed to get adapter on Direct3D %d.\n", is_d3d12 ? 12 : 10);
IDXGIFactory_Release(factory);
return;
}
hr = IDXGIAdapter_EnumOutputs(adapter, 0, &output); hr = IDXGIAdapter_EnumOutputs(adapter, 0, &output);
IDXGIAdapter_Release(adapter); IDXGIAdapter_Release(adapter);
......
...@@ -376,7 +376,7 @@ static void test_D3DKMTCheckVidPnExclusiveOwnership(void) ...@@ -376,7 +376,7 @@ static void test_D3DKMTCheckVidPnExclusiveOwnership(void)
if (!pD3DKMTCheckVidPnExclusiveOwnership || pD3DKMTCheckVidPnExclusiveOwnership(NULL) == STATUS_PROCEDURE_NOT_FOUND) if (!pD3DKMTCheckVidPnExclusiveOwnership || pD3DKMTCheckVidPnExclusiveOwnership(NULL) == STATUS_PROCEDURE_NOT_FOUND)
{ {
skip("D3DKMTCheckVidPnExclusiveOwnership() is unavailable.\n"); win_skip("D3DKMTCheckVidPnExclusiveOwnership() is unavailable.\n");
return; return;
} }
......
...@@ -471,7 +471,7 @@ static const struct gdi_dc_funcs x11drv_funcs = ...@@ -471,7 +471,7 @@ static const struct gdi_dc_funcs x11drv_funcs =
X11DRV_StrokePath, /* pStrokePath */ X11DRV_StrokePath, /* pStrokePath */
X11DRV_UnrealizePalette, /* pUnrealizePalette */ X11DRV_UnrealizePalette, /* pUnrealizePalette */
NULL, /* pWidenPath */ NULL, /* pWidenPath */
NULL, /* pD3DKMTCheckVidPnExclusiveOwnership */ X11DRV_D3DKMTCheckVidPnExclusiveOwnership, /* pD3DKMTCheckVidPnExclusiveOwnership */
X11DRV_D3DKMTSetVidPnSourceOwner, /* pD3DKMTSetVidPnSourceOwner */ X11DRV_D3DKMTSetVidPnSourceOwner, /* pD3DKMTSetVidPnSourceOwner */
X11DRV_wine_get_wgl_driver, /* wine_get_wgl_driver */ X11DRV_wine_get_wgl_driver, /* wine_get_wgl_driver */
X11DRV_wine_get_vulkan_driver, /* wine_get_vulkan_driver */ X11DRV_wine_get_vulkan_driver, /* wine_get_vulkan_driver */
......
...@@ -149,6 +149,7 @@ extern BOOL CDECL X11DRV_Arc( PHYSDEV dev, INT left, INT top, INT right, ...@@ -149,6 +149,7 @@ extern BOOL CDECL X11DRV_Arc( PHYSDEV dev, INT left, INT top, INT right,
INT bottom, INT xstart, INT ystart, INT xend, INT yend ) DECLSPEC_HIDDEN; INT bottom, INT xstart, INT ystart, INT xend, INT yend ) DECLSPEC_HIDDEN;
extern BOOL CDECL X11DRV_Chord( PHYSDEV dev, INT left, INT top, INT right, INT bottom, extern BOOL CDECL X11DRV_Chord( PHYSDEV dev, INT left, INT top, INT right, INT bottom,
INT xstart, INT ystart, INT xend, INT yend ) DECLSPEC_HIDDEN; INT xstart, INT ystart, INT xend, INT yend ) DECLSPEC_HIDDEN;
extern NTSTATUS CDECL X11DRV_D3DKMTCheckVidPnExclusiveOwnership( const D3DKMT_CHECKVIDPNEXCLUSIVEOWNERSHIP *desc ) DECLSPEC_HIDDEN;
extern NTSTATUS CDECL X11DRV_D3DKMTSetVidPnSourceOwner( const D3DKMT_SETVIDPNSOURCEOWNER *desc ) DECLSPEC_HIDDEN; extern NTSTATUS CDECL X11DRV_D3DKMTSetVidPnSourceOwner( const D3DKMT_SETVIDPNSOURCEOWNER *desc ) DECLSPEC_HIDDEN;
extern BOOL CDECL X11DRV_Ellipse( PHYSDEV dev, INT left, INT top, INT right, INT bottom ) DECLSPEC_HIDDEN; extern BOOL CDECL X11DRV_Ellipse( PHYSDEV dev, INT left, INT top, INT right, INT bottom ) DECLSPEC_HIDDEN;
extern INT CDECL X11DRV_EnumICMProfiles( PHYSDEV dev, ICMENUMPROCW proc, LPARAM lparam ) DECLSPEC_HIDDEN; extern INT CDECL X11DRV_EnumICMProfiles( PHYSDEV dev, ICMENUMPROCW proc, LPARAM lparam ) DECLSPEC_HIDDEN;
......
...@@ -877,3 +877,28 @@ done: ...@@ -877,3 +877,28 @@ done:
LeaveCriticalSection( &x11drv_section ); LeaveCriticalSection( &x11drv_section );
return status; return status;
} }
/**********************************************************************
* X11DRV_D3DKMTCheckVidPnExclusiveOwnership
*/
NTSTATUS CDECL X11DRV_D3DKMTCheckVidPnExclusiveOwnership( const D3DKMT_CHECKVIDPNEXCLUSIVEOWNERSHIP *desc )
{
struct d3dkmt_vidpn_source *source;
TRACE("(%p)\n", desc);
if (!desc || !desc->hAdapter)
return STATUS_INVALID_PARAMETER;
EnterCriticalSection( &x11drv_section );
LIST_FOR_EACH_ENTRY( source, &d3dkmt_vidpn_sources, struct d3dkmt_vidpn_source, entry )
{
if (source->id == desc->VidPnSourceId && source->type == D3DKMT_VIDPNSOURCEOWNER_EXCLUSIVE)
{
LeaveCriticalSection( &x11drv_section );
return STATUS_GRAPHICS_PRESENT_OCCLUDED;
}
}
LeaveCriticalSection( &x11drv_section );
return STATUS_SUCCESS;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment