glsl: Align GL_UNIFORM_BLOCK_DATA_SIZE according to std140 rules.

Fixes piglit GL_ARB_uniform_buffer_object/data-size test.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
This commit is contained in:
Eric Anholt
2012-07-25 12:45:13 -07:00
parent 86e0045578
commit e45f1b11c0
+13 -1
View File
@@ -500,7 +500,19 @@ link_assign_uniform_block_offsets(struct gl_shader *shader)
ubo_var->Offset = offset;
offset += size;
}
block->UniformBufferSize = offset;
/* From the GL_ARB_uniform_buffer_object spec:
*
* "For uniform blocks laid out according to [std140] rules,
* the minimum buffer object size returned by the
* UNIFORM_BLOCK_DATA_SIZE query is derived by taking the
* offset of the last basic machine unit consumed by the
* last uniform of the uniform block (including any
* end-of-array or end-of-structure padding), adding one,
* and rounding up to the next multiple of the base
* alignment required for a vec4."
*/
block->UniformBufferSize = align(offset, 16);
}
}