mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-24 13:10:10 +01:00
intel/brw: Plumb through generator whether SEND is gather variant
Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com> Reviewed-by: Kenneth Graunke <kenneth@whitecape.org> Reviewed-by: Lionel Landwerlin <None> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/32410>
This commit is contained in:
parent
00fac79f99
commit
2fca22347c
3 changed files with 26 additions and 17 deletions
|
|
@ -1430,7 +1430,8 @@ brw_send_indirect_message(struct brw_codegen *p,
|
|||
struct brw_reg dst,
|
||||
struct brw_reg payload,
|
||||
struct brw_reg desc,
|
||||
bool eot);
|
||||
bool eot,
|
||||
bool gather);
|
||||
|
||||
void
|
||||
brw_send_indirect_split_message(struct brw_codegen *p,
|
||||
|
|
@ -1442,7 +1443,8 @@ brw_send_indirect_split_message(struct brw_codegen *p,
|
|||
struct brw_reg ex_desc,
|
||||
unsigned ex_mlen,
|
||||
bool ex_bso,
|
||||
bool eot);
|
||||
bool eot,
|
||||
bool gather);
|
||||
|
||||
void gfx6_math(struct brw_codegen *p,
|
||||
struct brw_reg dest,
|
||||
|
|
@ -1552,12 +1554,12 @@ brw_num_sources_from_inst(const struct brw_isa_info *isa,
|
|||
void brw_set_src1(struct brw_codegen *p, brw_eu_inst *insn, struct brw_reg reg);
|
||||
|
||||
void brw_set_desc_ex(struct brw_codegen *p, brw_eu_inst *insn,
|
||||
unsigned desc, unsigned ex_desc);
|
||||
unsigned desc, unsigned ex_desc, bool gather);
|
||||
|
||||
static inline void
|
||||
brw_set_desc(struct brw_codegen *p, brw_eu_inst *insn, unsigned desc)
|
||||
brw_set_desc(struct brw_codegen *p, brw_eu_inst *insn, unsigned desc, bool gather)
|
||||
{
|
||||
brw_set_desc_ex(p, insn, desc, 0);
|
||||
brw_set_desc_ex(p, insn, desc, 0, gather);
|
||||
}
|
||||
|
||||
void brw_set_uip_jip(struct brw_codegen *p, int start_offset);
|
||||
|
|
|
|||
|
|
@ -353,9 +353,10 @@ brw_set_src1(struct brw_codegen *p, brw_eu_inst *inst, struct brw_reg reg)
|
|||
*/
|
||||
void
|
||||
brw_set_desc_ex(struct brw_codegen *p, brw_eu_inst *inst,
|
||||
unsigned desc, unsigned ex_desc)
|
||||
unsigned desc, unsigned ex_desc, bool gather)
|
||||
{
|
||||
const struct intel_device_info *devinfo = p->devinfo;
|
||||
assert(!gather || devinfo->ver >= 30);
|
||||
assert(brw_eu_inst_opcode(p->isa, inst) == BRW_OPCODE_SEND ||
|
||||
brw_eu_inst_opcode(p->isa, inst) == BRW_OPCODE_SENDC);
|
||||
if (devinfo->ver < 12)
|
||||
|
|
@ -363,7 +364,7 @@ brw_set_desc_ex(struct brw_codegen *p, brw_eu_inst *inst,
|
|||
IMM, BRW_TYPE_UD);
|
||||
brw_eu_inst_set_send_desc(devinfo, inst, desc);
|
||||
if (devinfo->ver >= 9)
|
||||
brw_eu_inst_set_send_ex_desc(devinfo, inst, ex_desc, false);
|
||||
brw_eu_inst_set_send_ex_desc(devinfo, inst, ex_desc, gather);
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
@ -1438,7 +1439,8 @@ brw_send_indirect_message(struct brw_codegen *p,
|
|||
struct brw_reg dst,
|
||||
struct brw_reg payload,
|
||||
struct brw_reg desc,
|
||||
bool eot)
|
||||
bool eot,
|
||||
bool gather)
|
||||
{
|
||||
const struct intel_device_info *devinfo = p->devinfo;
|
||||
struct brw_eu_inst *send;
|
||||
|
|
@ -1450,7 +1452,7 @@ brw_send_indirect_message(struct brw_codegen *p,
|
|||
if (desc.file == IMM) {
|
||||
send = next_insn(p, BRW_OPCODE_SEND);
|
||||
brw_set_src0(p, send, retype(payload, BRW_TYPE_UD));
|
||||
brw_set_desc(p, send, desc.ud);
|
||||
brw_set_desc(p, send, desc.ud, gather);
|
||||
} else {
|
||||
assert(desc.file == ADDRESS);
|
||||
assert(desc.subnr == 0);
|
||||
|
|
@ -1477,7 +1479,8 @@ brw_send_indirect_split_message(struct brw_codegen *p,
|
|||
struct brw_reg ex_desc,
|
||||
unsigned ex_mlen,
|
||||
bool ex_bso,
|
||||
bool eot)
|
||||
bool eot,
|
||||
bool gather)
|
||||
{
|
||||
const struct intel_device_info *devinfo = p->devinfo;
|
||||
struct brw_eu_inst *send;
|
||||
|
|
@ -1502,7 +1505,7 @@ brw_send_indirect_split_message(struct brw_codegen *p,
|
|||
|
||||
if (ex_desc.file == IMM) {
|
||||
brw_eu_inst_set_send_sel_reg32_ex_desc(devinfo, send, 0);
|
||||
brw_eu_inst_set_sends_ex_desc(devinfo, send, ex_desc.ud, false);
|
||||
brw_eu_inst_set_sends_ex_desc(devinfo, send, ex_desc.ud, gather);
|
||||
} else {
|
||||
assert(ex_desc.file == ADDRESS);
|
||||
assert((ex_desc.subnr & 0x3) == 0);
|
||||
|
|
@ -1695,7 +1698,7 @@ brw_set_memory_fence_message(struct brw_codegen *p,
|
|||
const struct intel_device_info *devinfo = p->devinfo;
|
||||
|
||||
brw_set_desc(p, insn, brw_message_desc(
|
||||
devinfo, 1, (commit_enable ? 1 : 0), true));
|
||||
devinfo, 1, (commit_enable ? 1 : 0), true), false);
|
||||
|
||||
brw_eu_inst_set_sfid(devinfo, insn, sfid);
|
||||
|
||||
|
|
@ -1735,7 +1738,8 @@ gfx12_set_memory_fence_message(struct brw_codegen *p,
|
|||
*/
|
||||
if (sfid == BRW_SFID_URB && p->devinfo->ver < 20) {
|
||||
brw_set_desc(p, insn, brw_urb_fence_desc(p->devinfo) |
|
||||
brw_message_desc(p->devinfo, mlen, rlen, true));
|
||||
brw_message_desc(p->devinfo, mlen, rlen, true),
|
||||
false);
|
||||
} else {
|
||||
enum lsc_fence_scope scope = lsc_fence_msg_desc_scope(p->devinfo, desc);
|
||||
enum lsc_flush_type flush_type = lsc_fence_msg_desc_flush_type(p->devinfo, desc);
|
||||
|
|
@ -1764,7 +1768,8 @@ gfx12_set_memory_fence_message(struct brw_codegen *p,
|
|||
|
||||
brw_set_desc(p, insn, lsc_fence_msg_desc(p->devinfo, scope,
|
||||
flush_type, false) |
|
||||
brw_message_desc(p->devinfo, mlen, rlen, false));
|
||||
brw_message_desc(p->devinfo, mlen, rlen, false),
|
||||
false);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1942,7 +1947,7 @@ brw_barrier(struct brw_codegen *p, struct brw_reg src)
|
|||
brw_set_src0(p, inst, src);
|
||||
brw_set_src1(p, inst, brw_null_reg());
|
||||
brw_set_desc(p, inst, brw_message_desc(devinfo,
|
||||
1 * reg_unit(devinfo), 0, false));
|
||||
1 * reg_unit(devinfo), 0, false), false);
|
||||
|
||||
brw_eu_inst_set_sfid(devinfo, inst, BRW_SFID_MESSAGE_GATEWAY);
|
||||
brw_eu_inst_set_gateway_subfuncid(devinfo, inst,
|
||||
|
|
|
|||
|
|
@ -168,8 +168,10 @@ brw_generator::generate_send(fs_inst *inst,
|
|||
struct brw_reg payload,
|
||||
struct brw_reg payload2)
|
||||
{
|
||||
const bool gather = false;
|
||||
|
||||
if (ex_desc.file == IMM && ex_desc.ud == 0) {
|
||||
brw_send_indirect_message(p, inst->sfid, dst, payload, desc, inst->eot);
|
||||
brw_send_indirect_message(p, inst->sfid, dst, payload, desc, inst->eot, gather);
|
||||
if (inst->check_tdr)
|
||||
brw_eu_inst_set_opcode(p->isa, brw_last_inst, BRW_OPCODE_SENDC);
|
||||
} else {
|
||||
|
|
@ -178,7 +180,7 @@ brw_generator::generate_send(fs_inst *inst,
|
|||
*/
|
||||
brw_send_indirect_split_message(p, inst->sfid, dst, payload, payload2,
|
||||
desc, ex_desc, inst->ex_mlen,
|
||||
inst->send_ex_bso, inst->eot);
|
||||
inst->send_ex_bso, inst->eot, gather);
|
||||
if (inst->check_tdr)
|
||||
brw_eu_inst_set_opcode(p->isa, brw_last_inst,
|
||||
devinfo->ver >= 12 ? BRW_OPCODE_SENDC : BRW_OPCODE_SENDSC);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue