Henri Verbeet : d3d9: Implement IDirect3D9Ex::GetAdapterLUID().

Alexandre Julliard julliard at winehq.org
Wed Dec 2 10:22:13 CST 2009


Module: wine
Branch: master
Commit: ed73f0a1b04acff312a261ea8b409255337520d2
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=ed73f0a1b04acff312a261ea8b409255337520d2

Author: Henri Verbeet <hverbeet at 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




More information about the wine-cvs mailing list