st/mesa: fix incorrect size of UBO declarations

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>
This commit is contained in:
Brian Paul 2014-07-01 08:17:09 -06:00
parent 01bf8bb875
commit f4b0ab7afd
1 changed files with 8 additions and 1 deletions

View 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);
}
}