aco: add support for s_sendmsg_rtn_b{32,64}

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Rhys Perry <pendingchaos02@gmail.com>
Reviewed-by: Georg Lehmann <dadschoorse@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/19267>
This commit is contained in:
Samuel Pitoiset
2022-10-24 02:14:24 +00:00
parent 3a3df9acda
commit 6630b6e2aa
3 changed files with 20 additions and 2 deletions
+8
View File
@@ -716,6 +716,14 @@ gen(Instruction* instr, wait_ctx& ctx)
update_counters(ctx, event_sendmsg);
break;
}
case Format::SOP1: {
if (instr->opcode == aco_opcode::s_sendmsg_rtn_b32 ||
instr->opcode == aco_opcode::s_sendmsg_rtn_b64) {
update_counters(ctx, event_sendmsg);
insert_wait_entry(ctx, instr->definitions[0], event_sendmsg);
}
break;
}
default: break;
}
}
@@ -202,6 +202,12 @@ struct InstrPred {
}
switch (a->format) {
case Format::SOP1: {
if (a->opcode == aco_opcode::s_sendmsg_rtn_b32 ||
a->opcode == aco_opcode::s_sendmsg_rtn_b64)
return false;
return true;
}
case Format::SOPK: {
if (a->opcode == aco_opcode::s_getreg_b32)
return false;
+6 -2
View File
@@ -568,7 +568,8 @@ perform_hazard_query(hazard_query* query, Instruction* instr, bool upwards)
/* don't move non-reorderable instructions */
if (instr->opcode == aco_opcode::s_memtime || instr->opcode == aco_opcode::s_memrealtime ||
instr->opcode == aco_opcode::s_setprio || instr->opcode == aco_opcode::s_getreg_b32 ||
instr->opcode == aco_opcode::p_init_scratch || instr->opcode == aco_opcode::p_jump_to_epilog)
instr->opcode == aco_opcode::p_init_scratch || instr->opcode == aco_opcode::p_jump_to_epilog ||
instr->opcode == aco_opcode::s_sendmsg_rtn_b32 || instr->opcode == aco_opcode::s_sendmsg_rtn_b64)
return hazard_fail_unreorderable;
memory_event_set instr_set;
@@ -644,7 +645,10 @@ schedule_SMEM(sched_ctx& ctx, Block* block, std::vector<RegisterDemand>& registe
int16_t k = 0;
/* don't move s_memtime/s_memrealtime */
if (current->opcode == aco_opcode::s_memtime || current->opcode == aco_opcode::s_memrealtime)
if (current->opcode == aco_opcode::s_memtime ||
current->opcode == aco_opcode::s_memrealtime ||
current->opcode == aco_opcode::s_sendmsg_rtn_b32 ||
current->opcode == aco_opcode::s_sendmsg_rtn_b64)
return;
/* first, check if we have instructions before current to move down */