}
if (ex_desc.file == BRW_IMMEDIATE_VALUE &&
- (devinfo->gen >= 12 || (ex_desc.ud & INTEL_MASK(15, 12)) == 0)) {
+ (devinfo->gen >= 12 ||
+ ((ex_desc.ud | ex_desc_imm) & INTEL_MASK(15, 12)) == 0)) {
ex_desc.ud |= ex_desc_imm;
} else {
const struct tgl_swsb swsb = brw_get_default_swsb(p);
load->dst = payload;
uint32_t msg_ctl = brw_fb_write_msg_control(inst, prog_data);
- uint32_t ex_desc = 0;
inst->desc =
(inst->group / 16) << 11 | /* rt slot group */
GEN6_DATAPORT_WRITE_MESSAGE_RENDER_TARGET_WRITE,
inst->last_rt, false);
+ uint32_t ex_desc = 0;
if (devinfo->gen >= 11) {
/* Set the "Render Target Index" and "Src0 Alpha Present" fields
* in the extended message descriptor, in lieu of using a header.
if (key->nr_color_regions == 0)
ex_desc |= 1 << 20; /* Null Render Target */
}
+ inst->ex_desc = ex_desc;
inst->opcode = SHADER_OPCODE_SEND;
inst->resize_sources(3);
inst->sfid = GEN6_SFID_DATAPORT_RENDER_CACHE;
- inst->src[0] = brw_imm_ud(inst->desc);
- inst->src[1] = brw_imm_ud(ex_desc);
+ inst->src[0] = brw_imm_ud(0);
+ inst->src[1] = brw_imm_ud(0);
inst->src[2] = payload;
inst->mlen = regs_written(load);
inst->ex_mlen = 0;
uint32_t desc_imm = inst->desc |
brw_message_desc(devinfo, inst->mlen, rlen, inst->header_size);
- uint32_t ex_desc_imm = brw_message_ex_desc(devinfo, inst->ex_mlen);
+ uint32_t ex_desc_imm = inst->ex_desc |
+ brw_message_ex_desc(devinfo, inst->ex_mlen);
if (ex_desc.file != BRW_IMMEDIATE_VALUE || ex_desc.ud || ex_desc_imm) {
/* If we have any sort of extended descriptor, then we need SENDS. This
uint8_t target; /**< MRT target. */
uint8_t sfid; /**< SFID for SEND instructions */
uint32_t desc; /**< SEND[S] message descriptor immediate */
+ uint32_t ex_desc; /**< SEND[S] extended message descriptor immediate */
unsigned size_written; /**< Data written to the destination register in bytes. */
enum opcode opcode; /* BRW_OPCODE_* or FS_OPCODE_* */