[Piglit] [PATCH] compute: add test variants for local_size decls in other shaders

Samuel Pitoiset samuel.pitoiset at gmail.com
Mon Oct 23 10:00:47 UTC 2017


Reviewed-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>

On 10/22/2017 11:58 PM, 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 <imirkin at 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
> 


More information about the Piglit mailing list