Module: wine Branch: master Commit: 3f559f26d64f251ed1fb4df92afd04c11aa7dd3e URL: http://source.winehq.org/git/wine.git/?a=commit;h=3f559f26d64f251ed1fb4df92a...
Author: Henri Verbeet hverbeet@codeweavers.com Date: Tue Mar 24 10:09:21 2009 +0100
d3d8: Properly handle unsetting the pixelshader in SetPixelShader().
---
dlls/d3d8/device.c | 11 ++++++++++- 1 files changed, 10 insertions(+), 1 deletions(-)
diff --git a/dlls/d3d8/device.c b/dlls/d3d8/device.c index 119d33d..be6bce7 100644 --- a/dlls/d3d8/device.c +++ b/dlls/d3d8/device.c @@ -2171,14 +2171,23 @@ static HRESULT WINAPI IDirect3DDevice8Impl_SetPixelShader(LPDIRECT3DDEVICE8 ifac
EnterCriticalSection(&d3d8_cs);
+ if (!pShader) + { + hr = IWineD3DDevice_SetPixelShader(This->WineD3DDevice, NULL); + LeaveCriticalSection(&d3d8_cs); + return hr; + } + shader = d3d8_get_object(&This->handle_table, pShader - (VS_HIGHESTFIXEDFXF + 1)); if (!shader) { WARN("Invalid handle (%#x) passed.\n", pShader); + LeaveCriticalSection(&d3d8_cs); + return D3DERR_INVALIDCALL; }
TRACE("(%p) : Setting shader %p\n", This, shader); - hr = IWineD3DDevice_SetPixelShader(This->WineD3DDevice, shader == NULL ? NULL :shader->wineD3DPixelShader); + hr = IWineD3DDevice_SetPixelShader(This->WineD3DDevice, shader->wineD3DPixelShader); LeaveCriticalSection(&d3d8_cs); return hr; }