mirror of
git://source.winehq.org/git/wine.git
synced 2024-10-06 22:04:07 +00:00
gdi32: Implement NtGdiDdDDIOpenAdapterFromLuid.
And use it for D3DKMTOpenAdapterFromGdiDisplayName. 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:
parent
d127a14a7f
commit
fbd39cd8b5
|
@ -1257,13 +1257,11 @@ NTSTATUS WINAPI D3DKMTOpenAdapterFromGdiDisplayName( D3DKMT_OPENADAPTERFROMGDIDI
|
|||
WCHAR *end, key_nameW[MAX_PATH], bufferW[MAX_PATH];
|
||||
HDEVINFO devinfo = INVALID_HANDLE_VALUE;
|
||||
NTSTATUS status = STATUS_UNSUCCESSFUL;
|
||||
static D3DKMT_HANDLE handle_start = 0;
|
||||
struct d3dkmt_adapter *adapter;
|
||||
D3DKMT_OPENADAPTERFROMLUID luid_desc;
|
||||
SP_DEVINFO_DATA device_data;
|
||||
DWORD size, state_flags;
|
||||
DEVPROPTYPE type;
|
||||
HANDLE mutex;
|
||||
LUID luid;
|
||||
int index;
|
||||
|
||||
TRACE("(%p)\n", desc);
|
||||
|
@ -1279,10 +1277,6 @@ NTSTATUS WINAPI D3DKMTOpenAdapterFromGdiDisplayName( D3DKMT_OPENADAPTERFROMGDIDI
|
|||
if (*end)
|
||||
return STATUS_UNSUCCESSFUL;
|
||||
|
||||
adapter = heap_alloc( sizeof( *adapter ) );
|
||||
if (!adapter)
|
||||
return STATUS_NO_MEMORY;
|
||||
|
||||
/* Get adapter LUID from SetupAPI */
|
||||
mutex = get_display_device_init_mutex();
|
||||
|
||||
|
@ -1309,28 +1303,39 @@ NTSTATUS WINAPI D3DKMTOpenAdapterFromGdiDisplayName( D3DKMT_OPENADAPTERFROMGDIDI
|
|||
device_data.cbSize = sizeof( device_data );
|
||||
SetupDiOpenDeviceInfoW( devinfo, bufferW, NULL, 0, &device_data );
|
||||
if (!SetupDiGetDevicePropertyW( devinfo, &device_data, &DEVPROPKEY_GPU_LUID, &type,
|
||||
(BYTE *)&luid, sizeof( luid ), NULL, 0))
|
||||
(BYTE *)&luid_desc.AdapterLuid, sizeof( luid_desc.AdapterLuid ),
|
||||
NULL, 0))
|
||||
goto done;
|
||||
|
||||
EnterCriticalSection( &driver_section );
|
||||
/* D3DKMT_HANDLE is UINT, so we can't use pointer as handle */
|
||||
adapter->handle = ++handle_start;
|
||||
list_add_tail( &d3dkmt_adapters, &adapter->entry );
|
||||
LeaveCriticalSection( &driver_section );
|
||||
if ((status = NtGdiDdDDIOpenAdapterFromLuid( &luid_desc ))) goto done;
|
||||
|
||||
desc->hAdapter = handle_start;
|
||||
desc->AdapterLuid = luid;
|
||||
desc->hAdapter = luid_desc.hAdapter;
|
||||
desc->AdapterLuid = luid_desc.AdapterLuid;
|
||||
desc->VidPnSourceId = index;
|
||||
status = STATUS_SUCCESS;
|
||||
|
||||
done:
|
||||
SetupDiDestroyDeviceInfoList( devinfo );
|
||||
release_display_device_init_mutex( mutex );
|
||||
if (status != STATUS_SUCCESS)
|
||||
heap_free( adapter );
|
||||
return status;
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
* NtGdiDdDDIOpenAdapterFromLuid (win32u.@)
|
||||
*/
|
||||
NTSTATUS WINAPI NtGdiDdDDIOpenAdapterFromLuid( D3DKMT_OPENADAPTERFROMLUID *desc )
|
||||
{
|
||||
static D3DKMT_HANDLE handle_start = 0;
|
||||
struct d3dkmt_adapter *adapter;
|
||||
|
||||
if (!(adapter = heap_alloc( sizeof( *adapter ) ))) return STATUS_NO_MEMORY;
|
||||
|
||||
EnterCriticalSection( &driver_section );
|
||||
desc->hAdapter = adapter->handle = ++handle_start;
|
||||
list_add_tail( &d3dkmt_adapters, &adapter->entry );
|
||||
LeaveCriticalSection( &driver_section );
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
* NtGdiDdDDICreateDevice (win32u.@)
|
||||
*/
|
||||
|
|
|
@ -89,6 +89,7 @@
|
|||
@ stdcall D3DKMTEscape(ptr) NtGdiDdDDIEscape
|
||||
@ stdcall D3DKMTOpenAdapterFromGdiDisplayName(ptr)
|
||||
@ stdcall D3DKMTOpenAdapterFromHdc(ptr) NtGdiDdDDIOpenAdapterFromHdc
|
||||
@ stdcall D3DKMTOpenAdapterFromLuid(ptr) NtGdiDdDDIOpenAdapterFromLuid
|
||||
@ stdcall D3DKMTQueryStatistics(ptr) NtGdiDdDDIQueryStatistics
|
||||
@ stdcall D3DKMTSetQueuedLimit(ptr) NtGdiDdDDISetQueuedLimit
|
||||
@ stdcall D3DKMTSetVidPnSourceOwner(ptr) NtGdiDdDDISetVidPnSourceOwner
|
||||
|
|
|
@ -122,6 +122,12 @@ typedef struct _D3DKMT_OPENADAPTERFROMGDIDISPLAYNAME
|
|||
D3DDDI_VIDEO_PRESENT_SOURCE_ID VidPnSourceId;
|
||||
} D3DKMT_OPENADAPTERFROMGDIDISPLAYNAME;
|
||||
|
||||
typedef struct _D3DKMT_OPENADAPTERFROMLUID
|
||||
{
|
||||
LUID AdapterLuid;
|
||||
D3DKMT_HANDLE hAdapter;
|
||||
} D3DKMT_OPENADAPTERFROMLUID;
|
||||
|
||||
typedef struct _D3DKMT_SETVIDPNSOURCEOWNER
|
||||
{
|
||||
D3DKMT_HANDLE hDevice;
|
||||
|
|
|
@ -333,6 +333,7 @@ NTSTATUS WINAPI NtGdiDdDDICreateDCFromMemory( D3DKMT_CREATEDCFROMMEMORY *desc );
|
|||
NTSTATUS WINAPI NtGdiDdDDICreateDevice( D3DKMT_CREATEDEVICE *desc );
|
||||
NTSTATUS WINAPI NtGdiDdDDIDestroyDCFromMemory( const D3DKMT_DESTROYDCFROMMEMORY *desc );
|
||||
NTSTATUS WINAPI NtGdiDdDDIDestroyDevice( const D3DKMT_DESTROYDEVICE *desc );
|
||||
NTSTATUS WINAPI NtGdiDdDDIOpenAdapterFromLuid( D3DKMT_OPENADAPTERFROMLUID *desc );
|
||||
NTSTATUS WINAPI NtGdiDdDDIQueryStatistics( D3DKMT_QUERYSTATISTICS *stats );
|
||||
NTSTATUS WINAPI NtGdiDdDDISetQueuedLimit( D3DKMT_SETQUEUEDLIMIT *desc );
|
||||
NTSTATUS WINAPI NtGdiDdDDISetVidPnSourceOwner( const D3DKMT_SETVIDPNSOURCEOWNER *desc );
|
||||
|
|
Loading…
Reference in a new issue