GLSL 4.6: Implement atomic counter ops and SPV_KHR_shader_atomic_counter_ops.
This commit is contained in:
parent
de16e52b25
commit
0d0c6d38f0
10 changed files with 202 additions and 8 deletions
|
|
@ -420,6 +420,15 @@ enum TOperator {
|
|||
EOpAtomicCounterIncrement,
|
||||
EOpAtomicCounterDecrement,
|
||||
EOpAtomicCounter,
|
||||
EOpAtomicCounterAdd,
|
||||
EOpAtomicCounterSubtract,
|
||||
EOpAtomicCounterMin,
|
||||
EOpAtomicCounterMax,
|
||||
EOpAtomicCounterAnd,
|
||||
EOpAtomicCounterOr,
|
||||
EOpAtomicCounterXor,
|
||||
EOpAtomicCounterExchange,
|
||||
EOpAtomicCounterCompSwap,
|
||||
|
||||
EOpAny,
|
||||
EOpAll,
|
||||
|
|
|
|||
|
|
@ -1375,9 +1375,23 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
|
|||
if ((profile != EEsProfile && version >= 300) ||
|
||||
(profile == EEsProfile && version >= 310)) {
|
||||
commonBuiltins.append(
|
||||
"uint atomicCounterIncrement(atomic_uint x);"
|
||||
"uint atomicCounterDecrement(atomic_uint x);"
|
||||
"uint atomicCounter(atomic_uint x);"
|
||||
"uint atomicCounterIncrement(atomic_uint);"
|
||||
"uint atomicCounterDecrement(atomic_uint);"
|
||||
"uint atomicCounter(atomic_uint);"
|
||||
|
||||
"\n");
|
||||
}
|
||||
if (profile != EEsProfile && version >= 460) {
|
||||
commonBuiltins.append(
|
||||
"uint atomicCounterAdd(atomic_uint, uint);"
|
||||
"uint atomicCounterSubtract(atomic_uint, uint);"
|
||||
"uint atomicCounterMin(atomic_uint, uint);"
|
||||
"uint atomicCounterMax(atomic_uint, uint);"
|
||||
"uint atomicCounterAnd(atomic_uint, uint);"
|
||||
"uint atomicCounterOr(atomic_uint, uint);"
|
||||
"uint atomicCounterXor(atomic_uint, uint);"
|
||||
"uint atomicCounterExchange(atomic_uint, uint);"
|
||||
"uint atomicCounterCompSwap(atomic_uint, uint, uint);"
|
||||
|
||||
"\n");
|
||||
}
|
||||
|
|
@ -5909,6 +5923,18 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
|
|||
symbolTable.relateToOperator("atomicCounterDecrement", EOpAtomicCounterDecrement);
|
||||
symbolTable.relateToOperator("atomicCounter", EOpAtomicCounter);
|
||||
|
||||
if (profile != EEsProfile && version >= 460) {
|
||||
symbolTable.relateToOperator("atomicCounterAdd", EOpAtomicCounterAdd);
|
||||
symbolTable.relateToOperator("atomicCounterSubtract", EOpAtomicCounterSubtract);
|
||||
symbolTable.relateToOperator("atomicCounterMin", EOpAtomicCounterMin);
|
||||
symbolTable.relateToOperator("atomicCounterMax", EOpAtomicCounterMax);
|
||||
symbolTable.relateToOperator("atomicCounterAnd", EOpAtomicCounterAnd);
|
||||
symbolTable.relateToOperator("atomicCounterOr", EOpAtomicCounterOr);
|
||||
symbolTable.relateToOperator("atomicCounterXor", EOpAtomicCounterXor);
|
||||
symbolTable.relateToOperator("atomicCounterExchange", EOpAtomicCounterExchange);
|
||||
symbolTable.relateToOperator("atomicCounterCompSwap", EOpAtomicCounterCompSwap);
|
||||
}
|
||||
|
||||
symbolTable.relateToOperator("fma", EOpFma);
|
||||
symbolTable.relateToOperator("frexp", EOpFrexp);
|
||||
symbolTable.relateToOperator("ldexp", EOpLdexp);
|
||||
|
|
|
|||
|
|
@ -682,6 +682,16 @@ bool TOutputTraverser::visitAggregate(TVisit /* visit */, TIntermAggregate* node
|
|||
case EOpAtomicExchange: out.debug << "AtomicExchange"; break;
|
||||
case EOpAtomicCompSwap: out.debug << "AtomicCompSwap"; break;
|
||||
|
||||
case EOpAtomicCounterAdd: out.debug << "AtomicCounterAdd"; break;
|
||||
case EOpAtomicCounterSubtract: out.debug << "AtomicCounterSubtract"; break;
|
||||
case EOpAtomicCounterMin: out.debug << "AtomicCounterMin"; break;
|
||||
case EOpAtomicCounterMax: out.debug << "AtomicCounterMax"; break;
|
||||
case EOpAtomicCounterAnd: out.debug << "AtomicCounterAnd"; break;
|
||||
case EOpAtomicCounterOr: out.debug << "AtomicCounterOr"; break;
|
||||
case EOpAtomicCounterXor: out.debug << "AtomicCounterXor"; break;
|
||||
case EOpAtomicCounterExchange: out.debug << "AtomicCounterExchange"; break;
|
||||
case EOpAtomicCounterCompSwap: out.debug << "AtomicCounterCompSwap"; break;
|
||||
|
||||
case EOpImageQuerySize: out.debug << "imageQuerySize"; break;
|
||||
case EOpImageQuerySamples: out.debug << "imageQuerySamples"; break;
|
||||
case EOpImageLoad: out.debug << "imageLoad"; break;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue