From: Rémi Bernon rbernon@codeweavers.com
--- dlls/gdi32/gdi32.spec | 2 + dlls/win32u/d3dkmt.c | 18 +++++ dlls/win32u/main.c | 10 +++ dlls/win32u/win32syscalls.h | 10 +-- dlls/win32u/win32u.spec | 4 +- dlls/wow64win/gdi.c | 46 +++++++++++ include/d3dukmdt.h | 136 +++++++++++++++++++++++++++++++++ include/ddk/d3dkmthk.h | 147 ++++++------------------------------ include/ntgdi.h | 2 + 9 files changed, 242 insertions(+), 133 deletions(-)
diff --git a/dlls/gdi32/gdi32.spec b/dlls/gdi32/gdi32.spec index c42172f142f..207549ff826 100644 --- a/dlls/gdi32/gdi32.spec +++ b/dlls/gdi32/gdi32.spec @@ -146,6 +146,8 @@ @ stdcall D3DKMTSetQueuedLimit(ptr) win32u.NtGdiDdDDISetQueuedLimit @ stdcall D3DKMTSetVidPnSourceOwner(ptr) win32u.NtGdiDdDDISetVidPnSourceOwner @ stdcall D3DKMTShareObjects(long ptr ptr long ptr) win32u.NtGdiDdDDIShareObjects +@ stdcall D3DKMTSignalSynchronizationObjectFromCpu(ptr) win32u.NtGdiDdDDISignalSynchronizationObjectFromCpu +@ stdcall D3DKMTWaitForSynchronizationObjectFromCpu(ptr) win32u.NtGdiDdDDIWaitForSynchronizationObjectFromCpu @ stdcall DPtoLP(long ptr long) @ stdcall DeleteColorSpace(long) @ stdcall DeleteDC(long) diff --git a/dlls/win32u/d3dkmt.c b/dlls/win32u/d3dkmt.c index 1e731ded520..98f6b935d6f 100644 --- a/dlls/win32u/d3dkmt.c +++ b/dlls/win32u/d3dkmt.c @@ -1917,6 +1917,24 @@ NTSTATUS WINAPI NtGdiDdDDIDestroySynchronizationObject( const D3DKMT_DESTROYSYNC return d3dkmt_destroy_sync( params->hSyncObject ); }
+/****************************************************************************** + * NtGdiDdDDISignalSynchronizationObjectFromCpu (win32u.@) + */ +NTSTATUS WINAPI NtGdiDdDDISignalSynchronizationObjectFromCpu( const D3DKMT_SIGNALSYNCHRONIZATIONOBJECTFROMCPU *params ) +{ + FIXME( "params %p stub!\n", params ); + return STATUS_NOT_IMPLEMENTED; +} + +/****************************************************************************** + * NtGdiDdDDIWaitForSynchronizationObjectFromCpu (win32u.@) + */ +NTSTATUS WINAPI NtGdiDdDDIWaitForSynchronizationObjectFromCpu( const D3DKMT_WAITFORSYNCHRONIZATIONOBJECTFROMCPU *params ) +{ + FIXME( "params %p stub!\n", params ); + return STATUS_NOT_IMPLEMENTED; +} + static void get_resource_global_keyed_mutex( struct d3dkmt_dxgi_desc *desc, D3DKMT_HANDLE *mutex_global, D3DKMT_HANDLE *sync_global ) { if ((desc->size != sizeof(struct d3dkmt_d3d9_desc) && desc->size != sizeof(struct d3dkmt_d3d11_desc)) || diff --git a/dlls/win32u/main.c b/dlls/win32u/main.c index 428412a2ddb..193c2c048bf 100644 --- a/dlls/win32u/main.c +++ b/dlls/win32u/main.c @@ -441,6 +441,16 @@ NTSTATUS SYSCALL_API NtGdiDdDDIShareObjects( UINT count, const D3DKMT_HANDLE *ha SYSCALL_FUNC( NtGdiDdDDIShareObjects ); }
+NTSTATUS SYSCALL_API NtGdiDdDDISignalSynchronizationObjectFromCpu( const D3DKMT_SIGNALSYNCHRONIZATIONOBJECTFROMCPU *params ) +{ + SYSCALL_FUNC( NtGdiDdDDISignalSynchronizationObjectFromCpu ); +} + +NTSTATUS SYSCALL_API NtGdiDdDDIWaitForSynchronizationObjectFromCpu( const D3DKMT_WAITFORSYNCHRONIZATIONOBJECTFROMCPU *params ) +{ + SYSCALL_FUNC( NtGdiDdDDIWaitForSynchronizationObjectFromCpu ); +} + BOOL SYSCALL_API NtGdiDeleteClientObj( HGDIOBJ handle ) { SYSCALL_FUNC( NtGdiDeleteClientObj ); diff --git a/dlls/win32u/win32syscalls.h b/dlls/win32u/win32syscalls.h index 5321c282397..69982b52833 100644 --- a/dlls/win32u/win32syscalls.h +++ b/dlls/win32u/win32syscalls.h @@ -374,7 +374,7 @@ SYSCALL_ENTRY( 0x1172, NtGdiDdDDISharedPrimaryLockNotification, 0 ) \ SYSCALL_ENTRY( 0x1173, NtGdiDdDDISharedPrimaryUnLockNotification, 0 ) \ SYSCALL_ENTRY( 0x1174, NtGdiDdDDISignalSynchronizationObject, 0 ) \ - SYSCALL_ENTRY( 0x1175, NtGdiDdDDISignalSynchronizationObjectFromCpu, 0 ) \ + SYSCALL_ENTRY( 0x1175, NtGdiDdDDISignalSynchronizationObjectFromCpu, 4 ) \ SYSCALL_ENTRY( 0x1176, NtGdiDdDDISignalSynchronizationObjectFromGpu, 0 ) \ SYSCALL_ENTRY( 0x1177, NtGdiDdDDISignalSynchronizationObjectFromGpu2, 0 ) \ SYSCALL_ENTRY( 0x1178, NtGdiDdDDISubmitCommand, 0 ) \ @@ -390,7 +390,7 @@ SYSCALL_ENTRY( 0x1182, NtGdiDdDDIUpdateOverlay, 0 ) \ SYSCALL_ENTRY( 0x1183, NtGdiDdDDIWaitForIdle, 0 ) \ SYSCALL_ENTRY( 0x1184, NtGdiDdDDIWaitForSynchronizationObject, 0 ) \ - SYSCALL_ENTRY( 0x1185, NtGdiDdDDIWaitForSynchronizationObjectFromCpu, 0 ) \ + SYSCALL_ENTRY( 0x1185, NtGdiDdDDIWaitForSynchronizationObjectFromCpu, 4 ) \ SYSCALL_ENTRY( 0x1186, NtGdiDdDDIWaitForSynchronizationObjectFromGpu, 0 ) \ SYSCALL_ENTRY( 0x1187, NtGdiDdDDIWaitForVerticalBlankEvent, 0 ) \ SYSCALL_ENTRY( 0x1188, NtGdiDdDDIWaitForVerticalBlankEvent2, 0 ) \ @@ -1916,7 +1916,7 @@ SYSCALL_ENTRY( 0x1172, NtGdiDdDDISharedPrimaryLockNotification, 0 ) \ SYSCALL_ENTRY( 0x1173, NtGdiDdDDISharedPrimaryUnLockNotification, 0 ) \ SYSCALL_ENTRY( 0x1174, NtGdiDdDDISignalSynchronizationObject, 0 ) \ - SYSCALL_ENTRY( 0x1175, NtGdiDdDDISignalSynchronizationObjectFromCpu, 0 ) \ + SYSCALL_ENTRY( 0x1175, NtGdiDdDDISignalSynchronizationObjectFromCpu, 8 ) \ SYSCALL_ENTRY( 0x1176, NtGdiDdDDISignalSynchronizationObjectFromGpu, 0 ) \ SYSCALL_ENTRY( 0x1177, NtGdiDdDDISignalSynchronizationObjectFromGpu2, 0 ) \ SYSCALL_ENTRY( 0x1178, NtGdiDdDDISubmitCommand, 0 ) \ @@ -1932,7 +1932,7 @@ SYSCALL_ENTRY( 0x1182, NtGdiDdDDIUpdateOverlay, 0 ) \ SYSCALL_ENTRY( 0x1183, NtGdiDdDDIWaitForIdle, 0 ) \ SYSCALL_ENTRY( 0x1184, NtGdiDdDDIWaitForSynchronizationObject, 0 ) \ - SYSCALL_ENTRY( 0x1185, NtGdiDdDDIWaitForSynchronizationObjectFromCpu, 0 ) \ + SYSCALL_ENTRY( 0x1185, NtGdiDdDDIWaitForSynchronizationObjectFromCpu, 8 ) \ SYSCALL_ENTRY( 0x1186, NtGdiDdDDIWaitForSynchronizationObjectFromGpu, 0 ) \ SYSCALL_ENTRY( 0x1187, NtGdiDdDDIWaitForVerticalBlankEvent, 0 ) \ SYSCALL_ENTRY( 0x1188, NtGdiDdDDIWaitForVerticalBlankEvent2, 0 ) \ @@ -3384,7 +3384,6 @@ SYSCALL_STUB( NtGdiDdDDISharedPrimaryLockNotification ) \ SYSCALL_STUB( NtGdiDdDDISharedPrimaryUnLockNotification ) \ SYSCALL_STUB( NtGdiDdDDISignalSynchronizationObject ) \ - SYSCALL_STUB( NtGdiDdDDISignalSynchronizationObjectFromCpu ) \ SYSCALL_STUB( NtGdiDdDDISignalSynchronizationObjectFromGpu ) \ SYSCALL_STUB( NtGdiDdDDISignalSynchronizationObjectFromGpu2 ) \ SYSCALL_STUB( NtGdiDdDDISubmitCommand ) \ @@ -3400,7 +3399,6 @@ SYSCALL_STUB( NtGdiDdDDIUpdateOverlay ) \ SYSCALL_STUB( NtGdiDdDDIWaitForIdle ) \ SYSCALL_STUB( NtGdiDdDDIWaitForSynchronizationObject ) \ - SYSCALL_STUB( NtGdiDdDDIWaitForSynchronizationObjectFromCpu ) \ SYSCALL_STUB( NtGdiDdDDIWaitForSynchronizationObjectFromGpu ) \ SYSCALL_STUB( NtGdiDdDDIWaitForVerticalBlankEvent ) \ SYSCALL_STUB( NtGdiDdDDIWaitForVerticalBlankEvent2 ) \ diff --git a/dlls/win32u/win32u.spec b/dlls/win32u/win32u.spec index 99c48b12f82..f0ccfba35cb 100644 --- a/dlls/win32u/win32u.spec +++ b/dlls/win32u/win32u.spec @@ -372,7 +372,7 @@ @ stub -syscall NtGdiDdDDISharedPrimaryLockNotification @ stub -syscall NtGdiDdDDISharedPrimaryUnLockNotification @ stub -syscall NtGdiDdDDISignalSynchronizationObject -@ stub -syscall NtGdiDdDDISignalSynchronizationObjectFromCpu +@ stdcall -syscall NtGdiDdDDISignalSynchronizationObjectFromCpu(ptr) @ stub -syscall NtGdiDdDDISignalSynchronizationObjectFromGpu @ stub -syscall NtGdiDdDDISignalSynchronizationObjectFromGpu2 @ stub -syscall NtGdiDdDDISubmitCommand @@ -388,7 +388,7 @@ @ stub -syscall NtGdiDdDDIUpdateOverlay @ stub -syscall NtGdiDdDDIWaitForIdle @ stub -syscall NtGdiDdDDIWaitForSynchronizationObject -@ stub -syscall NtGdiDdDDIWaitForSynchronizationObjectFromCpu +@ stdcall -syscall NtGdiDdDDIWaitForSynchronizationObjectFromCpu(ptr) @ stub -syscall NtGdiDdDDIWaitForSynchronizationObjectFromGpu @ stub -syscall NtGdiDdDDIWaitForVerticalBlankEvent @ stub -syscall NtGdiDdDDIWaitForVerticalBlankEvent2 diff --git a/dlls/wow64win/gdi.c b/dlls/wow64win/gdi.c index 9ba1c3b93de..5a38f1860cf 100644 --- a/dlls/wow64win/gdi.c +++ b/dlls/wow64win/gdi.c @@ -1554,6 +1554,52 @@ NTSTATUS WINAPI wow64_NtGdiDdDDIShareObjects( UINT *args ) return status; }
+NTSTATUS WINAPI wow64_NtGdiDdDDISignalSynchronizationObjectFromCpu( UINT *args ) +{ + const struct + { + D3DKMT_HANDLE hDevice; + UINT ObjectCount; + ULONG ObjectHandleArray; + ULONG FenceValueArray; + D3DDDICB_SIGNALFLAGS Flags; + } *desc32 = get_ptr( &args ); + D3DKMT_SIGNALSYNCHRONIZATIONOBJECTFROMCPU desc; + + if (!desc32) return STATUS_INVALID_PARAMETER; + desc.hDevice = desc32->hDevice; + desc.ObjectCount = desc32->ObjectCount; + desc.ObjectHandleArray = UlongToPtr( desc32->ObjectHandleArray ); + desc.FenceValueArray = UlongToPtr( desc32->FenceValueArray ); + desc.Flags = desc32->Flags; + + return NtGdiDdDDISignalSynchronizationObjectFromCpu( &desc ); +} + +NTSTATUS WINAPI wow64_NtGdiDdDDIWaitForSynchronizationObjectFromCpu( UINT *args ) +{ + const struct + { + D3DKMT_HANDLE hDevice; + UINT ObjectCount; + ULONG ObjectHandleArray; + ULONG FenceValueArray; + ULONG hAsyncEvent; + D3DDDI_WAITFORSYNCHRONIZATIONOBJECTFROMCPU_FLAGS Flags; + } *desc32 = get_ptr( &args ); + D3DKMT_WAITFORSYNCHRONIZATIONOBJECTFROMCPU desc; + + if (!desc32) return STATUS_INVALID_PARAMETER; + desc.hDevice = desc32->hDevice; + desc.ObjectCount = desc32->ObjectCount; + desc.ObjectHandleArray = UlongToPtr( desc32->ObjectHandleArray ); + desc.FenceValueArray = UlongToPtr( desc32->FenceValueArray ); + desc.hAsyncEvent = UlongToHandle( desc32->hAsyncEvent ); + desc.Flags = desc32->Flags; + + return NtGdiDdDDIWaitForSynchronizationObjectFromCpu( &desc ); +} + NTSTATUS WINAPI wow64_NtGdiDeleteClientObj( UINT *args ) { HGDIOBJ obj = get_handle( &args ); diff --git a/include/d3dukmdt.h b/include/d3dukmdt.h index f88771cbce6..99f7a5a8b74 100644 --- a/include/d3dukmdt.h +++ b/include/d3dukmdt.h @@ -26,6 +26,8 @@ #endif /* MAKEFOURCC */
typedef UINT D3DKMT_HANDLE; +typedef ULONGLONG D3DGPU_VIRTUAL_ADDRESS; +typedef UINT D3DDDI_VIDEO_PRESENT_TARGET_ID;
typedef enum _D3DDDIFORMAT { @@ -153,4 +155,138 @@ typedef struct _D3DDDI_ESCAPEFLAGS }; } D3DDDI_ESCAPEFLAGS;
+#ifndef D3DDDI_SYNCHRONIZATIONOBJECT_FLAGS_EXT +#define D3DDDI_SYNCHRONIZATIONOBJECT_FLAGS_EXT +#define D3DDDI_SYNCHRONIZATIONOBJECT_FLAGS_RESERVED0 Reserved0 +#endif + +typedef struct _D3DDDI_SYNCHRONIZATIONOBJECT_FLAGS +{ + union + { + struct + { + UINT Shared : 1; + UINT NtSecuritySharing : 1; + UINT CrossAdapter : 1; + UINT TopOfPipeline : 1; + UINT NoSignal : 1; + UINT NoWait : 1; + UINT NoSignalMaxValueOnTdr : 1; + UINT NoGPUAccess : 1; + UINT Reserved : 23; + UINT D3DDDI_SYNCHRONIZATIONOBJECT_FLAGS_RESERVED0 : 1; + }; + UINT Value; + }; +} D3DDDI_SYNCHRONIZATIONOBJECT_FLAGS; + +typedef enum _D3DDDI_SYNCHRONIZATIONOBJECT_TYPE +{ + D3DDDI_SYNCHRONIZATION_MUTEX = 1, + D3DDDI_SEMAPHORE = 2, + D3DDDI_FENCE = 3, + D3DDDI_CPU_NOTIFICATION = 4, + D3DDDI_MONITORED_FENCE = 5, + D3DDDI_PERIODIC_MONITORED_FENCE = 6, + D3DDDI_SYNCHRONIZATION_TYPE_LIMIT +} D3DDDI_SYNCHRONIZATIONOBJECT_TYPE; + +typedef struct _D3DDDI_SYNCHRONIZATIONOBJECTINFO +{ + D3DDDI_SYNCHRONIZATIONOBJECT_TYPE Type; + union + { + struct + { + BOOL InitialState; + } SynchronizationMutex; + struct + { + UINT MaxCount; + UINT InitialCount; + } Semaphore; + struct + { + UINT Reserved[16]; + } Reserved; + }; +} D3DDDI_SYNCHRONIZATIONOBJECTINFO; + +typedef struct _D3DDDI_SYNCHRONIZATIONOBJECTINFO2 +{ + D3DDDI_SYNCHRONIZATIONOBJECT_TYPE Type; + D3DDDI_SYNCHRONIZATIONOBJECT_FLAGS Flags; + union + { + struct + { + BOOL InitialState; + } SynchronizationMutex; + struct + { + UINT MaxCount; + UINT InitialCount; + } Semaphore; + struct + { + UINT64 FenceValue; + } Fence; + struct + { + HANDLE Event; + } CPUNotification; + struct + { + UINT64 InitialFenceValue; + void *FenceValueCPUVirtualAddress; + D3DGPU_VIRTUAL_ADDRESS FenceValueGPUVirtualAddress; + UINT EngineAffinity; + } MonitoredFence; + struct + { + D3DKMT_HANDLE hAdapter; + D3DDDI_VIDEO_PRESENT_TARGET_ID VidPnTargetId; + UINT64 Time; + void *FenceValueCPUVirtualAddress; + D3DGPU_VIRTUAL_ADDRESS FenceValueGPUVirtualAddress; + UINT EngineAffinity; + } PeriodicMonitoredFence; + struct + { + UINT64 Reserved[8]; + } Reserved; + }; + D3DKMT_HANDLE SharedHandle; +} D3DDDI_SYNCHRONIZATIONOBJECTINFO2; + +typedef struct _D3DDDI_WAITFORSYNCHRONIZATIONOBJECTFROMCPU_FLAGS +{ + union + { + struct + { + UINT WaitAny :1; + UINT Reserved :31; + }; + UINT Value; + }; +} D3DDDI_WAITFORSYNCHRONIZATIONOBJECTFROMCPU_FLAGS; + +typedef struct _D3DDDICB_SIGNALFLAGS +{ + union + { + struct + { + UINT SignalAtSubmission :1; + UINT EnqueueCpuEvent :1; + UINT AllowFenceRewind :1; + UINT Reserved :28; + UINT DXGK_SIGNAL_FLAG_INTERNAL0 :1; + }; + UINT Value; + }; +} D3DDDICB_SIGNALFLAGS; + #endif /* __WINE_D3DUKMDT_H */ diff --git a/include/ddk/d3dkmthk.h b/include/ddk/d3dkmthk.h index b072b16f1fc..9f7e6d55a3d 100644 --- a/include/ddk/d3dkmthk.h +++ b/include/ddk/d3dkmthk.h @@ -812,22 +812,6 @@ typedef struct _D3DKMT_CREATEKEYEDMUTEX D3DKMT_HANDLE hKeyedMutex; } D3DKMT_CREATEKEYEDMUTEX;
-typedef struct _D3DDDICB_SIGNALFLAGS -{ - union - { - struct - { - UINT SignalAtSubmission : 1; - UINT EnqueueCpuEvent : 1; - UINT AllowFenceRewind : 1; - UINT Reserved : 28; - UINT DXGK_SIGNAL_FLAG_INTERNAL0 : 1; - }; - UINT Value; - }; -} D3DDDICB_SIGNALFLAGS; - typedef struct _D3DKMT_CREATEKEYEDMUTEX2_FLAGS { union @@ -919,68 +903,6 @@ typedef struct _D3DKMT_OPENNTHANDLEFROMNAME HANDLE hNtHandle; } D3DKMT_OPENNTHANDLEFROMNAME;
-typedef ULONGLONG D3DGPU_VIRTUAL_ADDRESS; - -#ifndef D3DDDI_SYNCHRONIZATIONOBJECT_FLAGS_EXT -#define D3DDDI_SYNCHRONIZATIONOBJECT_FLAGS_EXT -#define D3DDDI_SYNCHRONIZATIONOBJECT_FLAGS_RESERVED0 Reserved0 -#endif - -typedef struct _D3DDDI_SYNCHRONIZATIONOBJECT_FLAGS -{ - union - { - struct - { - UINT Shared : 1; - UINT NtSecuritySharing : 1; - UINT CrossAdapter : 1; - UINT TopOfPipeline : 1; - UINT NoSignal : 1; - UINT NoWait : 1; - UINT NoSignalMaxValueOnTdr : 1; - UINT NoGPUAccess : 1; - UINT Reserved : 23; - UINT D3DDDI_SYNCHRONIZATIONOBJECT_FLAGS_RESERVED0 : 1; - }; - UINT Value; - }; -} D3DDDI_SYNCHRONIZATIONOBJECT_FLAGS; - -typedef UINT D3DDDI_VIDEO_PRESENT_TARGET_ID; - -typedef enum _D3DDDI_SYNCHRONIZATIONOBJECT_TYPE -{ - D3DDDI_SYNCHRONIZATION_MUTEX = 1, - D3DDDI_SEMAPHORE = 2, - D3DDDI_FENCE = 3, - D3DDDI_CPU_NOTIFICATION = 4, - D3DDDI_MONITORED_FENCE = 5, - D3DDDI_PERIODIC_MONITORED_FENCE = 6, - D3DDDI_SYNCHRONIZATION_TYPE_LIMIT -} D3DDDI_SYNCHRONIZATIONOBJECT_TYPE; - -typedef struct _D3DDDI_SYNCHRONIZATIONOBJECTINFO -{ - D3DDDI_SYNCHRONIZATIONOBJECT_TYPE Type; - union - { - struct - { - BOOL InitialState; - } SynchronizationMutex; - struct - { - UINT MaxCount; - UINT InitialCount; - } Semaphore; - struct - { - UINT Reserved[16]; - } Reserved; - }; -} D3DDDI_SYNCHRONIZATIONOBJECTINFO; - typedef struct _D3DKMT_CREATESYNCHRONIZATIONOBJECT { D3DKMT_HANDLE hDevice; @@ -988,53 +910,6 @@ typedef struct _D3DKMT_CREATESYNCHRONIZATIONOBJECT D3DKMT_HANDLE hSyncObject; } D3DKMT_CREATESYNCHRONIZATIONOBJECT;
-typedef struct _D3DDDI_SYNCHRONIZATIONOBJECTINFO2 -{ - D3DDDI_SYNCHRONIZATIONOBJECT_TYPE Type; - D3DDDI_SYNCHRONIZATIONOBJECT_FLAGS Flags; - union - { - struct - { - BOOL InitialState; - } SynchronizationMutex; - struct - { - UINT MaxCount; - UINT InitialCount; - } Semaphore; - struct - { - UINT64 FenceValue; - } Fence; - struct - { - HANDLE Event; - } CPUNotification; - struct - { - UINT64 InitialFenceValue; - void *FenceValueCPUVirtualAddress; - D3DGPU_VIRTUAL_ADDRESS FenceValueGPUVirtualAddress; - UINT EngineAffinity; - } MonitoredFence; - struct - { - D3DKMT_HANDLE hAdapter; - D3DDDI_VIDEO_PRESENT_TARGET_ID VidPnTargetId; - UINT64 Time; - void *FenceValueCPUVirtualAddress; - D3DGPU_VIRTUAL_ADDRESS FenceValueGPUVirtualAddress; - UINT EngineAffinity; - } PeriodicMonitoredFence; - struct - { - UINT64 Reserved[8]; - } Reserved; - }; - D3DKMT_HANDLE SharedHandle; -} D3DDDI_SYNCHRONIZATIONOBJECTINFO2; - typedef struct _D3DKMT_CREATESYNCHRONIZATIONOBJECT2 { D3DKMT_HANDLE hDevice; @@ -1086,6 +961,25 @@ typedef struct _D3DKMT_DESTROYSYNCHRONIZATIONOBJECT D3DKMT_HANDLE hSyncObject; } D3DKMT_DESTROYSYNCHRONIZATIONOBJECT;
+typedef struct _D3DKMT_SIGNALSYNCHRONIZATIONOBJECTFROMCPU +{ + D3DKMT_HANDLE hDevice; + UINT ObjectCount; + const D3DKMT_HANDLE *ObjectHandleArray; + const UINT64 *FenceValueArray; + D3DDDICB_SIGNALFLAGS Flags; +} D3DKMT_SIGNALSYNCHRONIZATIONOBJECTFROMCPU; + +typedef struct _D3DKMT_WAITFORSYNCHRONIZATIONOBJECTFROMCPU +{ + D3DKMT_HANDLE hDevice; + UINT ObjectCount; + const D3DKMT_HANDLE *ObjectHandleArray; + const UINT64 *FenceValueArray; + HANDLE hAsyncEvent; + D3DDDI_WAITFORSYNCHRONIZATIONOBJECTFROMCPU_FLAGS Flags; +} D3DKMT_WAITFORSYNCHRONIZATIONOBJECTFROMCPU; + typedef struct _D3DKMT_CREATESTANDARDALLOCATIONFLAGS { union @@ -1375,6 +1269,9 @@ NTSTATUS WINAPI D3DKMTReleaseKeyedMutex2( D3DKMT_RELEASEKEYEDMUTEX2 *params ); NTSTATUS WINAPI D3DKMTSetQueuedLimit(D3DKMT_SETQUEUEDLIMIT *desc); NTSTATUS WINAPI D3DKMTSetVidPnSourceOwner(const D3DKMT_SETVIDPNSOURCEOWNER *desc); NTSTATUS WINAPI D3DKMTShareObjects( UINT count, const D3DKMT_HANDLE *handles, OBJECT_ATTRIBUTES *attr, UINT access, HANDLE *handle ); +NTSTATUS WINAPI D3DKMTSignalSynchronizationObjectFromCpu( const D3DKMT_SIGNALSYNCHRONIZATIONOBJECTFROMCPU *params ); +NTSTATUS WINAPI D3DKMTWaitForSynchronizationObjectFromCpu( const D3DKMT_WAITFORSYNCHRONIZATIONOBJECTFROMCPU *params ); +
#ifdef __cplusplus } diff --git a/include/ntgdi.h b/include/ntgdi.h index d8fbfc6c8fd..23053e537d2 100644 --- a/include/ntgdi.h +++ b/include/ntgdi.h @@ -560,6 +560,8 @@ W32KAPI NTSTATUS WINAPI NtGdiDdDDIReleaseKeyedMutex2( D3DKMT_RELEASEKEYEDMUTEX2 W32KAPI NTSTATUS WINAPI NtGdiDdDDISetQueuedLimit( D3DKMT_SETQUEUEDLIMIT *desc ); W32KAPI NTSTATUS WINAPI NtGdiDdDDISetVidPnSourceOwner( const D3DKMT_SETVIDPNSOURCEOWNER *desc ); W32KAPI NTSTATUS WINAPI NtGdiDdDDIShareObjects( UINT count, const D3DKMT_HANDLE *handles, OBJECT_ATTRIBUTES *attr, UINT access, HANDLE *handle ); +W32KAPI NTSTATUS WINAPI NtGdiDdDDISignalSynchronizationObjectFromCpu( const D3DKMT_SIGNALSYNCHRONIZATIONOBJECTFROMCPU *params ); +W32KAPI NTSTATUS WINAPI NtGdiDdDDIWaitForSynchronizationObjectFromCpu( const D3DKMT_WAITFORSYNCHRONIZATIONOBJECTFROMCPU *params );
/* Wine extensions */ W32KAPI const struct vulkan_funcs * __wine_get_vulkan_driver(UINT version);