From 89c96ca31ea51554b70a4c59d56f3b1e8b2d3f7b Mon Sep 17 00:00:00 2001 From: Henri Verbeet Date: Mon, 7 Dec 2009 11:08:37 +0100 Subject: [PATCH] d3d9: 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 ff92e6eb6a6b0f5b6ee0d062f8434cad8f31c33d. --- dlls/d3d9/surface.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/dlls/d3d9/surface.c b/dlls/d3d9/surface.c index 6f55eca7f44..210a0ee1d45 100644 --- a/dlls/d3d9/surface.c +++ b/dlls/d3d9/surface.c @@ -108,6 +108,23 @@ static HRESULT WINAPI IDirect3DSurface9Impl_GetDevice(IDirect3DSurface9 *iface, TRACE("iface %p, device %p.\n", iface, device); + if (This->forwardReference) + { + IDirect3DResource9 *resource; + HRESULT hr; + + hr = IUnknown_QueryInterface(This->forwardReference, &IID_IDirect3DResource9, (void **)&resource); + if (SUCCEEDED(hr)) + { + hr = IDirect3DResource9_GetDevice(resource, device); + IDirect3DResource9_Release(resource); + + TRACE("Returning device %p.\n", *device); + } + + return hr; + } + *device = (IDirect3DDevice9 *)This->parentDevice; IDirect3DDevice9_AddRef(*device);