summaryrefslogtreecommitdiff
path: root/src/intel/compiler/brw_fs.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/intel/compiler/brw_fs.cpp')
-rw-r--r--src/intel/compiler/brw_fs.cpp38
1 files changed, 5 insertions, 33 deletions
diff --git a/src/intel/compiler/brw_fs.cpp b/src/intel/compiler/brw_fs.cpp
index 5c225fb0a3b..78994216b12 100644
--- a/src/intel/compiler/brw_fs.cpp
+++ b/src/intel/compiler/brw_fs.cpp
@@ -1071,7 +1071,8 @@ fs_inst::flags_written() const
opcode != BRW_OPCODE_IF &&
opcode != BRW_OPCODE_WHILE)) ||
opcode == SHADER_OPCODE_FIND_LIVE_CHANNEL ||
- opcode == FS_OPCODE_FB_WRITE) {
+ opcode == FS_OPCODE_FB_WRITE ||
+ opcode == FS_OPCODE_DISCARD_LANDING_PAD) {
return flag_mask(this);
} else {
return flag_mask(dst, size_written);
@@ -1499,21 +1500,6 @@ fs_visitor::resolve_source_modifiers(const fs_reg &src)
}
void
-fs_visitor::emit_discard_jump()
-{
- assert(brw_wm_prog_data(this->prog_data)->uses_kill);
-
- /* For performance, after a discard, jump to the end of the
- * shader if all relevant channels have been discarded.
- */
- fs_inst *discard_jump = bld.emit(FS_OPCODE_DISCARD_JUMP);
- discard_jump->flag_subreg = 1;
-
- discard_jump->predicate = BRW_PREDICATE_ALIGN1_ANY4H;
- discard_jump->predicate_inverse = true;
-}
-
-void
fs_visitor::emit_gs_thread_end()
{
assert(stage == MESA_SHADER_GEOMETRY);
@@ -2976,7 +2962,7 @@ fs_visitor::opt_redundant_discard_jumps()
fs_inst *placeholder_halt = NULL;
foreach_inst_in_block_reverse(fs_inst, inst, last_bblock) {
- if (inst->opcode == FS_OPCODE_PLACEHOLDER_HALT) {
+ if (inst->opcode == FS_OPCODE_DISCARD_LANDING_PAD) {
placeholder_halt = inst;
break;
}
@@ -4232,10 +4218,9 @@ lower_fb_write_logical_send(const fs_builder &bld, fs_inst *inst,
}
if (prog_data->uses_kill) {
- assert(bld.group() < 16);
ubld.group(1, 0).MOV(retype(component(header, 15),
BRW_REGISTER_TYPE_UW),
- brw_flag_reg(0, 1));
+ brw_flag_subreg(inst->flag_subreg + inst->group / 16));
}
assert(length == 0);
@@ -7100,8 +7085,6 @@ fs_visitor::optimize()
OPT(opt_peephole_sel);
}
- OPT(opt_redundant_discard_jumps);
-
if (OPT(lower_load_payload)) {
split_virtual_grfs();
OPT(register_coalesce);
@@ -7616,24 +7599,13 @@ fs_visitor::run_fs(bool allow_spilling, bool do_rep_send)
emit_interpolation_setup_gen6();
}
- /* We handle discards by keeping track of the still-live pixels in f0.1.
- * Initialize it with the dispatched pixels.
- */
- if (wm_prog_data->uses_kill) {
- const fs_reg dispatch_mask =
- devinfo->gen >= 6 ? brw_vec1_grf(1, 7) : brw_vec1_grf(0, 0);
- bld.exec_all().group(1, 0)
- .MOV(retype(brw_flag_reg(0, 1), BRW_REGISTER_TYPE_UW),
- retype(dispatch_mask, BRW_REGISTER_TYPE_UW));
- }
-
emit_nir_code();
if (failed)
return false;
if (wm_prog_data->uses_kill)
- bld.emit(FS_OPCODE_PLACEHOLDER_HALT);
+ bld.emit(FS_OPCODE_DISCARD_LANDING_PAD);
if (wm_key->alpha_test_func)
emit_alpha_test();