From 906071aa9ffb3bef34af512b006e00493053a082 Mon Sep 17 00:00:00 2001 From: Henri Verbeet Date: Fri, 25 Sep 2009 13:31:47 +0200 Subject: [PATCH] d3d8: It's not an error to have a NULL texture bound to a stage. --- dlls/d3d8/device.c | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/dlls/d3d8/device.c b/dlls/d3d8/device.c index 9bdd016ea6f..2a9babf669f 100644 --- a/dlls/d3d8/device.c +++ b/dlls/d3d8/device.c @@ -1471,8 +1471,8 @@ static HRESULT WINAPI IDirect3DDevice8Impl_GetClipStatus(LPDIRECT3DDEVICE8 iface static HRESULT WINAPI IDirect3DDevice8Impl_GetTexture(LPDIRECT3DDEVICE8 iface, DWORD Stage,IDirect3DBaseTexture8** ppTexture) { IDirect3DDevice8Impl *This = (IDirect3DDevice8Impl *)iface; - IWineD3DBaseTexture *retTexture = NULL; - HRESULT rc = D3D_OK; + IWineD3DBaseTexture *retTexture; + HRESULT hr; TRACE("(%p) Relay\n" , This); @@ -1481,17 +1481,27 @@ static HRESULT WINAPI IDirect3DDevice8Impl_GetTexture(LPDIRECT3DDEVICE8 iface, D } wined3d_mutex_lock(); - rc = IWineD3DDevice_GetTexture(This->WineD3DDevice, Stage, &retTexture); - if (rc == D3D_OK && NULL != retTexture) { + hr = IWineD3DDevice_GetTexture(This->WineD3DDevice, Stage, &retTexture); + if (FAILED(hr)) + { + WARN("Failed to get texture for stage %u, hr %#x.\n", Stage, hr); + wined3d_mutex_unlock(); + *ppTexture = NULL; + return hr; + } + + if (retTexture) + { IWineD3DBaseTexture_GetParent(retTexture, (IUnknown **)ppTexture); IWineD3DBaseTexture_Release(retTexture); - } else { - FIXME("Call to get texture (%d) failed (%p)\n", Stage, retTexture); + } + else + { *ppTexture = NULL; } wined3d_mutex_unlock(); - return rc; + return D3D_OK; } static HRESULT WINAPI IDirect3DDevice8Impl_SetTexture(LPDIRECT3DDEVICE8 iface, DWORD Stage, IDirect3DBaseTexture8* pTexture) {