diff options
author | Samuel Pitoiset <samuel.pitoiset@gmail.com> | 2022-11-16 15:18:54 +0100 |
---|---|---|
committer | Marge Bot <emma+marge@anholt.net> | 2022-11-16 18:35:10 +0000 |
commit | bb90d29660bb44326188809da2deec0675c8264a (patch) | |
tree | e76312ef879afefc4d73fa64012c24a943b736f0 /src/amd/compiler/aco_validate.cpp | |
parent | e93de8a75e769a8f2d62947559f282f674d6eeb0 (diff) | |
download | mesa-bb90d29660bb44326188809da2deec0675c8264a.tar.gz |
aco: add p_dual_src_export_gfx11 for dual source blending on GFX11
Dual source blending must be in strict WQM mode.
Cc: 22.3 mesa-stable
Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Rhys Perry <pendingchaos02@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/19643>
Diffstat (limited to 'src/amd/compiler/aco_validate.cpp')
-rw-r--r-- | src/amd/compiler/aco_validate.cpp | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/src/amd/compiler/aco_validate.cpp b/src/amd/compiler/aco_validate.cpp index d0367e7ffee..b2aa99df1ac 100644 --- a/src/amd/compiler/aco_validate.cpp +++ b/src/amd/compiler/aco_validate.cpp @@ -262,6 +262,7 @@ validate_ir(Program* program) bool can_be_undef = is_phi(instr) || instr->isEXP() || instr->isReduction() || instr->opcode == aco_opcode::p_create_vector || instr->opcode == aco_opcode::p_jump_to_epilog || + instr->opcode == aco_opcode::p_dual_src_export_gfx11 || (instr->opcode == aco_opcode::p_interp_gfx11 && i == 0) || (flat && i == 1) || (instr->isMIMG() && (i == 1 || i == 2)) || ((instr->isMUBUF() || instr->isMTBUF()) && i == 1) || @@ -526,6 +527,26 @@ validate_ir(Program* program) instr->operands[i].isUndefined(), "Other operands of p_jump_to_epilog must be VGPRs or undef", instr.get()); } + } else if (instr->opcode == aco_opcode::p_dual_src_export_gfx11) { + check(instr->definitions.size() == 6, + "p_dual_src_export_gfx11 must have 6 definitions", instr.get()); + check(instr->definitions[2].getTemp().type() == RegType::vgpr && + instr->definitions[2].getTemp().size() == 1, + "Third definition of p_dual_src_export_gfx11 must be a v1", instr.get()); + check(instr->definitions[3].getTemp().type() == RegType::sgpr && + instr->definitions[3].getTemp().size() == 2, + "Fourth definition of p_dual_src_export_gfx11 must be a s2", instr.get()); + check(instr->definitions[4].physReg() == vcc, + "Fifth definition of p_dual_src_export_gfx11 must be vcc", instr.get()); + check(instr->definitions[5].physReg() == scc, + "Sixth definition of p_dual_src_export_gfx11 must be scc", instr.get()); + check(instr->operands.size() == 8, "p_dual_src_export_gfx11 must have 8 operands", + instr.get()); + for (unsigned i = 0; i < instr->operands.size(); i++) { + check(instr->operands[i].getTemp().type() == RegType::vgpr || + instr->operands[i].isUndefined(), + "Operands of p_dual_src_export_gfx11 must be VGPRs or undef", instr.get()); + } } break; } |