struct brw_context *brw = brw_context(ctx);
struct brw_wm_prog_key key;
- /* As a temporary measure we assume that all programs use dFdy() (and hence
- * need to be compiled differently depending on whether we're rendering to
- * an FBO). FIXME: set this bool correctly based on the contents of the
- * program.
- */
- bool program_uses_dfdy = true;
-
if (!prog->_LinkedShaders[MESA_SHADER_FRAGMENT])
return true;
struct gl_fragment_program *fp = (struct gl_fragment_program *)
prog->_LinkedShaders[MESA_SHADER_FRAGMENT]->Program;
struct brw_fragment_program *bfp = brw_fragment_program(fp);
+ bool program_uses_dfdy = fp->UsesDFdy;
memset(&key, 0, sizeof(key));
generate_ddx(inst, dst, src[0]);
break;
case FS_OPCODE_DDY:
+ /* Make sure fp->UsesDFdy flag got set (otherwise there's no
+ * guarantee that c->key.render_to_fbo is set).
+ */
+ assert(fp->UsesDFdy);
generate_ddy(inst, dst, src[0], c->key.render_to_fbo);
break;
const struct gl_program *prog = (struct gl_program *) brw->fragment_program;
GLuint lookup = 0;
GLuint line_aa;
-
- /* As a temporary measure we assume that all programs use dFdy() (and hence
- * need to be compiled differently depending on whether we're rendering to
- * an FBO). FIXME: set this bool correctly based on the contents of the
- * program.
- */
- bool program_uses_dfdy = true;
+ bool program_uses_dfdy = fp->program.UsesDFdy;
memset(key, 0, sizeof(*key));
break;
case OPCODE_DDY:
+ /* Make sure fp->program.UsesDFdy flag got set (otherwise there's no
+ * guarantee that c->key.render_to_fbo is set).
+ */
+ assert(c->fp->program.UsesDFdy);
emit_ddxy(p, dst, dst_flags, false, args[0], c->key.render_to_fbo);
break;