i965/fs: Make an emit_discard_jump() function to reduce duplication.
This is already copied in two places, and I want to copy it to a third place. Signed-off-by: Kenneth Graunke <kenneth@whitecape.org> Reviewed-by: Carl Worth <cworth@cworth.org> Reviewed-by: Matt Turner <mattst88@gmail.com>
This commit is contained in:
@@ -1693,6 +1693,21 @@ fs_visitor::emit_math(enum opcode opcode, fs_reg dst, fs_reg src0, fs_reg src1)
|
||||
return inst;
|
||||
}
|
||||
|
||||
void
|
||||
fs_visitor::emit_discard_jump()
|
||||
{
|
||||
/* For performance, after a discard, jump to the end of the
|
||||
* shader if all relevant channels have been discarded.
|
||||
*/
|
||||
fs_inst *discard_jump = emit(FS_OPCODE_DISCARD_JUMP);
|
||||
discard_jump->flag_subreg = 1;
|
||||
|
||||
discard_jump->predicate = (dispatch_width == 8)
|
||||
? BRW_PREDICATE_ALIGN1_ANY8H
|
||||
: BRW_PREDICATE_ALIGN1_ANY16H;
|
||||
discard_jump->predicate_inverse = true;
|
||||
}
|
||||
|
||||
void
|
||||
fs_visitor::assign_curb_setup()
|
||||
{
|
||||
|
||||
@@ -307,6 +307,7 @@ public:
|
||||
const fs_reg &a);
|
||||
void emit_minmax(enum brw_conditional_mod conditionalmod, const fs_reg &dst,
|
||||
const fs_reg &src0, const fs_reg &src1);
|
||||
void emit_discard_jump();
|
||||
bool try_emit_b2f_of_comparison(ir_expression *ir);
|
||||
bool try_emit_saturate(ir_expression *ir);
|
||||
bool try_emit_line(ir_expression *ir);
|
||||
|
||||
@@ -1363,18 +1363,8 @@ fs_visitor::nir_emit_intrinsic(nir_intrinsic_instr *instr)
|
||||
cmp->flag_subreg = 1;
|
||||
|
||||
if (brw->gen >= 6) {
|
||||
/* For performance, after a discard, jump to the end of the shader.
|
||||
* Only jump if all relevant channels have been discarded.
|
||||
*/
|
||||
fs_inst *discard_jump = emit(FS_OPCODE_DISCARD_JUMP);
|
||||
discard_jump->flag_subreg = 1;
|
||||
|
||||
discard_jump->predicate = (dispatch_width == 8)
|
||||
? BRW_PREDICATE_ALIGN1_ANY8H
|
||||
: BRW_PREDICATE_ALIGN1_ANY16H;
|
||||
discard_jump->predicate_inverse = true;
|
||||
emit_discard_jump();
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
@@ -2497,16 +2497,7 @@ fs_visitor::visit(ir_discard *ir)
|
||||
cmp->flag_subreg = 1;
|
||||
|
||||
if (brw->gen >= 6) {
|
||||
/* For performance, after a discard, jump to the end of the shader.
|
||||
* Only jump if all relevant channels have been discarded.
|
||||
*/
|
||||
fs_inst *discard_jump = emit(FS_OPCODE_DISCARD_JUMP);
|
||||
discard_jump->flag_subreg = 1;
|
||||
|
||||
discard_jump->predicate = (dispatch_width == 8)
|
||||
? BRW_PREDICATE_ALIGN1_ANY8H
|
||||
: BRW_PREDICATE_ALIGN1_ANY16H;
|
||||
discard_jump->predicate_inverse = true;
|
||||
emit_discard_jump();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user