st/mesa: fix incorrect size of UBO declarations
authorBrian Paul <brianp@vmware.com>
Tue, 1 Jul 2014 14:17:09 +0000 (08:17 -0600)
committerBrian Paul <brianp@vmware.com>
Tue, 1 Jul 2014 15:42:44 +0000 (09:42 -0600)
UniformBufferSize is in bytes so we need to divide by 16 to get the
number of constant buffer slots.  Also, the ureg_DECL_constant2D()
function takes first..last parameters so we need to subtract one
for the last value.

Reviewed-by: Roland Scheidegger <sroland@vmware.com>
src/mesa/state_tracker/st_glsl_to_tgsi.cpp

index 69d67e12a958ab47e5e173e5c6b088432cf5a86e..74501b576241dc512e4736a9e22d4f5ded605ac6 100644 (file)
@@ -5127,7 +5127,14 @@ st_translate_program(
       unsigned num_ubos = program->shader->NumUniformBlocks;
 
       for (i = 0; i < num_ubos; i++) {
-         ureg_DECL_constant2D(t->ureg, 0, program->shader->UniformBlocks[i].UniformBufferSize / 4, i + 1);
+         unsigned size =
+            program->shader_program->UniformBlocks[i].UniformBufferSize;
+         unsigned num_const_vecs = (size + 15) / 16;
+         unsigned first, last;
+         assert(num_const_vecs > 0);
+         first = 0;
+         last = num_const_vecs > 0 ? num_const_vecs - 1 : 0;
+         ureg_DECL_constant2D(t->ureg, first, last, i + 1);
       }
    }