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:
parent
e6460fe66b
commit
e6d9267d4f
1 changed files with 16 additions and 25 deletions
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue