sales@scenomics.com +1 650 396 9674

Testing Uniform Read/Write Capabilities

In this exercise you'll learn how to check if your GPU correctly sets uniform values (also referred to as shader constants). Driver bugs are infrequent and these tests let you know if there are problems you should be aware of. It's also worth mentioning that Scenomics uses these tests to verify our OpenGL implementation. We've found plenty of our own bugs this way.

Start The Shader Application

  1. Start the Shader app. (Start » Programs » Scenomics » Shader) or (Windows® key and then type 'Shader' to find the app icon.)

    The application displays a splash screen and then the application desktop appears.

    This is a picture of the desktop.

Run Uniform Write/Read Test Command

  1. Examine the main menu and select File » Run Tests.

    The application displays a list of tests that you can run.

  2. Select Test Uniform Write from the listed options and click OK or hit ENTER when you are finished.

    This is going to determine that your GPU is capable of writing uniform values correctly. Verification is performed by writing the uniform values and then assigning them to variables of the same type declared in shader storage buffer objects. We'll explore the test code later.

    Note that some GPUs do not support large shaders. For that reason some of the tests are disabled and will display error messages below. Don't worry about this. The tests can be enabled by editing the GLSL code.

    //////////////////////////////////////////////////
    // Starting Uniform Tests
    //////////////////////////////////////////////////
    
    Found test GLSL: D:\Release6\Content\Tests\GPU\test_uniform_write.glsl
    Setting up program to run compute shader using GLSL #version 430.
    Successfully compiled shader program.
    Successfully set shader program active on rendering device.
    Validated binding index: 'test_buffer' buffer index is: 0
    Validated buffer size: 'test_buffer' buffer size is 3600 bytes.
    Successfully created buffer 'test_buffer' on device.
    
    //////////////////////////////////////////////////
    // Uniform Read/Write Test For: uniform_test_bool
    //////////////////////////////////////////////////
    
    Setting the following uniform constant:
    
    a_oInfo.Name............................uniform_test_bool
    a_oInfo.Index...........................0
    a_oInfo.BufferIndex.....................-1
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................3
    a_oInfo.Location........................0
    a_oInfo.Offset..........................-1
    a_oInfo.Size............................1
    a_oInfo.Type............................35670
    a_oInfo.TypeSize........................4
    a_oInfo.ArrayStride.....................-1
    a_oInfo.MatrixStride....................-1
    a_oInfo.Rows............................0
    a_oInfo.Cols............................0
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............0
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................4
    
    a_bWrite is: true
    a_bRead is:  true
    
    Result of memcmp(): 0 [ 0 = passed, any non-zero = fail ]
    
    Uniform constant was assigned to this shader buffer variable in the GLSL code:
    
    a_oInfo.Name............................test_bool
    a_oInfo.Index...........................0
    a_oInfo.BufferIndex.....................0
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................4
    a_oInfo.Location........................-1
    a_oInfo.Offset..........................0
    a_oInfo.Size............................1
    a_oInfo.Type............................35670
    a_oInfo.TypeSize........................4
    a_oInfo.ArrayStride.....................0
    a_oInfo.MatrixStride....................0
    a_oInfo.Rows............................0
    a_oInfo.Cols............................0
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............1
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................4
    
    //////////////////////////////////////////////////
    // Uniform Read/Write Test For: uniform_test_bool_array[0]
    //////////////////////////////////////////////////
    
    Setting the following uniform constant:
    
    a_oInfo.Name............................uniform_test_bool_array[0]
    a_oInfo.Index...........................1
    a_oInfo.BufferIndex.....................-1
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................3
    a_oInfo.Location........................1
    a_oInfo.Offset..........................-1
    a_oInfo.Size............................4
    a_oInfo.Type............................35670
    a_oInfo.TypeSize........................4
    a_oInfo.ArrayStride.....................-1
    a_oInfo.MatrixStride....................-1
    a_oInfo.Rows............................0
    a_oInfo.Cols............................0
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............0
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................16
    
    Write uniform values:
    0,
    1,
    0,
    1
    
    Read values:
    0,
    1,
    0,
    1
    
    Result of memcmp(): 0 [ 0 = passed, any non-zero = fail ]
    
    Uniform constant was assigned to this shader buffer variable in the GLSL code:
    
    a_oInfo.Name............................test_bool_array[0]
    a_oInfo.Index...........................1
    a_oInfo.BufferIndex.....................0
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................4
    a_oInfo.Location........................-1
    a_oInfo.Offset..........................4
    a_oInfo.Size............................4
    a_oInfo.Type............................35670
    a_oInfo.TypeSize........................4
    a_oInfo.ArrayStride.....................4
    a_oInfo.MatrixStride....................0
    a_oInfo.Rows............................0
    a_oInfo.Cols............................0
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............1
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................16
    
    //////////////////////////////////////////////////
    // Uniform Read/Write Test For: uniform_test_bvec2
    //////////////////////////////////////////////////
    
    Setting the following uniform constant:
    
    a_oInfo.Name............................uniform_test_bvec2
    a_oInfo.Index...........................2
    a_oInfo.BufferIndex.....................-1
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................3
    a_oInfo.Location........................5
    a_oInfo.Offset..........................-1
    a_oInfo.Size............................1
    a_oInfo.Type............................35671
    a_oInfo.TypeSize........................8
    a_oInfo.ArrayStride.....................-1
    a_oInfo.MatrixStride....................-1
    a_oInfo.Rows............................0
    a_oInfo.Cols............................0
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............0
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................8
    
    Write values:
    0, 1, 0, 0
    
    Read values:
    0, 1, 0, 0
    
    Result of memcmp(): 0 [ 0 = passed, any non-zero = fail ]
    
    Uniform constant was assigned to this shader buffer variable in the GLSL code:
    
    a_oInfo.Name............................test_bvec2
    a_oInfo.Index...........................2
    a_oInfo.BufferIndex.....................0
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................4
    a_oInfo.Location........................-1
    a_oInfo.Offset..........................24
    a_oInfo.Size............................1
    a_oInfo.Type............................35671
    a_oInfo.TypeSize........................8
    a_oInfo.ArrayStride.....................0
    a_oInfo.MatrixStride....................0
    a_oInfo.Rows............................0
    a_oInfo.Cols............................0
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............1
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................8
    
    //////////////////////////////////////////////////
    // Uniform Read/Write Test For: uniform_test_bvec3
    //////////////////////////////////////////////////
    
    Setting the following uniform constant:
    
    a_oInfo.Name............................uniform_test_bvec3
    a_oInfo.Index...........................4
    a_oInfo.BufferIndex.....................-1
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................3
    a_oInfo.Location........................10
    a_oInfo.Offset..........................-1
    a_oInfo.Size............................1
    a_oInfo.Type............................35672
    a_oInfo.TypeSize........................12
    a_oInfo.ArrayStride.....................-1
    a_oInfo.MatrixStride....................-1
    a_oInfo.Rows............................0
    a_oInfo.Cols............................0
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............0
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................12
    
    Write values:
    0, 1, 0, 0
    
    Read values:
    0, 1, 0, 0
    
    Result of memcmp(): 0 [ 0 = passed, any non-zero = fail ]
    
    Uniform constant was assigned to this shader buffer variable in the GLSL code:
    
    a_oInfo.Name............................test_bvec3
    a_oInfo.Index...........................4
    a_oInfo.BufferIndex.....................0
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................4
    a_oInfo.Location........................-1
    a_oInfo.Offset..........................32
    a_oInfo.Size............................1
    a_oInfo.Type............................35672
    a_oInfo.TypeSize........................12
    a_oInfo.ArrayStride.....................0
    a_oInfo.MatrixStride....................0
    a_oInfo.Rows............................0
    a_oInfo.Cols............................0
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............1
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................12
    
    //////////////////////////////////////////////////
    // Uniform Read/Write Test For: uniform_test_bvec4
    //////////////////////////////////////////////////
    
    Setting the following uniform constant:
    
    a_oInfo.Name............................uniform_test_bvec4
    a_oInfo.Index...........................6
    a_oInfo.BufferIndex.....................-1
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................3
    a_oInfo.Location........................15
    a_oInfo.Offset..........................-1
    a_oInfo.Size............................1
    a_oInfo.Type............................35673
    a_oInfo.TypeSize........................16
    a_oInfo.ArrayStride.....................-1
    a_oInfo.MatrixStride....................-1
    a_oInfo.Rows............................0
    a_oInfo.Cols............................0
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............0
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................16
    
    Write values:
    0, 1, 0, 1
    
    Read values:
    0, 1, 0, 1
    
    Result of memcmp(): 0 [ 0 = passed, any non-zero = fail ]
    
    Uniform constant was assigned to this shader buffer variable in the GLSL code:
    
    a_oInfo.Name............................test_bvec4
    a_oInfo.Index...........................6
    a_oInfo.BufferIndex.....................0
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................4
    a_oInfo.Location........................-1
    a_oInfo.Offset..........................48
    a_oInfo.Size............................1
    a_oInfo.Type............................35673
    a_oInfo.TypeSize........................16
    a_oInfo.ArrayStride.....................0
    a_oInfo.MatrixStride....................0
    a_oInfo.Rows............................0
    a_oInfo.Cols............................0
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............1
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................16
    
    //////////////////////////////////////////////////
    // Uniform Read/Write Test For: uniform_test_bvec2_array[0]
    //////////////////////////////////////////////////
    
    Setting the following uniform constant:
    
    a_oInfo.Name............................uniform_test_bvec2_array[0]
    a_oInfo.Index...........................3
    a_oInfo.BufferIndex.....................-1
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................3
    a_oInfo.Location........................6
    a_oInfo.Offset..........................-1
    a_oInfo.Size............................4
    a_oInfo.Type............................35671
    a_oInfo.TypeSize........................8
    a_oInfo.ArrayStride.....................-1
    a_oInfo.MatrixStride....................-1
    a_oInfo.Rows............................0
    a_oInfo.Cols............................0
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............0
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................32
    
    Write values:
    0, 1, 0, 0,
    1, 1, 0, 0,
    0, 1, 0, 0,
    1, 1, 0, 0
    
    Read values:
    0, 1, 0, 0,
    1, 1, 0, 0,
    0, 1, 0, 0,
    1, 1, 0, 0
    
    Result of memcmp(): 0 [ 0 = passed, any non-zero = fail ]
    
    Uniform constant was assigned to this shader buffer variable in the GLSL code:
    
    a_oInfo.Name............................test_bvec2_array[0]
    a_oInfo.Index...........................3
    a_oInfo.BufferIndex.....................0
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................4
    a_oInfo.Location........................-1
    a_oInfo.Offset..........................64
    a_oInfo.Size............................4
    a_oInfo.Type............................35671
    a_oInfo.TypeSize........................8
    a_oInfo.ArrayStride.....................8
    a_oInfo.MatrixStride....................0
    a_oInfo.Rows............................0
    a_oInfo.Cols............................0
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............1
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................32
    
    //////////////////////////////////////////////////
    // Uniform Read/Write Test For: uniform_test_bvec3_array[0]
    //////////////////////////////////////////////////
    
    Setting the following uniform constant:
    
    a_oInfo.Name............................uniform_test_bvec3_array[0]
    a_oInfo.Index...........................5
    a_oInfo.BufferIndex.....................-1
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................3
    a_oInfo.Location........................11
    a_oInfo.Offset..........................-1
    a_oInfo.Size............................4
    a_oInfo.Type............................35672
    a_oInfo.TypeSize........................12
    a_oInfo.ArrayStride.....................-1
    a_oInfo.MatrixStride....................-1
    a_oInfo.Rows............................0
    a_oInfo.Cols............................0
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............0
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................48
    
    Write values:
    0, 1, 0, 0,
    1, 1, 1, 0,
    0, 1, 0, 0,
    1, 1, 1, 0
    
    Read values:
    0, 1, 0, 0,
    1, 1, 1, 0,
    0, 1, 0, 0,
    1, 1, 1, 0
    
    Result of memcmp(): 0 [ 0 = passed, any non-zero = fail ]
    
    Uniform constant was assigned to this shader buffer variable in the GLSL code:
    
    a_oInfo.Name............................test_bvec3_array[0]
    a_oInfo.Index...........................5
    a_oInfo.BufferIndex.....................0
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................4
    a_oInfo.Location........................-1
    a_oInfo.Offset..........................96
    a_oInfo.Size............................4
    a_oInfo.Type............................35673
    a_oInfo.TypeSize........................16
    a_oInfo.ArrayStride.....................16
    a_oInfo.MatrixStride....................0
    a_oInfo.Rows............................0
    a_oInfo.Cols............................0
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............1
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................64
    
    //////////////////////////////////////////////////
    // Uniform Read/Write Test For: uniform_test_bvec4_array[0]
    //////////////////////////////////////////////////
    
    Setting the following uniform constant:
    
    a_oInfo.Name............................uniform_test_bvec4_array[0]
    a_oInfo.Index...........................7
    a_oInfo.BufferIndex.....................-1
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................3
    a_oInfo.Location........................16
    a_oInfo.Offset..........................-1
    a_oInfo.Size............................4
    a_oInfo.Type............................35673
    a_oInfo.TypeSize........................16
    a_oInfo.ArrayStride.....................-1
    a_oInfo.MatrixStride....................-1
    a_oInfo.Rows............................0
    a_oInfo.Cols............................0
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............0
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................64
    
    Write values:
    0, 1, 0, 1,
    1, 1, 1, 1,
    0, 1, 0, 1,
    1, 1, 1, 1
    
    Read values:
    0, 1, 0, 1,
    1, 1, 1, 1,
    0, 1, 0, 1,
    1, 1, 1, 1
    
    Result of memcmp(): 0 [ 0 = passed, any non-zero = fail ]
    
    Uniform constant was assigned to this shader buffer variable in the GLSL code:
    
    a_oInfo.Name............................test_bvec4_array[0]
    a_oInfo.Index...........................7
    a_oInfo.BufferIndex.....................0
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................4
    a_oInfo.Location........................-1
    a_oInfo.Offset..........................160
    a_oInfo.Size............................4
    a_oInfo.Type............................35673
    a_oInfo.TypeSize........................16
    a_oInfo.ArrayStride.....................16
    a_oInfo.MatrixStride....................0
    a_oInfo.Rows............................0
    a_oInfo.Cols............................0
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............1
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................64
    
    //////////////////////////////////////////////////
    // Uniform Read/Write Test For: uniform_test_uint
    //////////////////////////////////////////////////
    
    Setting the following uniform constant:
    
    a_oInfo.Name............................uniform_test_uint
    a_oInfo.Index...........................56
    a_oInfo.BufferIndex.....................-1
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................3
    a_oInfo.Location........................140
    a_oInfo.Offset..........................-1
    a_oInfo.Size............................1
    a_oInfo.Type............................5125
    a_oInfo.TypeSize........................4
    a_oInfo.ArrayStride.....................-1
    a_oInfo.MatrixStride....................-1
    a_oInfo.Rows............................0
    a_oInfo.Cols............................0
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............0
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................4
    
    a_uWrite is: 32
    a_uRead is:  32
    
    Result of memcmp(): 0 [ 0 = passed, any non-zero = fail ]
    
    Uniform constant was assigned to this shader buffer variable in the GLSL code:
    
    a_oInfo.Name............................test_uint
    a_oInfo.Index...........................56
    a_oInfo.BufferIndex.....................0
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................4
    a_oInfo.Location........................-1
    a_oInfo.Offset..........................224
    a_oInfo.Size............................1
    a_oInfo.Type............................5125
    a_oInfo.TypeSize........................4
    a_oInfo.ArrayStride.....................0
    a_oInfo.MatrixStride....................0
    a_oInfo.Rows............................0
    a_oInfo.Cols............................0
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............1
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................4
    
    //////////////////////////////////////////////////
    // Uniform Read/Write Test For: uniform_test_uint_array[0]
    //////////////////////////////////////////////////
    
    Setting the following uniform constant:
    
    a_oInfo.Name............................uniform_test_uint_array[0]
    a_oInfo.Index...........................59
    a_oInfo.BufferIndex.....................-1
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................3
    a_oInfo.Location........................146
    a_oInfo.Offset..........................-1
    a_oInfo.Size............................4
    a_oInfo.Type............................5125
    a_oInfo.TypeSize........................4
    a_oInfo.ArrayStride.....................-1
    a_oInfo.MatrixStride....................-1
    a_oInfo.Rows............................0
    a_oInfo.Cols............................0
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............0
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................16
    
    Write uniform values:
    0,
    1,
    2,
    3
    
    Read values:
    0,
    1,
    2,
    3
    
    Result of memcmp(): 0 [ 0 = passed, any non-zero = fail ]
    
    Uniform constant was assigned to this shader buffer variable in the GLSL code:
    
    a_oInfo.Name............................test_uint_array[0]
    a_oInfo.Index...........................59
    a_oInfo.BufferIndex.....................0
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................4
    a_oInfo.Location........................-1
    a_oInfo.Offset..........................228
    a_oInfo.Size............................4
    a_oInfo.Type............................5125
    a_oInfo.TypeSize........................4
    a_oInfo.ArrayStride.....................4
    a_oInfo.MatrixStride....................0
    a_oInfo.Rows............................0
    a_oInfo.Cols............................0
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............1
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................16
    
    //////////////////////////////////////////////////
    // Uniform Read/Write Test For: uniform_test_uvec2
    //////////////////////////////////////////////////
    
    Setting the following uniform constant:
    
    a_oInfo.Name............................uniform_test_uvec2
    a_oInfo.Index...........................60
    a_oInfo.BufferIndex.....................-1
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................3
    a_oInfo.Location........................150
    a_oInfo.Offset..........................-1
    a_oInfo.Size............................1
    a_oInfo.Type............................36294
    a_oInfo.TypeSize........................8
    a_oInfo.ArrayStride.....................-1
    a_oInfo.MatrixStride....................-1
    a_oInfo.Rows............................0
    a_oInfo.Cols............................0
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............0
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................8
    
    Write values:
    32, 64, 0, 0
    
    Read values:
    32, 64, 0, 0
    
    Result of memcmp(): 0 [ 0 = passed, any non-zero = fail ]
    
    Uniform constant was assigned to this shader buffer variable in the GLSL code:
    
    a_oInfo.Name............................test_uvec2
    a_oInfo.Index...........................60
    a_oInfo.BufferIndex.....................0
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................4
    a_oInfo.Location........................-1
    a_oInfo.Offset..........................248
    a_oInfo.Size............................1
    a_oInfo.Type............................36294
    a_oInfo.TypeSize........................8
    a_oInfo.ArrayStride.....................0
    a_oInfo.MatrixStride....................0
    a_oInfo.Rows............................0
    a_oInfo.Cols............................0
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............1
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................8
    
    //////////////////////////////////////////////////
    // Uniform Read/Write Test For: uniform_test_uvec3
    //////////////////////////////////////////////////
    
    Setting the following uniform constant:
    
    a_oInfo.Name............................uniform_test_uvec3
    a_oInfo.Index...........................62
    a_oInfo.BufferIndex.....................-1
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................3
    a_oInfo.Location........................155
    a_oInfo.Offset..........................-1
    a_oInfo.Size............................1
    a_oInfo.Type............................36295
    a_oInfo.TypeSize........................12
    a_oInfo.ArrayStride.....................-1
    a_oInfo.MatrixStride....................-1
    a_oInfo.Rows............................0
    a_oInfo.Cols............................0
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............0
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................12
    
    Write values:
    32, 64, 128, 0
    
    Read values:
    32, 64, 128, 0
    
    Result of memcmp(): 0 [ 0 = passed, any non-zero = fail ]
    
    Uniform constant was assigned to this shader buffer variable in the GLSL code:
    
    a_oInfo.Name............................test_uvec3
    a_oInfo.Index...........................62
    a_oInfo.BufferIndex.....................0
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................4
    a_oInfo.Location........................-1
    a_oInfo.Offset..........................256
    a_oInfo.Size............................1
    a_oInfo.Type............................36295
    a_oInfo.TypeSize........................12
    a_oInfo.ArrayStride.....................0
    a_oInfo.MatrixStride....................0
    a_oInfo.Rows............................0
    a_oInfo.Cols............................0
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............1
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................12
    
    //////////////////////////////////////////////////
    // Uniform Read/Write Test For: uniform_test_uvec4
    //////////////////////////////////////////////////
    
    Setting the following uniform constant:
    
    a_oInfo.Name............................uniform_test_uvec4
    a_oInfo.Index...........................64
    a_oInfo.BufferIndex.....................-1
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................3
    a_oInfo.Location........................160
    a_oInfo.Offset..........................-1
    a_oInfo.Size............................1
    a_oInfo.Type............................36296
    a_oInfo.TypeSize........................16
    a_oInfo.ArrayStride.....................-1
    a_oInfo.MatrixStride....................-1
    a_oInfo.Rows............................0
    a_oInfo.Cols............................0
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............0
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................16
    
    Write values:
    32, 64, 128, 255
    
    Read values:
    32, 64, 128, 255
    
    Result of memcmp(): 0 [ 0 = passed, any non-zero = fail ]
    
    Uniform constant was assigned to this shader buffer variable in the GLSL code:
    
    a_oInfo.Name............................test_uvec4
    a_oInfo.Index...........................64
    a_oInfo.BufferIndex.....................0
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................4
    a_oInfo.Location........................-1
    a_oInfo.Offset..........................272
    a_oInfo.Size............................1
    a_oInfo.Type............................36296
    a_oInfo.TypeSize........................16
    a_oInfo.ArrayStride.....................0
    a_oInfo.MatrixStride....................0
    a_oInfo.Rows............................0
    a_oInfo.Cols............................0
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............1
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................16
    
    //////////////////////////////////////////////////
    // Uniform Read/Write Test For: uniform_test_uvec2_array[0]
    //////////////////////////////////////////////////
    
    Setting the following uniform constant:
    
    a_oInfo.Name............................uniform_test_uvec2_array[0]
    a_oInfo.Index...........................61
    a_oInfo.BufferIndex.....................-1
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................3
    a_oInfo.Location........................151
    a_oInfo.Offset..........................-1
    a_oInfo.Size............................4
    a_oInfo.Type............................36294
    a_oInfo.TypeSize........................8
    a_oInfo.ArrayStride.....................-1
    a_oInfo.MatrixStride....................-1
    a_oInfo.Rows............................0
    a_oInfo.Cols............................0
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............0
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................32
    
    Write values:
    0, 1, 0, 0,
    4, 5, 0, 0,
    8, 9, 0, 0,
    12, 13, 0, 0
    
    Read values:
    0, 1, 0, 0,
    4, 5, 0, 0,
    8, 9, 0, 0,
    12, 13, 0, 0
    
    Result of memcmp(): 0 [ 0 = passed, any non-zero = fail ]
    
    Uniform constant was assigned to this shader buffer variable in the GLSL code:
    
    a_oInfo.Name............................test_uvec2_array[0]
    a_oInfo.Index...........................61
    a_oInfo.BufferIndex.....................0
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................4
    a_oInfo.Location........................-1
    a_oInfo.Offset..........................288
    a_oInfo.Size............................4
    a_oInfo.Type............................36294
    a_oInfo.TypeSize........................8
    a_oInfo.ArrayStride.....................8
    a_oInfo.MatrixStride....................0
    a_oInfo.Rows............................0
    a_oInfo.Cols............................0
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............1
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................32
    
    //////////////////////////////////////////////////
    // Uniform Read/Write Test For: uniform_test_uvec3_array[0]
    //////////////////////////////////////////////////
    
    Setting the following uniform constant:
    
    a_oInfo.Name............................uniform_test_uvec3_array[0]
    a_oInfo.Index...........................63
    a_oInfo.BufferIndex.....................-1
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................3
    a_oInfo.Location........................156
    a_oInfo.Offset..........................-1
    a_oInfo.Size............................4
    a_oInfo.Type............................36295
    a_oInfo.TypeSize........................12
    a_oInfo.ArrayStride.....................-1
    a_oInfo.MatrixStride....................-1
    a_oInfo.Rows............................0
    a_oInfo.Cols............................0
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............0
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................48
    
    Write values:
    0, 1, 2, 0,
    4, 5, 6, 0,
    8, 9, 10, 0,
    12, 13, 14, 0
    
    Read values:
    0, 1, 2, 0,
    4, 5, 6, 0,
    8, 9, 10, 0,
    12, 13, 14, 0
    
    Result of memcmp(): 0 [ 0 = passed, any non-zero = fail ]
    
    Uniform constant was assigned to this shader buffer variable in the GLSL code:
    
    a_oInfo.Name............................test_uvec3_array[0]
    a_oInfo.Index...........................63
    a_oInfo.BufferIndex.....................0
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................4
    a_oInfo.Location........................-1
    a_oInfo.Offset..........................320
    a_oInfo.Size............................4
    a_oInfo.Type............................36296
    a_oInfo.TypeSize........................16
    a_oInfo.ArrayStride.....................16
    a_oInfo.MatrixStride....................0
    a_oInfo.Rows............................0
    a_oInfo.Cols............................0
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............1
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................64
    
    //////////////////////////////////////////////////
    // Uniform Read/Write Test For: uniform_test_uvec4_array[0]
    //////////////////////////////////////////////////
    
    Setting the following uniform constant:
    
    a_oInfo.Name............................uniform_test_uvec4_array[0]
    a_oInfo.Index...........................65
    a_oInfo.BufferIndex.....................-1
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................3
    a_oInfo.Location........................161
    a_oInfo.Offset..........................-1
    a_oInfo.Size............................4
    a_oInfo.Type............................36296
    a_oInfo.TypeSize........................16
    a_oInfo.ArrayStride.....................-1
    a_oInfo.MatrixStride....................-1
    a_oInfo.Rows............................0
    a_oInfo.Cols............................0
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............0
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................64
    
    Write values:
    0, 1, 2, 3,
    4, 5, 6, 7,
    8, 9, 10, 11,
    12, 13, 14, 15
    
    Read values:
    0, 1, 2, 3,
    4, 5, 6, 7,
    8, 9, 10, 11,
    12, 13, 14, 15
    
    Result of memcmp(): 0 [ 0 = passed, any non-zero = fail ]
    
    Uniform constant was assigned to this shader buffer variable in the GLSL code:
    
    a_oInfo.Name............................test_uvec4_array[0]
    a_oInfo.Index...........................65
    a_oInfo.BufferIndex.....................0
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................4
    a_oInfo.Location........................-1
    a_oInfo.Offset..........................384
    a_oInfo.Size............................4
    a_oInfo.Type............................36296
    a_oInfo.TypeSize........................16
    a_oInfo.ArrayStride.....................16
    a_oInfo.MatrixStride....................0
    a_oInfo.Rows............................0
    a_oInfo.Cols............................0
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............1
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................64
    
    //////////////////////////////////////////////////
    // Uniform Read/Write Test For: uniform_test_uint64_t
    //////////////////////////////////////////////////
    
    Setting the following uniform constant:
    
    a_oInfo.Name............................uniform_test_uint64_t
    a_oInfo.Index...........................57
    a_oInfo.BufferIndex.....................-1
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................3
    a_oInfo.Location........................141
    a_oInfo.Offset..........................-1
    a_oInfo.Size............................1
    a_oInfo.Type............................5135
    a_oInfo.TypeSize........................8
    a_oInfo.ArrayStride.....................-1
    a_oInfo.MatrixStride....................-1
    a_oInfo.Rows............................0
    a_oInfo.Cols............................0
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............0
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................8
    
    a_uWrite is: 9123372036854775507
    a_uRead is:  9123372036854775507
    
    
    Result of memcmp(): 0 [ 0 = passed, any non-zero = fail ]
    
    Uniform constant was assigned to this shader buffer variable in the GLSL code:
    
    a_oInfo.Name............................test_uint64_t
    a_oInfo.Index...........................57
    a_oInfo.BufferIndex.....................0
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................4
    a_oInfo.Location........................-1
    a_oInfo.Offset..........................448
    a_oInfo.Size............................1
    a_oInfo.Type............................5135
    a_oInfo.TypeSize........................8
    a_oInfo.ArrayStride.....................0
    a_oInfo.MatrixStride....................0
    a_oInfo.Rows............................0
    a_oInfo.Cols............................0
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............1
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................8
    
    //////////////////////////////////////////////////
    // Uniform Read/Write Test For: uniform_test_uint64_t_array[0]
    //////////////////////////////////////////////////
    
    Setting the following uniform constant:
    
    a_oInfo.Name............................uniform_test_uint64_t_array[0]
    a_oInfo.Index...........................58
    a_oInfo.BufferIndex.....................-1
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................3
    a_oInfo.Location........................142
    a_oInfo.Offset..........................-1
    a_oInfo.Size............................4
    a_oInfo.Type............................5135
    a_oInfo.TypeSize........................8
    a_oInfo.ArrayStride.....................-1
    a_oInfo.MatrixStride....................-1
    a_oInfo.Rows............................0
    a_oInfo.Cols............................0
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............0
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................32
    
    Write uniform values:
    0,
    1,
    2,
    3
    
    Read values:
    0,
    1,
    2,
    3
    
    Result of memcmp(): 0 [ 0 = passed, any non-zero = fail ]
    
    Uniform constant was assigned to this shader buffer variable in the GLSL code:
    
    a_oInfo.Name............................test_uint64_t_array[0]
    a_oInfo.Index...........................58
    a_oInfo.BufferIndex.....................0
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................4
    a_oInfo.Location........................-1
    a_oInfo.Offset..........................456
    a_oInfo.Size............................4
    a_oInfo.Type............................5135
    a_oInfo.TypeSize........................8
    a_oInfo.ArrayStride.....................8
    a_oInfo.MatrixStride....................0
    a_oInfo.Rows............................0
    a_oInfo.Cols............................0
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............1
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................32
    
    //////////////////////////////////////////////////
    // Uniform Read/Write Test For: uniform_test_u64vec2
    //////////////////////////////////////////////////
    
    Setting the following uniform constant:
    
    a_oInfo.Name............................uniform_test_u64vec2
    a_oInfo.Index...........................50
    a_oInfo.BufferIndex.....................-1
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................3
    a_oInfo.Location........................125
    a_oInfo.Offset..........................-1
    a_oInfo.Size............................1
    a_oInfo.Type............................36853
    a_oInfo.TypeSize........................16
    a_oInfo.ArrayStride.....................-1
    a_oInfo.MatrixStride....................-1
    a_oInfo.Rows............................0
    a_oInfo.Cols............................0
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............0
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................16
    
    Write values:
    32, 64, 0, 0
    
    Read values:
    32, 64, 0, 0
    
    Result of memcmp(): 0 [ 0 = passed, any non-zero = fail ]
    
    Uniform constant was assigned to this shader buffer variable in the GLSL code:
    
    a_oInfo.Name............................test_u64vec2
    a_oInfo.Index...........................50
    a_oInfo.BufferIndex.....................0
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................4
    a_oInfo.Location........................-1
    a_oInfo.Offset..........................496
    a_oInfo.Size............................1
    a_oInfo.Type............................36853
    a_oInfo.TypeSize........................16
    a_oInfo.ArrayStride.....................0
    a_oInfo.MatrixStride....................0
    a_oInfo.Rows............................0
    a_oInfo.Cols............................0
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............1
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................16
    
    //////////////////////////////////////////////////
    // Uniform Read/Write Test For: uniform_test_u64vec3
    //////////////////////////////////////////////////
    
    Setting the following uniform constant:
    
    a_oInfo.Name............................uniform_test_u64vec3
    a_oInfo.Index...........................52
    a_oInfo.BufferIndex.....................-1
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................3
    a_oInfo.Location........................130
    a_oInfo.Offset..........................-1
    a_oInfo.Size............................1
    a_oInfo.Type............................36854
    a_oInfo.TypeSize........................24
    a_oInfo.ArrayStride.....................-1
    a_oInfo.MatrixStride....................-1
    a_oInfo.Rows............................0
    a_oInfo.Cols............................0
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............0
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................24
    
    Write values:
    32, 64, 128, 0
    
    Read values:
    32, 64, 128, 0
    
    Result of memcmp(): 0 [ 0 = passed, any non-zero = fail ]
    
    Uniform constant was assigned to this shader buffer variable in the GLSL code:
    
    a_oInfo.Name............................test_u64vec3
    a_oInfo.Index...........................52
    a_oInfo.BufferIndex.....................0
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................4
    a_oInfo.Location........................-1
    a_oInfo.Offset..........................512
    a_oInfo.Size............................1
    a_oInfo.Type............................36854
    a_oInfo.TypeSize........................24
    a_oInfo.ArrayStride.....................0
    a_oInfo.MatrixStride....................0
    a_oInfo.Rows............................0
    a_oInfo.Cols............................0
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............1
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................24
    
    //////////////////////////////////////////////////
    // Uniform Read/Write Test For: uniform_test_u64vec4
    //////////////////////////////////////////////////
    
    Setting the following uniform constant:
    
    a_oInfo.Name............................uniform_test_u64vec4
    a_oInfo.Index...........................54
    a_oInfo.BufferIndex.....................-1
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................3
    a_oInfo.Location........................135
    a_oInfo.Offset..........................-1
    a_oInfo.Size............................1
    a_oInfo.Type............................36855
    a_oInfo.TypeSize........................32
    a_oInfo.ArrayStride.....................-1
    a_oInfo.MatrixStride....................-1
    a_oInfo.Rows............................0
    a_oInfo.Cols............................0
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............0
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................32
    
    Write values:
    32, 64, 128, 255
    
    Read values:
    32, 64, 128, 255
    
    Result of memcmp(): 0 [ 0 = passed, any non-zero = fail ]
    
    Uniform constant was assigned to this shader buffer variable in the GLSL code:
    
    a_oInfo.Name............................test_u64vec4
    a_oInfo.Index...........................54
    a_oInfo.BufferIndex.....................0
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................4
    a_oInfo.Location........................-1
    a_oInfo.Offset..........................544
    a_oInfo.Size............................1
    a_oInfo.Type............................36855
    a_oInfo.TypeSize........................32
    a_oInfo.ArrayStride.....................0
    a_oInfo.MatrixStride....................0
    a_oInfo.Rows............................0
    a_oInfo.Cols............................0
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............1
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................32
    
    //////////////////////////////////////////////////
    // Uniform Read/Write Test For: uniform_test_u64vec2_array[0]
    //////////////////////////////////////////////////
    
    Setting the following uniform constant:
    
    a_oInfo.Name............................uniform_test_u64vec2_array[0]
    a_oInfo.Index...........................51
    a_oInfo.BufferIndex.....................-1
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................3
    a_oInfo.Location........................126
    a_oInfo.Offset..........................-1
    a_oInfo.Size............................4
    a_oInfo.Type............................36853
    a_oInfo.TypeSize........................16
    a_oInfo.ArrayStride.....................-1
    a_oInfo.MatrixStride....................-1
    a_oInfo.Rows............................0
    a_oInfo.Cols............................0
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............0
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................64
    
    Write values:
    0, 1, 0, 0,
    4, 5, 0, 0,
    8, 9, 0, 0,
    12, 13, 0, 0
    
    Read values:
    0, 1, 0, 0,
    4, 5, 0, 0,
    8, 9, 0, 0,
    12, 13, 0, 0
    
    Result of memcmp(): 0 [ 0 = passed, any non-zero = fail ]
    
    Uniform constant was assigned to this shader buffer variable in the GLSL code:
    
    a_oInfo.Name............................test_u64vec2_array[0]
    a_oInfo.Index...........................51
    a_oInfo.BufferIndex.....................0
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................4
    a_oInfo.Location........................-1
    a_oInfo.Offset..........................576
    a_oInfo.Size............................4
    a_oInfo.Type............................36853
    a_oInfo.TypeSize........................16
    a_oInfo.ArrayStride.....................16
    a_oInfo.MatrixStride....................0
    a_oInfo.Rows............................0
    a_oInfo.Cols............................0
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............1
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................64
    
    //////////////////////////////////////////////////
    // Uniform Read/Write Test For: uniform_test_u64vec3_array[0]
    //////////////////////////////////////////////////
    
    Setting the following uniform constant:
    
    a_oInfo.Name............................uniform_test_u64vec3_array[0]
    a_oInfo.Index...........................53
    a_oInfo.BufferIndex.....................-1
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................3
    a_oInfo.Location........................131
    a_oInfo.Offset..........................-1
    a_oInfo.Size............................4
    a_oInfo.Type............................36854
    a_oInfo.TypeSize........................24
    a_oInfo.ArrayStride.....................-1
    a_oInfo.MatrixStride....................-1
    a_oInfo.Rows............................0
    a_oInfo.Cols............................0
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............0
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................96
    
    Write values:
    0, 1, 2, 0,
    4, 5, 6, 0,
    8, 9, 10, 0,
    12, 13, 14, 0
    
    Read values:
    0, 1, 2, 0,
    4, 5, 6, 0,
    8, 9, 10, 0,
    12, 13, 14, 0
    
    Result of memcmp(): 0 [ 0 = passed, any non-zero = fail ]
    
    Uniform constant was assigned to this shader buffer variable in the GLSL code:
    
    a_oInfo.Name............................test_u64vec3_array[0]
    a_oInfo.Index...........................53
    a_oInfo.BufferIndex.....................0
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................4
    a_oInfo.Location........................-1
    a_oInfo.Offset..........................640
    a_oInfo.Size............................4
    a_oInfo.Type............................36855
    a_oInfo.TypeSize........................32
    a_oInfo.ArrayStride.....................32
    a_oInfo.MatrixStride....................0
    a_oInfo.Rows............................0
    a_oInfo.Cols............................0
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............1
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................128
    
    //////////////////////////////////////////////////
    // Uniform Read/Write Test For: uniform_test_u64vec4_array[0]
    //////////////////////////////////////////////////
    
    Setting the following uniform constant:
    
    a_oInfo.Name............................uniform_test_u64vec4_array[0]
    a_oInfo.Index...........................55
    a_oInfo.BufferIndex.....................-1
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................3
    a_oInfo.Location........................136
    a_oInfo.Offset..........................-1
    a_oInfo.Size............................4
    a_oInfo.Type............................36855
    a_oInfo.TypeSize........................32
    a_oInfo.ArrayStride.....................-1
    a_oInfo.MatrixStride....................-1
    a_oInfo.Rows............................0
    a_oInfo.Cols............................0
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............0
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................128
    
    Write values:
    0, 1, 2, 3,
    4, 5, 6, 7,
    8, 9, 10, 11,
    12, 13, 14, 15
    
    Read values:
    0, 1, 2, 3,
    4, 5, 6, 7,
    8, 9, 10, 11,
    12, 13, 14, 15
    
    Result of memcmp(): 0 [ 0 = passed, any non-zero = fail ]
    
    Uniform constant was assigned to this shader buffer variable in the GLSL code:
    
    a_oInfo.Name............................test_u64vec4_array[0]
    a_oInfo.Index...........................55
    a_oInfo.BufferIndex.....................0
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................4
    a_oInfo.Location........................-1
    a_oInfo.Offset..........................768
    a_oInfo.Size............................4
    a_oInfo.Type............................36855
    a_oInfo.TypeSize........................32
    a_oInfo.ArrayStride.....................32
    a_oInfo.MatrixStride....................0
    a_oInfo.Rows............................0
    a_oInfo.Cols............................0
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............1
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................128
    
    //////////////////////////////////////////////////
    // Uniform Read/Write Test For: uniform_test_int
    //////////////////////////////////////////////////
    
    Setting the following uniform constant:
    
    a_oInfo.Name............................uniform_test_int
    a_oInfo.Index...........................22
    a_oInfo.BufferIndex.....................-1
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................3
    a_oInfo.Location........................55
    a_oInfo.Offset..........................-1
    a_oInfo.Size............................1
    a_oInfo.Type............................5124
    a_oInfo.TypeSize........................4
    a_oInfo.ArrayStride.....................-1
    a_oInfo.MatrixStride....................-1
    a_oInfo.Rows............................0
    a_oInfo.Cols............................0
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............0
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................4
    
    a_nWrite is: 32
    a_nRead is:  32
    
    
    Result of memcmp(): 0 [ 0 = passed, any non-zero = fail ]
    
    Uniform constant was assigned to this shader buffer variable in the GLSL code:
    
    a_oInfo.Name............................test_int
    a_oInfo.Index...........................22
    a_oInfo.BufferIndex.....................0
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................4
    a_oInfo.Location........................-1
    a_oInfo.Offset..........................896
    a_oInfo.Size............................1
    a_oInfo.Type............................5124
    a_oInfo.TypeSize........................4
    a_oInfo.ArrayStride.....................0
    a_oInfo.MatrixStride....................0
    a_oInfo.Rows............................0
    a_oInfo.Cols............................0
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............1
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................4
    
    //////////////////////////////////////////////////
    // Uniform Read/Write Test For: uniform_test_int_array[0]
    //////////////////////////////////////////////////
    
    Setting the following uniform constant:
    
    a_oInfo.Name............................uniform_test_int_array[0]
    a_oInfo.Index...........................25
    a_oInfo.BufferIndex.....................-1
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................3
    a_oInfo.Location........................61
    a_oInfo.Offset..........................-1
    a_oInfo.Size............................4
    a_oInfo.Type............................5124
    a_oInfo.TypeSize........................4
    a_oInfo.ArrayStride.....................-1
    a_oInfo.MatrixStride....................-1
    a_oInfo.Rows............................0
    a_oInfo.Cols............................0
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............0
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................16
    
    Write uniform values:
    0,
    1,
    2,
    3
    
    Read values:
    0,
    1,
    2,
    3
    
    Result of memcmp(): 0 [ 0 = passed, any non-zero = fail ]
    
    Uniform constant was assigned to this shader buffer variable in the GLSL code:
    
    a_oInfo.Name............................test_int_array[0]
    a_oInfo.Index...........................25
    a_oInfo.BufferIndex.....................0
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................4
    a_oInfo.Location........................-1
    a_oInfo.Offset..........................900
    a_oInfo.Size............................4
    a_oInfo.Type............................5124
    a_oInfo.TypeSize........................4
    a_oInfo.ArrayStride.....................4
    a_oInfo.MatrixStride....................0
    a_oInfo.Rows............................0
    a_oInfo.Cols............................0
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............1
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................16
    
    //////////////////////////////////////////////////
    // Uniform Read/Write Test For: uniform_test_ivec2
    //////////////////////////////////////////////////
    
    Setting the following uniform constant:
    
    a_oInfo.Name............................uniform_test_ivec2
    a_oInfo.Index...........................26
    a_oInfo.BufferIndex.....................-1
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................3
    a_oInfo.Location........................65
    a_oInfo.Offset..........................-1
    a_oInfo.Size............................1
    a_oInfo.Type............................35667
    a_oInfo.TypeSize........................8
    a_oInfo.ArrayStride.....................-1
    a_oInfo.MatrixStride....................-1
    a_oInfo.Rows............................0
    a_oInfo.Cols............................0
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............0
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................8
    
    Write values:
    32, 64, 0, 0
    
    Read values:
    32, 64, 0, 0
    
    Result of memcmp(): 0 [ 0 = passed, any non-zero = fail ]
    
    Uniform constant was assigned to this shader buffer variable in the GLSL code:
    
    a_oInfo.Name............................test_ivec2
    a_oInfo.Index...........................26
    a_oInfo.BufferIndex.....................0
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................4
    a_oInfo.Location........................-1
    a_oInfo.Offset..........................920
    a_oInfo.Size............................1
    a_oInfo.Type............................35667
    a_oInfo.TypeSize........................8
    a_oInfo.ArrayStride.....................0
    a_oInfo.MatrixStride....................0
    a_oInfo.Rows............................0
    a_oInfo.Cols............................0
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............1
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................8
    
    //////////////////////////////////////////////////
    // Uniform Read/Write Test For: uniform_test_ivec3
    //////////////////////////////////////////////////
    
    Setting the following uniform constant:
    
    a_oInfo.Name............................uniform_test_ivec3
    a_oInfo.Index...........................28
    a_oInfo.BufferIndex.....................-1
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................3
    a_oInfo.Location........................70
    a_oInfo.Offset..........................-1
    a_oInfo.Size............................1
    a_oInfo.Type............................35668
    a_oInfo.TypeSize........................12
    a_oInfo.ArrayStride.....................-1
    a_oInfo.MatrixStride....................-1
    a_oInfo.Rows............................0
    a_oInfo.Cols............................0
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............0
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................12
    
    Write values:
    32, 64, 128, 0
    
    Read values:
    32, 64, 128, 0
    
    Result of memcmp(): 0 [ 0 = passed, any non-zero = fail ]
    
    Uniform constant was assigned to this shader buffer variable in the GLSL code:
    
    a_oInfo.Name............................test_ivec3
    a_oInfo.Index...........................28
    a_oInfo.BufferIndex.....................0
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................4
    a_oInfo.Location........................-1
    a_oInfo.Offset..........................928
    a_oInfo.Size............................1
    a_oInfo.Type............................35668
    a_oInfo.TypeSize........................12
    a_oInfo.ArrayStride.....................0
    a_oInfo.MatrixStride....................0
    a_oInfo.Rows............................0
    a_oInfo.Cols............................0
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............1
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................12
    
    //////////////////////////////////////////////////
    // Uniform Read/Write Test For: uniform_test_ivec4
    //////////////////////////////////////////////////
    
    Setting the following uniform constant:
    
    a_oInfo.Name............................uniform_test_ivec4
    a_oInfo.Index...........................30
    a_oInfo.BufferIndex.....................-1
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................3
    a_oInfo.Location........................75
    a_oInfo.Offset..........................-1
    a_oInfo.Size............................1
    a_oInfo.Type............................35669
    a_oInfo.TypeSize........................16
    a_oInfo.ArrayStride.....................-1
    a_oInfo.MatrixStride....................-1
    a_oInfo.Rows............................0
    a_oInfo.Cols............................0
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............0
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................16
    
    Write values:
    32, 64, 128, 255
    
    Read values:
    32, 64, 128, 255
    
    Result of memcmp(): 0 [ 0 = passed, any non-zero = fail ]
    
    Uniform constant was assigned to this shader buffer variable in the GLSL code:
    
    a_oInfo.Name............................test_ivec4
    a_oInfo.Index...........................30
    a_oInfo.BufferIndex.....................0
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................4
    a_oInfo.Location........................-1
    a_oInfo.Offset..........................944
    a_oInfo.Size............................1
    a_oInfo.Type............................35669
    a_oInfo.TypeSize........................16
    a_oInfo.ArrayStride.....................0
    a_oInfo.MatrixStride....................0
    a_oInfo.Rows............................0
    a_oInfo.Cols............................0
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............1
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................16
    
    //////////////////////////////////////////////////
    // Uniform Read/Write Test For: uniform_test_ivec2_array[0]
    //////////////////////////////////////////////////
    
    Setting the following uniform constant:
    
    a_oInfo.Name............................uniform_test_ivec2_array[0]
    a_oInfo.Index...........................27
    a_oInfo.BufferIndex.....................-1
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................3
    a_oInfo.Location........................66
    a_oInfo.Offset..........................-1
    a_oInfo.Size............................4
    a_oInfo.Type............................35667
    a_oInfo.TypeSize........................8
    a_oInfo.ArrayStride.....................-1
    a_oInfo.MatrixStride....................-1
    a_oInfo.Rows............................0
    a_oInfo.Cols............................0
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............0
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................32
    
    Write values:
    0, 1, 0, 0,
    4, 5, 0, 0,
    8, 9, 0, 0,
    12, 13, 0, 0
    
    Read values:
    0, 1, 0, 0,
    4, 5, 0, 0,
    8, 9, 0, 0,
    12, 13, 0, 0
    
    Result of memcmp(): 0 [ 0 = passed, any non-zero = fail ]
    
    Uniform constant was assigned to this shader buffer variable in the GLSL code:
    
    a_oInfo.Name............................test_ivec2_array[0]
    a_oInfo.Index...........................27
    a_oInfo.BufferIndex.....................0
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................4
    a_oInfo.Location........................-1
    a_oInfo.Offset..........................960
    a_oInfo.Size............................4
    a_oInfo.Type............................35667
    a_oInfo.TypeSize........................8
    a_oInfo.ArrayStride.....................8
    a_oInfo.MatrixStride....................0
    a_oInfo.Rows............................0
    a_oInfo.Cols............................0
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............1
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................32
    
    //////////////////////////////////////////////////
    // Uniform Read/Write Test For: uniform_test_ivec3_array[0]
    //////////////////////////////////////////////////
    
    Setting the following uniform constant:
    
    a_oInfo.Name............................uniform_test_ivec3_array[0]
    a_oInfo.Index...........................29
    a_oInfo.BufferIndex.....................-1
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................3
    a_oInfo.Location........................71
    a_oInfo.Offset..........................-1
    a_oInfo.Size............................4
    a_oInfo.Type............................35668
    a_oInfo.TypeSize........................12
    a_oInfo.ArrayStride.....................-1
    a_oInfo.MatrixStride....................-1
    a_oInfo.Rows............................0
    a_oInfo.Cols............................0
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............0
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................48
    
    Write values:
    0, 1, 2, 0,
    4, 5, 6, 0,
    8, 9, 10, 0,
    12, 13, 14, 0
    
    Read values:
    0, 1, 2, 0,
    4, 5, 6, 0,
    8, 9, 10, 0,
    12, 13, 14, 0
    
    Result of memcmp(): 0 [ 0 = passed, any non-zero = fail ]
    
    Uniform constant was assigned to this shader buffer variable in the GLSL code:
    
    a_oInfo.Name............................test_ivec3_array[0]
    a_oInfo.Index...........................29
    a_oInfo.BufferIndex.....................0
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................4
    a_oInfo.Location........................-1
    a_oInfo.Offset..........................992
    a_oInfo.Size............................4
    a_oInfo.Type............................35669
    a_oInfo.TypeSize........................16
    a_oInfo.ArrayStride.....................16
    a_oInfo.MatrixStride....................0
    a_oInfo.Rows............................0
    a_oInfo.Cols............................0
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............1
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................64
    
    //////////////////////////////////////////////////
    // Uniform Read/Write Test For: uniform_test_ivec4_array[0]
    //////////////////////////////////////////////////
    
    Setting the following uniform constant:
    
    a_oInfo.Name............................uniform_test_ivec4_array[0]
    a_oInfo.Index...........................31
    a_oInfo.BufferIndex.....................-1
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................3
    a_oInfo.Location........................76
    a_oInfo.Offset..........................-1
    a_oInfo.Size............................4
    a_oInfo.Type............................35669
    a_oInfo.TypeSize........................16
    a_oInfo.ArrayStride.....................-1
    a_oInfo.MatrixStride....................-1
    a_oInfo.Rows............................0
    a_oInfo.Cols............................0
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............0
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................64
    
    Write values:
    0, 1, 2, 3,
    4, 5, 6, 7,
    8, 9, 10, 11,
    12, 13, 14, 15
    
    Read values:
    0, 1, 2, 3,
    4, 5, 6, 7,
    8, 9, 10, 11,
    12, 13, 14, 15
    
    Result of memcmp(): 0 [ 0 = passed, any non-zero = fail ]
    
    Uniform constant was assigned to this shader buffer variable in the GLSL code:
    
    a_oInfo.Name............................test_ivec4_array[0]
    a_oInfo.Index...........................31
    a_oInfo.BufferIndex.....................0
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................4
    a_oInfo.Location........................-1
    a_oInfo.Offset..........................1056
    a_oInfo.Size............................4
    a_oInfo.Type............................35669
    a_oInfo.TypeSize........................16
    a_oInfo.ArrayStride.....................16
    a_oInfo.MatrixStride....................0
    a_oInfo.Rows............................0
    a_oInfo.Cols............................0
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............1
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................64
    
    //////////////////////////////////////////////////
    // Uniform Read/Write Test For: uniform_test_int64_t
    //////////////////////////////////////////////////
    
    Setting the following uniform constant:
    
    a_oInfo.Name............................uniform_test_int64_t
    a_oInfo.Index...........................23
    a_oInfo.BufferIndex.....................-1
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................3
    a_oInfo.Location........................56
    a_oInfo.Offset..........................-1
    a_oInfo.Size............................1
    a_oInfo.Type............................5134
    a_oInfo.TypeSize........................8
    a_oInfo.ArrayStride.....................-1
    a_oInfo.MatrixStride....................-1
    a_oInfo.Rows............................0
    a_oInfo.Cols............................0
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............0
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................8
    
    a_iWrite is: 32
    a_iRead is:  32
    
    
    Result of memcmp(): 0 [ 0 = passed, any non-zero = fail ]
    
    Uniform constant was assigned to this shader buffer variable in the GLSL code:
    
    a_oInfo.Name............................test_int64_t
    a_oInfo.Index...........................23
    a_oInfo.BufferIndex.....................0
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................4
    a_oInfo.Location........................-1
    a_oInfo.Offset..........................1120
    a_oInfo.Size............................1
    a_oInfo.Type............................5134
    a_oInfo.TypeSize........................8
    a_oInfo.ArrayStride.....................0
    a_oInfo.MatrixStride....................0
    a_oInfo.Rows............................0
    a_oInfo.Cols............................0
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............1
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................8
    
    //////////////////////////////////////////////////
    // Uniform Read/Write Test For: uniform_test_int64_t_array[0]
    //////////////////////////////////////////////////
    
    Setting the following uniform constant:
    
    a_oInfo.Name............................uniform_test_int64_t_array[0]
    a_oInfo.Index...........................24
    a_oInfo.BufferIndex.....................-1
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................3
    a_oInfo.Location........................57
    a_oInfo.Offset..........................-1
    a_oInfo.Size............................4
    a_oInfo.Type............................5134
    a_oInfo.TypeSize........................8
    a_oInfo.ArrayStride.....................-1
    a_oInfo.MatrixStride....................-1
    a_oInfo.Rows............................0
    a_oInfo.Cols............................0
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............0
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................32
    
    Write uniform values:
    0,
    1,
    2,
    3
    
    Read values:
    0,
    1,
    2,
    3
    
    Result of memcmp(): 0 [ 0 = passed, any non-zero = fail ]
    
    Uniform constant was assigned to this shader buffer variable in the GLSL code:
    
    a_oInfo.Name............................test_int64_t_array[0]
    a_oInfo.Index...........................24
    a_oInfo.BufferIndex.....................0
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................4
    a_oInfo.Location........................-1
    a_oInfo.Offset..........................1128
    a_oInfo.Size............................4
    a_oInfo.Type............................5134
    a_oInfo.TypeSize........................8
    a_oInfo.ArrayStride.....................8
    a_oInfo.MatrixStride....................0
    a_oInfo.Rows............................0
    a_oInfo.Cols............................0
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............1
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................32
    
    //////////////////////////////////////////////////
    // Uniform Read/Write Test For: uniform_test_i64vec2
    //////////////////////////////////////////////////
    
    Setting the following uniform constant:
    
    a_oInfo.Name............................uniform_test_i64vec2
    a_oInfo.Index...........................16
    a_oInfo.BufferIndex.....................-1
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................3
    a_oInfo.Location........................40
    a_oInfo.Offset..........................-1
    a_oInfo.Size............................1
    a_oInfo.Type............................36841
    a_oInfo.TypeSize........................16
    a_oInfo.ArrayStride.....................-1
    a_oInfo.MatrixStride....................-1
    a_oInfo.Rows............................0
    a_oInfo.Cols............................0
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............0
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................16
    
    Write values:
    32, 64, 0, 0
    
    Read values:
    32, 64, 0, 0
    
    Result of memcmp(): 0 [ 0 = passed, any non-zero = fail ]
    
    Uniform constant was assigned to this shader buffer variable in the GLSL code:
    
    a_oInfo.Name............................test_i64vec2
    a_oInfo.Index...........................16
    a_oInfo.BufferIndex.....................0
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................4
    a_oInfo.Location........................-1
    a_oInfo.Offset..........................1168
    a_oInfo.Size............................1
    a_oInfo.Type............................36841
    a_oInfo.TypeSize........................16
    a_oInfo.ArrayStride.....................0
    a_oInfo.MatrixStride....................0
    a_oInfo.Rows............................0
    a_oInfo.Cols............................0
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............1
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................16
    
    //////////////////////////////////////////////////
    // Uniform Read/Write Test For: uniform_test_i64vec3
    //////////////////////////////////////////////////
    
    Setting the following uniform constant:
    
    a_oInfo.Name............................uniform_test_i64vec3
    a_oInfo.Index...........................18
    a_oInfo.BufferIndex.....................-1
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................3
    a_oInfo.Location........................45
    a_oInfo.Offset..........................-1
    a_oInfo.Size............................1
    a_oInfo.Type............................36842
    a_oInfo.TypeSize........................24
    a_oInfo.ArrayStride.....................-1
    a_oInfo.MatrixStride....................-1
    a_oInfo.Rows............................0
    a_oInfo.Cols............................0
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............0
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................24
    
    Write values:
    32, 64, 128, 0
    
    Read values:
    32, 64, 128, 0
    
    Result of memcmp(): 0 [ 0 = passed, any non-zero = fail ]
    
    Uniform constant was assigned to this shader buffer variable in the GLSL code:
    
    a_oInfo.Name............................test_i64vec3
    a_oInfo.Index...........................18
    a_oInfo.BufferIndex.....................0
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................4
    a_oInfo.Location........................-1
    a_oInfo.Offset..........................1184
    a_oInfo.Size............................1
    a_oInfo.Type............................36842
    a_oInfo.TypeSize........................24
    a_oInfo.ArrayStride.....................0
    a_oInfo.MatrixStride....................0
    a_oInfo.Rows............................0
    a_oInfo.Cols............................0
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............1
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................24
    
    //////////////////////////////////////////////////
    // Uniform Read/Write Test For: uniform_test_i64vec4
    //////////////////////////////////////////////////
    
    Setting the following uniform constant:
    
    a_oInfo.Name............................uniform_test_i64vec4
    a_oInfo.Index...........................20
    a_oInfo.BufferIndex.....................-1
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................3
    a_oInfo.Location........................50
    a_oInfo.Offset..........................-1
    a_oInfo.Size............................1
    a_oInfo.Type............................36843
    a_oInfo.TypeSize........................32
    a_oInfo.ArrayStride.....................-1
    a_oInfo.MatrixStride....................-1
    a_oInfo.Rows............................0
    a_oInfo.Cols............................0
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............0
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................32
    
    Write values:
    32, 64, 128, 255
    
    Read values:
    32, 64, 128, 255
    
    Result of memcmp(): 0 [ 0 = passed, any non-zero = fail ]
    
    Uniform constant was assigned to this shader buffer variable in the GLSL code:
    
    a_oInfo.Name............................test_i64vec4
    a_oInfo.Index...........................20
    a_oInfo.BufferIndex.....................0
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................4
    a_oInfo.Location........................-1
    a_oInfo.Offset..........................1216
    a_oInfo.Size............................1
    a_oInfo.Type............................36843
    a_oInfo.TypeSize........................32
    a_oInfo.ArrayStride.....................0
    a_oInfo.MatrixStride....................0
    a_oInfo.Rows............................0
    a_oInfo.Cols............................0
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............1
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................32
    
    //////////////////////////////////////////////////
    // Uniform Read/Write Test For: uniform_test_i64vec2_array[0]
    //////////////////////////////////////////////////
    
    Setting the following uniform constant:
    
    a_oInfo.Name............................uniform_test_i64vec2_array[0]
    a_oInfo.Index...........................17
    a_oInfo.BufferIndex.....................-1
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................3
    a_oInfo.Location........................41
    a_oInfo.Offset..........................-1
    a_oInfo.Size............................4
    a_oInfo.Type............................36841
    a_oInfo.TypeSize........................16
    a_oInfo.ArrayStride.....................-1
    a_oInfo.MatrixStride....................-1
    a_oInfo.Rows............................0
    a_oInfo.Cols............................0
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............0
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................64
    
    Write values:
    0, 1, 0, 0,
    4, 5, 0, 0,
    8, 9, 0, 0,
    12, 13, 0, 0
    
    Read values:
    0, 1, 0, 0,
    4, 5, 0, 0,
    8, 9, 0, 0,
    12, 13, 0, 0
    
    Result of memcmp(): 0 [ 0 = passed, any non-zero = fail ]
    
    Uniform constant was assigned to this shader buffer variable in the GLSL code:
    
    a_oInfo.Name............................test_i64vec2_array[0]
    a_oInfo.Index...........................17
    a_oInfo.BufferIndex.....................0
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................4
    a_oInfo.Location........................-1
    a_oInfo.Offset..........................1248
    a_oInfo.Size............................4
    a_oInfo.Type............................36841
    a_oInfo.TypeSize........................16
    a_oInfo.ArrayStride.....................16
    a_oInfo.MatrixStride....................0
    a_oInfo.Rows............................0
    a_oInfo.Cols............................0
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............1
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................64
    
    //////////////////////////////////////////////////
    // Uniform Read/Write Test For: uniform_test_i64vec3_array[0]
    //////////////////////////////////////////////////
    
    Setting the following uniform constant:
    
    a_oInfo.Name............................uniform_test_i64vec3_array[0]
    a_oInfo.Index...........................19
    a_oInfo.BufferIndex.....................-1
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................3
    a_oInfo.Location........................46
    a_oInfo.Offset..........................-1
    a_oInfo.Size............................4
    a_oInfo.Type............................36842
    a_oInfo.TypeSize........................24
    a_oInfo.ArrayStride.....................-1
    a_oInfo.MatrixStride....................-1
    a_oInfo.Rows............................0
    a_oInfo.Cols............................0
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............0
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................96
    
    Write values:
    0, 1, 2, 0,
    4, 5, 6, 0,
    8, 9, 10, 0,
    12, 13, 14, 0
    
    Read values:
    0, 1, 2, 0,
    4, 5, 6, 0,
    8, 9, 10, 0,
    12, 13, 14, 0
    
    Result of memcmp(): 0 [ 0 = passed, any non-zero = fail ]
    
    Uniform constant was assigned to this shader buffer variable in the GLSL code:
    
    a_oInfo.Name............................test_i64vec3_array[0]
    a_oInfo.Index...........................19
    a_oInfo.BufferIndex.....................0
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................4
    a_oInfo.Location........................-1
    a_oInfo.Offset..........................1312
    a_oInfo.Size............................4
    a_oInfo.Type............................36843
    a_oInfo.TypeSize........................32
    a_oInfo.ArrayStride.....................32
    a_oInfo.MatrixStride....................0
    a_oInfo.Rows............................0
    a_oInfo.Cols............................0
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............1
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................128
    
    //////////////////////////////////////////////////
    // Uniform Read/Write Test For: uniform_test_i64vec4_array[0]
    //////////////////////////////////////////////////
    
    Setting the following uniform constant:
    
    a_oInfo.Name............................uniform_test_i64vec4_array[0]
    a_oInfo.Index...........................21
    a_oInfo.BufferIndex.....................-1
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................3
    a_oInfo.Location........................51
    a_oInfo.Offset..........................-1
    a_oInfo.Size............................4
    a_oInfo.Type............................36843
    a_oInfo.TypeSize........................32
    a_oInfo.ArrayStride.....................-1
    a_oInfo.MatrixStride....................-1
    a_oInfo.Rows............................0
    a_oInfo.Cols............................0
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............0
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................128
    
    Write values:
    0, 1, 2, 3,
    4, 5, 6, 7,
    8, 9, 10, 11,
    12, 13, 14, 15
    
    Read values:
    0, 1, 2, 3,
    4, 5, 6, 7,
    8, 9, 10, 11,
    12, 13, 14, 15
    
    Result of memcmp(): 0 [ 0 = passed, any non-zero = fail ]
    
    Uniform constant was assigned to this shader buffer variable in the GLSL code:
    
    a_oInfo.Name............................test_i64vec4_array[0]
    a_oInfo.Index...........................21
    a_oInfo.BufferIndex.....................0
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................4
    a_oInfo.Location........................-1
    a_oInfo.Offset..........................1440
    a_oInfo.Size............................4
    a_oInfo.Type............................36843
    a_oInfo.TypeSize........................32
    a_oInfo.ArrayStride.....................32
    a_oInfo.MatrixStride....................0
    a_oInfo.Rows............................0
    a_oInfo.Cols............................0
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............1
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................128
    
    //////////////////////////////////////////////////
    // Uniform Read/Write Test For: uniform_test_float
    //////////////////////////////////////////////////
    
    Setting the following uniform constant:
    
    a_oInfo.Name............................uniform_test_float
    a_oInfo.Index...........................8
    a_oInfo.BufferIndex.....................-1
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................3
    a_oInfo.Location........................20
    a_oInfo.Offset..........................-1
    a_oInfo.Size............................1
    a_oInfo.Type............................5126
    a_oInfo.TypeSize........................4
    a_oInfo.ArrayStride.....................-1
    a_oInfo.MatrixStride....................-1
    a_oInfo.Rows............................0
    a_oInfo.Cols............................0
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............0
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................4
    
    a_fWrite is: 1.12000000000
    a_fRead is:  1.12000000477
    
    Result of memcmp(): 0 [ 0 = passed, any non-zero = fail ]
    
    Uniform constant was assigned to this shader buffer variable in the GLSL code:
    
    a_oInfo.Name............................test_float
    a_oInfo.Index...........................8
    a_oInfo.BufferIndex.....................0
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................4
    a_oInfo.Location........................-1
    a_oInfo.Offset..........................1568
    a_oInfo.Size............................1
    a_oInfo.Type............................5126
    a_oInfo.TypeSize........................4
    a_oInfo.ArrayStride.....................0
    a_oInfo.MatrixStride....................0
    a_oInfo.Rows............................0
    a_oInfo.Cols............................0
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............1
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................4
    
    //////////////////////////////////////////////////
    // Uniform Read/Write Test For: uniform_test_float_array[0]
    //////////////////////////////////////////////////
    
    Setting the following uniform constant:
    
    a_oInfo.Name............................uniform_test_float_array[0]
    a_oInfo.Index...........................9
    a_oInfo.BufferIndex.....................-1
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................3
    a_oInfo.Location........................21
    a_oInfo.Offset..........................-1
    a_oInfo.Size............................4
    a_oInfo.Type............................5126
    a_oInfo.TypeSize........................4
    a_oInfo.ArrayStride.....................-1
    a_oInfo.MatrixStride....................-1
    a_oInfo.Rows............................0
    a_oInfo.Cols............................0
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............0
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................16
    
    Write uniform values:
    0,
    1,
    2,
    3
    
    Read values:
    0,
    1,
    2,
    3
    
    Result of memcmp(): 0 [ 0 = passed, any non-zero = fail ]
    
    Uniform constant was assigned to this shader buffer variable in the GLSL code:
    
    a_oInfo.Name............................test_float_array[0]
    a_oInfo.Index...........................9
    a_oInfo.BufferIndex.....................0
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................4
    a_oInfo.Location........................-1
    a_oInfo.Offset..........................1572
    a_oInfo.Size............................4
    a_oInfo.Type............................5126
    a_oInfo.TypeSize........................4
    a_oInfo.ArrayStride.....................4
    a_oInfo.MatrixStride....................0
    a_oInfo.Rows............................0
    a_oInfo.Cols............................0
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............1
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................16
    
    //////////////////////////////////////////////////
    // Uniform Read/Write Test For: uniform_test_fvec2
    //////////////////////////////////////////////////
    
    Setting the following uniform constant:
    
    a_oInfo.Name............................uniform_test_fvec2
    a_oInfo.Index...........................10
    a_oInfo.BufferIndex.....................-1
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................3
    a_oInfo.Location........................25
    a_oInfo.Offset..........................-1
    a_oInfo.Size............................1
    a_oInfo.Type............................35664
    a_oInfo.TypeSize........................8
    a_oInfo.ArrayStride.....................-1
    a_oInfo.MatrixStride....................-1
    a_oInfo.Rows............................0
    a_oInfo.Cols............................0
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............0
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................8
    
    Write values:
    32.1100006104, 649.824279785, 0.000000000000, 0.000000000000
    
    Read values:
    32.1100006104, 649.824279785, 0.000000000000, 0.000000000000
    
    Result of memcmp(): 0 [ 0 = passed, any non-zero = fail ]
    
    Uniform constant was assigned to this shader buffer variable in the GLSL code:
    
    a_oInfo.Name............................test_fvec2
    a_oInfo.Index...........................10
    a_oInfo.BufferIndex.....................0
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................4
    a_oInfo.Location........................-1
    a_oInfo.Offset..........................1592
    a_oInfo.Size............................1
    a_oInfo.Type............................35664
    a_oInfo.TypeSize........................8
    a_oInfo.ArrayStride.....................0
    a_oInfo.MatrixStride....................0
    a_oInfo.Rows............................0
    a_oInfo.Cols............................0
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............1
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................8
    
    //////////////////////////////////////////////////
    // Uniform Read/Write Test For: uniform_test_fvec3
    //////////////////////////////////////////////////
    
    Setting the following uniform constant:
    
    a_oInfo.Name............................uniform_test_fvec3
    a_oInfo.Index...........................12
    a_oInfo.BufferIndex.....................-1
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................3
    a_oInfo.Location........................30
    a_oInfo.Offset..........................-1
    a_oInfo.Size............................1
    a_oInfo.Type............................35665
    a_oInfo.TypeSize........................12
    a_oInfo.ArrayStride.....................-1
    a_oInfo.MatrixStride....................-1
    a_oInfo.Rows............................0
    a_oInfo.Cols............................0
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............0
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................12
    
    Write values:
    32.1100006104, 649.824279785, 128.500000000, 0.000000000000
    
    Read values:
    32.1100006104, 649.824279785, 128.500000000, 0.000000000000
    
    Result of memcmp(): 0 [ 0 = passed, any non-zero = fail ]
    
    Uniform constant was assigned to this shader buffer variable in the GLSL code:
    
    a_oInfo.Name............................test_fvec3
    a_oInfo.Index...........................12
    a_oInfo.BufferIndex.....................0
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................4
    a_oInfo.Location........................-1
    a_oInfo.Offset..........................1600
    a_oInfo.Size............................1
    a_oInfo.Type............................35665
    a_oInfo.TypeSize........................12
    a_oInfo.ArrayStride.....................0
    a_oInfo.MatrixStride....................0
    a_oInfo.Rows............................0
    a_oInfo.Cols............................0
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............1
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................12
    
    //////////////////////////////////////////////////
    // Uniform Read/Write Test For: uniform_test_fvec4
    //////////////////////////////////////////////////
    
    Setting the following uniform constant:
    
    a_oInfo.Name............................uniform_test_fvec4
    a_oInfo.Index...........................14
    a_oInfo.BufferIndex.....................-1
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................3
    a_oInfo.Location........................35
    a_oInfo.Offset..........................-1
    a_oInfo.Size............................1
    a_oInfo.Type............................35666
    a_oInfo.TypeSize........................16
    a_oInfo.ArrayStride.....................-1
    a_oInfo.MatrixStride....................-1
    a_oInfo.Rows............................0
    a_oInfo.Cols............................0
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............0
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................16
    
    Write values:
    32.1100006104, 649.824279785, 128.500000000, 437554.437500
    
    Read values:
    32.1100006104, 649.824279785, 128.500000000, 437554.437500
    
    Result of memcmp(): 0 [ 0 = passed, any non-zero = fail ]
    
    Uniform constant was assigned to this shader buffer variable in the GLSL code:
    
    a_oInfo.Name............................test_fvec4
    a_oInfo.Index...........................14
    a_oInfo.BufferIndex.....................0
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................4
    a_oInfo.Location........................-1
    a_oInfo.Offset..........................1616
    a_oInfo.Size............................1
    a_oInfo.Type............................35666
    a_oInfo.TypeSize........................16
    a_oInfo.ArrayStride.....................0
    a_oInfo.MatrixStride....................0
    a_oInfo.Rows............................0
    a_oInfo.Cols............................0
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............1
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................16
    
    //////////////////////////////////////////////////
    // Uniform Read/Write Test For: uniform_test_fvec2_array[0]
    //////////////////////////////////////////////////
    
    Setting the following uniform constant:
    
    a_oInfo.Name............................uniform_test_fvec2_array[0]
    a_oInfo.Index...........................11
    a_oInfo.BufferIndex.....................-1
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................3
    a_oInfo.Location........................26
    a_oInfo.Offset..........................-1
    a_oInfo.Size............................4
    a_oInfo.Type............................35664
    a_oInfo.TypeSize........................8
    a_oInfo.ArrayStride.....................-1
    a_oInfo.MatrixStride....................-1
    a_oInfo.Rows............................0
    a_oInfo.Cols............................0
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............0
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................32
    
    Write values:
    0.10000000149011612, 1.2000000476837158, 0, 0,
    4.4000000953674316, 5.3000001907348633, 0, 0,
    8.1000003814697266, 9.1999998092651367, 0, 0,
    12.399999618530273, 13.300000190734863, 0, 0
    
    Read values:
    0.10000000149011612, 1.2000000476837158, 0, 0,
    4.4000000953674316, 5.3000001907348633, 0, 0,
    8.1000003814697266, 9.1999998092651367, 0, 0,
    12.399999618530273, 13.300000190734863, 0, 0
    
    Result of memcmp(): 0 [ 0 = passed, any non-zero = fail ]
    
    Uniform constant was assigned to this shader buffer variable in the GLSL code:
    
    a_oInfo.Name............................test_fvec2_array[0]
    a_oInfo.Index...........................11
    a_oInfo.BufferIndex.....................0
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................4
    a_oInfo.Location........................-1
    a_oInfo.Offset..........................1632
    a_oInfo.Size............................4
    a_oInfo.Type............................35664
    a_oInfo.TypeSize........................8
    a_oInfo.ArrayStride.....................8
    a_oInfo.MatrixStride....................0
    a_oInfo.Rows............................0
    a_oInfo.Cols............................0
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............1
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................32
    
    //////////////////////////////////////////////////
    // Uniform Read/Write Test For: uniform_test_fvec3_array[0]
    //////////////////////////////////////////////////
    
    Setting the following uniform constant:
    
    a_oInfo.Name............................uniform_test_fvec3_array[0]
    a_oInfo.Index...........................13
    a_oInfo.BufferIndex.....................-1
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................3
    a_oInfo.Location........................31
    a_oInfo.Offset..........................-1
    a_oInfo.Size............................4
    a_oInfo.Type............................35665
    a_oInfo.TypeSize........................12
    a_oInfo.ArrayStride.....................-1
    a_oInfo.MatrixStride....................-1
    a_oInfo.Rows............................0
    a_oInfo.Cols............................0
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............0
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................48
    
    Write values:
    0.10000000149011612, 1.2000000476837158, 2.2999999523162842, 0,
    4.4000000953674316, 5.3000001907348633, 6.1999998092651367, 0,
    8.1000003814697266, 9.1999998092651367, 10.300000190734863, 0,
    12.399999618530273, 13.300000190734863, 14.199999809265137, 0
    
    Read values:
    0.10000000149011612, 1.2000000476837158, 2.2999999523162842, 0,
    4.4000000953674316, 5.3000001907348633, 6.1999998092651367, 0,
    8.1000003814697266, 9.1999998092651367, 10.300000190734863, 0,
    12.399999618530273, 13.300000190734863, 14.199999809265137, 0
    
    Result of memcmp(): 0 [ 0 = passed, any non-zero = fail ]
    
    Uniform constant was assigned to this shader buffer variable in the GLSL code:
    
    a_oInfo.Name............................test_fvec3_array[0]
    a_oInfo.Index...........................13
    a_oInfo.BufferIndex.....................0
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................4
    a_oInfo.Location........................-1
    a_oInfo.Offset..........................1664
    a_oInfo.Size............................4
    a_oInfo.Type............................35666
    a_oInfo.TypeSize........................16
    a_oInfo.ArrayStride.....................16
    a_oInfo.MatrixStride....................0
    a_oInfo.Rows............................0
    a_oInfo.Cols............................0
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............1
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................64
    
    //////////////////////////////////////////////////
    // Uniform Read/Write Test For: uniform_test_fvec4_array[0]
    //////////////////////////////////////////////////
    
    Setting the following uniform constant:
    
    a_oInfo.Name............................uniform_test_fvec4_array[0]
    a_oInfo.Index...........................15
    a_oInfo.BufferIndex.....................-1
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................3
    a_oInfo.Location........................36
    a_oInfo.Offset..........................-1
    a_oInfo.Size............................4
    a_oInfo.Type............................35666
    a_oInfo.TypeSize........................16
    a_oInfo.ArrayStride.....................-1
    a_oInfo.MatrixStride....................-1
    a_oInfo.Rows............................0
    a_oInfo.Cols............................0
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............0
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................64
    
    Write values:
    0.10000000149011612, 1.2000000476837158, 2.2999999523162842, 3.4000000953674316,
    4.4000000953674316, 5.3000001907348633, 6.1999998092651367, 7.0999999046325684,
    8.1000003814697266, 9.1999998092651367, 10.300000190734863, 11.399999618530273,
    12.399999618530273, 13.300000190734863, 14.199999809265137, 15.100000381469727
    
    Read values:
    0.10000000149011612, 1.2000000476837158, 2.2999999523162842, 3.4000000953674316,
    4.4000000953674316, 5.3000001907348633, 6.1999998092651367, 7.0999999046325684,
    8.1000003814697266, 9.1999998092651367, 10.300000190734863, 11.399999618530273,
    12.399999618530273, 13.300000190734863, 14.199999809265137, 15.100000381469727
    
    Result of memcmp(): 0 [ 0 = passed, any non-zero = fail ]
    
    Uniform constant was assigned to this shader buffer variable in the GLSL code:
    
    a_oInfo.Name............................test_fvec4_array[0]
    a_oInfo.Index...........................15
    a_oInfo.BufferIndex.....................0
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................4
    a_oInfo.Location........................-1
    a_oInfo.Offset..........................1728
    a_oInfo.Size............................4
    a_oInfo.Type............................35666
    a_oInfo.TypeSize........................16
    a_oInfo.ArrayStride.....................16
    a_oInfo.MatrixStride....................0
    a_oInfo.Rows............................0
    a_oInfo.Cols............................0
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............1
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................64
    
    //////////////////////////////////////////////////
    // Uniform Read/Write Test For: uniform_test_mat2x2_cm
    //////////////////////////////////////////////////
    
    Setting the following uniform constant:
    
    a_oInfo.Name............................uniform_test_mat2x2_cm
    a_oInfo.Index...........................33
    a_oInfo.BufferIndex.....................-1
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................3
    a_oInfo.Location........................84
    a_oInfo.Offset..........................-1
    a_oInfo.Size............................1
    a_oInfo.Type............................35674
    a_oInfo.TypeSize........................16
    a_oInfo.ArrayStride.....................-1
    a_oInfo.MatrixStride....................-1
    a_oInfo.Rows............................2
    a_oInfo.Cols............................2
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............0
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................16
    
    Write values:
    1, 3, 0, 0
    2, 4, 0, 0
    0, 0, 0, 0
    0, 0, 0, 0
    
    Read values:
    1, 3, 0, 0
    2, 4, 0, 0
    0, 0, 0, 0
    0, 0, 0, 0
    
    Result of memcmp(): 0 [ 0 = passed, any non-zero = fail ]
    
    Uniform constant was assigned to this shader buffer variable in the GLSL code:
    
    a_oInfo.Name............................test_mat2x2_cm
    a_oInfo.Index...........................33
    a_oInfo.BufferIndex.....................0
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................4
    a_oInfo.Location........................-1
    a_oInfo.Offset..........................1792
    a_oInfo.Size............................1
    a_oInfo.Type............................35674
    a_oInfo.TypeSize........................16
    a_oInfo.ArrayStride.....................0
    a_oInfo.MatrixStride....................8
    a_oInfo.Rows............................2
    a_oInfo.Cols............................2
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............1
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................16
    
    //////////////////////////////////////////////////
    // Uniform Read/Write Test For: uniform_test_mat2x3_cm
    //////////////////////////////////////////////////
    
    Setting the following uniform constant:
    
    a_oInfo.Name............................uniform_test_mat2x3_cm
    a_oInfo.Index...........................35
    a_oInfo.BufferIndex.....................-1
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................3
    a_oInfo.Location........................89
    a_oInfo.Offset..........................-1
    a_oInfo.Size............................1
    a_oInfo.Type............................35685
    a_oInfo.TypeSize........................24
    a_oInfo.ArrayStride.....................-1
    a_oInfo.MatrixStride....................-1
    a_oInfo.Rows............................3
    a_oInfo.Cols............................2
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............0
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................24
    
    Write values:
    1, 4, 0, 0
    2, 5, 0, 0
    3, 6, 0, 0
    0, 0, 0, 0
    
    Read values:
    1, 4, 0, 0
    2, 5, 0, 0
    3, 6, 0, 0
    0, 0, 0, 0
    
    Result of memcmp(): 0 [ 0 = passed, any non-zero = fail ]
    
    Uniform constant was assigned to this shader buffer variable in the GLSL code:
    
    a_oInfo.Name............................test_mat2x3_cm
    a_oInfo.Index...........................35
    a_oInfo.BufferIndex.....................0
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................4
    a_oInfo.Location........................-1
    a_oInfo.Offset..........................1808
    a_oInfo.Size............................1
    a_oInfo.Type............................35686
    a_oInfo.TypeSize........................32
    a_oInfo.ArrayStride.....................0
    a_oInfo.MatrixStride....................16
    a_oInfo.Rows............................4
    a_oInfo.Cols............................2
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............1
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................32
    
    //////////////////////////////////////////////////
    // Uniform Read/Write Test For: uniform_test_mat2x4_cm
    //////////////////////////////////////////////////
    
    Setting the following uniform constant:
    
    a_oInfo.Name............................uniform_test_mat2x4_cm
    a_oInfo.Index...........................37
    a_oInfo.BufferIndex.....................-1
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................3
    a_oInfo.Location........................94
    a_oInfo.Offset..........................-1
    a_oInfo.Size............................1
    a_oInfo.Type............................35686
    a_oInfo.TypeSize........................32
    a_oInfo.ArrayStride.....................-1
    a_oInfo.MatrixStride....................-1
    a_oInfo.Rows............................4
    a_oInfo.Cols............................2
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............0
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................32
    
    Write values:
    1, 5, 0, 0
    2, 6, 0, 0
    3, 7, 0, 0
    4, 8, 0, 0
    
    Read values:
    1, 5, 0, 0
    2, 6, 0, 0
    3, 7, 0, 0
    4, 8, 0, 0
    
    Result of memcmp(): 0 [ 0 = passed, any non-zero = fail ]
    
    Uniform constant was assigned to this shader buffer variable in the GLSL code:
    
    a_oInfo.Name............................test_mat2x4_cm
    a_oInfo.Index...........................37
    a_oInfo.BufferIndex.....................0
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................4
    a_oInfo.Location........................-1
    a_oInfo.Offset..........................1840
    a_oInfo.Size............................1
    a_oInfo.Type............................35686
    a_oInfo.TypeSize........................32
    a_oInfo.ArrayStride.....................0
    a_oInfo.MatrixStride....................16
    a_oInfo.Rows............................4
    a_oInfo.Cols............................2
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............1
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................32
    
    //////////////////////////////////////////////////
    // Uniform Read/Write Test For: uniform_test_mat3x2_cm
    //////////////////////////////////////////////////
    
    Setting the following uniform constant:
    
    a_oInfo.Name............................uniform_test_mat3x2_cm
    a_oInfo.Index...........................39
    a_oInfo.BufferIndex.....................-1
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................3
    a_oInfo.Location........................99
    a_oInfo.Offset..........................-1
    a_oInfo.Size............................1
    a_oInfo.Type............................35687
    a_oInfo.TypeSize........................24
    a_oInfo.ArrayStride.....................-1
    a_oInfo.MatrixStride....................-1
    a_oInfo.Rows............................2
    a_oInfo.Cols............................3
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............0
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................24
    
    Write values:
    1, 3, 5, 0
    2, 4, 6, 0
    0, 0, 0, 0
    0, 0, 0, 0
    
    Read values:
    1, 3, 5, 0
    2, 4, 6, 0
    0, 0, 0, 0
    0, 0, 0, 0
    
    Result of memcmp(): 0 [ 0 = passed, any non-zero = fail ]
    
    Uniform constant was assigned to this shader buffer variable in the GLSL code:
    
    a_oInfo.Name............................test_mat3x2_cm
    a_oInfo.Index...........................39
    a_oInfo.BufferIndex.....................0
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................4
    a_oInfo.Location........................-1
    a_oInfo.Offset..........................1872
    a_oInfo.Size............................1
    a_oInfo.Type............................35687
    a_oInfo.TypeSize........................24
    a_oInfo.ArrayStride.....................0
    a_oInfo.MatrixStride....................8
    a_oInfo.Rows............................2
    a_oInfo.Cols............................3
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............1
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................24
    
    //////////////////////////////////////////////////
    // Uniform Read/Write Test For: uniform_test_mat3x3_cm
    //////////////////////////////////////////////////
    
    Setting the following uniform constant:
    
    a_oInfo.Name............................uniform_test_mat3x3_cm
    a_oInfo.Index...........................41
    a_oInfo.BufferIndex.....................-1
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................3
    a_oInfo.Location........................104
    a_oInfo.Offset..........................-1
    a_oInfo.Size............................1
    a_oInfo.Type............................35675
    a_oInfo.TypeSize........................36
    a_oInfo.ArrayStride.....................-1
    a_oInfo.MatrixStride....................-1
    a_oInfo.Rows............................3
    a_oInfo.Cols............................3
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............0
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................36
    
    Write values:
    1, 4, 7, 0
    2, 5, 8, 0
    3, 6, 9, 0
    0, 0, 0, 0
    
    Read values:
    1, 4, 7, 0
    2, 5, 8, 0
    3, 6, 9, 0
    0, 0, 0, 0
    
    Result of memcmp(): 0 [ 0 = passed, any non-zero = fail ]
    
    Uniform constant was assigned to this shader buffer variable in the GLSL code:
    
    a_oInfo.Name............................test_mat3x3_cm
    a_oInfo.Index...........................41
    a_oInfo.BufferIndex.....................0
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................4
    a_oInfo.Location........................-1
    a_oInfo.Offset..........................1904
    a_oInfo.Size............................1
    a_oInfo.Type............................35688
    a_oInfo.TypeSize........................48
    a_oInfo.ArrayStride.....................0
    a_oInfo.MatrixStride....................16
    a_oInfo.Rows............................4
    a_oInfo.Cols............................3
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............1
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................48
    
    //////////////////////////////////////////////////
    // Uniform Read/Write Test For: uniform_test_mat3x4_cm
    //////////////////////////////////////////////////
    
    Setting the following uniform constant:
    
    a_oInfo.Name............................uniform_test_mat3x4_cm
    a_oInfo.Index...........................43
    a_oInfo.BufferIndex.....................-1
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................3
    a_oInfo.Location........................109
    a_oInfo.Offset..........................-1
    a_oInfo.Size............................1
    a_oInfo.Type............................35688
    a_oInfo.TypeSize........................48
    a_oInfo.ArrayStride.....................-1
    a_oInfo.MatrixStride....................-1
    a_oInfo.Rows............................4
    a_oInfo.Cols............................3
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............0
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................48
    
    Write values:
    1, 5, 9, 0
    2, 6, 10, 0
    3, 7, 11, 0
    4, 8, 12, 0
    
    Read values:
    1, 5, 9, 0
    2, 6, 10, 0
    3, 7, 11, 0
    4, 8, 12, 0
    
    Result of memcmp(): 0 [ 0 = passed, any non-zero = fail ]
    
    Uniform constant was assigned to this shader buffer variable in the GLSL code:
    
    a_oInfo.Name............................test_mat3x4_cm
    a_oInfo.Index...........................43
    a_oInfo.BufferIndex.....................0
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................4
    a_oInfo.Location........................-1
    a_oInfo.Offset..........................1952
    a_oInfo.Size............................1
    a_oInfo.Type............................35688
    a_oInfo.TypeSize........................48
    a_oInfo.ArrayStride.....................0
    a_oInfo.MatrixStride....................16
    a_oInfo.Rows............................4
    a_oInfo.Cols............................3
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............1
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................48
    
    //////////////////////////////////////////////////
    // Uniform Read/Write Test For: uniform_test_mat4x2_cm
    //////////////////////////////////////////////////
    
    Setting the following uniform constant:
    
    a_oInfo.Name............................uniform_test_mat4x2_cm
    a_oInfo.Index...........................45
    a_oInfo.BufferIndex.....................-1
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................3
    a_oInfo.Location........................114
    a_oInfo.Offset..........................-1
    a_oInfo.Size............................1
    a_oInfo.Type............................35689
    a_oInfo.TypeSize........................32
    a_oInfo.ArrayStride.....................-1
    a_oInfo.MatrixStride....................-1
    a_oInfo.Rows............................2
    a_oInfo.Cols............................4
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............0
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................32
    
    Write values:
    1, 3, 5, 7
    2, 4, 6, 8
    0, 0, 0, 0
    0, 0, 0, 0
    
    Read values:
    1, 3, 5, 7
    2, 4, 6, 8
    0, 0, 0, 0
    0, 0, 0, 0
    
    Result of memcmp(): 0 [ 0 = passed, any non-zero = fail ]
    
    Uniform constant was assigned to this shader buffer variable in the GLSL code:
    
    a_oInfo.Name............................test_mat4x2_cm
    a_oInfo.Index...........................45
    a_oInfo.BufferIndex.....................0
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................4
    a_oInfo.Location........................-1
    a_oInfo.Offset..........................2000
    a_oInfo.Size............................1
    a_oInfo.Type............................35689
    a_oInfo.TypeSize........................32
    a_oInfo.ArrayStride.....................0
    a_oInfo.MatrixStride....................8
    a_oInfo.Rows............................2
    a_oInfo.Cols............................4
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............1
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................32
    
    //////////////////////////////////////////////////
    // Uniform Read/Write Test For: uniform_test_mat4x3_cm
    //////////////////////////////////////////////////
    
    Setting the following uniform constant:
    
    a_oInfo.Name............................uniform_test_mat4x3_cm
    a_oInfo.Index...........................47
    a_oInfo.BufferIndex.....................-1
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................3
    a_oInfo.Location........................119
    a_oInfo.Offset..........................-1
    a_oInfo.Size............................1
    a_oInfo.Type............................35690
    a_oInfo.TypeSize........................48
    a_oInfo.ArrayStride.....................-1
    a_oInfo.MatrixStride....................-1
    a_oInfo.Rows............................3
    a_oInfo.Cols............................4
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............0
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................48
    
    Write values:
    1, 4, 7, 10
    2, 5, 8, 11
    3, 6, 9, 12
    0, 0, 0, 0
    
    Read values:
    1, 4, 7, 10
    2, 5, 8, 11
    3, 6, 9, 12
    0, 0, 0, 0
    
    Result of memcmp(): 0 [ 0 = passed, any non-zero = fail ]
    
    Uniform constant was assigned to this shader buffer variable in the GLSL code:
    
    a_oInfo.Name............................test_mat4x3_cm
    a_oInfo.Index...........................47
    a_oInfo.BufferIndex.....................0
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................4
    a_oInfo.Location........................-1
    a_oInfo.Offset..........................2032
    a_oInfo.Size............................1
    a_oInfo.Type............................35676
    a_oInfo.TypeSize........................64
    a_oInfo.ArrayStride.....................0
    a_oInfo.MatrixStride....................16
    a_oInfo.Rows............................4
    a_oInfo.Cols............................4
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............1
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................64
    
    //////////////////////////////////////////////////
    // Uniform Read/Write Test For: uniform_test_mat4x4_cm
    //////////////////////////////////////////////////
    
    Setting the following uniform constant:
    
    a_oInfo.Name............................uniform_test_mat4x4_cm
    a_oInfo.Index...........................49
    a_oInfo.BufferIndex.....................-1
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................3
    a_oInfo.Location........................124
    a_oInfo.Offset..........................-1
    a_oInfo.Size............................1
    a_oInfo.Type............................35676
    a_oInfo.TypeSize........................64
    a_oInfo.ArrayStride.....................-1
    a_oInfo.MatrixStride....................-1
    a_oInfo.Rows............................4
    a_oInfo.Cols............................4
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............0
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................64
    
    Write values:
    1, 5, 9, 13
    2, 6, 10, 14
    3, 7, 11, 15
    4, 8, 12, 16
    
    Read values:
    1, 5, 9, 13
    2, 6, 10, 14
    3, 7, 11, 15
    4, 8, 12, 16
    
    Result of memcmp(): 0 [ 0 = passed, any non-zero = fail ]
    
    Uniform constant was assigned to this shader buffer variable in the GLSL code:
    
    a_oInfo.Name............................test_mat4x4_cm
    a_oInfo.Index...........................49
    a_oInfo.BufferIndex.....................0
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................4
    a_oInfo.Location........................-1
    a_oInfo.Offset..........................2096
    a_oInfo.Size............................1
    a_oInfo.Type............................35676
    a_oInfo.TypeSize........................64
    a_oInfo.ArrayStride.....................0
    a_oInfo.MatrixStride....................16
    a_oInfo.Rows............................4
    a_oInfo.Cols............................4
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............1
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................64
    
    //////////////////////////////////////////////////
    // Uniform Read/Write Test For: uniform_test_mat2x2_array_cm[0]
    //////////////////////////////////////////////////
    
    Setting the following uniform constant:
    
    a_oInfo.Name............................uniform_test_mat2x2_array_cm[0]
    a_oInfo.Index...........................32
    a_oInfo.BufferIndex.....................-1
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................3
    a_oInfo.Location........................80
    a_oInfo.Offset..........................-1
    a_oInfo.Size............................4
    a_oInfo.Type............................35674
    a_oInfo.TypeSize........................16
    a_oInfo.ArrayStride.....................-1
    a_oInfo.MatrixStride....................-1
    a_oInfo.Rows............................2
    a_oInfo.Cols............................2
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............0
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................64
    
    Write values:
    1, 2, 0, 0,
    3, 4, 0, 0,
    0, 0, 0, 0,
    0, 0, 0, 0,
    1, 2, 0, 0,
    3, 4, 0, 0,
    0, 0, 0, 0,
    0, 0, 0, 0
    1, 2, 0, 0,
    3, 4, 0, 0,
    0, 0, 0, 0,
    0, 0, 0, 0,
    1, 2, 0, 0,
    3, 4, 0, 0,
    0, 0, 0, 0,
    0, 0, 0, 0
    
    Read values:
    1, 2, 0, 0,
    3, 4, 0, 0,
    0, 0, 0, 0,
    0, 0, 0, 0,
    1, 2, 0, 0,
    3, 4, 0, 0,
    0, 0, 0, 0,
    0, 0, 0, 0
    1, 2, 0, 0,
    3, 4, 0, 0,
    0, 0, 0, 0,
    0, 0, 0, 0,
    1, 2, 0, 0,
    3, 4, 0, 0,
    0, 0, 0, 0,
    0, 0, 0, 0
    
    Result of memcmp(): 0 [ 0 = passed, any non-zero = fail ]
    
    Uniform constant was assigned to this shader buffer variable in the GLSL code:
    
    a_oInfo.Name............................test_mat2x2_array_cm[0]
    a_oInfo.Index...........................32
    a_oInfo.BufferIndex.....................0
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................4
    a_oInfo.Location........................-1
    a_oInfo.Offset..........................2160
    a_oInfo.Size............................4
    a_oInfo.Type............................35674
    a_oInfo.TypeSize........................16
    a_oInfo.ArrayStride.....................16
    a_oInfo.MatrixStride....................8
    a_oInfo.Rows............................2
    a_oInfo.Cols............................2
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............1
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................64
    
    //////////////////////////////////////////////////
    // Uniform Read/Write Test For: uniform_test_mat2x3_array_cm[0]
    //////////////////////////////////////////////////
    
    Setting the following uniform constant:
    
    a_oInfo.Name............................uniform_test_mat2x3_array_cm[0]
    a_oInfo.Index...........................34
    a_oInfo.BufferIndex.....................-1
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................3
    a_oInfo.Location........................85
    a_oInfo.Offset..........................-1
    a_oInfo.Size............................4
    a_oInfo.Type............................35685
    a_oInfo.TypeSize........................24
    a_oInfo.ArrayStride.....................-1
    a_oInfo.MatrixStride....................-1
    a_oInfo.Rows............................3
    a_oInfo.Cols............................2
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............0
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................96
    
    Write values:
    1, 2, 3, 0,
    4, 5, 6, 0,
    0, 0, 0, 0,
    0, 0, 0, 0,
    1, 2, 3, 0,
    4, 5, 6, 0,
    0, 0, 0, 0,
    0, 0, 0, 0
    1, 2, 3, 0,
    4, 5, 6, 0,
    0, 0, 0, 0,
    0, 0, 0, 0,
    1, 2, 3, 0,
    4, 5, 6, 0,
    0, 0, 0, 0,
    0, 0, 0, 0
    
    Read values:
    1, 2, 3, 0,
    4, 5, 6, 0,
    0, 0, 0, 0,
    0, 0, 0, 0,
    1, 2, 3, 0,
    4, 5, 6, 0,
    0, 0, 0, 0,
    0, 0, 0, 0
    1, 2, 3, 0,
    4, 5, 6, 0,
    0, 0, 0, 0,
    0, 0, 0, 0,
    1, 2, 3, 0,
    4, 5, 6, 0,
    0, 0, 0, 0,
    0, 0, 0, 0
    
    Result of memcmp(): 0 [ 0 = passed, any non-zero = fail ]
    
    Uniform constant was assigned to this shader buffer variable in the GLSL code:
    
    a_oInfo.Name............................test_mat2x3_array_cm[0]
    a_oInfo.Index...........................34
    a_oInfo.BufferIndex.....................0
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................4
    a_oInfo.Location........................-1
    a_oInfo.Offset..........................2224
    a_oInfo.Size............................4
    a_oInfo.Type............................35686
    a_oInfo.TypeSize........................32
    a_oInfo.ArrayStride.....................32
    a_oInfo.MatrixStride....................16
    a_oInfo.Rows............................4
    a_oInfo.Cols............................2
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............1
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................128
    
    //////////////////////////////////////////////////
    // Uniform Read/Write Test For: uniform_test_mat2x4_array_cm[0]
    //////////////////////////////////////////////////
    
    Setting the following uniform constant:
    
    a_oInfo.Name............................uniform_test_mat2x4_array_cm[0]
    a_oInfo.Index...........................36
    a_oInfo.BufferIndex.....................-1
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................3
    a_oInfo.Location........................90
    a_oInfo.Offset..........................-1
    a_oInfo.Size............................4
    a_oInfo.Type............................35686
    a_oInfo.TypeSize........................32
    a_oInfo.ArrayStride.....................-1
    a_oInfo.MatrixStride....................-1
    a_oInfo.Rows............................4
    a_oInfo.Cols............................2
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............0
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................128
    
    Write values:
    1, 2, 3, 4,
    5, 6, 7, 8,
    0, 0, 0, 0,
    0, 0, 0, 0,
    1, 2, 3, 4,
    5, 6, 7, 8,
    0, 0, 0, 0,
    0, 0, 0, 0
    1, 2, 3, 4,
    5, 6, 7, 8,
    0, 0, 0, 0,
    0, 0, 0, 0,
    1, 2, 3, 4,
    5, 6, 7, 8,
    0, 0, 0, 0,
    0, 0, 0, 0
    
    Read values:
    1, 2, 3, 4,
    5, 6, 7, 8,
    0, 0, 0, 0,
    0, 0, 0, 0,
    1, 2, 3, 4,
    5, 6, 7, 8,
    0, 0, 0, 0,
    0, 0, 0, 0
    1, 2, 3, 4,
    5, 6, 7, 8,
    0, 0, 0, 0,
    0, 0, 0, 0,
    1, 2, 3, 4,
    5, 6, 7, 8,
    0, 0, 0, 0,
    0, 0, 0, 0
    
    Result of memcmp(): 0 [ 0 = passed, any non-zero = fail ]
    
    Uniform constant was assigned to this shader buffer variable in the GLSL code:
    
    a_oInfo.Name............................test_mat2x4_array_cm[0]
    a_oInfo.Index...........................36
    a_oInfo.BufferIndex.....................0
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................4
    a_oInfo.Location........................-1
    a_oInfo.Offset..........................2352
    a_oInfo.Size............................4
    a_oInfo.Type............................35686
    a_oInfo.TypeSize........................32
    a_oInfo.ArrayStride.....................32
    a_oInfo.MatrixStride....................16
    a_oInfo.Rows............................4
    a_oInfo.Cols............................2
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............1
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................128
    
    //////////////////////////////////////////////////
    // Uniform Read/Write Test For: uniform_test_mat3x2_array_cm[0]
    //////////////////////////////////////////////////
    
    Setting the following uniform constant:
    
    a_oInfo.Name............................uniform_test_mat3x2_array_cm[0]
    a_oInfo.Index...........................38
    a_oInfo.BufferIndex.....................-1
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................3
    a_oInfo.Location........................95
    a_oInfo.Offset..........................-1
    a_oInfo.Size............................4
    a_oInfo.Type............................35687
    a_oInfo.TypeSize........................24
    a_oInfo.ArrayStride.....................-1
    a_oInfo.MatrixStride....................-1
    a_oInfo.Rows............................2
    a_oInfo.Cols............................3
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............0
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................96
    
    Write values:
    1, 2, 0, 0,
    3, 4, 0, 0,
    5, 6, 0, 0,
    0, 0, 0, 0,
    1, 2, 0, 0,
    3, 4, 0, 0,
    5, 6, 0, 0,
    0, 0, 0, 0
    1, 2, 0, 0,
    3, 4, 0, 0,
    5, 6, 0, 0,
    0, 0, 0, 0,
    1, 2, 0, 0,
    3, 4, 0, 0,
    5, 6, 0, 0,
    0, 0, 0, 0
    
    Read values:
    1, 2, 0, 0,
    3, 4, 0, 0,
    5, 6, 0, 0,
    0, 0, 0, 0,
    1, 2, 0, 0,
    3, 4, 0, 0,
    5, 6, 0, 0,
    0, 0, 0, 0
    1, 2, 0, 0,
    3, 4, 0, 0,
    5, 6, 0, 0,
    0, 0, 0, 0,
    1, 2, 0, 0,
    3, 4, 0, 0,
    5, 6, 0, 0,
    0, 0, 0, 0
    
    Result of memcmp(): 0 [ 0 = passed, any non-zero = fail ]
    
    Uniform constant was assigned to this shader buffer variable in the GLSL code:
    
    a_oInfo.Name............................test_mat3x2_array_cm[0]
    a_oInfo.Index...........................38
    a_oInfo.BufferIndex.....................0
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................4
    a_oInfo.Location........................-1
    a_oInfo.Offset..........................2480
    a_oInfo.Size............................4
    a_oInfo.Type............................35687
    a_oInfo.TypeSize........................24
    a_oInfo.ArrayStride.....................24
    a_oInfo.MatrixStride....................8
    a_oInfo.Rows............................2
    a_oInfo.Cols............................3
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............1
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................96
    
    //////////////////////////////////////////////////
    // Uniform Read/Write Test For: uniform_test_mat3x3_array_cm[0]
    //////////////////////////////////////////////////
    
    Setting the following uniform constant:
    
    a_oInfo.Name............................uniform_test_mat3x3_array_cm[0]
    a_oInfo.Index...........................40
    a_oInfo.BufferIndex.....................-1
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................3
    a_oInfo.Location........................100
    a_oInfo.Offset..........................-1
    a_oInfo.Size............................4
    a_oInfo.Type............................35675
    a_oInfo.TypeSize........................36
    a_oInfo.ArrayStride.....................-1
    a_oInfo.MatrixStride....................-1
    a_oInfo.Rows............................3
    a_oInfo.Cols............................3
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............0
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................144
    
    Write values:
    1, 2, 3, 0,
    4, 5, 6, 0,
    7, 8, 9, 0,
    0, 0, 0, 0,
    1, 2, 3, 0,
    4, 5, 6, 0,
    7, 8, 9, 0,
    0, 0, 0, 0
    1, 2, 3, 0,
    4, 5, 6, 0,
    7, 8, 9, 0,
    0, 0, 0, 0,
    1, 2, 3, 0,
    4, 5, 6, 0,
    7, 8, 9, 0,
    0, 0, 0, 0
    
    Read values:
    1, 2, 3, 0,
    4, 5, 6, 0,
    7, 8, 9, 0,
    0, 0, 0, 0,
    1, 2, 3, 0,
    4, 5, 6, 0,
    7, 8, 9, 0,
    0, 0, 0, 0
    1, 2, 3, 0,
    4, 5, 6, 0,
    7, 8, 9, 0,
    0, 0, 0, 0,
    1, 2, 3, 0,
    4, 5, 6, 0,
    7, 8, 9, 0,
    0, 0, 0, 0
    
    Result of memcmp(): 0 [ 0 = passed, any non-zero = fail ]
    
    Uniform constant was assigned to this shader buffer variable in the GLSL code:
    
    a_oInfo.Name............................test_mat3x3_array_cm[0]
    a_oInfo.Index...........................40
    a_oInfo.BufferIndex.....................0
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................4
    a_oInfo.Location........................-1
    a_oInfo.Offset..........................2576
    a_oInfo.Size............................4
    a_oInfo.Type............................35688
    a_oInfo.TypeSize........................48
    a_oInfo.ArrayStride.....................48
    a_oInfo.MatrixStride....................16
    a_oInfo.Rows............................4
    a_oInfo.Cols............................3
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............1
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................192
    
    //////////////////////////////////////////////////
    // Uniform Read/Write Test For: uniform_test_mat3x4_array_cm[0]
    //////////////////////////////////////////////////
    
    Setting the following uniform constant:
    
    a_oInfo.Name............................uniform_test_mat3x4_array_cm[0]
    a_oInfo.Index...........................42
    a_oInfo.BufferIndex.....................-1
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................3
    a_oInfo.Location........................105
    a_oInfo.Offset..........................-1
    a_oInfo.Size............................4
    a_oInfo.Type............................35688
    a_oInfo.TypeSize........................48
    a_oInfo.ArrayStride.....................-1
    a_oInfo.MatrixStride....................-1
    a_oInfo.Rows............................4
    a_oInfo.Cols............................3
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............0
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................192
    
    Write values:
    1, 2, 3, 4,
    5, 6, 7, 8,
    9, 10, 11, 12,
    0, 0, 0, 0,
    1, 2, 3, 4,
    5, 6, 7, 8,
    9, 10, 11, 12,
    0, 0, 0, 0
    1, 2, 3, 4,
    5, 6, 7, 8,
    9, 10, 11, 12,
    0, 0, 0, 0,
    1, 2, 3, 4,
    5, 6, 7, 8,
    9, 10, 11, 12,
    0, 0, 0, 0
    
    Read values:
    1, 2, 3, 4,
    5, 6, 7, 8,
    9, 10, 11, 12,
    0, 0, 0, 0,
    1, 2, 3, 4,
    5, 6, 7, 8,
    9, 10, 11, 12,
    0, 0, 0, 0
    1, 2, 3, 4,
    5, 6, 7, 8,
    9, 10, 11, 12,
    0, 0, 0, 0,
    1, 2, 3, 4,
    5, 6, 7, 8,
    9, 10, 11, 12,
    0, 0, 0, 0
    
    Result of memcmp(): 0 [ 0 = passed, any non-zero = fail ]
    
    Uniform constant was assigned to this shader buffer variable in the GLSL code:
    
    a_oInfo.Name............................test_mat3x4_array_cm[0]
    a_oInfo.Index...........................42
    a_oInfo.BufferIndex.....................0
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................4
    a_oInfo.Location........................-1
    a_oInfo.Offset..........................2768
    a_oInfo.Size............................4
    a_oInfo.Type............................35688
    a_oInfo.TypeSize........................48
    a_oInfo.ArrayStride.....................48
    a_oInfo.MatrixStride....................16
    a_oInfo.Rows............................4
    a_oInfo.Cols............................3
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............1
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................192
    
    //////////////////////////////////////////////////
    // Uniform Read/Write Test For: uniform_test_mat4x2_array_cm[0]
    //////////////////////////////////////////////////
    
    Setting the following uniform constant:
    
    a_oInfo.Name............................uniform_test_mat4x2_array_cm[0]
    a_oInfo.Index...........................44
    a_oInfo.BufferIndex.....................-1
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................3
    a_oInfo.Location........................110
    a_oInfo.Offset..........................-1
    a_oInfo.Size............................4
    a_oInfo.Type............................35689
    a_oInfo.TypeSize........................32
    a_oInfo.ArrayStride.....................-1
    a_oInfo.MatrixStride....................-1
    a_oInfo.Rows............................2
    a_oInfo.Cols............................4
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............0
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................128
    
    Write values:
    1, 2, 0, 0,
    3, 4, 0, 0,
    5, 6, 0, 0,
    7, 8, 0, 0,
    1, 2, 0, 0,
    3, 4, 0, 0,
    5, 6, 0, 0,
    7, 8, 0, 0
    1, 2, 0, 0,
    3, 4, 0, 0,
    5, 6, 0, 0,
    7, 8, 0, 0,
    1, 2, 0, 0,
    3, 4, 0, 0,
    5, 6, 0, 0,
    7, 8, 0, 0
    
    Read values:
    1, 2, 0, 0,
    3, 4, 0, 0,
    5, 6, 0, 0,
    7, 8, 0, 0,
    1, 2, 0, 0,
    3, 4, 0, 0,
    5, 6, 0, 0,
    7, 8, 0, 0
    1, 2, 0, 0,
    3, 4, 0, 0,
    5, 6, 0, 0,
    7, 8, 0, 0,
    1, 2, 0, 0,
    3, 4, 0, 0,
    5, 6, 0, 0,
    7, 8, 0, 0
    
    Result of memcmp(): 0 [ 0 = passed, any non-zero = fail ]
    
    Uniform constant was assigned to this shader buffer variable in the GLSL code:
    
    a_oInfo.Name............................test_mat4x2_array_cm[0]
    a_oInfo.Index...........................44
    a_oInfo.BufferIndex.....................0
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................4
    a_oInfo.Location........................-1
    a_oInfo.Offset..........................2960
    a_oInfo.Size............................4
    a_oInfo.Type............................35689
    a_oInfo.TypeSize........................32
    a_oInfo.ArrayStride.....................32
    a_oInfo.MatrixStride....................8
    a_oInfo.Rows............................2
    a_oInfo.Cols............................4
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............1
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................128
    
    //////////////////////////////////////////////////
    // Uniform Read/Write Test For: uniform_test_mat4x3_array_cm[0]
    //////////////////////////////////////////////////
    
    Setting the following uniform constant:
    
    a_oInfo.Name............................uniform_test_mat4x3_array_cm[0]
    a_oInfo.Index...........................46
    a_oInfo.BufferIndex.....................-1
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................3
    a_oInfo.Location........................115
    a_oInfo.Offset..........................-1
    a_oInfo.Size............................4
    a_oInfo.Type............................35690
    a_oInfo.TypeSize........................48
    a_oInfo.ArrayStride.....................-1
    a_oInfo.MatrixStride....................-1
    a_oInfo.Rows............................3
    a_oInfo.Cols............................4
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............0
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................192
    
    Write values:
    1, 2, 3, 0,
    4, 5, 6, 0,
    7, 8, 9, 0,
    10, 11, 12, 0,
    1, 2, 3, 0,
    4, 5, 6, 0,
    7, 8, 9, 0,
    10, 11, 12, 0
    1, 2, 3, 0,
    4, 5, 6, 0,
    7, 8, 9, 0,
    10, 11, 12, 0,
    1, 2, 3, 0,
    4, 5, 6, 0,
    7, 8, 9, 0,
    10, 11, 12, 0
    
    Read values:
    1, 2, 3, 0,
    4, 5, 6, 0,
    7, 8, 9, 0,
    10, 11, 12, 0,
    1, 2, 3, 0,
    4, 5, 6, 0,
    7, 8, 9, 0,
    10, 11, 12, 0
    1, 2, 3, 0,
    4, 5, 6, 0,
    7, 8, 9, 0,
    10, 11, 12, 0,
    1, 2, 3, 0,
    4, 5, 6, 0,
    7, 8, 9, 0,
    10, 11, 12, 0
    
    Result of memcmp(): 0 [ 0 = passed, any non-zero = fail ]
    
    Uniform constant was assigned to this shader buffer variable in the GLSL code:
    
    a_oInfo.Name............................test_mat4x3_array_cm[0]
    a_oInfo.Index...........................46
    a_oInfo.BufferIndex.....................0
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................4
    a_oInfo.Location........................-1
    a_oInfo.Offset..........................3088
    a_oInfo.Size............................4
    a_oInfo.Type............................35676
    a_oInfo.TypeSize........................64
    a_oInfo.ArrayStride.....................64
    a_oInfo.MatrixStride....................16
    a_oInfo.Rows............................4
    a_oInfo.Cols............................4
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............1
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................256
    
    //////////////////////////////////////////////////
    // Uniform Read/Write Test For: uniform_test_mat4x4_array_cm[0]
    //////////////////////////////////////////////////
    
    Setting the following uniform constant:
    
    a_oInfo.Name............................uniform_test_mat4x4_array_cm[0]
    a_oInfo.Index...........................48
    a_oInfo.BufferIndex.....................-1
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................3
    a_oInfo.Location........................120
    a_oInfo.Offset..........................-1
    a_oInfo.Size............................4
    a_oInfo.Type............................35676
    a_oInfo.TypeSize........................64
    a_oInfo.ArrayStride.....................-1
    a_oInfo.MatrixStride....................-1
    a_oInfo.Rows............................4
    a_oInfo.Cols............................4
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............0
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................256
    
    Write values:
    1, 2, 3, 4,
    5, 6, 7, 8,
    9, 10, 11, 12,
    13, 14, 15, 16,
    1, 2, 3, 4,
    5, 6, 7, 8,
    9, 10, 11, 12,
    13, 14, 15, 16
    1, 2, 3, 4,
    5, 6, 7, 8,
    9, 10, 11, 12,
    13, 14, 15, 16,
    1, 2, 3, 4,
    5, 6, 7, 8,
    9, 10, 11, 12,
    13, 14, 15, 16
    
    Read values:
    1, 2, 3, 4,
    5, 6, 7, 8,
    9, 10, 11, 12,
    13, 14, 15, 16,
    1, 2, 3, 4,
    5, 6, 7, 8,
    9, 10, 11, 12,
    13, 14, 15, 16
    1, 2, 3, 4,
    5, 6, 7, 8,
    9, 10, 11, 12,
    13, 14, 15, 16,
    1, 2, 3, 4,
    5, 6, 7, 8,
    9, 10, 11, 12,
    13, 14, 15, 16
    
    Result of memcmp(): 0 [ 0 = passed, any non-zero = fail ]
    
    Uniform constant was assigned to this shader buffer variable in the GLSL code:
    
    a_oInfo.Name............................test_mat4x4_array_cm[0]
    a_oInfo.Index...........................48
    a_oInfo.BufferIndex.....................0
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................4
    a_oInfo.Location........................-1
    a_oInfo.Offset..........................3344
    a_oInfo.Size............................4
    a_oInfo.Type............................35676
    a_oInfo.TypeSize........................64
    a_oInfo.ArrayStride.....................64
    a_oInfo.MatrixStride....................16
    a_oInfo.Rows............................4
    a_oInfo.Cols............................4
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............1
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................256
    
    //////////////////////////////////////////////////
    // Uniform Read/Write Test For: uniform_test_double
    //////////////////////////////////////////////////
    
    Bad uniform location! Variable declaration 'uniform_test_double' location is -1. The variable declaration could not be found in the GLSL. Check the shader code. Test failed!
    
    //////////////////////////////////////////////////
    // Uniform Read/Write Test For: uniform_test_double_array[0]
    //////////////////////////////////////////////////
    
    Bad uniform location! Variable declaration 'uniform_test_double_array[0]' location is -1. The variable declaration could not be found in the GLSL. Check the shader code. Test failed!
    
    //////////////////////////////////////////////////
    // Uniform Read/Write Test For: uniform_test_dvec2
    //////////////////////////////////////////////////
    
    Bad uniform location! Variable declaration 'uniform_test_dvec2' location is -1. The variable declaration could not be found in the GLSL. Check the shader code. Test failed!
    
    //////////////////////////////////////////////////
    // Uniform Read/Write Test For: uniform_test_dvec3
    //////////////////////////////////////////////////
    
    Bad uniform location! Variable declaration 'uniform_test_dvec3' location is -1. The variable declaration could not be found in the GLSL. Check the shader code. Test failed!
    
    //////////////////////////////////////////////////
    // Uniform Read/Write Test For: uniform_test_dvec4
    //////////////////////////////////////////////////
    
    Bad uniform location! Variable declaration 'uniform_test_dvec4' location is -1. The variable declaration could not be found in the GLSL. Check the shader code. Test failed!
    
    //////////////////////////////////////////////////
    // Uniform Read/Write Test For: uniform_test_dvec2_array[0]
    //////////////////////////////////////////////////
    
    Bad uniform location! Variable declaration 'uniform_test_dvec2_array[0]' location is -1. The variable declaration could not be found in the GLSL. Check the shader code. Test failed!
    
    //////////////////////////////////////////////////
    // Uniform Read/Write Test For: uniform_test_dvec3_array[0]
    //////////////////////////////////////////////////
    
    Bad uniform location! Variable declaration 'uniform_test_dvec3_array[0]' location is -1. The variable declaration could not be found in the GLSL. Check the shader code. Test failed!
    
    //////////////////////////////////////////////////
    // Uniform Read/Write Test For: uniform_test_dvec4_array[0]
    //////////////////////////////////////////////////
    
    Bad uniform location! Variable declaration 'uniform_test_dvec4_array[0]' location is -1. The variable declaration could not be found in the GLSL. Check the shader code. Test failed!
    
    //////////////////////////////////////////////////
    // Uniform Read/Write Test For: uniform_test_dmat2x2_cm
    //////////////////////////////////////////////////
    
    Bad uniform location! Variable declaration 'uniform_test_dmat2x2_cm' location is -1. The variable declaration could not be found in the GLSL. Check the shader code. Test failed!
    
    //////////////////////////////////////////////////
    // Uniform Read/Write Test For: uniform_test_dmat2x3_cm
    //////////////////////////////////////////////////
    
    Bad uniform location! Variable declaration 'uniform_test_dmat2x3_cm' location is -1. The variable declaration could not be found in the GLSL. Check the shader code. Test failed!
    
    //////////////////////////////////////////////////
    // Uniform Read/Write Test For: uniform_test_dmat2x4_cm
    //////////////////////////////////////////////////
    
    Bad uniform location! Variable declaration 'uniform_test_dmat2x4_cm' location is -1. The variable declaration could not be found in the GLSL. Check the shader code. Test failed!
    
    //////////////////////////////////////////////////
    // Uniform Read/Write Test For: uniform_test_dmat3x2_cm
    //////////////////////////////////////////////////
    
    Bad uniform location! Variable declaration 'uniform_test_dmat3x2_cm' location is -1. The variable declaration could not be found in the GLSL. Check the shader code. Test failed!
    
    //////////////////////////////////////////////////
    // Uniform Read/Write Test For: uniform_test_dmat3x3_cm
    //////////////////////////////////////////////////
    
    Bad uniform location! Variable declaration 'uniform_test_dmat3x3_cm' location is -1. The variable declaration could not be found in the GLSL. Check the shader code. Test failed!
    
    //////////////////////////////////////////////////
    // Uniform Read/Write Test For: uniform_test_dmat3x4_cm
    //////////////////////////////////////////////////
    
    Bad uniform location! Variable declaration 'uniform_test_dmat3x4_cm' location is -1. The variable declaration could not be found in the GLSL. Check the shader code. Test failed!
    
    //////////////////////////////////////////////////
    // Uniform Read/Write Test For: uniform_test_dmat4x2_cm
    //////////////////////////////////////////////////
    
    Bad uniform location! Variable declaration 'uniform_test_dmat4x2_cm' location is -1. The variable declaration could not be found in the GLSL. Check the shader code. Test failed!
    
    //////////////////////////////////////////////////
    // Uniform Read/Write Test For: uniform_test_dmat4x3_cm
    //////////////////////////////////////////////////
    
    Bad uniform location! Variable declaration 'uniform_test_dmat4x3_cm' location is -1. The variable declaration could not be found in the GLSL. Check the shader code. Test failed!
    
    //////////////////////////////////////////////////
    // Uniform Read/Write Test For: uniform_test_dmat4x4_cm
    //////////////////////////////////////////////////
    
    Bad uniform location! Variable declaration 'uniform_test_dmat4x4_cm' location is -1. The variable declaration could not be found in the GLSL. Check the shader code. Test failed!
    
    //////////////////////////////////////////////////
    // Uniform Read/Write Test For: uniform_test_dmat2x2_array_cm[0]
    //////////////////////////////////////////////////
    
    Bad uniform location! Variable declaration 'uniform_test_dmat2x2_array_cm[0]' location is -1. The variable declaration could not be found in the GLSL. Check the shader code. Test failed!
    
    //////////////////////////////////////////////////
    // Uniform Read/Write Test For: uniform_test_dmat2x3_array_cm[0]
    //////////////////////////////////////////////////
    
    Bad uniform location! Variable declaration 'uniform_test_dmat2x3_array_cm[0]' location is -1. The variable declaration could not be found in the GLSL. Check the shader code. Test failed!
    
    //////////////////////////////////////////////////
    // Uniform Read/Write Test For: uniform_test_dmat2x4_array_cm[0]
    //////////////////////////////////////////////////
    
    Bad uniform location! Variable declaration 'uniform_test_dmat2x4_array_cm[0]' location is -1. The variable declaration could not be found in the GLSL. Check the shader code. Test failed!
    
    //////////////////////////////////////////////////
    // Uniform Read/Write Test For: uniform_test_dmat3x2_array_cm[0]
    //////////////////////////////////////////////////
    
    Bad uniform location! Variable declaration 'uniform_test_dmat3x2_array_cm[0]' location is -1. The variable declaration could not be found in the GLSL. Check the shader code. Test failed!
    
    //////////////////////////////////////////////////
    // Uniform Read/Write Test For: uniform_test_dmat3x3_array_cm[0]
    //////////////////////////////////////////////////
    
    Bad uniform location! Variable declaration 'uniform_test_dmat3x3_array_cm[0]' location is -1. The variable declaration could not be found in the GLSL. Check the shader code. Test failed!
    
    //////////////////////////////////////////////////
    // Uniform Read/Write Test For: uniform_test_dmat3x4_array_cm[0]
    //////////////////////////////////////////////////
    
    Bad uniform location! Variable declaration 'uniform_test_dmat3x4_array_cm[0]' location is -1. The variable declaration could not be found in the GLSL. Check the shader code. Test failed!
    
    //////////////////////////////////////////////////
    // Uniform Read/Write Test For: uniform_test_dmat4x2_array_cm[0]
    //////////////////////////////////////////////////
    
    Bad uniform location! Variable declaration 'uniform_test_dmat4x2_array_cm[0]' location is -1. The variable declaration could not be found in the GLSL. Check the shader code. Test failed!
    
    //////////////////////////////////////////////////
    // Uniform Read/Write Test For: uniform_test_dmat4x3_array_cm[0]
    //////////////////////////////////////////////////
    
    Bad uniform location! Variable declaration 'uniform_test_dmat4x3_array_cm[0]' location is -1. The variable declaration could not be found in the GLSL. Check the shader code. Test failed!
    
    //////////////////////////////////////////////////
    // Uniform Read/Write Test For: uniform_test_dmat4x4_array_cm[0]
    //////////////////////////////////////////////////
    
    Bad uniform location! Variable declaration 'uniform_test_dmat4x4_array_cm[0]' location is -1. The variable declaration could not be found in the GLSL. Check the shader code. Test failed!
    
    Executed: ApplicationRunTests
             

Examine The Test Results

  1. Examine a few sections of the test results. We'll explain on section below, and all other sections use the exact same pattern.
    //////////////////////////////////////////////////
    // Uniform Read/Write Test For: uniform_test_mat4x4_array_cm[0]
    //////////////////////////////////////////////////
    
    Setting the following uniform constant:
    
    a_oInfo.Name............................uniform_test_mat4x4_array_cm[0]
    a_oInfo.Index...........................48
    a_oInfo.BufferIndex.....................-1
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................3
    a_oInfo.Location........................120
    a_oInfo.Offset..........................-1
    a_oInfo.Size............................4
    a_oInfo.Type............................35676
    a_oInfo.TypeSize........................64
    a_oInfo.ArrayStride.....................-1
    a_oInfo.MatrixStride....................-1
    a_oInfo.Rows............................4
    a_oInfo.Cols............................4
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............0
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................256
    
    Write values:
    1, 2, 3, 4,
    5, 6, 7, 8,
    9, 10, 11, 12,
    13, 14, 15, 16,
    1, 2, 3, 4,
    5, 6, 7, 8,
    9, 10, 11, 12,
    13, 14, 15, 16
    1, 2, 3, 4,
    5, 6, 7, 8,
    9, 10, 11, 12,
    13, 14, 15, 16,
    1, 2, 3, 4,
    5, 6, 7, 8,
    9, 10, 11, 12,
    13, 14, 15, 16
    
    Read values:
    1, 2, 3, 4,
    5, 6, 7, 8,
    9, 10, 11, 12,
    13, 14, 15, 16,
    1, 2, 3, 4,
    5, 6, 7, 8,
    9, 10, 11, 12,
    13, 14, 15, 16
    1, 2, 3, 4,
    5, 6, 7, 8,
    9, 10, 11, 12,
    13, 14, 15, 16,
    1, 2, 3, 4,
    5, 6, 7, 8,
    9, 10, 11, 12,
    13, 14, 15, 16
    
    Result of memcmp(): 0 [ 0 = passed, any non-zero = fail ]
    
    Uniform constant was assigned to this shader buffer variable in the GLSL code:
    
    a_oInfo.Name............................test_mat4x4_array_cm[0]
    a_oInfo.Index...........................48
    a_oInfo.BufferIndex.....................0
    a_oInfo.BufferBinding...................-1
    a_oInfo.BufferType......................4
    a_oInfo.Location........................-1
    a_oInfo.Offset..........................3344
    a_oInfo.Size............................4
    a_oInfo.Type............................35676
    a_oInfo.TypeSize........................64
    a_oInfo.ArrayStride.....................64
    a_oInfo.MatrixStride....................16
    a_oInfo.Rows............................4
    a_oInfo.Cols............................4
    a_oInfo.RowMajor........................0
    a_oInfo.TopLevelArraySize...............1
    a_oInfo.TopLevelArrayStride.............0
    a_oInfo.IsMemberOfTopLevelArray.........0
    a_oInfo.IsMemberOfTopLevelUnsizedArray..0
    a_oInfo.GetTotalSize....................256
             

    The test results are pretty simple. There is a heading that indicates the variable being tested, followed by a table of information about the shader constant. This is program reflection information acquired from OpenGL and it can be very useful for diagnosing problems.

    Next we have the write and read data, which clearly shows either success of failure, depending on the result of the test. This makes it much easier to determine the nature of any potential problems. The results of the memcmp function are displayed after the visual presentation of the test data.

    Finally, in this test suite we are assigning the values of the uniforms we set to shader buffer variables so that we can read them back and perform comparisons. The last section contains program reflection information about the shader buffer variable used for the test. This is also useful for diagnosing tricky problems and bugs.

Get The Test Code Path

  1. Select File » Get Application Script Path... from the main menu.

    The software displays a dialog that allows you to select a script.

    This is a picture of the desktop.
  2. Type app_service_test_uniform_util.ssl and left click the script when it appears.
  3. Click OK or hit ENTER when you are finished.

    The software copies the full path to the script to the Windows® clipboard.

Examine The Test Code 'Execute' Function

  1. Start a text editor of your choice and select the option to open a file from disk.
  2. Select CTRL + V to paste the fragment shader file path (into the place in the dialog where you specify the file to open) and open the file.
  3. Use the text editor search feature to find a function named Execute. There are a few clearly delineated sections.
    1. Set up a shader program.
    2. Set up a shader buffer for testing.
    3. Set up a memory barrier.
    4. A section for testing a single function at a time.
    5. A section that performs all tests.
    ///////////////////////////////////////////////////////////////////////////////
    // function
    ///////////////////////////////////////////////////////////////////////////////
    
    function bool Execute()
    {
       //////////////////////////////////////////////////
       // Set up the shader program.
       //////////////////////////////////////////////////
    
       auto GpuTestDevice a_oTest;
    
       Render3D a_oAccel = Application.GetAccelerate3D();
       a_oTest.m_pAccel = a_oAccel;
    
       auto Program a_oProgram;
       a_oTest.m_pProgram = a_oProgram;
    
       // Create and bind the uniform buffer.
       a_oTest.m_sGlslTestFile = "test_uniform_write.glsl";
       a_oTest.m_sBufferName = "test_buffer";
    
       a_oTest.m_slInfo.Add( LibAppServiceTest.Bar() );
       a_oTest.m_slInfo.Add( "// Starting Uniform Tests" );
       a_oTest.m_slInfo.Add( LibAppServiceTest.Bar() );
       a_oTest.m_slInfo.AddBlank();
    
       bool a_bInit = LibAppServiceTest.Initialize( a_oTest );
       if( !( a_bInit ) )
       {
          return false;
       }
    
       Console.Clear();
    
       //////////////////////////////////////////////////
       // Create and bind the shader buffer.
       //////////////////////////////////////////////////
    
       auto ShaderBufferNode a_oShaderBuffer;
    
       auto ShaderBufferInfo a_oShaderBufferInfo;
       a_oShaderBufferInfo.m_pAccel = a_oAccel;
       a_oShaderBufferInfo.m_pRenderInfo = a_oTest.m_pRenderInfo;
       a_oShaderBufferInfo.m_pBuffer = a_oShaderBuffer;
       a_oShaderBufferInfo.m_pProgram = a_oProgram;
       a_oShaderBufferInfo.m_sBufferName = "test_buffer";
       a_oShaderBufferInfo.m_eBufferUsage = Enum.RBU_DynamicDraw();
    
       bool a_bCreatedBuffer = LibRender3D.CreateShaderBuffer(
          a_oShaderBufferInfo, a_oTest.m_slInfo );
    
       if( !( a_bCreatedBuffer ) )
       {
          a_oTest.m_slInfo.AddBlank();
          a_oTest.m_slInfo.Add( LibAssert.PrintCallStack() );
          LibAppServiceBuild.Out( a_oTest.m_slInfo );
          return false;
       }
    
       //////////////////////////////////////////////////
       // Set up the memory barrier.
       //////////////////////////////////////////////////
    
       // Since we're writing to a shader buffer, we
       // need to use a memory barrier between
       // accesses to the buffer.
       auto MemoryBarrier m;
       m.GlShaderStorageBarrierBit = true;
    
       //////////////////////////////////////////////////
       // Execute single tests.
       //////////////////////////////////////////////////
    
       if( false )
       {
          TestUniformFloat64Matrix( a_oTest, 2, 2 );
          a_oTest.m_pAccel.InsertMemoryBarrier( m );
          TestUniformFloat64Matrix( a_oTest, 2, 3 );
          a_oTest.m_pAccel.InsertMemoryBarrier( m );
          TestUniformFloat64Matrix( a_oTest, 2, 4 );
          a_oTest.m_pAccel.InsertMemoryBarrier( m );
          TestUniformFloat64Matrix( a_oTest, 3, 2 );
          a_oTest.m_pAccel.InsertMemoryBarrier( m );
          TestUniformFloat64Matrix( a_oTest, 3, 3 );
          a_oTest.m_pAccel.InsertMemoryBarrier( m );
          TestUniformFloat64Matrix( a_oTest, 3, 4 );
          a_oTest.m_pAccel.InsertMemoryBarrier( m );
          TestUniformFloat64Matrix( a_oTest, 4, 2 );
          a_oTest.m_pAccel.InsertMemoryBarrier( m );
          TestUniformFloat64Matrix( a_oTest, 4, 3 );
          a_oTest.m_pAccel.InsertMemoryBarrier( m );
          TestUniformFloat64Matrix( a_oTest, 4, 4 );
          a_oTest.m_pAccel.InsertMemoryBarrier( m );
    
          LibAppServiceBuild.Out( a_oTest.m_slInfo );
    
          // LEAVE THIS HERE.
          a_oTest.m_pAccel.DeleteProgram( a_oProgram.GetHandle() );
          a_oTest.m_pAccel.DestroyShaderBuffer( a_oShaderBuffer.GetParams() );
          delete a_oTest.m_pRenderInfo;
    
          return false;
       }
    
       //////////////////////////////////////////////////
       // Execute all tests.
       //////////////////////////////////////////////////
    
       TestUniformBool( a_oTest );
       a_oTest.m_pAccel.InsertMemoryBarrier( m );
       TestUniformBoolArray( a_oTest );
       a_oTest.m_pAccel.InsertMemoryBarrier( m );
       TestUniformBoolVector( a_oTest, 2 );
       a_oTest.m_pAccel.InsertMemoryBarrier( m );
       TestUniformBoolVector( a_oTest, 3 );
       a_oTest.m_pAccel.InsertMemoryBarrier( m );
       TestUniformBoolVector( a_oTest, 4 );
       a_oTest.m_pAccel.InsertMemoryBarrier( m );
       TestUniformBoolVectorArray( a_oTest, 2 );
       a_oTest.m_pAccel.InsertMemoryBarrier( m );
       TestUniformBoolVectorArray( a_oTest, 3 );
       a_oTest.m_pAccel.InsertMemoryBarrier( m );
       TestUniformBoolVectorArray( a_oTest, 4 );
       a_oTest.m_pAccel.InsertMemoryBarrier( m );
    
       TestUniformUint32( a_oTest );
       a_oTest.m_pAccel.InsertMemoryBarrier( m );
       TestUniformUint32Array( a_oTest );
       a_oTest.m_pAccel.InsertMemoryBarrier( m );
       TestUniformUint32Vector( a_oTest, 2 );
       a_oTest.m_pAccel.InsertMemoryBarrier( m );
       TestUniformUint32Vector( a_oTest, 3 );
       a_oTest.m_pAccel.InsertMemoryBarrier( m );
       TestUniformUint32Vector( a_oTest, 4 );
       a_oTest.m_pAccel.InsertMemoryBarrier( m );
       TestUniformUint32VectorArray( a_oTest, 2 );
       a_oTest.m_pAccel.InsertMemoryBarrier( m );
       TestUniformUint32VectorArray( a_oTest, 3 );
       a_oTest.m_pAccel.InsertMemoryBarrier( m );
       TestUniformUint32VectorArray( a_oTest, 4 );
       a_oTest.m_pAccel.InsertMemoryBarrier( m );
    
       TestUniformUint64( a_oTest );
       a_oTest.m_pAccel.InsertMemoryBarrier( m );
       TestUniformUint64Array( a_oTest );
       a_oTest.m_pAccel.InsertMemoryBarrier( m );
       TestUniformUint64Vector( a_oTest, 2 );
       a_oTest.m_pAccel.InsertMemoryBarrier( m );
       TestUniformUint64Vector( a_oTest, 3 );
       a_oTest.m_pAccel.InsertMemoryBarrier( m );
       TestUniformUint64Vector( a_oTest, 4 );
       a_oTest.m_pAccel.InsertMemoryBarrier( m );
       TestUniformUint64VectorArray( a_oTest, 2 );
       a_oTest.m_pAccel.InsertMemoryBarrier( m );
       TestUniformUint64VectorArray( a_oTest, 3 );
       a_oTest.m_pAccel.InsertMemoryBarrier( m );
       TestUniformUint64VectorArray( a_oTest, 4 );
       a_oTest.m_pAccel.InsertMemoryBarrier( m );
    
       TestUniformInt32( a_oTest );
       a_oTest.m_pAccel.InsertMemoryBarrier( m );
       TestUniformInt32Array( a_oTest );
       a_oTest.m_pAccel.InsertMemoryBarrier( m );
       TestUniformInt32Vector( a_oTest, 2 );
       a_oTest.m_pAccel.InsertMemoryBarrier( m );
       TestUniformInt32Vector( a_oTest, 3 );
       a_oTest.m_pAccel.InsertMemoryBarrier( m );
       TestUniformInt32Vector( a_oTest, 4 );
       a_oTest.m_pAccel.InsertMemoryBarrier( m );
       TestUniformInt32VectorArray( a_oTest, 2 );
       a_oTest.m_pAccel.InsertMemoryBarrier( m );
       TestUniformInt32VectorArray( a_oTest, 3 );
       a_oTest.m_pAccel.InsertMemoryBarrier( m );
       TestUniformInt32VectorArray( a_oTest, 4 );
       a_oTest.m_pAccel.InsertMemoryBarrier( m );
    
       TestUniformInt64( a_oTest );
       a_oTest.m_pAccel.InsertMemoryBarrier( m );
       TestUniformInt64Array( a_oTest );
       a_oTest.m_pAccel.InsertMemoryBarrier( m );
       TestUniformInt64Vector( a_oTest, 2 );
       a_oTest.m_pAccel.InsertMemoryBarrier( m );
       TestUniformInt64Vector( a_oTest, 3 );
       a_oTest.m_pAccel.InsertMemoryBarrier( m );
       TestUniformInt64Vector( a_oTest, 4 );
       a_oTest.m_pAccel.InsertMemoryBarrier( m );
       TestUniformInt64VectorArray( a_oTest, 2 );
       a_oTest.m_pAccel.InsertMemoryBarrier( m );
       TestUniformInt64VectorArray( a_oTest, 3 );
       a_oTest.m_pAccel.InsertMemoryBarrier( m );
       TestUniformInt64VectorArray( a_oTest, 4 );
       a_oTest.m_pAccel.InsertMemoryBarrier( m );
    
       TestUniformFloat32( a_oTest );
       a_oTest.m_pAccel.InsertMemoryBarrier( m );
       TestUniformFloat32Array( a_oTest );
       a_oTest.m_pAccel.InsertMemoryBarrier( m );
       TestUniformFloat32Vector( a_oTest, 2 );
       a_oTest.m_pAccel.InsertMemoryBarrier( m );
       TestUniformFloat32Vector( a_oTest, 3 );
       a_oTest.m_pAccel.InsertMemoryBarrier( m );
       TestUniformFloat32Vector( a_oTest, 4 );
       a_oTest.m_pAccel.InsertMemoryBarrier( m );
       TestUniformFloat32VectorArray( a_oTest, 2 );
       a_oTest.m_pAccel.InsertMemoryBarrier( m );
       TestUniformFloat32VectorArray( a_oTest, 3 );
       a_oTest.m_pAccel.InsertMemoryBarrier( m );
       TestUniformFloat32VectorArray( a_oTest, 4 );
       a_oTest.m_pAccel.InsertMemoryBarrier( m );
       TestUniformFloat32Matrix( a_oTest, 2, 2 );
       a_oTest.m_pAccel.InsertMemoryBarrier( m );
       TestUniformFloat32Matrix( a_oTest, 2, 3 );
       a_oTest.m_pAccel.InsertMemoryBarrier( m );
       TestUniformFloat32Matrix( a_oTest, 2, 4 );
       a_oTest.m_pAccel.InsertMemoryBarrier( m );
       TestUniformFloat32Matrix( a_oTest, 3, 2 );
       a_oTest.m_pAccel.InsertMemoryBarrier( m );
       TestUniformFloat32Matrix( a_oTest, 3, 3 );
       a_oTest.m_pAccel.InsertMemoryBarrier( m );
       TestUniformFloat32Matrix( a_oTest, 3, 4 );
       a_oTest.m_pAccel.InsertMemoryBarrier( m );
       TestUniformFloat32Matrix( a_oTest, 4, 2 );
       a_oTest.m_pAccel.InsertMemoryBarrier( m );
       TestUniformFloat32Matrix( a_oTest, 4, 3 );
       a_oTest.m_pAccel.InsertMemoryBarrier( m );
       TestUniformFloat32Matrix( a_oTest, 4, 4 );
       a_oTest.m_pAccel.InsertMemoryBarrier( m );
       TestUniformFloat32MatrixArray( a_oTest, 2, 2 );
       a_oTest.m_pAccel.InsertMemoryBarrier( m );
       TestUniformFloat32MatrixArray( a_oTest, 2, 3 );
       a_oTest.m_pAccel.InsertMemoryBarrier( m );
       TestUniformFloat32MatrixArray( a_oTest, 2, 4 );
       a_oTest.m_pAccel.InsertMemoryBarrier( m );
       TestUniformFloat32MatrixArray( a_oTest, 3, 2 );
       a_oTest.m_pAccel.InsertMemoryBarrier( m );
       TestUniformFloat32MatrixArray( a_oTest, 3, 3 );
       a_oTest.m_pAccel.InsertMemoryBarrier( m );
       TestUniformFloat32MatrixArray( a_oTest, 3, 4 );
       a_oTest.m_pAccel.InsertMemoryBarrier( m );
       TestUniformFloat32MatrixArray( a_oTest, 4, 2 );
       a_oTest.m_pAccel.InsertMemoryBarrier( m );
       TestUniformFloat32MatrixArray( a_oTest, 4, 3 );
       a_oTest.m_pAccel.InsertMemoryBarrier( m );
       TestUniformFloat32MatrixArray( a_oTest, 4, 4 );
       a_oTest.m_pAccel.InsertMemoryBarrier( m );
    
       TestUniformFloat64( a_oTest );
       a_oTest.m_pAccel.InsertMemoryBarrier( m );
       TestUniformFloat64Array( a_oTest );
       a_oTest.m_pAccel.InsertMemoryBarrier( m );
       TestUniformFloat64Vector( a_oTest, 2 );
       a_oTest.m_pAccel.InsertMemoryBarrier( m );
       TestUniformFloat64Vector( a_oTest, 3 );
       a_oTest.m_pAccel.InsertMemoryBarrier( m );
       TestUniformFloat64Vector( a_oTest, 4 );
       a_oTest.m_pAccel.InsertMemoryBarrier( m );
       TestUniformFloat64VectorArray( a_oTest, 2 );
       a_oTest.m_pAccel.InsertMemoryBarrier( m );
       TestUniformFloat64VectorArray( a_oTest, 3 );
       a_oTest.m_pAccel.InsertMemoryBarrier( m );
       TestUniformFloat64VectorArray( a_oTest, 4 );
       a_oTest.m_pAccel.InsertMemoryBarrier( m );
       TestUniformFloat64Matrix( a_oTest, 2, 2 );
       a_oTest.m_pAccel.InsertMemoryBarrier( m );
       TestUniformFloat64Matrix( a_oTest, 2, 3 );
       a_oTest.m_pAccel.InsertMemoryBarrier( m );
       TestUniformFloat64Matrix( a_oTest, 2, 4 );
       a_oTest.m_pAccel.InsertMemoryBarrier( m );
       TestUniformFloat64Matrix( a_oTest, 3, 2 );
       a_oTest.m_pAccel.InsertMemoryBarrier( m );
       TestUniformFloat64Matrix( a_oTest, 3, 3 );
       a_oTest.m_pAccel.InsertMemoryBarrier( m );
       TestUniformFloat64Matrix( a_oTest, 3, 4 );
       a_oTest.m_pAccel.InsertMemoryBarrier( m );
       TestUniformFloat64Matrix( a_oTest, 4, 2 );
       a_oTest.m_pAccel.InsertMemoryBarrier( m );
       TestUniformFloat64Matrix( a_oTest, 4, 3 );
       a_oTest.m_pAccel.InsertMemoryBarrier( m );
       TestUniformFloat64Matrix( a_oTest, 4, 4 );
       a_oTest.m_pAccel.InsertMemoryBarrier( m );
       TestUniformFloat64MatrixArray( a_oTest, 2, 2 );
       a_oTest.m_pAccel.InsertMemoryBarrier( m );
       TestUniformFloat64MatrixArray( a_oTest, 2, 3 );
       a_oTest.m_pAccel.InsertMemoryBarrier( m );
       TestUniformFloat64MatrixArray( a_oTest, 2, 4 );
       a_oTest.m_pAccel.InsertMemoryBarrier( m );
       TestUniformFloat64MatrixArray( a_oTest, 3, 2 );
       a_oTest.m_pAccel.InsertMemoryBarrier( m );
       TestUniformFloat64MatrixArray( a_oTest, 3, 3 );
       a_oTest.m_pAccel.InsertMemoryBarrier( m );
       TestUniformFloat64MatrixArray( a_oTest, 3, 4 );
       a_oTest.m_pAccel.InsertMemoryBarrier( m );
       TestUniformFloat64MatrixArray( a_oTest, 4, 2 );
       a_oTest.m_pAccel.InsertMemoryBarrier( m );
       TestUniformFloat64MatrixArray( a_oTest, 4, 3 );
       a_oTest.m_pAccel.InsertMemoryBarrier( m );
       TestUniformFloat64MatrixArray( a_oTest, 4, 4 );
       a_oTest.m_pAccel.InsertMemoryBarrier( m );
    
       // Do cleanup.
       a_oTest.m_pAccel.DeleteProgram( a_oProgram.GetHandle() );
       a_oTest.m_pAccel.DestroyShaderBuffer( a_oShaderBuffer.GetParams() );
       delete a_oTest.m_pRenderInfo;
    
       //////////////////////////////////////////////////
       // Finis~
       //////////////////////////////////////////////////
    
       LibAppServiceBuild.Out( a_oTest.m_slInfo );
    
       Console.Blank();
       Console.Out( "Executed: " + Script.Runtime.CurrentFunction.Name );
    
       return true;
    }
             

Examine The Test Code 'TestUniformFloat64VectorArray' Function

  1. Use the text editor search feature to find a function named TestUniformFloat64VectorArray. There are a few key sections.

    1. Create the variable name.
    2. Initialize the uniform or return upon failure.
    3. Create the data we want to write and declare storage for the readback.
    4. Set the uniform on the device and execute the shader program.
    5. Get reflection information (constant info) for the shader buffer variable.
    6. Read back the value of the uniform that was written to the shader buffer variable during program execution.
    7. Print data.
    8. Print test results.
    9. Print shader buffer variable reflection information.

    ///////////////////////////////////////////////////////////////////////////////
    // function
    ///////////////////////////////////////////////////////////////////////////////
    
    function void TestUniformFloat64VectorArray( GpuTestDevice p_oTest, int p_nVectorDim )
    {
       //////////////////////////////////////////////////
       // Create variable name.
       //////////////////////////////////////////////////
    
       string a_sVariable = "test_dvec" + p_nVectorDim + "_array[0]";
       string a_sUniformName = "uniform_" + a_sVariable;
    
       //////////////////////////////////////////////////
       // Initialize uniform.
       //////////////////////////////////////////////////
    
       auto ProgramConstantInfo a_oUniformInfo;
    
       bool a_bInit = LibAppServiceTest.InitializeUniform(
          p_oTest.m_pAccel, p_oTest.m_pProgram, a_sUniformName,
          a_oUniformInfo, p_oTest.m_slInfo );
    
       if( !( a_bInit ) )
       {
          return;
       }
    
       //////////////////////////////////////////////////
       // Create the data we want to write and declare storage for the readback
       //////////////////////////////////////////////////
    
       auto Float64VectorArray a_avWrite;
       auto Float64Vector wa = new Float64Vector( 0.1,  1.2,  2.3,  3.4 );
       auto Float64Vector wb = new Float64Vector( 4.4,  5.3,  6.2,  7.1 );
       auto Float64Vector wc = new Float64Vector( 8.1,  9.2,  10.3, 11.4 );
       auto Float64Vector wd = new Float64Vector( 12.4, 13.3, 14.2, 15.1 );
       a_avWrite.Add( wa );
       a_avWrite.Add( wb );
       a_avWrite.Add( wc );
       a_avWrite.Add( wd );
    
       auto Float64VectorArray a_avRead;
       auto Float64Vector ra = new Float64Vector( 0, 0, 0, 0 );
       auto Float64Vector rb = new Float64Vector( 0, 0, 0, 0 );
       auto Float64Vector rc = new Float64Vector( 0, 0, 0, 0 );
       auto Float64Vector rd = new Float64Vector( 0, 0, 0, 0 );
       a_avRead.Add( ra );
       a_avRead.Add( rb );
       a_avRead.Add( rc );
       a_avRead.Add( rd );
    
       auto Float64ArrayView src_view = a_avWrite.GetView();
       auto Float64ArrayView dst_view = a_avRead.GetView();
    
       // For vec2 or vec3, we need to clear some
       // values so that we can be sure our write
       // and read data is minimal and clean.
       for( int v = 0; v < a_avWrite.GetCount(); ++v )
       {
          Float64Vector a_vVector = a_avWrite.Get( v );
          for( int s = p_nVectorDim; s < Enum.GLSL_DataType_Vec4(); ++s )
          {
             a_vVector.SetComponent( s, 0 );
          }
       }
    
       //////////////////////////////////////////////////
       // Set the uniform on the device and execute the shader program.
       //////////////////////////////////////////////////
    
       auto Float64ArrayAlgorithms fa;
       auto Float64VectorArrayAlgorithms va;
    
       p_oTest.m_pAccel.SetProgramConstantFloat64VectorArray(
          p_oTest.m_pProgram.GetHandle(), a_oUniformInfo.Location,
          a_avWrite, p_nVectorDim, a_avWrite.GetCount() );
    
       p_oTest.m_pAccel.ExecuteProgram( true, 128, 128, 1, 32, 32, 1 );
    
       //////////////////////////////////////////////////
       // Get reflection information (constant info) for the shader buffer variable.
       //////////////////////////////////////////////////
    
       auto ProgramConstantInfo a_oBufferInfo;
       p_oTest.m_pAccel.GetProgramConstantInfo(
          p_oTest.m_pProgram.GetHandle(), a_sVariable, a_oBufferInfo );
    
       //////////////////////////////////////////////////
       // Read back the value of the uniform that was written to the shader buffer variable during program execution.
       //////////////////////////////////////////////////
    
       // All vec3 uniforms are aligned to 16-bytes
       // so we have to do the readback as if we
       // are reading back a vec4.
       if( p_nVectorDim == Enum.GLSL_DataType_Vec3() )
       {
          p_nVectorDim = Enum.GLSL_DataType_Vec4();
       }
    
       int a_nSize = SizeLimits.sizeof_float64() *
          p_nVectorDim * a_avWrite.GetCount();
    
       auto Float64Array a_afReadData = new Float64Array(
          p_nVectorDim * a_avWrite.GetCount(), 0 );
       auto Float64ArrayView read_view = a_afReadData.GetView();
    
       auto MemoryPointer a_oDstPtr = a_afReadData.GetPointer();
    
       p_oTest.m_pAccel.ReadShaderSubBuffer(
          a_oBufferInfo.Offset, a_afReadData.SizeInBytes(), a_oDstPtr );
    
       va.PackScalarArrayInVectors(
          read_view.First, read_view.Last, dst_view.First, p_nVectorDim );
    
       //////////////////////////////////////////////////
       // Print data.
       //////////////////////////////////////////////////
    
       p_oTest.m_slInfo.AddBlank();
       p_oTest.m_slInfo.Add( "Write values:" );
       LibFloat64VectorArray.ConvertToString(
          a_avWrite, 0, a_avWrite.GetCount(), p_oTest.m_slInfo );
    
       p_oTest.m_slInfo.AddBlank();
       p_oTest.m_slInfo.Add( "Read values:" );
       LibFloat64VectorArray.ConvertToString(
          a_avRead, 0, a_avRead.GetCount(), p_oTest.m_slInfo );
    
       //////////////////////////////////////////////////
       // Print test results.
       //////////////////////////////////////////////////
    
       LibAppServiceTest.DoMemcmp( p_oTest.m_slInfo,
          fa.Memcmp( src_view.First, dst_view.First, a_nSize ) );
    
       //////////////////////////////////////////////////
       // Print shader buffer variable reflection information.
       //////////////////////////////////////////////////
    
       GetBufferCopyMessage( p_oTest.m_slInfo );
    
       LibProgramConstantInfo.Print( a_oBufferInfo, p_oTest.m_slInfo );
    }
    

    This exercise is complete. Return to tutorials.