[Mesa-dev] [PATCH 6/9] i965: compile non-replicated blorp clear program with fs generator

Topi Pohjolainen topi.pohjolainen at intel.com
Wed Nov 27 13:13:17 PST 2013


I forced the non-replicated compilation unconditionally by
fixing 'use_simd16_replicated_data' to 'false' and saw no
regressions on Ivy Bridge. I also checked the eu-instruction
dump before and after, and they were identical:

0x00000000: mov(16)   g114<1>F  g2<0,1,0>F    { align1 WE_normal 1H };
0x00000010: mov(16)   g116<1>F  g2.1<0,1,0>F  { align1 WE_normal 1H };
0x00000020: mov(16)   g118<1>F  g2.2<0,1,0>F  { align1 WE_normal 1H };
0x00000030: mov(16)   g120<1>F  g2.3<0,1,0>F  { align1 WE_normal 1H };
0x00000040: sendc(16)  null      g114<8,8,1>F
  render ( RT write, 1, 0, 12) mlen 8 rlen 0  { align1 WE_normal 1H EOT };

The dump isn't available anymore with "blorp" option but with "fs".

Signed-off-by: Topi Pohjolainen <topi.pohjolainen at intel.com>
---
 src/mesa/drivers/dri/i965/brw_blorp_clear.cpp | 27 ++++++++++++++++++++-------
 1 file changed, 20 insertions(+), 7 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/brw_blorp_clear.cpp b/src/mesa/drivers/dri/i965/brw_blorp_clear.cpp
index d25c6cb..03614ea 100644
--- a/src/mesa/drivers/dri/i965/brw_blorp_clear.cpp
+++ b/src/mesa/drivers/dri/i965/brw_blorp_clear.cpp
@@ -36,6 +36,7 @@ extern "C" {
 #include "brw_context.h"
 #include "brw_eu.h"
 #include "brw_state.h"
+#include "brw_fs.h"
 
 #define FILE_DEBUG_FLAG DEBUG_BLORP
 
@@ -367,12 +368,17 @@ const GLuint *
 brw_blorp_const_color_program::compile(struct brw_context *brw,
                                        GLuint *program_size)
 {
+   exec_list instructions;
+   fs_inst *inst;
+
    /* Set up prog_data */
    memset(&prog_data, 0, sizeof(prog_data));
    prog_data.persample_msaa_dispatch = false;
    /* R0-1: masks, pixel X/Y coordinates. */
    prog_data.first_curbe_grf = 2;
 
+   struct brw_wm_compile *c = rzalloc(mem_ctx, struct brw_wm_compile);
+
    alloc_regs();
 
    brw_set_compression_control(&func, BRW_COMPRESSION_NONE);
@@ -396,15 +402,22 @@ brw_blorp_const_color_program::compile(struct brw_context *brw,
          /* The message payload is pairs of registers for 16 pixels each of r,
           * g, b, and a.
           */
-         brw_set_compression_control(&func, BRW_COMPRESSION_COMPRESSED);
-         brw_MOV(&func,
-                 brw_message_reg(base_mrf + i * 2),
-                 brw_vec1_grf(clear_rgba.nr, i));
-         brw_set_compression_control(&func, BRW_COMPRESSION_NONE);
+         instructions.push_tail(new (mem_ctx) fs_inst(
+            BRW_OPCODE_MOV,
+            fs_reg(MRF, base_mrf + i * 2),
+            fs_reg(brw_vec1_grf(prog_data.first_curbe_grf, i))));
       }
 
-      msg_type = BRW_DATAPORT_RENDER_TARGET_WRITE_SIMD16_SINGLE_SOURCE;
-      mlen = 8;
+      inst = new (mem_ctx) fs_inst(FS_OPCODE_FB_WRITE);
+      inst->eot = true;
+      inst->base_mrf = base_mrf;
+      inst->mlen = 8;
+      inst->target = BRW_BLORP_RENDERBUFFER_BINDING_TABLE_INDEX;
+
+      instructions.push_tail(inst);
+
+      return fs_generator(brw, c, NULL, NULL, false).generate_assembly(
+               NULL, &instructions, program_size);
    }
 
    /* Now write to the render target and terminate the thread */
-- 
1.8.3.1



More information about the mesa-dev mailing list