On Wed, Jan 20, 2016 at 6:35 AM, Tapani Pälli <tapani.pa...@intel.com> wrote: > On 01/20/2016 01:11 PM, Ilia Mirkin wrote: >> >> On Wed, Jan 20, 2016 at 6:02 AM, Tapani Pälli <tapani.pa...@intel.com> >> wrote: >>>> >>>> Unfortunately putting such a shader together is a bit of a pain, since >>>> all the uniforms have to be used. I still really think you need to >>>> build a heap. Or at least store a "first empty slot" so that you don't >>>> repeat the iteration *every* time. >>> >>> >>> Yeah, I agree "first empty slot" would be good addition and will already >>> help a lot in problematic cases. >> >> Actually it's still not so great, since you can have stupid situations >> which won't fit into the first empty position. e.g. one empty >> location, and a bunch of foo[2] things. That's why I like using a heap >> :)
With this shader: http://hastebin.com/sisomonenu.avrasm and this patch: diff --git a/src/glsl/link_uniforms.cpp b/src/glsl/link_uniforms.cpp index 76ee70d..a826e63 100644 --- a/src/glsl/link_uniforms.cpp +++ b/src/glsl/link_uniforms.cpp @@ -1066,10 +1066,12 @@ find_empty_block(struct gl_shader_program *prog, struct gl_uniform_storage *uniform) { const unsigned entries = MAX2(1, uniform->array_elements); +static int loops = 0; for (unsigned i = 0, j; i < prog->NumUniformRemapTable; i++) { /* We found empty space in UniformRemapTable. */ if (prog->UniformRemapTable[i] == NULL) { - for (j = i; j < entries && j < prog->NumUniformRemapTable; j++) { + for (j = i; j - i < entries && j < prog->NumUniformRemapTable; j++) { +loops++; if (prog->UniformRemapTable[j] != NULL) { /* Entries do not fit in this space, continue searching * after this location. @@ -1080,10 +1082,12 @@ find_empty_block(struct gl_shader_program *prog, } /* Entries fit, we can return this location. */ if (i != j + 1) { +printf("loops: %d\n", loops); return i; } - } + } else loops++; } +printf("loops: %d (fail)\n", loops); return -1; } I get loops going up to 8386560. Which is roughly what I expected. This doesn't concern you at all? -ilia _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev