intel/compiler: Set "Null Render Target" ex_desc bit on Gen11
authorKenneth Graunke <kenneth@whitecape.org>
Tue, 27 Aug 2019 18:22:33 +0000 (11:22 -0700)
committerKenneth Graunke <kenneth@whitecape.org>
Tue, 17 Sep 2019 21:27:51 +0000 (14:27 -0700)
When there are no color regions (i.e. a depth only pass), we can set
the "Null Render Target" bit in the Gen11 RT write extended message
descriptor to indicate that it should behave as if it's writing to a
null render target, without the need for a binding table entry.

This lets drivers avoid setting up that null RT binding table entry,
but more importantly means the HW doesn't actually have to bother
looking up the surface state.

Together with the next patch, this improves performance in Car Chase on
an Icelake 8x8 (locked to 700Mhz) by 0.0445526% +/- 0.0132736% (n=832).

Reviewed-by: Caio Marcelo de Oliveira Filho <caio.oliveira@intel.com>
src/intel/compiler/brw_fs.cpp

index 086844ae43314d27f02e0c90fd1e914e2d4915f7..a677c8fd9689b8530ca9e069a5780e2e35cab8e5 100644 (file)
@@ -4494,6 +4494,9 @@ lower_fb_write_logical_send(const fs_builder &bld, fs_inst *inst,
           * in the extended message descriptor, in lieu of using a header.
           */
          ex_desc = inst->target << 12 | src0_alpha_present << 15;
+
+         if (key->nr_color_regions == 0)
+            ex_desc |= 1 << 20; /* Null Render Target */
       }
 
       inst->opcode = SHADER_OPCODE_SEND;