diff --git a/dlls/win32u/gdiobj.c b/dlls/win32u/gdiobj.c index a661cefe0bd..d097ba158fd 100644 --- a/dlls/win32u/gdiobj.c +++ b/dlls/win32u/gdiobj.c @@ -1079,17 +1079,10 @@ static struct unix_funcs unix_funcs = NtGdiCreateDIBitmapInternal, NtGdiCreateMetafileDC, NtGdiDdDDICheckVidPnExclusiveOwnership, - NtGdiDdDDICloseAdapter, NtGdiDdDDICreateDCFromMemory, - NtGdiDdDDICreateDevice, NtGdiDdDDIDestroyDCFromMemory, NtGdiDdDDIDestroyDevice, NtGdiDdDDIEscape, - NtGdiDdDDIOpenAdapterFromDeviceName, - NtGdiDdDDIOpenAdapterFromHdc, - NtGdiDdDDIOpenAdapterFromLuid, - NtGdiDdDDIQueryStatistics, - NtGdiDdDDISetQueuedLimit, NtGdiDdDDISetVidPnSourceOwner, NtGdiDeleteObjectApp, NtGdiDoPalette, diff --git a/dlls/win32u/syscall.c b/dlls/win32u/syscall.c index 28b7b177ba8..77fe84d074a 100644 --- a/dlls/win32u/syscall.c +++ b/dlls/win32u/syscall.c @@ -51,6 +51,13 @@ static void * const syscalls[] = NtGdiCreateRectRgn, NtGdiCreateRoundRectRgn, NtGdiCreateSolidBrush, + NtGdiDdDDICloseAdapter, + NtGdiDdDDICreateDevice, + NtGdiDdDDIOpenAdapterFromDeviceName, + NtGdiDdDDIOpenAdapterFromHdc, + NtGdiDdDDIOpenAdapterFromLuid, + NtGdiDdDDIQueryStatistics, + NtGdiDdDDISetQueuedLimit, NtGdiDeleteClientObj, NtGdiDescribePixelFormat, NtGdiDrawStream, diff --git a/dlls/win32u/win32u.spec b/dlls/win32u/win32u.spec index 1c5a960e59c..c7cf34ea1ff 100644 --- a/dlls/win32u/win32u.spec +++ b/dlls/win32u/win32u.spec @@ -187,14 +187,14 @@ @ stub NtGdiDdDDICheckOcclusion @ stub NtGdiDdDDICheckSharedResourceAccess @ stdcall NtGdiDdDDICheckVidPnExclusiveOwnership(ptr) -@ stdcall NtGdiDdDDICloseAdapter(ptr) +@ stdcall -syscall NtGdiDdDDICloseAdapter(ptr) @ stub NtGdiDdDDIConfigureSharedResource @ stub NtGdiDdDDICreateAllocation @ stub NtGdiDdDDICreateBundleObject @ stub NtGdiDdDDICreateContext @ stub NtGdiDdDDICreateContextVirtual @ stdcall NtGdiDdDDICreateDCFromMemory(ptr) -@ stdcall NtGdiDdDDICreateDevice(ptr) +@ stdcall -syscall NtGdiDdDDICreateDevice(ptr) @ stub NtGdiDdDDICreateHwContext @ stub NtGdiDdDDICreateHwQueue @ stub NtGdiDdDDICreateKeyedMutex @@ -268,9 +268,9 @@ @ stub NtGdiDdDDINetDispStartMiracastDisplayDevice @ stub NtGdiDdDDINetDispStopMiracastDisplayDevice @ stub NtGdiDdDDIOfferAllocations -@ stdcall NtGdiDdDDIOpenAdapterFromDeviceName(ptr) -@ stdcall NtGdiDdDDIOpenAdapterFromHdc(ptr) -@ stdcall NtGdiDdDDIOpenAdapterFromLuid(ptr) +@ stdcall -syscall NtGdiDdDDIOpenAdapterFromDeviceName(ptr) +@ stdcall -syscall NtGdiDdDDIOpenAdapterFromHdc(ptr) +@ stdcall -syscall NtGdiDdDDIOpenAdapterFromLuid(ptr) @ stub NtGdiDdDDIOpenBundleObjectNtHandleFromName @ stub NtGdiDdDDIOpenKeyedMutex @ stub NtGdiDdDDIOpenKeyedMutex2 @@ -305,7 +305,7 @@ @ stub NtGdiDdDDIQueryRemoteVidPnSourceFromGdiDisplayName @ stub NtGdiDdDDIQueryResourceInfo @ stub NtGdiDdDDIQueryResourceInfoFromNtHandle -@ stdcall NtGdiDdDDIQueryStatistics(ptr) +@ stdcall -syscall NtGdiDdDDIQueryStatistics(ptr) @ stub NtGdiDdDDIQueryVidPnExclusiveOwnership @ stub NtGdiDdDDIQueryVideoMemoryInfo @ stub NtGdiDdDDIReclaimAllocations @@ -330,7 +330,7 @@ @ stub NtGdiDdDDISetProcessDeviceRemovalSupport @ stub NtGdiDdDDISetProcessSchedulingPriorityBand @ stub NtGdiDdDDISetProcessSchedulingPriorityClass -@ stdcall NtGdiDdDDISetQueuedLimit(ptr) +@ stdcall -syscall NtGdiDdDDISetQueuedLimit(ptr) @ stub NtGdiDdDDISetStablePowerState @ stub NtGdiDdDDISetStereoEnabled @ stub NtGdiDdDDISetSyncRefreshCountWaitTarget diff --git a/dlls/win32u/win32u_private.h b/dlls/win32u/win32u_private.h index d187354cfcc..9a0a16c1f22 100644 --- a/dlls/win32u/win32u_private.h +++ b/dlls/win32u/win32u_private.h @@ -64,17 +64,10 @@ struct unix_funcs ULONG flags, HANDLE xform ); HDC (WINAPI *pNtGdiCreateMetafileDC)( HDC hdc ); NTSTATUS (WINAPI *pNtGdiDdDDICheckVidPnExclusiveOwnership)( const D3DKMT_CHECKVIDPNEXCLUSIVEOWNERSHIP *desc ); - NTSTATUS (WINAPI *pNtGdiDdDDICloseAdapter)( const D3DKMT_CLOSEADAPTER *desc ); NTSTATUS (WINAPI *pNtGdiDdDDICreateDCFromMemory)( D3DKMT_CREATEDCFROMMEMORY *desc ); - NTSTATUS (WINAPI *pNtGdiDdDDICreateDevice)( D3DKMT_CREATEDEVICE *desc ); NTSTATUS (WINAPI *pNtGdiDdDDIDestroyDCFromMemory)( const D3DKMT_DESTROYDCFROMMEMORY *desc ); NTSTATUS (WINAPI *pNtGdiDdDDIDestroyDevice)( const D3DKMT_DESTROYDEVICE *desc ); NTSTATUS (WINAPI *pNtGdiDdDDIEscape)( const D3DKMT_ESCAPE *desc ); - NTSTATUS (WINAPI *pNtGdiDdDDIOpenAdapterFromDeviceName)( D3DKMT_OPENADAPTERFROMDEVICENAME *desc ); - NTSTATUS (WINAPI *pNtGdiDdDDIOpenAdapterFromHdc)( D3DKMT_OPENADAPTERFROMHDC *desc ); - NTSTATUS (WINAPI *pNtGdiDdDDIOpenAdapterFromLuid)( D3DKMT_OPENADAPTERFROMLUID *desc ); - NTSTATUS (WINAPI *pNtGdiDdDDIQueryStatistics)( D3DKMT_QUERYSTATISTICS *stats ); - NTSTATUS (WINAPI *pNtGdiDdDDISetQueuedLimit)( D3DKMT_SETQUEUEDLIMIT *desc ); NTSTATUS (WINAPI *pNtGdiDdDDISetVidPnSourceOwner)( const D3DKMT_SETVIDPNSOURCEOWNER *desc ); BOOL (WINAPI *pNtGdiDeleteObjectApp)( HGDIOBJ obj ); LONG (WINAPI *pNtGdiDoPalette)( HGDIOBJ handle, WORD start, WORD count, void *entries, diff --git a/dlls/win32u/wrappers.c b/dlls/win32u/wrappers.c index 55abc39abd3..0f1a97f171b 100644 --- a/dlls/win32u/wrappers.c +++ b/dlls/win32u/wrappers.c @@ -574,21 +574,11 @@ NTSTATUS WINAPI NtGdiDdDDICheckVidPnExclusiveOwnership( const D3DKMT_CHECKVIDPNE return unix_funcs->pNtGdiDdDDICheckVidPnExclusiveOwnership( desc ); } -NTSTATUS WINAPI NtGdiDdDDICloseAdapter( const D3DKMT_CLOSEADAPTER *desc ) -{ - return unix_funcs->pNtGdiDdDDICloseAdapter( desc ); -} - NTSTATUS WINAPI NtGdiDdDDICreateDCFromMemory( D3DKMT_CREATEDCFROMMEMORY *desc ) { return unix_funcs->pNtGdiDdDDICreateDCFromMemory( desc ); } -NTSTATUS WINAPI NtGdiDdDDICreateDevice( D3DKMT_CREATEDEVICE *desc ) -{ - return unix_funcs->pNtGdiDdDDICreateDevice( desc ); -} - NTSTATUS WINAPI NtGdiDdDDIDestroyDCFromMemory( const D3DKMT_DESTROYDCFROMMEMORY *desc ) { return unix_funcs->pNtGdiDdDDIDestroyDCFromMemory( desc ); @@ -604,31 +594,6 @@ NTSTATUS WINAPI NtGdiDdDDIEscape( const D3DKMT_ESCAPE *desc ) return unix_funcs->pNtGdiDdDDIEscape( desc ); } -NTSTATUS WINAPI NtGdiDdDDIOpenAdapterFromDeviceName( D3DKMT_OPENADAPTERFROMDEVICENAME *desc ) -{ - return unix_funcs->pNtGdiDdDDIOpenAdapterFromDeviceName( desc ); -} - -NTSTATUS WINAPI NtGdiDdDDIOpenAdapterFromHdc( D3DKMT_OPENADAPTERFROMHDC *desc ) -{ - return unix_funcs->pNtGdiDdDDIOpenAdapterFromHdc( desc ); -} - -NTSTATUS WINAPI NtGdiDdDDIOpenAdapterFromLuid( D3DKMT_OPENADAPTERFROMLUID *desc ) -{ - return unix_funcs->pNtGdiDdDDIOpenAdapterFromLuid( desc ); -} - -NTSTATUS WINAPI NtGdiDdDDIQueryStatistics( D3DKMT_QUERYSTATISTICS *stats ) -{ - return unix_funcs->pNtGdiDdDDIQueryStatistics( stats ); -} - -NTSTATUS WINAPI NtGdiDdDDISetQueuedLimit( D3DKMT_SETQUEUEDLIMIT *desc ) -{ - return unix_funcs->pNtGdiDdDDISetQueuedLimit( desc ); -} - NTSTATUS WINAPI NtGdiDdDDISetVidPnSourceOwner( const D3DKMT_SETVIDPNSOURCEOWNER *desc ) { return unix_funcs->pNtGdiDdDDISetVidPnSourceOwner( desc ); diff --git a/dlls/wow64win/gdi.c b/dlls/wow64win/gdi.c index c3746cb0088..348c3259f2e 100644 --- a/dlls/wow64win/gdi.c +++ b/dlls/wow64win/gdi.c @@ -583,3 +583,108 @@ NTSTATUS WINAPI wow64_NtGdiFlush( UINT *args ) { return NtGdiFlush(); } + +NTSTATUS WINAPI wow64_NtGdiDdDDICloseAdapter( UINT *args ) +{ + const D3DKMT_CLOSEADAPTER *desc = get_ptr( &args ); + + return NtGdiDdDDICloseAdapter( desc ); +} + +NTSTATUS WINAPI wow64_NtGdiDdDDICreateDevice( UINT *args ) +{ + struct + { + D3DKMT_HANDLE hAdapter; + D3DKMT_CREATEDEVICEFLAGS Flags; + D3DKMT_HANDLE hDevice; + ULONG pCommandBuffer; + UINT CommandBufferSize; + ULONG pAllocationList; + UINT AllocationListSize; + ULONG pPatchLocationList; + UINT PatchLocationListSize; + } *desc32 = get_ptr( &args ); + + D3DKMT_CREATEDEVICE desc = + { + { desc32->hAdapter }, + desc32->Flags + }; + NTSTATUS status; + + if (!(status = NtGdiDdDDICreateDevice( &desc ))) + { + desc32->hDevice = desc.hDevice; + desc32->pCommandBuffer = PtrToUlong( desc.pCommandBuffer ); + desc32->CommandBufferSize = desc.CommandBufferSize; + desc32->pAllocationList = PtrToUlong( desc.pAllocationList ); + desc32->AllocationListSize = desc.AllocationListSize; + desc32->pPatchLocationList = PtrToUlong( desc.pPatchLocationList ); + desc32->PatchLocationListSize = desc.PatchLocationListSize; + } + return status; +} + +NTSTATUS WINAPI wow64_NtGdiDdDDIOpenAdapterFromDeviceName( UINT *args ) +{ + struct + { + ULONG pDeviceName; + D3DKMT_HANDLE hAdapter; + LUID AdapterLuid; + } *desc32 = get_ptr( &args ); + + D3DKMT_OPENADAPTERFROMDEVICENAME desc = { UlongToPtr( desc32->pDeviceName ) }; + NTSTATUS status; + + if (!(status = NtGdiDdDDIOpenAdapterFromDeviceName( &desc ))) + { + desc32->hAdapter = desc.hAdapter; + desc32->AdapterLuid = desc.AdapterLuid; + } + return status; +} + +NTSTATUS WINAPI wow64_NtGdiDdDDIOpenAdapterFromHdc( UINT *args ) +{ + struct + { + ULONG hDc; + D3DKMT_HANDLE hAdapter; + LUID AdapterLuid; + D3DDDI_VIDEO_PRESENT_SOURCE_ID VidPnSourceId; + } *desc32 = get_ptr( &args ); + + D3DKMT_OPENADAPTERFROMHDC desc = { UlongToHandle( desc32->hDc ) }; + NTSTATUS status; + + if (!(status = NtGdiDdDDIOpenAdapterFromHdc( &desc ))) + { + desc32->hAdapter = desc.hAdapter; + desc32->AdapterLuid = desc.AdapterLuid; + desc32->VidPnSourceId = desc.VidPnSourceId; + } + return status; +} + +NTSTATUS WINAPI wow64_NtGdiDdDDIOpenAdapterFromLuid( UINT *args ) +{ + D3DKMT_OPENADAPTERFROMLUID *desc = get_ptr( &args ); + + return NtGdiDdDDIOpenAdapterFromLuid( desc ); +} + +NTSTATUS WINAPI wow64_NtGdiDdDDIQueryStatistics( UINT *args ) +{ + D3DKMT_QUERYSTATISTICS *stats = get_ptr( &args ); + + return NtGdiDdDDIQueryStatistics( stats ); +} + +NTSTATUS WINAPI wow64_NtGdiDdDDISetQueuedLimit( UINT *args ) +{ + D3DKMT_SETQUEUEDLIMIT *desc = get_ptr( &args ); + + return NtGdiDdDDISetQueuedLimit( desc ); +} diff --git a/dlls/wow64win/syscall.h b/dlls/wow64win/syscall.h index 1d74d55e032..18435b993f0 100644 --- a/dlls/wow64win/syscall.h +++ b/dlls/wow64win/syscall.h @@ -38,6 +38,13 @@ SYSCALL_ENTRY( NtGdiCreateRectRgn ) \ SYSCALL_ENTRY( NtGdiCreateRoundRectRgn ) \ SYSCALL_ENTRY( NtGdiCreateSolidBrush ) \ + SYSCALL_ENTRY( NtGdiDdDDICloseAdapter ) \ + SYSCALL_ENTRY( NtGdiDdDDICreateDevice ) \ + SYSCALL_ENTRY( NtGdiDdDDIOpenAdapterFromDeviceName ) \ + SYSCALL_ENTRY( NtGdiDdDDIOpenAdapterFromHdc ) \ + SYSCALL_ENTRY( NtGdiDdDDIOpenAdapterFromLuid ) \ + SYSCALL_ENTRY( NtGdiDdDDIQueryStatistics ) \ + SYSCALL_ENTRY( NtGdiDdDDISetQueuedLimit ) \ SYSCALL_ENTRY( NtGdiDeleteClientObj ) \ SYSCALL_ENTRY( NtGdiDescribePixelFormat ) \ SYSCALL_ENTRY( NtGdiDrawStream ) \