aboutsummaryrefslogtreecommitdiff
path: root/Test/vk.relaxed.frag
diff options
context:
space:
mode:
Diffstat (limited to 'Test/vk.relaxed.frag')
-rw-r--r--Test/vk.relaxed.frag74
1 files changed, 74 insertions, 0 deletions
diff --git a/Test/vk.relaxed.frag b/Test/vk.relaxed.frag
new file mode 100644
index 00000000..d43416e0
--- /dev/null
+++ b/Test/vk.relaxed.frag
@@ -0,0 +1,74 @@
+#version 460
+
+out vec4 o;
+
+// default uniforms will be gathered into a uniform block
+uniform vec4 a;
+uniform vec2 b = vec2(0, 0); // initializer will be ignored
+layout(location = 0) uniform vec2 c; // location qualifier will be ignored
+uniform vec4 d[10];
+uniform struct e {
+ vec2 x;
+ float y;
+ uint z;
+} structUniform;
+
+// opaque types will not be grouped into uniform block
+uniform sampler2D t1;
+
+// shared and packed layout qualifier are silently ignored
+layout(shared) uniform UniformBlock {
+ float j;
+ vec4 k;
+};
+
+layout(packed) buffer BufferBlock {
+ float j;
+ vec4 k;
+} bufferInstance;
+
+// atomic_uint will be converted to uint and gathered in a buffer block
+layout(binding = 0) uniform atomic_uint counter1; // offset not used
+layout(binding = 0) uniform atomic_uint counter2; // offset not used
+layout(binding = 1) uniform atomic_uint counter3; // offset not used
+
+// atomic counter functions will be converted to equivalent integer atomic operations
+uint bar() {
+ uint j = 0;
+ j = atomicCounterIncrement(counter1);
+ j = atomicCounterDecrement(counter1);
+ j = atomicCounter(counter1);
+
+ j = atomicCounterAdd(counter1, 1);
+ j = atomicCounterAdd(counter1, -1);
+ j = atomicCounterSubtract(counter1, 1);
+
+ j = atomicCounterMin(counter1, j);
+ j = atomicCounterMax(counter1, j);
+ j = atomicCounterAnd(counter1, j);
+
+ j = atomicCounterOr(counter1, j);
+ j = atomicCounterXor(counter1, j);
+
+ j = atomicCounterExchange(counter1, j);
+ j = atomicCounterCompSwap(counter1, 0, j);
+
+ atomicCounterIncrement(counter2);
+ atomicCounterIncrement(counter3);
+
+ memoryBarrierAtomicCounter();
+
+ return j;
+}
+
+vec4 foo() {
+ float f = j + bufferInstance.j + structUniform.y + structUniform.z;
+ vec2 v2 = b + c + structUniform.x;
+ vec4 v4 = a + d[0] + d[1] + d[2] + k + bufferInstance.k + texture(t1, vec2(0, 0));
+ return vec4(f) * vec4(v2, 1, 1) * v4;
+}
+
+void main() {
+ float j = float(bar());
+ o = j * foo();
+} \ No newline at end of file