diff options
author | Jason Ekstrand <[email protected]> | 2014-09-16 15:16:20 -0700 |
---|---|---|
committer | Jason Ekstrand <[email protected]> | 2014-09-30 10:29:15 -0700 |
commit | 8b0e4b387a2aeb28e32df5b680013338a841859b (patch) | |
tree | 924aefd9f335f28c22736fae1735e7a554f7032c /src/mesa/drivers/dri/i965/brw_eu_emit.c | |
parent | 9e1f52a6e2b0277de063a8d8b07c5e520795a23b (diff) |
i965/fs: Add a an optional source to the FS_OPCODE_FB_WRITE instruction
Previously, we were use the base_mrf parameter of fs_inst to store the MRF
location. In preparation for doing FB writes from the GRF, we now also
allow you to set inst->base_mrf to -1 and provide a source register.
Signed-off-by: Jason Ekstrand <[email protected]>
Reviewed-by: Matt Turner <[email protected]>
Diffstat (limited to 'src/mesa/drivers/dri/i965/brw_eu_emit.c')
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_eu_emit.c | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_eu_emit.c b/src/mesa/drivers/dri/i965/brw_eu_emit.c index da3c31623db..8f748ee2aad 100644 --- a/src/mesa/drivers/dri/i965/brw_eu_emit.c +++ b/src/mesa/drivers/dri/i965/brw_eu_emit.c @@ -2251,8 +2251,8 @@ void brw_oword_block_read(struct brw_compile *p, void brw_fb_WRITE(struct brw_compile *p, int dispatch_width, - unsigned msg_reg_nr, - struct brw_reg src0, + struct brw_reg payload, + struct brw_reg implied_header, unsigned msg_control, unsigned binding_table_index, unsigned msg_length, @@ -2263,7 +2263,7 @@ void brw_fb_WRITE(struct brw_compile *p, struct brw_context *brw = p->brw; brw_inst *insn; unsigned msg_type; - struct brw_reg dest; + struct brw_reg dest, src0; if (dispatch_width == 16) dest = retype(vec16(brw_null_reg()), BRW_REGISTER_TYPE_UW); @@ -2279,11 +2279,13 @@ void brw_fb_WRITE(struct brw_compile *p, if (brw->gen >= 6) { /* headerless version, just submit color payload */ - src0 = brw_message_reg(msg_reg_nr); + src0 = payload; msg_type = GEN6_DATAPORT_WRITE_MESSAGE_RENDER_TARGET_WRITE; } else { - brw_inst_set_base_mrf(brw, insn, msg_reg_nr); + assert(payload.file == BRW_MESSAGE_REGISTER_FILE); + brw_inst_set_base_mrf(brw, insn, payload.nr); + src0 = implied_header; msg_type = BRW_DATAPORT_WRITE_MESSAGE_RENDER_TARGET_WRITE; } |