recompiler: added support for discard on export with masked EXEC

This commit is contained in:
psucien 2024-07-13 14:40:39 +02:00
parent 1b94f07a6a
commit f041276b04
12 changed files with 47 additions and 5 deletions

View file

@ -149,6 +149,8 @@ public:
std::array<Value, NumScalarRegs> ssa_sreg_values;
std::array<Value, NumVectorRegs> ssa_vreg_values;
bool has_multiple_predecessors{false};
private:
/// Memory pool for instruction list
ObjectPool<Inst>* inst_pool;

View file

@ -115,6 +115,10 @@ void IREmitter::Discard() {
Inst(Opcode::Discard);
}
void IREmitter::Discard(const U1& cond) {
Inst(Opcode::DiscardCond, cond);
}
void IREmitter::Barrier() {
Inst(Opcode::Barrier);
}

View file

@ -42,6 +42,7 @@ public:
void Prologue();
void Epilogue();
void Discard();
void Discard(const U1& cond);
void Barrier();
void WorkgroupMemoryBarrier();

View file

@ -49,6 +49,7 @@ bool Inst::MayHaveSideEffects() const noexcept {
case Opcode::Prologue:
case Opcode::Epilogue:
case Opcode::Discard:
case Opcode::DiscardCond:
case Opcode::SetAttribute:
case Opcode::StoreBufferF32:
case Opcode::StoreBufferF32x2:

View file

@ -13,6 +13,7 @@ OPCODE(PhiMove, Void, Opaq
OPCODE(Prologue, Void, )
OPCODE(Epilogue, Void, )
OPCODE(Discard, Void, )
OPCODE(DiscardCond, Void, U1, )
// Constant memory operations
OPCODE(ReadConst, U32, U32x2, U32, )

View file

@ -37,6 +37,7 @@ void Visit(Info& info, IR::Inst& inst) {
info.uses_group_quad = true;
break;
case IR::Opcode::Discard:
case IR::Opcode::DiscardCond:
info.has_discard = true;
break;
case IR::Opcode::ImageGather: