diff --git a/dlls/wined3d/arb_program_shader.c b/dlls/wined3d/arb_program_shader.c index e2f4b5ef4d4..c536b38260d 100644 --- a/dlls/wined3d/arb_program_shader.c +++ b/dlls/wined3d/arb_program_shader.c @@ -2989,7 +2989,7 @@ static GLuint shader_arb_generate_pshader(IWineD3DPixelShaderImpl *This, * So enable the best we can get. */ if(reg_maps->usesdsx || reg_maps->usesdsy || reg_maps->loop_depth > 0 || reg_maps->usestexldd || - reg_maps->usestexldl || reg_maps->usesfacing) + reg_maps->usestexldl || reg_maps->usesfacing || reg_maps->usesifc) { want_nv_prog = TRUE; } diff --git a/dlls/wined3d/baseshader.c b/dlls/wined3d/baseshader.c index dc7cd5bddfb..d23d0377a8a 100644 --- a/dlls/wined3d/baseshader.c +++ b/dlls/wined3d/baseshader.c @@ -705,6 +705,10 @@ HRESULT shader_get_registers_used(IWineD3DBaseShader *iface, const struct wined3 { reg_maps->usesmova = 1; } + else if(ins.handler_idx == WINED3DSIH_IFC) + { + reg_maps->usesifc = 1; + } limit = ins.src_count + (ins.predicate ? 1 : 0); for (i = 0; i < limit; ++i) diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h index afdf6427071..e9b64bf23f6 100644 --- a/dlls/wined3d/wined3d_private.h +++ b/dlls/wined3d/wined3d_private.h @@ -640,7 +640,8 @@ typedef struct shader_reg_maps unsigned usesrelconstF : 1; unsigned fog : 1; unsigned usestexldl : 1; - unsigned padding : 6; + unsigned usesifc : 1; + unsigned padding : 5; /* Whether or not loops are used in this shader, and nesting depth */ unsigned loop_depth;