mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-08 00:28:51 +02:00
aco: execute branch instructions in WQM if necessary
It could happen that only the branch condition was computed in WQM and not the branch instruction. There is now some rendundancy which should be cleaned up. Fixes:3817fa7a4d('aco: fix WQM handling in nested loops') Reviewed-by: Rhys Perry <pendingchaos02@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6260> (cherry picked from commitfdb97d3d29)
This commit is contained in:
parent
ee63146f37
commit
b454e44579
2 changed files with 6 additions and 7 deletions
|
|
@ -4,7 +4,7 @@
|
|||
"description": "aco: execute branch instructions in WQM if necessary",
|
||||
"nominated": true,
|
||||
"nomination_type": 1,
|
||||
"resolution": 0,
|
||||
"resolution": 1,
|
||||
"master_sha": null,
|
||||
"because_sha": "3817fa7a4d1f51c385b28a2e45a1edf227526028"
|
||||
},
|
||||
|
|
|
|||
|
|
@ -165,12 +165,6 @@ void mark_block_wqm(wqm_ctx &ctx, unsigned block_idx)
|
|||
|
||||
ctx.branch_wqm[block_idx] = true;
|
||||
Block& block = ctx.program->blocks[block_idx];
|
||||
aco_ptr<Instruction>& branch = block.instructions.back();
|
||||
|
||||
if (branch->opcode != aco_opcode::p_branch) {
|
||||
assert(!branch->operands.empty() && branch->operands[0].isTemp());
|
||||
set_needs_wqm(ctx, branch->operands[0].getTemp());
|
||||
}
|
||||
|
||||
/* TODO: this sets more branch conditions to WQM than it needs to
|
||||
* it should be enough to stop at the "exec mask top level" */
|
||||
|
|
@ -233,6 +227,11 @@ void get_block_needs(wqm_ctx &ctx, exec_ctx &exec_ctx, Block* block)
|
|||
}
|
||||
}
|
||||
|
||||
if (instr->format == Format::PSEUDO_BRANCH && ctx.branch_wqm[block->index]) {
|
||||
needs = WQM;
|
||||
propagate_wqm = true;
|
||||
}
|
||||
|
||||
if (propagate_wqm) {
|
||||
for (const Operand& op : instr->operands) {
|
||||
if (op.isTemp()) {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue