Reviewed-by: Jordan Justen <jordan.l.jus...@intel.com>
On 2017-10-22 14:58:00, Ilia Mirkin wrote: > Only one shader is required to have a local_size layout, and it's not > required to be the one with the main function. Add tests which verify > that these derived values are properly computed in such a circumstance. > > Signed-off-by: Ilia Mirkin <imir...@alum.mit.edu> > --- > .../execution/separate-global-id.shader_test | 68 > ++++++++++++++++++++++ > .../execution/separate-global-id.shader_test | 49 ++++++++++++++++ > 2 files changed, 117 insertions(+) > create mode 100644 > tests/spec/arb_compute_shader/execution/separate-global-id.shader_test > create mode 100644 > tests/spec/arb_compute_variable_group_size/execution/separate-global-id.shader_test > > diff --git > a/tests/spec/arb_compute_shader/execution/separate-global-id.shader_test > b/tests/spec/arb_compute_shader/execution/separate-global-id.shader_test > new file mode 100644 > index 000000000..3352f1d81 > --- /dev/null > +++ b/tests/spec/arb_compute_shader/execution/separate-global-id.shader_test > @@ -0,0 +1,68 @@ > +# Simple test that verifies gl_GlobalInvocationID values are > +# functioning. Atomic counters are used as outputs. > +# > +# The additional twist is that the layout (and thus gl_WorkGroupSize) > +# is declared in a different shader. > + > +[require] > +GL >= 3.3 > +GLSL >= 3.30 > +GL_ARB_compute_shader > +GL_ARB_shader_atomic_counters > + > +[compute shader] > +#version 330 > +#extension GL_ARB_compute_shader: enable > + > +layout(local_size_x = 4, local_size_y = 2, local_size_z = 4) in; > + > +[compute shader] > +#version 330 > +#extension GL_ARB_compute_shader: enable > +#extension GL_ARB_shader_atomic_counters: require > + > +layout(binding = 0) uniform atomic_uint a0; > +layout(binding = 0) uniform atomic_uint a1; > +layout(binding = 0) uniform atomic_uint a2; > +layout(binding = 0) uniform atomic_uint a3; > +layout(binding = 0) uniform atomic_uint a4; > +layout(binding = 0) uniform atomic_uint a5; > +layout(binding = 0) uniform atomic_uint a6; > +layout(binding = 0) uniform atomic_uint a7; > + > +void main() > +{ > + uint x = gl_GlobalInvocationID.x; > + uint y = gl_GlobalInvocationID.y; > + uint z = gl_GlobalInvocationID.z; > + > + if (((x & y) & z) == 0u) > + atomicCounterIncrement(a0); > + if (((x | y) | z) == 7u) > + atomicCounterIncrement(a1); > + if (x == y && y == z) > + atomicCounterIncrement(a2); > + if (x != y && y != z && x != z) > + atomicCounterIncrement(a3); > + if (((x & y) & z) == 2u) > + atomicCounterIncrement(a4); > + if (((x | y) | z) == 5u) > + atomicCounterIncrement(a5); > + if (x < 4u && y < 4u && z < 4u) > + atomicCounterIncrement(a6); > + if (x >= 4u || y >= 4u || z >= 4u) > + atomicCounterIncrement(a7); > +} > + > +[test] > +atomic counters 8 > + > +compute 2 4 2 > +probe atomic counter 0 == 343 > +probe atomic counter 1 == 343 > +probe atomic counter 2 == 8 > +probe atomic counter 3 == 336 > +probe atomic counter 4 == 49 > +probe atomic counter 5 == 49 > +probe atomic counter 6 == 64 > +probe atomic counter 7 == 448 > diff --git > a/tests/spec/arb_compute_variable_group_size/execution/separate-global-id.shader_test > > b/tests/spec/arb_compute_variable_group_size/execution/separate-global-id.shader_test > new file mode 100644 > index 000000000..434eecf6a > --- /dev/null > +++ > b/tests/spec/arb_compute_variable_group_size/execution/separate-global-id.shader_test > @@ -0,0 +1,49 @@ > +# Simple test that verifies gl_GlobalInvocationID derived values are > +# computed properly. > + > +[require] > +GL >= 3.3 > +GLSL >= 3.30 > +GL_ARB_compute_shader > +GL_ARB_compute_variable_group_size > +GL_ARB_shader_storage_buffer_object > + > +[compute shader] > +#version 330 > +#extension GL_ARB_compute_shader: require > +#extension GL_ARB_compute_variable_group_size: require > + > +layout(local_size_variable) in; > + > +[compute shader] > +#version 330 > +#extension GL_ARB_compute_shader: require > +#extension GL_ARB_shader_storage_buffer_object: require > + > +// no mention of variable group size in this shader > + > +layout(std430) > +buffer SSBO { > + uvec2 id[4]; > +}; > + > +void main() > +{ > + uint g = gl_GlobalInvocationID.x; > + uint l = gl_LocalInvocationID.x; > + id[g] = uvec2(g, l); > +} > + > +[test] > +ssbo 0 32 > + > +compute group size 2 1 1 2 1 1 > + > +probe ssbo uint 0 0 == 0 > +probe ssbo uint 0 4 == 0 > +probe ssbo uint 0 8 == 1 > +probe ssbo uint 0 12 == 1 > +probe ssbo uint 0 16 == 2 > +probe ssbo uint 0 20 == 0 > +probe ssbo uint 0 24 == 3 > +probe ssbo uint 0 28 == 1 > -- > 2.13.6 > > _______________________________________________ > Piglit mailing list > Piglit@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/piglit _______________________________________________ Piglit mailing list Piglit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/piglit