Implement GL_EXT_vulkan_glsl_relaxed option
This commit is contained in:
parent
159b057080
commit
ecc9b9149f
43 changed files with 6707 additions and 111 deletions
74
Test/vk.relaxed.frag
Normal file
74
Test/vk.relaxed.frag
Normal file
|
|
@ -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();
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue