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.
This commit is contained in:
Stefan Dösinger 2008-08-13 14:32:48 -05:00 committed by Alexandre Julliard
parent 5b77a2f90b
commit f0f32912a6
1 changed files with 6 additions and 1 deletions

View File

@ -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);