i965/fs: Pass key->render_to_fbo via src1 of FS_OPCODE_DDY_*.
This means the generator doesn't have to look at the key, which is a little nicer - we're pretty close to no key dependencies at all. Signed-off-by: Kenneth Graunke <kenneth@whitecape.org> Reviewed-by: Jordan Justen <jordan.l.justen@intel.com> Reviewed-by: Matt Turner <mattst88@gmail.com>
This commit is contained in:
parent
cea37f0911
commit
a0f8b363c0
|
@ -912,6 +912,10 @@ enum opcode {
|
|||
|
||||
FS_OPCODE_DDX_COARSE,
|
||||
FS_OPCODE_DDX_FINE,
|
||||
/**
|
||||
* Compute dFdy(), dFdyCoarse(), or dFdyFine().
|
||||
* src1 is an immediate storing the key->render_to_fbo boolean.
|
||||
*/
|
||||
FS_OPCODE_DDY_COARSE,
|
||||
FS_OPCODE_DDY_FINE,
|
||||
FS_OPCODE_PIXEL_X,
|
||||
|
|
|
@ -1860,13 +1860,8 @@ fs_generator::generate_code(const cfg_t *cfg, int dispatch_width)
|
|||
break;
|
||||
case FS_OPCODE_DDY_COARSE:
|
||||
case FS_OPCODE_DDY_FINE:
|
||||
/* Make sure fp->UsesDFdy flag got set (otherwise there's no
|
||||
* guarantee that key->render_to_fbo is set).
|
||||
*/
|
||||
assert(stage == MESA_SHADER_FRAGMENT &&
|
||||
((gl_fragment_program *) prog)->UsesDFdy);
|
||||
generate_ddy(inst->opcode, dst, src[0],
|
||||
((brw_wm_prog_key * const) this->key)->render_to_fbo);
|
||||
assert(src[1].file == BRW_IMMEDIATE_VALUE);
|
||||
generate_ddy(inst->opcode, dst, src[0], src[1].dw1.ud);
|
||||
break;
|
||||
|
||||
case SHADER_OPCODE_GEN4_SCRATCH_WRITE:
|
||||
|
|
|
@ -620,17 +620,17 @@ fs_visitor::visit(ir_expression *ir)
|
|||
case ir_unop_dFdy:
|
||||
/* Select one of the two opcodes based on the glHint value. */
|
||||
if (fs_key->high_quality_derivatives)
|
||||
emit(FS_OPCODE_DDY_FINE, this->result, op[0]);
|
||||
emit(FS_OPCODE_DDY_FINE, result, op[0], fs_reg(fs_key->render_to_fbo));
|
||||
else
|
||||
emit(FS_OPCODE_DDY_COARSE, this->result, op[0]);
|
||||
emit(FS_OPCODE_DDY_COARSE, result, op[0], fs_reg(fs_key->render_to_fbo));
|
||||
break;
|
||||
|
||||
case ir_unop_dFdy_coarse:
|
||||
emit(FS_OPCODE_DDY_COARSE, this->result, op[0]);
|
||||
emit(FS_OPCODE_DDY_COARSE, result, op[0], fs_reg(fs_key->render_to_fbo));
|
||||
break;
|
||||
|
||||
case ir_unop_dFdy_fine:
|
||||
emit(FS_OPCODE_DDY_FINE, this->result, op[0]);
|
||||
emit(FS_OPCODE_DDY_FINE, result, op[0], fs_reg(fs_key->render_to_fbo));
|
||||
break;
|
||||
|
||||
case ir_binop_add:
|
||||
|
|
Loading…
Reference in New Issue