Conformance Test

    CTS_ARB_shader_ballot

Contributors

    Filip Demczewski, Mobica

Contacts

    Filip Demczewski, Mobica (filip.demczewski 'at' mobica.com)

Status

    In review

Version

    January 4, 2017 (version 1)

Dependencies

    ARB_shader_ballot extension is required.
    ARB_gpu_shader_int64 extension is required.

    This specification is written against:
      - ARB_shader_ballot specification,
      - Revision 5 of the version 4.50 of the OpenGL Shading Language Specification

Overview

    This tests verifies if functionality provided by ARB_shader_ballot
    works as expected:

      * Verify new GLSL built-in variables:
            - gl_SubGroupInvocationARB
            - gl_SubGroup*MaskARB
      * Verify gl_SubGroupSizeARB uniform
      * Verify new GLSL built-in functions:
            - ballotARB
            - readInvocationARB
            - readFirstInvocationARB

New Tests

    Availability test

      * Iterate through all supported shaders.
            Compile shader containing calls to all new built-in features
            just to check if those are available.
            Render primitive.
            Expect no error.

    Bitmasks verification test

      * Iterate through all supported shaders.
            Check each bitmask value according to the equation provided
            in the specification (each bitmask contains bit values related
            to the gl_SubGroupInvocationARB variable)

    Function ballotARB test

      * Iterate through all supported shaders.
            a) Call ballotARB(false) - verify that returned value equals 0.

            b) Call ballotARB(true) - verify that returned value is a bitfield
            where the corresponding bits are set for all active invocations
            in the sub-group.

            c) Call ballotARB(X), where X is not dynamically uniform expression
            that return true in some invocations and false in others. Perform
            many calls for some practical distributions of true/false values
            across invocations. Verify returned value.

    Read functions test

      * Iterate through all supported shaders.
            a) Calculate color value for primitive dependent on invocation index.
            Call readFirstInvocationARB with calculated color as a default value
            passed as parameter. Final color should be same for all invocations -
            first invocation completed dictates result for other invocations.

            b) Save first invocation index to the SSBO. Calculate color value for
            primitive dependent on invocation index. Call readInvocationARB with
            calculated color as a default value passed as first parameter and
            the saved invocation index as second. Final color should be same
            for all invocations - first invocation completed dictates result
            for other invocations.

Revision History

    Revision 1, 4 January, 2017 (Filip Demczewski)
      - Initial version;

    Revision 2, 3 February, 2017 (Filip Demczewski)
      - Tweaks to ballotARB and read functions tests;