win32u: Use syscall interface for some D3DKMT functions.

Signed-off-by: Jacek Caban <jacek@codeweavers.com>
Signed-off-by: Huw Davies <huw@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Jacek Caban 2021-10-15 16:53:28 +02:00 committed by Alexandre Julliard
parent d208b29d10
commit 00222f6d06
7 changed files with 126 additions and 56 deletions

View file

@ -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,

View file

@ -51,6 +51,13 @@ static void * const syscalls[] =
NtGdiCreateRectRgn,
NtGdiCreateRoundRectRgn,
NtGdiCreateSolidBrush,
NtGdiDdDDICloseAdapter,
NtGdiDdDDICreateDevice,
NtGdiDdDDIOpenAdapterFromDeviceName,
NtGdiDdDDIOpenAdapterFromHdc,
NtGdiDdDDIOpenAdapterFromLuid,
NtGdiDdDDIQueryStatistics,
NtGdiDdDDISetQueuedLimit,
NtGdiDeleteClientObj,
NtGdiDescribePixelFormat,
NtGdiDrawStream,

View file

@ -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

View file

@ -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,

View file

@ -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 );

View file

@ -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 );
}

View file

@ -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 ) \