[Piglit] [PATCH v2 3/3] ARB_shader_atomic_counters: Add simple VS test with inc/dec/read

Chris Forbes chrisf at ijw.co.nz
Mon Feb 23 11:09:33 PST 2015


(I should also point out that it's possible for another invocation's
dec to sneak in between the inc/read or an inc to sneak in between the
read/dec causing a spurious failure)

On Tue, Feb 24, 2015 at 7:53 AM, Chris Forbes <chrisf at ijw.co.nz> wrote:
> This doesn't look right.
>
> It's possible for the initial increment to observe the 0xffffffff =>
> 0x0 transition and fail, depending on how it's ordered with other
> invocations. It's also possible for the second decrement to observe
> the reverse transition, despite the attempt to skip over it.
>
> - Chris
>
> On Tue, Feb 24, 2015 at 7:23 AM, Jordan Justen
> <jordan.l.justen at intel.com> wrote:
>> Simple test of atomicCounterIncrement, atomicCounterDecrement and
>> atomicCounter being used in the VS.
>>
>> v2:
>>  * Drop CORE requirement
>>  * Add GL_ARB_shader_atomic_counters requirement
>>  * Require INT GL_MAX_VERTEX_ATOMIC_COUNTER_BUFFERS >= 2
>>
>> Signed-off-by: Jordan Justen <jordan.l.justen at intel.com>
>> Reviewed-by: Ilia Mirkin <imirkin at alum.mit.edu>
>> ---
>>  tests/all.py                                       |  3 +
>>  .../execution/vs-simple-inc-dec-read.shader_test   | 71 ++++++++++++++++++++++
>>  2 files changed, 74 insertions(+)
>>  create mode 100644 tests/spec/arb_shader_atomic_counters/execution/vs-simple-inc-dec-read.shader_test
>>
>> diff --git a/tests/all.py b/tests/all.py
>> index 4f477e8..d3588ae 100644
>> --- a/tests/all.py
>> +++ b/tests/all.py
>> @@ -4410,6 +4410,9 @@ spec['ARB_shader_atomic_counters'] = arb_shader_atomic_counters
>>  import_glsl_parser_tests(spec['ARB_shader_atomic_counters'],
>>                           os.path.join(TESTS_DIR, 'spec', 'arb_shader_atomic_counters'),
>>                           [''])
>> +add_shader_test_dir(spec['ARB_shader_atomic_counters'],
>> +                    os.path.join(TESTS_DIR, 'spec', 'arb_shader_atomic_counters'),
>> +                    recursive=True)
>>  arb_shader_atomic_counters['active-counters'] = PiglitGLTest(['arb_shader_atomic_counters-active-counters'], run_concurrent=True)
>>  arb_shader_atomic_counters['array-indexing'] = PiglitGLTest(['arb_shader_atomic_counters-array-indexing'], run_concurrent=True)
>>  arb_shader_atomic_counters['buffer-binding'] = PiglitGLTest(['arb_shader_atomic_counters-buffer-binding'], run_concurrent=True)
>> diff --git a/tests/spec/arb_shader_atomic_counters/execution/vs-simple-inc-dec-read.shader_test b/tests/spec/arb_shader_atomic_counters/execution/vs-simple-inc-dec-read.shader_test
>> new file mode 100644
>> index 0000000..16ea9db
>> --- /dev/null
>> +++ b/tests/spec/arb_shader_atomic_counters/execution/vs-simple-inc-dec-read.shader_test
>> @@ -0,0 +1,71 @@
>> +# Simple test of atomicCounterIncrement, atomicCounterDecrement and
>> +# atomicCounter being used in the VS.
>> +
>> +[require]
>> +GLSL >= 1.40
>> +GL_ARB_shader_atomic_counters
>> +INT GL_MAX_VERTEX_ATOMIC_COUNTER_BUFFERS >= 2
>> +
>> +[vertex shader]
>> +#version 140
>> +#extension GL_ARB_shader_atomic_counters: require
>> +
>> +layout(binding = 0) uniform atomic_uint a0;
>> +layout(binding = 0) uniform atomic_uint a1;
>> +
>> +in vec4 piglit_vertex;
>> +out vec4 vcolor;
>> +
>> +void main()
>> +{
>> +       bool passed = true;
>> +       uint v0, v1;
>> +
>> +       /* Test that incrementing, followed by a read of an atomic
>> +        * counter results in a larger value.
>> +        *
>> +        * Note: atomicCounterIncrement return the old value
>> +        */
>> +       v0 = atomicCounterIncrement(a0);
>> +       v1 = atomicCounter(a0);
>> +       if (v1 <= v0)
>> +               passed = false;
>> +
>> +       /* Skip one decrement since it may be the 0 => 0xffffffff
>> +        * transition.
>> +        */
>> +       atomicCounterDecrement(a1);
>> +
>> +       /* Test that a read, followed by a decrement of an atomic
>> +        * counter results in a smaller value.
>> +        *
>> +        * Note: atomicCounterDecrement return the new value
>> +        */
>> +       v0 = atomicCounter(a1);
>> +       v1 = atomicCounterDecrement(a1);
>> +       if (v1 >= v0)
>> +               passed = false;
>> +
>> +       if (passed)
>> +               vcolor = vec4(0.0, 1.0, 0.0, 1.0);
>> +       else
>> +               vcolor = vec4(1.0, 0.0, 0.0, 1.0);
>> +
>> +       gl_Position = piglit_vertex;
>> +}
>> +
>> +[fragment shader]
>> +#version 140
>> +in vec4 vcolor;
>> +out vec4 fcolor;
>> +
>> +void main()
>> +{
>> +       fcolor = vcolor;
>> +}
>> +
>> +[test]
>> +atomic counters 2
>> +
>> +draw rect -1 -1 2 2
>> +probe all rgba 0.0 1.0 0.0 1.0
>> --
>> 2.1.4
>>
>> _______________________________________________
>> Piglit mailing list
>> Piglit at lists.freedesktop.org
>> http://lists.freedesktop.org/mailman/listinfo/piglit


More information about the Piglit mailing list