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.pohjolai...@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 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev