Henri Verbeet : d3d8: Fix GetDevice() for surfaces that are part of a texture.

Alexandre Julliard julliard at winehq.org
Mon Dec 7 10:26:18 CST 2009


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

Author: Henri Verbeet <hverbeet at codeweavers.com>
Date:   Mon Dec  7 11:08:36 2009 +0100

d3d8: Fix GetDevice() for surfaces that are part of a texture.

If the surface is part of a texture it doesn't keep its own reference to the
device, but instead relies on the reference the texture has. This fixes a
regression introduced by 3cedef2ffea3a72d9717470f01a3a046db923e4b.

---

 dlls/d3d8/surface.c |   17 +++++++++++++++++
 1 files changed, 17 insertions(+), 0 deletions(-)

diff --git a/dlls/d3d8/surface.c b/dlls/d3d8/surface.c
index 1d4b1dc..cf72e3e 100644
--- a/dlls/d3d8/surface.c
+++ b/dlls/d3d8/surface.c
@@ -106,6 +106,23 @@ static HRESULT WINAPI IDirect3DSurface8Impl_GetDevice(IDirect3DSurface8 *iface,
 
     TRACE("iface %p, device %p.\n", iface, device);
 
+    if (This->forwardReference)
+    {
+        IDirect3DResource8 *resource;
+        HRESULT hr;
+
+        hr = IUnknown_QueryInterface(This->forwardReference, &IID_IDirect3DResource8, (void **)&resource);
+        if (SUCCEEDED(hr))
+        {
+            hr = IDirect3DResource8_GetDevice(resource, device);
+            IDirect3DResource8_Release(resource);
+
+            TRACE("Returning device %p.\n", *device);
+        }
+
+        return hr;
+    }
+
     *device = (IDirect3DDevice8 *)This->parentDevice;
     IDirect3DDevice8_AddRef(*device);
 




More information about the wine-cvs mailing list