diff --git a/src/intel/compiler/brw_disasm.c b/src/intel/compiler/brw_disasm.c index 9e9fcc97154..6e3312ed5d7 100644 --- a/src/intel/compiler/brw_disasm.c +++ b/src/intel/compiler/brw_disasm.c @@ -1956,7 +1956,7 @@ brw_disassemble_inst(FILE *file, const struct intel_device_info *devinfo, case GFX6_SFID_DATAPORT_RENDER_CACHE: { /* aka BRW_SFID_DATAPORT_WRITE on Gfx4-5 */ - unsigned msg_type = brw_dp_write_desc_msg_type(devinfo, imm_desc); + unsigned msg_type = brw_fb_write_desc_msg_type(devinfo, imm_desc); err |= control(file, "DP rc message type", dp_rc_msg_type(devinfo), msg_type, &space); @@ -1970,18 +1970,18 @@ brw_disassemble_inst(FILE *file, const struct intel_device_info *devinfo, brw_inst_rt_message_type(devinfo, inst), &space); if (devinfo->ver >= 6 && brw_inst_rt_slot_group(devinfo, inst)) string(file, " Hi"); - if (brw_dp_write_desc_last_render_target(devinfo, imm_desc)) + if (brw_fb_write_desc_last_render_target(devinfo, imm_desc)) string(file, " LastRT"); if (devinfo->ver < 7 && - brw_dp_write_desc_write_commit(devinfo, imm_desc)) + brw_fb_write_desc_write_commit(devinfo, imm_desc)) string(file, " WriteCommit"); } else { format(file, " MsgCtrl = 0x%u", - brw_dp_write_desc_msg_control(devinfo, imm_desc)); + brw_fb_write_desc_msg_control(devinfo, imm_desc)); } format(file, " Surface = %u", - brw_dp_desc_binding_table_index(devinfo, imm_desc)); + brw_fb_desc_binding_table_index(devinfo, imm_desc)); break; } diff --git a/src/intel/compiler/brw_eu.h b/src/intel/compiler/brw_eu.h index 138eb2bd599..4d2197f1885 100644 --- a/src/intel/compiler/brw_eu.h +++ b/src/intel/compiler/brw_eu.h @@ -555,20 +555,18 @@ brw_dp_write_desc(const struct intel_device_info *devinfo, unsigned binding_table_index, unsigned msg_control, unsigned msg_type, - unsigned last_render_target, unsigned send_commit_msg) { assert(devinfo->ver <= 6 || !send_commit_msg); - if (devinfo->ver >= 6) + if (devinfo->ver >= 6) { return brw_dp_desc(devinfo, binding_table_index, msg_type, msg_control) | - SET_BITS(last_render_target, 12, 12) | SET_BITS(send_commit_msg, 17, 17); - else + } else { return (SET_BITS(binding_table_index, 7, 0) | SET_BITS(msg_control, 11, 8) | - SET_BITS(last_render_target, 11, 11) | SET_BITS(msg_type, 14, 12) | SET_BITS(send_commit_msg, 15, 15)); + } } static inline unsigned @@ -591,16 +589,6 @@ brw_dp_write_desc_msg_control(const struct intel_device_info *devinfo, return GET_BITS(desc, 11, 8); } -static inline bool -brw_dp_write_desc_last_render_target(const struct intel_device_info *devinfo, - uint32_t desc) -{ - if (devinfo->ver >= 6) - return GET_BITS(desc, 12, 12); - else - return GET_BITS(desc, 11, 11); -} - static inline bool brw_dp_write_desc_write_commit(const struct intel_device_info *devinfo, uint32_t desc) @@ -1025,6 +1013,130 @@ brw_dp_typed_surface_rw_desc(const struct intel_device_info *devinfo, return brw_dp_surface_desc(devinfo, msg_type, msg_control); } +static inline uint32_t +brw_fb_desc(const struct intel_device_info *devinfo, + unsigned binding_table_index, + unsigned msg_type, + unsigned msg_control) +{ + /* Prior to gen6, things are too inconsistent; use the fb_(read|write)_desc + * helpers instead. + */ + assert(devinfo->ver >= 6); + const unsigned desc = SET_BITS(binding_table_index, 7, 0); + if (devinfo->ver >= 7) { + return (desc | SET_BITS(msg_control, 13, 8) | + SET_BITS(msg_type, 17, 14)); + } else { + return (desc | SET_BITS(msg_control, 12, 8) | + SET_BITS(msg_type, 16, 13)); + } +} + +static inline unsigned +brw_fb_desc_binding_table_index(UNUSED const struct intel_device_info *devinfo, + uint32_t desc) +{ + return GET_BITS(desc, 7, 0); +} + +static inline uint32_t +brw_fb_desc_msg_control(const struct intel_device_info *devinfo, uint32_t desc) +{ + assert(devinfo->ver >= 6); + if (devinfo->ver >= 7) + return GET_BITS(desc, 13, 8); + else + return GET_BITS(desc, 12, 8); +} + +static inline unsigned +brw_fb_desc_msg_type(const struct intel_device_info *devinfo, uint32_t desc) +{ + assert(devinfo->ver >= 6); + if (devinfo->ver >= 7) + return GET_BITS(desc, 17, 14); + else + return GET_BITS(desc, 16, 13); +} + +static inline uint32_t +brw_fb_read_desc(const struct intel_device_info *devinfo, + unsigned binding_table_index, + unsigned msg_control, + unsigned exec_size, + bool per_sample) +{ + assert(devinfo->ver >= 9); + return brw_fb_desc(devinfo, binding_table_index, + GFX9_DATAPORT_RC_RENDER_TARGET_READ, msg_control) | + SET_BITS(per_sample, 13, 13) | + SET_BITS(exec_size == 16, 8, 8) /* Render Target Message Subtype */; +} + +static inline uint32_t +brw_fb_write_desc(const struct intel_device_info *devinfo, + unsigned binding_table_index, + unsigned msg_control, + bool last_render_target) +{ + const unsigned msg_type = + devinfo->ver >= 6 ? + GFX6_DATAPORT_WRITE_MESSAGE_RENDER_TARGET_WRITE : + BRW_DATAPORT_WRITE_MESSAGE_RENDER_TARGET_WRITE; + + if (devinfo->ver >= 6) { + return brw_fb_desc(devinfo, binding_table_index, msg_type, msg_control) | + SET_BITS(last_render_target, 12, 12); + } else { + return (SET_BITS(binding_table_index, 7, 0) | + SET_BITS(msg_control, 11, 8) | + SET_BITS(last_render_target, 11, 11) | + SET_BITS(msg_type, 14, 12)); + } +} + +static inline unsigned +brw_fb_write_desc_msg_type(const struct intel_device_info *devinfo, + uint32_t desc) +{ + if (devinfo->ver >= 6) + return brw_fb_desc_msg_type(devinfo, desc); + else + return GET_BITS(desc, 14, 12); +} + +static inline unsigned +brw_fb_write_desc_msg_control(const struct intel_device_info *devinfo, + uint32_t desc) +{ + if (devinfo->ver >= 6) + return brw_fb_desc_msg_control(devinfo, desc); + else + return GET_BITS(desc, 11, 8); +} + +static inline bool +brw_fb_write_desc_last_render_target(const struct intel_device_info *devinfo, + uint32_t desc) +{ + if (devinfo->ver >= 6) + return GET_BITS(desc, 12, 12); + else + return GET_BITS(desc, 11, 11); +} + +static inline bool +brw_fb_write_desc_write_commit(const struct intel_device_info *devinfo, + uint32_t desc) +{ + assert(devinfo->ver <= 6); + if (devinfo->ver >= 6) + return GET_BITS(desc, 17, 17); + else + return GET_BITS(desc, 15, 15); +} + static inline uint32_t brw_mdc_sm2(unsigned exec_size) { diff --git a/src/intel/compiler/brw_eu_emit.c b/src/intel/compiler/brw_eu_emit.c index 4404a79642f..fbe6c31168a 100644 --- a/src/intel/compiler/brw_eu_emit.c +++ b/src/intel/compiler/brw_eu_emit.c @@ -2224,8 +2224,7 @@ void brw_oword_block_write_scratch(struct brw_codegen *p, brw_message_desc(devinfo, mlen, send_commit_msg, true) | brw_dp_write_desc(devinfo, brw_scratch_surface_idx(p), BRW_DATAPORT_OWORD_BLOCK_DWORDS(num_regs * 8), - msg_type, 0, /* not a render target */ - send_commit_msg)); + msg_type, send_commit_msg)); } } @@ -2434,7 +2433,6 @@ brw_fb_WRITE(struct brw_codegen *p, (devinfo->ver >= 6 ? GFX6_SFID_DATAPORT_RENDER_CACHE : BRW_SFID_DATAPORT_WRITE); brw_inst *insn; - unsigned msg_type; struct brw_reg dest, src0; if (brw_get_default_exec_size(p) >= BRW_EXECUTE_16) @@ -2453,14 +2451,10 @@ brw_fb_WRITE(struct brw_codegen *p, if (devinfo->ver >= 6) { /* headerless version, just submit color payload */ src0 = payload; - - msg_type = GFX6_DATAPORT_WRITE_MESSAGE_RENDER_TARGET_WRITE; } else { assert(payload.file == BRW_MESSAGE_REGISTER_FILE); brw_inst_set_base_mrf(devinfo, insn, payload.nr); src0 = implied_header; - - msg_type = BRW_DATAPORT_WRITE_MESSAGE_RENDER_TARGET_WRITE; } brw_set_dest(p, insn, dest); @@ -2468,9 +2462,8 @@ brw_fb_WRITE(struct brw_codegen *p, brw_set_desc(p, insn, brw_message_desc(devinfo, msg_length, response_length, header_present) | - brw_dp_write_desc(devinfo, binding_table_index, msg_control, - msg_type, last_render_target, - 0 /* send_commit_msg */)); + brw_fb_write_desc(devinfo, binding_table_index, msg_control, + last_render_target)); brw_inst_set_eot(devinfo, insn, eot); return insn; @@ -2487,8 +2480,6 @@ gfx9_fb_READ(struct brw_codegen *p, { const struct intel_device_info *devinfo = p->devinfo; assert(devinfo->ver >= 9); - const unsigned msg_subtype = - brw_get_default_exec_size(p) == BRW_EXECUTE_16 ? 0 : 1; brw_inst *insn = next_insn(p, BRW_OPCODE_SENDC); brw_inst_set_sfid(devinfo, insn, GFX6_SFID_DATAPORT_RENDER_CACHE); @@ -2497,10 +2488,8 @@ gfx9_fb_READ(struct brw_codegen *p, brw_set_desc( p, insn, brw_message_desc(devinfo, msg_length, response_length, true) | - brw_dp_read_desc(devinfo, binding_table_index, - per_sample << 5 | msg_subtype, - GFX9_DATAPORT_RC_RENDER_TARGET_READ, - BRW_DATAPORT_READ_TARGET_RENDER_CACHE)); + brw_fb_read_desc(devinfo, binding_table_index, 0 /* msg_control */, + brw_get_default_exec_size(p), per_sample)); brw_inst_set_rt_slot_group(devinfo, insn, brw_get_default_group(p) / 16); return insn; @@ -3094,7 +3083,6 @@ brw_svb_write(struct brw_codegen *p, brw_dp_write_desc(devinfo, binding_table_index, 0, /* msg_control: ignored */ GFX6_DATAPORT_WRITE_MESSAGE_STREAMED_VB_WRITE, - 0, /* last_render_target: ignored */ send_commit_msg)); /* send_commit_msg */ } diff --git a/src/intel/compiler/brw_fs.cpp b/src/intel/compiler/brw_fs.cpp index 4e3476f9405..0a4dfa90112 100644 --- a/src/intel/compiler/brw_fs.cpp +++ b/src/intel/compiler/brw_fs.cpp @@ -4663,9 +4663,7 @@ lower_fb_write_logical_send(const fs_builder &bld, fs_inst *inst, inst->desc = (inst->group / 16) << 11 | /* rt slot group */ - brw_dp_write_desc(devinfo, inst->target, msg_ctl, - GFX6_DATAPORT_WRITE_MESSAGE_RENDER_TARGET_WRITE, - inst->last_rt, false); + brw_fb_write_desc(devinfo, inst->target, msg_ctl, inst->last_rt); uint32_t ex_desc = 0; if (devinfo->ver >= 11) { diff --git a/src/intel/compiler/brw_fs_reg_allocate.cpp b/src/intel/compiler/brw_fs_reg_allocate.cpp index 992aaa6c2c6..06ea3632b2b 100644 --- a/src/intel/compiler/brw_fs_reg_allocate.cpp +++ b/src/intel/compiler/brw_fs_reg_allocate.cpp @@ -969,7 +969,6 @@ fs_reg_alloc::emit_spill(const fs_builder &bld, fs_reg src, brw_dp_write_desc(devinfo, GFX8_BTI_STATELESS_NON_COHERENT, BRW_DATAPORT_OWORD_BLOCK_DWORDS(reg_size * 8), GFX6_DATAPORT_WRITE_MESSAGE_OWORD_BLOCK_WRITE, - 0 /* not a render target */, false /* send_commit_msg */); } else { spill_inst = bld.emit(SHADER_OPCODE_GFX4_SCRATCH_WRITE, diff --git a/src/intel/compiler/brw_vec4_generator.cpp b/src/intel/compiler/brw_vec4_generator.cpp index 055aaf6f9e5..e23312a7550 100644 --- a/src/intel/compiler/brw_vec4_generator.cpp +++ b/src/intel/compiler/brw_vec4_generator.cpp @@ -1259,7 +1259,6 @@ generate_scratch_write(struct brw_codegen *p, brw_scratch_surface_idx(p), BRW_DATAPORT_OWORD_DUAL_BLOCK_1OWORD, msg_type, - false, /* not a render target write */ write_commit)); }