Henri Verbeet : d3d8: Properly handle unsetting the pixelshader in SetPixelShader().

Alexandre Julliard julliard at winehq.org
Tue Mar 24 09:01:57 CDT 2009


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

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




More information about the wine-cvs mailing list