Conformance Test

    CTS_ARB_indirect_parameters

Contributors

    Adam Czupryna, Mobica

Contacts

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

Status

    In review

Version

    March 1, 2017 (version 1)

Dependencies

    OpenGL 4.2 is required.

    ARB_indirect_parameters extension is required.

    This specification is written against:
      - ARB_indirect_parameters extension specification,
      - OpenGL 4.3 (Core Profile) specification.

Overview

    This test verifies if operations on new buffer object
    PARAMETER_BUFFER_ARB which is a target allowing buffers to store
    parameters for certain drawing commands works as expected.

    This test also verifies if new vertex array drawing functions
    MultiDrawArraysIndirectCountARB, MultiDrawElementsIndirectCountARB
    that uses PARAMETER_BUFFER_ARB binding point works properly.

New Tests

    Parameter Buffer Operations Test

      Create PARAMETER_BUFFER_ARB object and perform actions on it:
        BindBuffer, BufferData, BufferSubData, MapBuffer, UnmapBuffer,
        GetBufferSubData, GetBufferPointerv, MapBufferRange,
        FlushMappedBufferRange, GetBufferParameteriv and
        CopyBufferSubData.

      Verify if results of those actions are as expected.

      Verify if GetIntegerv, GetBooleanv, GetFloatv and GetDoublev
        returns correct value for PARAMETER_BUFFER_BINDING_ARB <pname>.

    Vertex Array Indirect Drawing Test

      Initialize necessary data:
      - Prepare vertex and fragment shader that are able to render
        white primitive with alpha component value of 0.5.
      - Create ARRAY_BUFFER and ELEMENT_ARRAY_BUFFER objects and fill it
        with data needed to draw two polygons - one next to each other.
        Polygons should cover whole framebuffer.
      - Create DRAW_INDIRECT_BUFFER object to store draw arrays command
        structure data and fill it with data needed to draw 4 triangles.
      - Create DRAW_INDIRECT_BUFFER object to store draw elements command
        structure data and also fill it with data needed to draw 4
        triangles.
      - Create PARAMETER_BUFFER_ARB to store draw count data and fill it
        with data needed to draw arrays two times. First time with 2
        draws and second with 4 draws.

      Make sure that depth test and stencil test are disabled.

      Clear color buffer with (0, 0, 0) color value and use
        MultiDrawArraysIndirectCountARB function to render the scene.
        Verify result by reading pixels from framebuffer.

      Repeat last step using MultiDrawElementsIndirectCountARB function and
        verify result in the same way.

      In both cases rendering result should be half framebuffer filled with
        (0.75, 0.75, 0.75) values and half with (0.5, 0.5, 0.5) values.


Revision History

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