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);
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;
}
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
}
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)
{
}
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)
{
assert(exec_size == 8 || exec_size == 16);
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));
}
}
(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)
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);
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;
{
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);
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;
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 */
}