[PATCH 5/5] winex11.drv: Implement X11DRV_D3DKMTCheckVidPnExclusiveOwnership.
Zhiyi Zhang
zzhang at codeweavers.com
Thu Jul 4 08:29:21 CDT 2019
Signed-off-by: Zhiyi Zhang <zzhang at codeweavers.com>
---
dlls/gdi32/tests/driver.c | 2 +-
dlls/winex11.drv/init.c | 2 +-
dlls/winex11.drv/x11drv.h | 1 +
dlls/winex11.drv/x11drv_main.c | 25 +++++++++++++++++++++++++
4 files changed, 28 insertions(+), 2 deletions(-)
diff --git a/dlls/gdi32/tests/driver.c b/dlls/gdi32/tests/driver.c
index 2ea43e3025..ed83a72813 100644
--- a/dlls/gdi32/tests/driver.c
+++ b/dlls/gdi32/tests/driver.c
@@ -376,7 +376,7 @@ static void test_D3DKMTCheckVidPnExclusiveOwnership(void)
if (!pD3DKMTCheckVidPnExclusiveOwnership || pD3DKMTCheckVidPnExclusiveOwnership(NULL) == STATUS_PROCEDURE_NOT_FOUND)
{
- skip("D3DKMTCheckVidPnExclusiveOwnership() is unavailable.\n");
+ win_skip("D3DKMTCheckVidPnExclusiveOwnership() is unavailable.\n");
return;
}
diff --git a/dlls/winex11.drv/init.c b/dlls/winex11.drv/init.c
index 66e6e7f09a..531bff0fdb 100644
--- a/dlls/winex11.drv/init.c
+++ b/dlls/winex11.drv/init.c
@@ -471,7 +471,7 @@ static const struct gdi_dc_funcs x11drv_funcs =
X11DRV_StrokePath, /* pStrokePath */
X11DRV_UnrealizePalette, /* pUnrealizePalette */
NULL, /* pWidenPath */
- NULL, /* pD3DKMTCheckVidPnExclusiveOwnership */
+ X11DRV_D3DKMTCheckVidPnExclusiveOwnership, /* pD3DKMTCheckVidPnExclusiveOwnership */
X11DRV_D3DKMTSetVidPnSourceOwner, /* pD3DKMTSetVidPnSourceOwner */
X11DRV_wine_get_wgl_driver, /* wine_get_wgl_driver */
X11DRV_wine_get_vulkan_driver, /* wine_get_vulkan_driver */
diff --git a/dlls/winex11.drv/x11drv.h b/dlls/winex11.drv/x11drv.h
index d96a19f2e6..6ebf5db247 100644
--- a/dlls/winex11.drv/x11drv.h
+++ b/dlls/winex11.drv/x11drv.h
@@ -150,6 +150,7 @@ extern BOOL X11DRV_Arc( PHYSDEV dev, INT left, INT top, INT right,
extern BOOL X11DRV_Chord( PHYSDEV dev, INT left, INT top, INT right, INT bottom,
INT xstart, INT ystart, INT xend, INT yend ) DECLSPEC_HIDDEN;
extern NTSTATUS X11DRV_D3DKMTSetVidPnSourceOwner( const D3DKMT_SETVIDPNSOURCEOWNER *desc ) DECLSPEC_HIDDEN;
+extern NTSTATUS X11DRV_D3DKMTCheckVidPnExclusiveOwnership( const D3DKMT_CHECKVIDPNEXCLUSIVEOWNERSHIP *desc ) DECLSPEC_HIDDEN;
extern BOOL X11DRV_Ellipse( PHYSDEV dev, INT left, INT top, INT right, INT bottom ) DECLSPEC_HIDDEN;
extern INT X11DRV_EnumICMProfiles( PHYSDEV dev, ICMENUMPROCW proc, LPARAM lparam ) DECLSPEC_HIDDEN;
extern BOOL X11DRV_ExtFloodFill( PHYSDEV dev, INT x, INT y, COLORREF color, UINT fillType ) DECLSPEC_HIDDEN;
diff --git a/dlls/winex11.drv/x11drv_main.c b/dlls/winex11.drv/x11drv_main.c
index ef973f3e48..c9b202ad0e 100644
--- a/dlls/winex11.drv/x11drv_main.c
+++ b/dlls/winex11.drv/x11drv_main.c
@@ -877,3 +877,28 @@ done:
LeaveCriticalSection( &x11drv_section );
return status;
}
+
+/**********************************************************************
+ * X11DRV_D3DKMTCheckVidPnExclusiveOwnership
+ */
+NTSTATUS 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;
+}
--
2.20.1
More information about the wine-devel
mailing list