Commit 859eda02 authored by Jacek Caban's avatar Jacek Caban Committed by Alexandre Julliard

win32u: Use syscall interface for D3DKMT functions.

parent 4aecddf0
......@@ -1033,16 +1033,6 @@ static struct unix_funcs unix_funcs =
NtGdiCreateCompatibleDC,
NtGdiCreateDIBitmapInternal,
NtGdiCreateMetafileDC,
NtGdiDdDDICheckVidPnExclusiveOwnership,
NtGdiDdDDICloseAdapter,
NtGdiDdDDICreateDCFromMemory,
NtGdiDdDDIDestroyDCFromMemory,
NtGdiDdDDIDestroyDevice,
NtGdiDdDDIEscape,
NtGdiDdDDIOpenAdapterFromDeviceName,
NtGdiDdDDIOpenAdapterFromLuid,
NtGdiDdDDIQueryVideoMemoryInfo,
NtGdiDdDDISetVidPnSourceOwner,
NtGdiDeleteObjectApp,
NtGdiDoPalette,
NtGdiEnumFonts,
......
......@@ -62,10 +62,20 @@ static void * const syscalls[] =
NtGdiCreateRectRgn,
NtGdiCreateRoundRectRgn,
NtGdiCreateSolidBrush,
NtGdiDdDDICheckVidPnExclusiveOwnership,
NtGdiDdDDICloseAdapter,
NtGdiDdDDICreateDCFromMemory,
NtGdiDdDDICreateDevice,
NtGdiDdDDIDestroyDCFromMemory,
NtGdiDdDDIDestroyDevice,
NtGdiDdDDIEscape,
NtGdiDdDDIOpenAdapterFromDeviceName,
NtGdiDdDDIOpenAdapterFromHdc,
NtGdiDdDDIOpenAdapterFromLuid,
NtGdiDdDDIQueryStatistics,
NtGdiDdDDIQueryVideoMemoryInfo,
NtGdiDdDDISetQueuedLimit,
NtGdiDdDDISetVidPnSourceOwner,
NtGdiDeleteClientObj,
NtGdiDescribePixelFormat,
NtGdiDrawStream,
......
......@@ -186,14 +186,14 @@
@ stub NtGdiDdDDICheckMultiPlaneOverlaySupport3
@ stub NtGdiDdDDICheckOcclusion
@ stub NtGdiDdDDICheckSharedResourceAccess
@ stdcall NtGdiDdDDICheckVidPnExclusiveOwnership(ptr)
@ stdcall NtGdiDdDDICloseAdapter(ptr)
@ stdcall -syscall NtGdiDdDDICheckVidPnExclusiveOwnership(ptr)
@ stdcall -syscall NtGdiDdDDICloseAdapter(ptr)
@ stub NtGdiDdDDIConfigureSharedResource
@ stub NtGdiDdDDICreateAllocation
@ stub NtGdiDdDDICreateBundleObject
@ stub NtGdiDdDDICreateContext
@ stub NtGdiDdDDICreateContextVirtual
@ stdcall NtGdiDdDDICreateDCFromMemory(ptr)
@ stdcall -syscall NtGdiDdDDICreateDCFromMemory(ptr)
@ stdcall -syscall NtGdiDdDDICreateDevice(ptr)
@ stub NtGdiDdDDICreateHwContext
@ stub NtGdiDdDDICreateHwQueue
......@@ -209,8 +209,8 @@
@ stub NtGdiDdDDIDestroyAllocation
@ stub NtGdiDdDDIDestroyAllocation2
@ stub NtGdiDdDDIDestroyContext
@ stdcall NtGdiDdDDIDestroyDCFromMemory(ptr)
@ stdcall NtGdiDdDDIDestroyDevice(ptr)
@ stdcall -syscall NtGdiDdDDIDestroyDCFromMemory(ptr)
@ stdcall -syscall NtGdiDdDDIDestroyDevice(ptr)
@ stub NtGdiDdDDIDestroyHwContext
@ stub NtGdiDdDDIDestroyHwQueue
@ stub NtGdiDdDDIDestroyKeyedMutex
......@@ -224,7 +224,7 @@
@ stub NtGdiDdDDIDispMgrTargetOperation
@ stub NtGdiDdDDIEnumAdapters
@ stub NtGdiDdDDIEnumAdapters2
@ stdcall NtGdiDdDDIEscape(ptr)
@ stdcall -syscall NtGdiDdDDIEscape(ptr)
@ stub NtGdiDdDDIEvict
@ stub NtGdiDdDDIExtractBundleObject
@ stub NtGdiDdDDIFlipOverlay
......@@ -268,9 +268,9 @@
@ stub NtGdiDdDDINetDispStartMiracastDisplayDevice
@ stub NtGdiDdDDINetDispStopMiracastDisplayDevice
@ stub NtGdiDdDDIOfferAllocations
@ stdcall NtGdiDdDDIOpenAdapterFromDeviceName(ptr)
@ stdcall -syscall NtGdiDdDDIOpenAdapterFromDeviceName(ptr)
@ stdcall -syscall NtGdiDdDDIOpenAdapterFromHdc(ptr)
@ stdcall NtGdiDdDDIOpenAdapterFromLuid(ptr)
@ stdcall -syscall NtGdiDdDDIOpenAdapterFromLuid(ptr)
@ stub NtGdiDdDDIOpenBundleObjectNtHandleFromName
@ stub NtGdiDdDDIOpenKeyedMutex
@ stub NtGdiDdDDIOpenKeyedMutex2
......@@ -307,7 +307,7 @@
@ stub NtGdiDdDDIQueryResourceInfoFromNtHandle
@ stdcall -syscall NtGdiDdDDIQueryStatistics(ptr)
@ stub NtGdiDdDDIQueryVidPnExclusiveOwnership
@ stdcall NtGdiDdDDIQueryVideoMemoryInfo(ptr)
@ stdcall -syscall NtGdiDdDDIQueryVideoMemoryInfo(ptr)
@ stub NtGdiDdDDIReclaimAllocations
@ stub NtGdiDdDDIReclaimAllocations2
@ stub NtGdiDdDDIReleaseKeyedMutex
......@@ -335,7 +335,7 @@
@ stub NtGdiDdDDISetStereoEnabled
@ stub NtGdiDdDDISetSyncRefreshCountWaitTarget
@ stub NtGdiDdDDISetVidPnSourceHwProtection
@ stdcall NtGdiDdDDISetVidPnSourceOwner(ptr)
@ stdcall -syscall NtGdiDdDDISetVidPnSourceOwner(ptr)
@ stub NtGdiDdDDISetYieldPercentage
@ stub NtGdiDdDDIShareObjects
@ stub NtGdiDdDDISharedPrimaryLockNotification
......
......@@ -41,16 +41,6 @@ struct unix_funcs
UINT coloruse, UINT max_info, UINT max_bits,
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 *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 *pNtGdiDdDDIOpenAdapterFromLuid)( D3DKMT_OPENADAPTERFROMLUID *desc );
NTSTATUS (WINAPI *pNtGdiDdDDIQueryVideoMemoryInfo)( D3DKMT_QUERYVIDEOMEMORYINFO *desc );
NTSTATUS (WINAPI *pNtGdiDdDDISetVidPnSourceOwner)( const D3DKMT_SETVIDPNSOURCEOWNER *desc );
BOOL (WINAPI *pNtGdiDeleteObjectApp)( HGDIOBJ obj );
LONG (WINAPI *pNtGdiDoPalette)( HGDIOBJ handle, WORD start, WORD count, void *entries,
DWORD func, BOOL inbound );
......
......@@ -375,66 +375,6 @@ BOOL WINAPI NtGdiUpdateColors( HDC hdc )
return unix_funcs->pNtGdiUpdateColors( hdc );
}
NTSTATUS WINAPI NtGdiDdDDICheckVidPnExclusiveOwnership( const D3DKMT_CHECKVIDPNEXCLUSIVEOWNERSHIP *desc )
{
if (!unix_funcs) return STATUS_NOT_SUPPORTED;
return unix_funcs->pNtGdiDdDDICheckVidPnExclusiveOwnership( desc );
}
NTSTATUS WINAPI NtGdiDdDDICloseAdapter( const D3DKMT_CLOSEADAPTER *desc )
{
if (!unix_funcs) return STATUS_NOT_SUPPORTED;
return unix_funcs->pNtGdiDdDDICloseAdapter( desc );
}
NTSTATUS WINAPI NtGdiDdDDICreateDCFromMemory( D3DKMT_CREATEDCFROMMEMORY *desc )
{
if (!unix_funcs) return STATUS_NOT_SUPPORTED;
return unix_funcs->pNtGdiDdDDICreateDCFromMemory( desc );
}
NTSTATUS WINAPI NtGdiDdDDIDestroyDCFromMemory( const D3DKMT_DESTROYDCFROMMEMORY *desc )
{
if (!unix_funcs) return STATUS_NOT_SUPPORTED;
return unix_funcs->pNtGdiDdDDIDestroyDCFromMemory( desc );
}
NTSTATUS WINAPI NtGdiDdDDIDestroyDevice( const D3DKMT_DESTROYDEVICE *desc )
{
if (!unix_funcs) return STATUS_NOT_SUPPORTED;
return unix_funcs->pNtGdiDdDDIDestroyDevice( desc );
}
NTSTATUS WINAPI NtGdiDdDDIEscape( const D3DKMT_ESCAPE *desc )
{
if (!unix_funcs) return STATUS_NOT_SUPPORTED;
return unix_funcs->pNtGdiDdDDIEscape( desc );
}
NTSTATUS WINAPI NtGdiDdDDIOpenAdapterFromDeviceName( D3DKMT_OPENADAPTERFROMDEVICENAME *desc )
{
if (!unix_funcs) return STATUS_NOT_SUPPORTED;
return unix_funcs->pNtGdiDdDDIOpenAdapterFromDeviceName( desc );
}
NTSTATUS WINAPI NtGdiDdDDIOpenAdapterFromLuid( D3DKMT_OPENADAPTERFROMLUID *desc )
{
if (!unix_funcs) return STATUS_NOT_SUPPORTED;
return unix_funcs->pNtGdiDdDDIOpenAdapterFromLuid( desc );
}
NTSTATUS WINAPI NtGdiDdDDIQueryVideoMemoryInfo( D3DKMT_QUERYVIDEOMEMORYINFO *desc )
{
if (!unix_funcs) return STATUS_NOT_SUPPORTED;
return unix_funcs->pNtGdiDdDDIQueryVideoMemoryInfo( desc );
}
NTSTATUS WINAPI NtGdiDdDDISetVidPnSourceOwner( const D3DKMT_SETVIDPNSOURCEOWNER *desc )
{
if (!unix_funcs) return STATUS_NOT_SUPPORTED;
return unix_funcs->pNtGdiDdDDISetVidPnSourceOwner( desc );
}
BOOL WINAPI NtUserDrawCaptionTemp( HWND hwnd, HDC hdc, const RECT *rect, HFONT font,
HICON icon, const WCHAR *str, UINT flags )
{
......
......@@ -333,6 +333,55 @@ NTSTATUS WINAPI wow64_NtGdiCreateSolidBrush( UINT *args )
return HandleToUlong( NtGdiCreateSolidBrush( color, brush ));
}
NTSTATUS WINAPI wow64_NtGdiDdDDICheckVidPnExclusiveOwnership( UINT *args )
{
const D3DKMT_CHECKVIDPNEXCLUSIVEOWNERSHIP *desc = get_ptr( &args );
return NtGdiDdDDICheckVidPnExclusiveOwnership( desc );
}
NTSTATUS WINAPI wow64_NtGdiDdDDICloseAdapter( UINT *args )
{
const D3DKMT_CLOSEADAPTER *desc = get_ptr( &args );
return NtGdiDdDDICloseAdapter( desc );
}
NTSTATUS WINAPI wow64_NtGdiDdDDICreateDCFromMemory( UINT *args )
{
struct _D3DKMT_CREATEDCFROMMEMORY
{
ULONG pMemory;
D3DDDIFORMAT Format;
UINT Width;
UINT Height;
UINT Pitch;
ULONG hDeviceDc;
ULONG pColorTable;
ULONG hDc;
ULONG hBitmap;
} *desc32 = get_ptr( &args );
D3DKMT_CREATEDCFROMMEMORY desc;
NTSTATUS status;
if (!desc32) return STATUS_INVALID_PARAMETER;
desc.pMemory = UlongToPtr( desc32->pMemory );
desc.Format = desc32->Format;
desc.Width = desc32->Width;
desc.Height = desc32->Height;
desc.Pitch = desc32->Pitch;
desc.hDeviceDc = UlongToHandle( desc32->hDeviceDc );
desc.pColorTable = UlongToPtr( desc32->pColorTable );
if (!(status = NtGdiDdDDICreateDCFromMemory( &desc )))
{
desc32->hDc = HandleToUlong( desc.hDc );
desc32->hBitmap = HandleToUlong( desc.hBitmap );
}
return status;
}
NTSTATUS WINAPI wow64_NtGdiDdDDICreateDevice( UINT *args )
{
struct
......@@ -365,6 +414,77 @@ NTSTATUS WINAPI wow64_NtGdiDdDDICreateDevice( UINT *args )
return status;
}
NTSTATUS WINAPI wow64_NtGdiDdDDIDestroyDCFromMemory( UINT *args )
{
const struct
{
ULONG hDc;
ULONG hBitmap;
} *desc32 = get_ptr( &args );
D3DKMT_DESTROYDCFROMMEMORY desc;
if (!desc32) return STATUS_INVALID_PARAMETER;
desc.hDc = UlongToHandle( desc32->hDc );
desc.hBitmap = UlongToHandle( desc32->hBitmap );
return NtGdiDdDDIDestroyDCFromMemory( &desc );
}
NTSTATUS WINAPI wow64_NtGdiDdDDIDestroyDevice( UINT *args )
{
const D3DKMT_DESTROYDEVICE *desc = get_ptr( &args );
return NtGdiDdDDIDestroyDevice( desc );
}
NTSTATUS WINAPI wow64_NtGdiDdDDIEscape( UINT *args )
{
const struct
{
D3DKMT_HANDLE hAdapter;
D3DKMT_HANDLE hDevice;
D3DKMT_ESCAPETYPE Type;
D3DDDI_ESCAPEFLAGS Flags;
ULONG pPrivateDriverData;
UINT PrivateDriverDataSize;
D3DKMT_HANDLE hContext;
} *desc32 = get_ptr( &args );
D3DKMT_ESCAPE desc;
if (!desc32) return STATUS_INVALID_PARAMETER;
desc.hAdapter = desc32->hAdapter;
desc.hDevice = desc32->hDevice;
desc.Type = desc32->Type;
desc.Flags = desc32->Flags;
desc.pPrivateDriverData = UlongToPtr( desc32->pPrivateDriverData );
desc.PrivateDriverDataSize = desc32->PrivateDriverDataSize;
desc.hContext = desc32->hContext;
return NtGdiDdDDIEscape( &desc );
}
NTSTATUS WINAPI wow64_NtGdiDdDDIOpenAdapterFromDeviceName( UINT *args )
{
struct _D3DKMT_OPENADAPTERFROMDEVICENAME
{
ULONG pDeviceName;
D3DKMT_HANDLE hAdapter;
LUID AdapterLuid;
} *desc32 = get_ptr( &args );
D3DKMT_OPENADAPTERFROMDEVICENAME desc;
NTSTATUS status;
if (!desc32) return STATUS_INVALID_PARAMETER;
desc.pDeviceName = UlongToPtr( desc32->pDeviceName );
if (!(status = NtGdiDdDDIOpenAdapterFromDeviceName( &desc )))
{
desc32->hAdapter = desc.hAdapter;
desc32->AdapterLuid = desc.AdapterLuid;
}
return status;
}
NTSTATUS WINAPI wow64_NtGdiDdDDIOpenAdapterFromHdc( UINT *args )
{
struct
......@@ -375,9 +495,11 @@ NTSTATUS WINAPI wow64_NtGdiDdDDIOpenAdapterFromHdc( UINT *args )
D3DDDI_VIDEO_PRESENT_SOURCE_ID VidPnSourceId;
} *desc32 = get_ptr( &args );
D3DKMT_OPENADAPTERFROMHDC desc = { UlongToHandle( desc32->hDc ) };
D3DKMT_OPENADAPTERFROMHDC desc;
NTSTATUS status;
if (!desc32) return STATUS_INVALID_PARAMETER;
desc.hDc = UlongToHandle( desc32->hDc );
if (!(status = NtGdiDdDDIOpenAdapterFromHdc( &desc )))
{
desc32->hAdapter = desc.hAdapter;
......@@ -387,6 +509,13 @@ NTSTATUS WINAPI wow64_NtGdiDdDDIOpenAdapterFromHdc( UINT *args )
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 );
......@@ -394,6 +523,38 @@ NTSTATUS WINAPI wow64_NtGdiDdDDIQueryStatistics( UINT *args )
return NtGdiDdDDIQueryStatistics( stats );
}
NTSTATUS WINAPI wow64_NtGdiDdDDIQueryVideoMemoryInfo( UINT *args )
{
struct _D3DKMT_QUERYVIDEOMEMORYINFO
{
ULONG hProcess;
D3DKMT_HANDLE hAdapter;
D3DKMT_MEMORY_SEGMENT_GROUP MemorySegmentGroup;
UINT64 Budget;
UINT64 CurrentUsage;
UINT64 CurrentReservation;
UINT64 AvailableForReservation;
UINT PhysicalAdapterIndex;
} *desc32 = get_ptr( &args );
D3DKMT_QUERYVIDEOMEMORYINFO desc;
NTSTATUS status;
if (!desc32) return STATUS_INVALID_PARAMETER;
desc.hProcess = LongToHandle( desc32->hProcess );
desc.hAdapter = desc32->hAdapter;
desc.MemorySegmentGroup = desc32->MemorySegmentGroup;
desc.PhysicalAdapterIndex = desc32->PhysicalAdapterIndex;
if (!(status = NtGdiDdDDIQueryVideoMemoryInfo( &desc )))
{
desc32->Budget = desc.Budget;
desc32->CurrentUsage = desc.CurrentUsage;
desc32->CurrentReservation = desc.CurrentReservation;
desc32->AvailableForReservation = desc.AvailableForReservation;
}
return status;
}
NTSTATUS WINAPI wow64_NtGdiDdDDISetQueuedLimit( UINT *args )
{
D3DKMT_SETQUEUEDLIMIT *desc = get_ptr( &args );
......@@ -401,6 +562,26 @@ NTSTATUS WINAPI wow64_NtGdiDdDDISetQueuedLimit( UINT *args )
return NtGdiDdDDISetQueuedLimit( desc );
}
NTSTATUS WINAPI wow64_NtGdiDdDDISetVidPnSourceOwner( UINT *args )
{
const struct
{
D3DKMT_HANDLE hDevice;
ULONG pType;
ULONG pVidPnSourceId;
UINT VidPnSourceCount;
} *desc32 = get_ptr( &args );
D3DKMT_SETVIDPNSOURCEOWNER desc;
if (!desc32) return STATUS_INVALID_PARAMETER;
desc.hDevice = desc32->hDevice;
desc.pType = UlongToPtr( desc32->pType );
desc.pVidPnSourceId = UlongToPtr( desc32->pVidPnSourceId );
desc.VidPnSourceCount = desc32->VidPnSourceCount;
return NtGdiDdDDISetVidPnSourceOwner( &desc );
}
NTSTATUS WINAPI wow64_NtGdiDeleteClientObj( UINT *args )
{
HGDIOBJ obj = get_handle( &args );
......
......@@ -48,10 +48,20 @@
SYSCALL_ENTRY( NtGdiCreateRectRgn ) \
SYSCALL_ENTRY( NtGdiCreateRoundRectRgn ) \
SYSCALL_ENTRY( NtGdiCreateSolidBrush ) \
SYSCALL_ENTRY( NtGdiDdDDICheckVidPnExclusiveOwnership ) \
SYSCALL_ENTRY( NtGdiDdDDICloseAdapter ) \
SYSCALL_ENTRY( NtGdiDdDDICreateDCFromMemory ) \
SYSCALL_ENTRY( NtGdiDdDDICreateDevice ) \
SYSCALL_ENTRY( NtGdiDdDDIDestroyDCFromMemory ) \
SYSCALL_ENTRY( NtGdiDdDDIDestroyDevice ) \
SYSCALL_ENTRY( NtGdiDdDDIEscape ) \
SYSCALL_ENTRY( NtGdiDdDDIOpenAdapterFromDeviceName ) \
SYSCALL_ENTRY( NtGdiDdDDIOpenAdapterFromHdc ) \
SYSCALL_ENTRY( NtGdiDdDDIOpenAdapterFromLuid ) \
SYSCALL_ENTRY( NtGdiDdDDIQueryStatistics ) \
SYSCALL_ENTRY( NtGdiDdDDIQueryVideoMemoryInfo ) \
SYSCALL_ENTRY( NtGdiDdDDISetQueuedLimit ) \
SYSCALL_ENTRY( NtGdiDdDDISetVidPnSourceOwner ) \
SYSCALL_ENTRY( NtGdiDeleteClientObj ) \
SYSCALL_ENTRY( NtGdiDescribePixelFormat ) \
SYSCALL_ENTRY( NtGdiDrawStream ) \
......
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