Front-end atomics: Finish adding atomic built-in functions (non-image) into the AST.
diff --git a/Test/baseResults/310.comp.out b/Test/baseResults/310.comp.out
index 75db91c..8bc3838 100644
--- a/Test/baseResults/310.comp.out
+++ b/Test/baseResults/310.comp.out
@@ -187,7 +187,7 @@
0:123 'c' (in highp atomic_uint)
0:125 Sequence
0:125 Branch: Return with expression
-0:125 Function Call: atomicCounterIncrement(au1; (global highp uint)
+0:125 AtomicCounterIncrement (global highp uint)
0:125 'c' (in highp atomic_uint)
0:128 Function Definition: func2(au1; (global highp uint)
0:128 Function Parameters:
@@ -196,7 +196,7 @@
0:130 Branch: Return with expression
0:130 'counter' (layout(binding=0 offset=0 ) uniform highp atomic_uint)
0:131 Branch: Return with expression
-0:131 Function Call: atomicCounter(au1; (global highp uint)
+0:131 AtomicCounter (global highp uint)
0:131 'counter' (layout(binding=0 offset=0 ) uniform highp atomic_uint)
0:134 Function Definition: mainAC( (global void)
0:134 Function Parameters:
@@ -204,9 +204,9 @@
0:137 Sequence
0:137 move second child to first child (temp highp uint)
0:137 'val' (temp highp uint)
-0:137 Function Call: atomicCounter(au1; (global highp uint)
+0:137 AtomicCounter (global highp uint)
0:137 'counter' (layout(binding=0 offset=0 ) uniform highp atomic_uint)
-0:138 Function Call: atomicCounterDecrement(au1; (global highp uint)
+0:138 AtomicCounterDecrement (global highp uint)
0:138 'counter' (layout(binding=0 offset=0 ) uniform highp atomic_uint)
0:146 Function Definition: opac( (global void)
0:146 Function Parameters:
@@ -227,26 +227,26 @@
0:159 Sequence
0:159 move second child to first child (temp highp int)
0:159 'origi' (temp highp int)
-0:159 Function Call: atomicAdd(i1;i1; (global highp int)
+0:159 AtomicAdd (global highp int)
0:159 'atomi' (shared highp int)
0:159 Constant:
0:159 3 (const int)
0:160 Sequence
0:160 move second child to first child (temp highp uint)
0:160 'origu' (temp highp uint)
-0:160 Function Call: atomicAnd(u1;u1; (global highp uint)
+0:160 AtomicAnd (global highp uint)
0:160 'atomu' (shared highp uint)
0:160 Constant:
0:160 7 (const uint)
0:161 move second child to first child (temp highp int)
0:161 'origi' (temp highp int)
-0:161 Function Call: atomicExchange(i1;i1; (global highp int)
+0:161 AtomicExchange (global highp int)
0:161 'atomi' (shared highp int)
0:161 Constant:
0:161 4 (const int)
0:162 move second child to first child (temp highp uint)
0:162 'origu' (temp highp uint)
-0:162 Function Call: atomicCompSwap(u1;u1;u1; (global highp uint)
+0:162 AtomicCompSwap (global highp uint)
0:162 'atomu' (shared highp uint)
0:162 Constant:
0:162 10 (const uint)
@@ -599,7 +599,7 @@
0:123 'c' (in highp atomic_uint)
0:125 Sequence
0:125 Branch: Return with expression
-0:125 Function Call: atomicCounterIncrement(au1; (global highp uint)
+0:125 AtomicCounterIncrement (global highp uint)
0:125 'c' (in highp atomic_uint)
0:128 Function Definition: func2(au1; (global highp uint)
0:128 Function Parameters:
@@ -608,7 +608,7 @@
0:130 Branch: Return with expression
0:130 'counter' (layout(binding=0 offset=0 ) uniform highp atomic_uint)
0:131 Branch: Return with expression
-0:131 Function Call: atomicCounter(au1; (global highp uint)
+0:131 AtomicCounter (global highp uint)
0:131 'counter' (layout(binding=0 offset=0 ) uniform highp atomic_uint)
0:134 Function Definition: mainAC( (global void)
0:134 Function Parameters:
@@ -616,9 +616,9 @@
0:137 Sequence
0:137 move second child to first child (temp highp uint)
0:137 'val' (temp highp uint)
-0:137 Function Call: atomicCounter(au1; (global highp uint)
+0:137 AtomicCounter (global highp uint)
0:137 'counter' (layout(binding=0 offset=0 ) uniform highp atomic_uint)
-0:138 Function Call: atomicCounterDecrement(au1; (global highp uint)
+0:138 AtomicCounterDecrement (global highp uint)
0:138 'counter' (layout(binding=0 offset=0 ) uniform highp atomic_uint)
0:146 Function Definition: opac( (global void)
0:146 Function Parameters:
@@ -639,26 +639,26 @@
0:159 Sequence
0:159 move second child to first child (temp highp int)
0:159 'origi' (temp highp int)
-0:159 Function Call: atomicAdd(i1;i1; (global highp int)
+0:159 AtomicAdd (global highp int)
0:159 'atomi' (shared highp int)
0:159 Constant:
0:159 3 (const int)
0:160 Sequence
0:160 move second child to first child (temp highp uint)
0:160 'origu' (temp highp uint)
-0:160 Function Call: atomicAnd(u1;u1; (global highp uint)
+0:160 AtomicAnd (global highp uint)
0:160 'atomu' (shared highp uint)
0:160 Constant:
0:160 7 (const uint)
0:161 move second child to first child (temp highp int)
0:161 'origi' (temp highp int)
-0:161 Function Call: atomicExchange(i1;i1; (global highp int)
+0:161 AtomicExchange (global highp int)
0:161 'atomi' (shared highp int)
0:161 Constant:
0:161 4 (const int)
0:162 move second child to first child (temp highp uint)
0:162 'origu' (temp highp uint)
-0:162 Function Call: atomicCompSwap(u1;u1;u1; (global highp uint)
+0:162 AtomicCompSwap (global highp uint)
0:162 'atomu' (shared highp uint)
0:162 Constant:
0:162 10 (const uint)
diff --git a/Test/baseResults/atomic_uint.frag.out b/Test/baseResults/atomic_uint.frag.out
index 23728b7..1eef5c3 100644
--- a/Test/baseResults/atomic_uint.frag.out
+++ b/Test/baseResults/atomic_uint.frag.out
@@ -28,7 +28,7 @@
0:5 'c' (in atomic_uint)
0:7 Sequence
0:7 Branch: Return with expression
-0:7 Function Call: atomicCounterIncrement(au1; (global uint)
+0:7 AtomicCounterIncrement (global uint)
0:7 'c' (in atomic_uint)
0:10 Function Definition: func2(au1; (global uint)
0:10 Function Parameters:
@@ -37,7 +37,7 @@
0:12 Branch: Return with expression
0:12 'counter' (layout(binding=0 offset=0 ) uniform atomic_uint)
0:13 Branch: Return with expression
-0:13 Function Call: atomicCounter(au1; (global uint)
+0:13 AtomicCounter (global uint)
0:13 'counter' (layout(binding=0 offset=0 ) uniform atomic_uint)
0:16 Function Definition: main( (global void)
0:16 Function Parameters:
@@ -45,9 +45,9 @@
0:19 Sequence
0:19 move second child to first child (temp uint)
0:19 'val' (temp uint)
-0:19 Function Call: atomicCounter(au1; (global uint)
+0:19 AtomicCounter (global uint)
0:19 'counter' (layout(binding=0 offset=0 ) uniform atomic_uint)
-0:20 Function Call: atomicCounterDecrement(au1; (global uint)
+0:20 AtomicCounterDecrement (global uint)
0:20 'counter' (layout(binding=0 offset=0 ) uniform atomic_uint)
0:26 Function Definition: opac( (global void)
0:26 Function Parameters:
@@ -91,7 +91,7 @@
0:5 'c' (in atomic_uint)
0:7 Sequence
0:7 Branch: Return with expression
-0:7 Function Call: atomicCounterIncrement(au1; (global uint)
+0:7 AtomicCounterIncrement (global uint)
0:7 'c' (in atomic_uint)
0:10 Function Definition: func2(au1; (global uint)
0:10 Function Parameters:
@@ -100,7 +100,7 @@
0:12 Branch: Return with expression
0:12 'counter' (layout(binding=0 offset=0 ) uniform atomic_uint)
0:13 Branch: Return with expression
-0:13 Function Call: atomicCounter(au1; (global uint)
+0:13 AtomicCounter (global uint)
0:13 'counter' (layout(binding=0 offset=0 ) uniform atomic_uint)
0:16 Function Definition: main( (global void)
0:16 Function Parameters:
@@ -108,9 +108,9 @@
0:19 Sequence
0:19 move second child to first child (temp uint)
0:19 'val' (temp uint)
-0:19 Function Call: atomicCounter(au1; (global uint)
+0:19 AtomicCounter (global uint)
0:19 'counter' (layout(binding=0 offset=0 ) uniform atomic_uint)
-0:20 Function Call: atomicCounterDecrement(au1; (global uint)
+0:20 AtomicCounterDecrement (global uint)
0:20 'counter' (layout(binding=0 offset=0 ) uniform atomic_uint)
0:26 Function Definition: opac( (global void)
0:26 Function Parameters:
diff --git a/glslang/Include/intermediate.h b/glslang/Include/intermediate.h
index 2b14d79..ef2dbc1 100644
--- a/glslang/Include/intermediate.h
+++ b/glslang/Include/intermediate.h
@@ -234,7 +234,7 @@
EOpMemoryBarrierShared, // compute only
EOpGroupMemoryBarrier, // compute only
- EOpAtomicAdd, // TODO: AST functionality: hook these up
+ EOpAtomicAdd,
EOpAtomicMin,
EOpAtomicMax,
EOpAtomicAnd,
@@ -243,6 +243,10 @@
EOpAtomicExchange,
EOpAtomicCompSwap,
+ EOpAtomicCounterIncrement,
+ EOpAtomicCounterDecrement,
+ EOpAtomicCounter,
+
EOpAny,
EOpAll,
diff --git a/glslang/MachineIndependent/Initialize.cpp b/glslang/MachineIndependent/Initialize.cpp
index 64d80e9..f3620c2 100644
--- a/glslang/MachineIndependent/Initialize.cpp
+++ b/glslang/MachineIndependent/Initialize.cpp
@@ -3133,6 +3133,19 @@
symbolTable.relateToOperator("memoryBarrierBuffer", EOpMemoryBarrierBuffer);
symbolTable.relateToOperator("memoryBarrierImage", EOpMemoryBarrierImage);
+ symbolTable.relateToOperator("atomicAdd", EOpAtomicAdd);
+ symbolTable.relateToOperator("atomicMin", EOpAtomicMin);
+ symbolTable.relateToOperator("atomicMax", EOpAtomicMax);
+ symbolTable.relateToOperator("atomicAnd", EOpAtomicAnd);
+ symbolTable.relateToOperator("atomicOr", EOpAtomicOr);
+ symbolTable.relateToOperator("atomicXor", EOpAtomicXor);
+ symbolTable.relateToOperator("atomicExchange", EOpAtomicExchange);
+ symbolTable.relateToOperator("atomicCompSwap", EOpAtomicCompSwap);
+
+ symbolTable.relateToOperator("atomicCounterIncrement", EOpAtomicCounterIncrement);
+ symbolTable.relateToOperator("atomicCounterDecrement", EOpAtomicCounterDecrement);
+ symbolTable.relateToOperator("atomicCounter", EOpAtomicCounter);
+
if (PureOperatorBuiltins) {
symbolTable.relateToOperator("imageQuerySize", EImageQuerySize);
symbolTable.relateToOperator("imageQuerySamples", EImageQuerySamples);
diff --git a/glslang/MachineIndependent/intermOut.cpp b/glslang/MachineIndependent/intermOut.cpp
index 7dcec82..2b65ee1 100644
--- a/glslang/MachineIndependent/intermOut.cpp
+++ b/glslang/MachineIndependent/intermOut.cpp
@@ -289,6 +289,10 @@
case EOpEmitStreamVertex: out.debug << "EmitStreamVertex"; break;
case EOpEndStreamPrimitive: out.debug << "EndStreamPrimitive"; break;
+ case EOpAtomicCounterIncrement: out.debug << "AtomicCounterIncrement";break;
+ case EOpAtomicCounterDecrement: out.debug << "AtomicCounterDecrement";break;
+ case EOpAtomicCounter: out.debug << "AtomicCounter"; break;
+
default: out.debug.message(EPrefixError, "Bad unary op");
}
@@ -395,6 +399,15 @@
case EOpMemoryBarrierShared: out.debug << "MemoryBarrierShared"; break;
case EOpGroupMemoryBarrier: out.debug << "GroupMemoryBarrier"; break;
+ case EOpAtomicAdd: out.debug << "AtomicAdd"; break;
+ case EOpAtomicMin: out.debug << "AtomicMin"; break;
+ case EOpAtomicMax: out.debug << "AtomicMax"; break;
+ case EOpAtomicAnd: out.debug << "AtomicAnd"; break;
+ case EOpAtomicOr: out.debug << "AtomicOr"; break;
+ case EOpAtomicXor: out.debug << "AtomicXor"; break;
+ case EOpAtomicExchange: out.debug << "AtomicExchange"; break;
+ case EOpAtomicCompSwap: out.debug << "AtomicCompSwap"; break;
+
case EImageQuerySize: out.debug << "imageQuerySize"; break;
case EImageQuerySamples: out.debug << "imageQuerySamples"; break;
case EImageLoad: out.debug << "imageLoad"; break;