Nvidia dmat3x4 in std140 UBO layout

Hi,
This is NVidia 270.61 OpenGL 4.0 / ARB_gpu_shader_fp64 - specific question:

Using following shader


"layout(std140) uniform BLOCK {"
"    uniform double udouble;"
"    uniform dvec2 udvec2;"
"    uniform dvec3 udvec3;"
"    uniform dvec4 udvec4;"
"    uniform dmat2 udmat2;"
"    uniform dmat3 udmat3;"
"    uniform dmat4 udmat4;"
"    uniform dmat2x3 udmat2x3;"
"    uniform dmat2x4 udmat2x4;"
"    uniform dmat3x2 udmat3x2;"
"    uniform dmat3x4 udmat3x4;"
"    uniform dmat4x2 udmat4x2;"
"    uniform dmat4x3 udmat4x3;"
"} block;"
"out vec4 v_Color;"
"void main() {"
"    gl_Position = vec4(0, 0, 0, 0);"
"}";

I have got 528 for udmat3x4 GL_UNIFORM_OFFSET (obtained via glGetActiveUniformsiv). Is this correct?

Spec says, that matrices are treated as arrays of vectors, arrays should have align exact as align of single element, So:

  1. If the member is a two- or four-component vector with components consuming N basic machine units, the base
    alignment is 2N or 4N, respectively.

4N = 4 * sizeof(GLdouble) = 32
So the udmat3x4 should be aligned to 32, but is not! (528 % 32 = 16)
Am I right?

This topic was automatically closed 183 days after the last reply. New replies are no longer allowed.