intel/compiler: Delete repclear shader's special case for 1 color target
This is basically just once through the loop but copy and pasted. One difference is that the single render target case used a headerless message, and the multiple render target case always used headers. Now we use headerless messages for the first render target, even in the multiple render target case. While we already have it set up for the other RTs, it's still 2 fewer registers to send. Minor improvement. Reviewed-by: Caio Oliveira <caio.oliveira@intel.com> Reviewed-by: Emma Anholt <emma@anholt.net> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/20172>
This commit is contained in:
committed by
Marge Bot
parent
e6460fe66b
commit
e6d9267d4f
@@ -3599,10 +3599,10 @@ void
|
||||
fs_visitor::emit_repclear_shader()
|
||||
{
|
||||
brw_wm_prog_key *key = (brw_wm_prog_key*) this->key;
|
||||
int base_mrf = 0;
|
||||
int color_mrf = base_mrf + 2;
|
||||
int color_mrf = 2;
|
||||
|
||||
assert(uniforms == 0);
|
||||
assume(key->nr_color_regions > 0);
|
||||
|
||||
struct brw_reg reg =
|
||||
brw_reg(BRW_GENERAL_REGISTER_FILE, 2, 3, 0, 0, BRW_REGISTER_TYPE_UD,
|
||||
@@ -3612,34 +3612,25 @@ fs_visitor::emit_repclear_shader()
|
||||
bld.exec_all().group(4, 0).MOV(brw_uvec_mrf(4, color_mrf, 0), fs_reg(reg));
|
||||
|
||||
fs_inst *write = NULL;
|
||||
if (key->nr_color_regions == 1) {
|
||||
write = bld.emit(FS_OPCODE_REP_FB_WRITE);
|
||||
write->saturate = key->clamp_fragment_color;
|
||||
write->base_mrf = color_mrf;
|
||||
write->target = 0;
|
||||
write->header_size = 0;
|
||||
write->mlen = 1;
|
||||
} else {
|
||||
assume(key->nr_color_regions > 0);
|
||||
struct brw_reg header;
|
||||
|
||||
struct brw_reg header =
|
||||
retype(brw_message_reg(base_mrf), BRW_REGISTER_TYPE_UD);
|
||||
if (key->nr_color_regions > 1) {
|
||||
header = retype(brw_message_reg(color_mrf - 2), BRW_REGISTER_TYPE_UD);
|
||||
bld.exec_all().group(16, 0)
|
||||
.MOV(header, retype(brw_vec8_grf(0, 0), BRW_REGISTER_TYPE_UD));
|
||||
}
|
||||
|
||||
for (int i = 0; i < key->nr_color_regions; ++i) {
|
||||
if (i > 0) {
|
||||
bld.exec_all().group(1, 0)
|
||||
.MOV(component(header, 2), brw_imm_ud(i));
|
||||
}
|
||||
for (int i = 0; i < key->nr_color_regions; ++i) {
|
||||
if (i > 0)
|
||||
bld.exec_all().group(1, 0).MOV(component(header, 2), brw_imm_ud(i));
|
||||
|
||||
write = bld.emit(FS_OPCODE_REP_FB_WRITE);
|
||||
write->saturate = key->clamp_fragment_color;
|
||||
write->base_mrf = base_mrf;
|
||||
write->target = i;
|
||||
write->header_size = 2;
|
||||
write->mlen = 3;
|
||||
}
|
||||
write = bld.emit(FS_OPCODE_REP_FB_WRITE);
|
||||
write->saturate = key->clamp_fragment_color;
|
||||
write->target = i;
|
||||
/* We can use a headerless message for the first render target */
|
||||
write->header_size = i == 0 ? 0 : 2;
|
||||
write->mlen = 1 + write->header_size;
|
||||
write->base_mrf = color_mrf - write->header_size;
|
||||
}
|
||||
write->eot = true;
|
||||
write->last_rt = true;
|
||||
|
||||
Reference in New Issue
Block a user