Module: wine Branch: master Commit: ed73f0a1b04acff312a261ea8b409255337520d2 URL: http://source.winehq.org/git/wine.git/?a=commit;h=ed73f0a1b04acff312a261ea8b...
Author: Henri Verbeet hverbeet@codeweavers.com Date: Wed Dec 2 10:41:23 2009 +0100
d3d9: Implement IDirect3D9Ex::GetAdapterLUID().
---
dlls/d3d9/directx.c | 18 ++++++++++++++++-- dlls/wined3d/directx.c | 10 ++++++++++ dlls/wined3d/wined3d_private.h | 1 + include/wine/wined3d.idl | 7 +++++++ 4 files changed, 34 insertions(+), 2 deletions(-)
diff --git a/dlls/d3d9/directx.c b/dlls/d3d9/directx.c index 9395381..1fcc8c4 100644 --- a/dlls/d3d9/directx.c +++ b/dlls/d3d9/directx.c @@ -481,9 +481,23 @@ static HRESULT WINAPI DECLSPEC_HOTPATCH IDirect3D9ExImpl_CreateDeviceEx(IDirect3
static HRESULT WINAPI IDirect3D9ExImpl_GetAdapterLUID(IDirect3D9Ex *iface, UINT adapter, LUID *luid) { - FIXME("iface %p, adapter %u, luid %p stub!\n", iface, adapter, luid); + IDirect3D9Impl *This = (IDirect3D9Impl *)iface; + WINED3DADAPTER_IDENTIFIER adapter_id; + HRESULT hr;
- return D3DERR_DRIVERINTERNALERROR; + TRACE("iface %p, adapter %u, luid %p.\n", iface, adapter, luid); + + adapter_id.driver_size = 0; + adapter_id.description_size = 0; + adapter_id.device_name_size = 0; + + wined3d_mutex_lock(); + hr = IWineD3D_GetAdapterIdentifier(This->WineD3D, adapter, 0, &adapter_id); + wined3d_mutex_unlock(); + + memcpy(luid, &adapter_id.adapter_luid, sizeof(*luid)); + + return hr; }
diff --git a/dlls/wined3d/directx.c b/dlls/wined3d/directx.c index c990ce9..5e00438 100644 --- a/dlls/wined3d/directx.c +++ b/dlls/wined3d/directx.c @@ -2424,6 +2424,7 @@ static HRESULT WINAPI IWineD3DImpl_GetAdapterIdentifier(IWineD3D *iface, UINT Ad pIdentifier->revision = 0; memcpy(&pIdentifier->device_identifier, &IID_D3DDEVICE_D3DUID, sizeof(pIdentifier->device_identifier)); pIdentifier->whql_level = (Flags & WINED3DENUM_NO_WHQL_LEVEL) ? 0 : 1; + memcpy(&pIdentifier->adapter_luid, &adapter->luid, sizeof(pIdentifier->adapter_luid));
return WINED3D_OK; } @@ -4678,6 +4679,15 @@ BOOL InitAdapters(IWineD3DImpl *This) adapter->monitorPoint.x = -1; adapter->monitorPoint.y = -1;
+ if (!AllocateLocallyUniqueId(&adapter->luid)) + { + DWORD err = GetLastError(); + ERR("Failed to set adapter LUID (%#x).\n", err); + goto nogl_adapter; + } + TRACE("Allocated LUID %08x:%08x for adapter.\n", + adapter->luid.HighPart, adapter->luid.LowPart); + if (!WineD3D_CreateFakeGLContext(&fake_gl_ctx)) { ERR("Failed to get a gl context for default adapter\n"); diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h index 12685d2..7bb5b71 100644 --- a/dlls/wined3d/wined3d_private.h +++ b/dlls/wined3d/wined3d_private.h @@ -1335,6 +1335,7 @@ struct wined3d_adapter BOOL brokenStencil; /* Set on cards which only offer mixed depth+stencil */ unsigned int TextureRam; /* Amount of texture memory both video ram + AGP/TurboCache/HyperMemory/.. */ unsigned int UsedTextureRam; + LUID luid; };
BOOL initPixelFormats(struct wined3d_gl_info *gl_info, enum wined3d_pci_vendor vendor) DECLSPEC_HIDDEN; diff --git a/include/wine/wined3d.idl b/include/wine/wined3d.idl index 176e602..0658b74 100644 --- a/include/wine/wined3d.idl +++ b/include/wine/wined3d.idl @@ -42,6 +42,12 @@ typedef struct _RGNDATA RGNDATAHEADER rdh; char Buffer[1]; } RGNDATA; + +typedef struct _LUID +{ + DWORD LowPart; + LONG HighPart; +} LUID, *PLUID; cpp_quote("#endif")
cpp_quote("#define WINED3D_OK S_OK") @@ -1699,6 +1705,7 @@ typedef struct _WINED3DADAPTER_IDENTIFIER DWORD revision; GUID device_identifier; DWORD whql_level; + LUID adapter_luid; } WINED3DADAPTER_IDENTIFIER;
typedef struct _WINED3DPRESENT_PARAMETERS