[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