Conformance Test

    CTS_ARB_spirv_extensions

Contributors

    Adam Czupryna, Mobica

Contacts

    Adam Czupryna, Mobica (adam.czupryna 'at' mobica.com)

Status

    In review

Version

    June 12, 2017 (version 1)

Dependencies

    OpenGL 4.5 is required.

    ARB_spirv_extensions extension is required.

    ARB_gl_spirv extension is required.

    This specification is written against:
      - ARB_spirv_extensions specification draft,
      - OpenGL 4.5 specification.

Overview

    This test verifies if mechanism for an implementation to advertise which
    SPIR-V extensions it supports works as expected.

New Tests

    New State Queries Test

      * Test GetIntegerv query for <pname>:

          - NUM_SPIR_V_EXTENSIONS

        Check if no error is generated.

      * Test GetStringi query for <pname>:

          - SPIR_V_EXTENSIONS

        Check if no empty strings are returned and no error is generated.
        Check if INVALID_VALUE error is generated if <index> for GetStringi
          function is outside a valid range.

Revision History

    Revision 1, 12 June, 2017 (Adam Czupryna)
      - Intial version;

