Module: wine Branch: master Commit: f0f32912a6863246827be997fdb848077a3ca7c6 URL: http://source.winehq.org/git/wine.git/?a=commit;h=f0f32912a6863246827be997fd...
Author: Stefan Dösinger stefan@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);