Stefan Dösinger : wined3d: Make sure the pixel shader is compiled.

Alexandre Julliard julliard at winehq.org
Mon Aug 25 06:21:25 CDT 2008


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

Author: Stefan Dösinger <stefan at codeweavers.com>
Date:   Wed Aug 13 14:32:48 2008 -0500

wined3d: Make sure the pixel shader is compiled.

If we're heading out of the pixelshader handler early, and a pixel
shader is in use, the pixel shader may not be compiled. The vertex
shader handler then checks if the pixel shader is dirty, and calls the
shader backend to apply the shader if it isn't.  Thus, in the case of
GLSL, the shader code could attempt to link an uncompiled shader into
the program. This isn't much of a problem because when the fog is
applied, the pixel shader is compiled and the program re-linked.

---

 dlls/wined3d/arb_program_shader.c |    7 ++++++-
 1 files changed, 6 insertions(+), 1 deletions(-)

diff --git a/dlls/wined3d/arb_program_shader.c b/dlls/wined3d/arb_program_shader.c
index e553828..bc8d3b3 100644
--- a/dlls/wined3d/arb_program_shader.c
+++ b/dlls/wined3d/arb_program_shader.c
@@ -2776,7 +2776,12 @@ static void fragment_prog_arbfp(DWORD state, IWineD3DStateBlockImpl *stateblock,
     struct arbfp_ffp_desc *desc;
     unsigned int i;
 
-    if(isStateDirty(context, STATE_RENDER(WINED3DRS_FOGENABLE))) return;
+    if(isStateDirty(context, STATE_RENDER(WINED3DRS_FOGENABLE))) {
+        if(use_pshader) {
+            IWineD3DPixelShader_CompileShader(stateblock->pixelShader);
+        }
+        return;
+    }
 
     if(use_pshader) {
         IWineD3DPixelShader_CompileShader(stateblock->pixelShader);




More information about the wine-cvs mailing list