[Mesa-dev] [PATCH] ACTIVE_UNIFORM_MAX_LENGTH should include 3 extra characters for arrays.

Ian Romanick idr at freedesktop.org
Mon Apr 1 11:04:56 PDT 2013


On 03/30/2013 04:26 AM, Dragomir Ivanov wrote:
> I don't know OpenGL very much, but can uniforms be more than 10? So you
> can have "[24]" where you will need +4, not +3.

The query gives back the name that is the base of the array, not the 
declaration.  No matter what size the array "foo" is, you'll always get 
"foo[0]" as the name of the base.

> On Sat, Mar 30, 2013 at 3:22 AM, Haixia Shi <hshi at chromium.org
> <mailto:hshi at chromium.org>> wrote:
>
>     If the active uniform is an array, then the length of the uniform
>     name should
>     include the three extra characters for the "[0]" suffix, which is
>     required by
>     the GL 4.2 spec to be appended to the uniform name in
>     glGetActiveUniform().
>
>     This avoids the situation where the output buffer does not have
>     enough space
>     to hold the "[0]" suffix, resulting in an incomplete array
>     specification like
>     "foobar[0".
>
>     Change-Id: Icd58cd6a73c9de7bbe5659d757b8009021846019
>     Signed-off-by: Haixia Shi <hshi at chromium.org <mailto:hshi at chromium.org>>
>     Reviewed-by: Stéphane Marchesin <marcheu at chromium.org
>     <mailto:marcheu at chromium.org>>
>     ---
>       src/mesa/main/shaderapi.c | 5 ++++-
>       1 file changed, 4 insertions(+), 1 deletion(-)
>
>     diff --git a/src/mesa/main/shaderapi.c b/src/mesa/main/shaderapi.c
>     index be69467..68767f4 100644
>     --- a/src/mesa/main/shaderapi.c
>     +++ b/src/mesa/main/shaderapi.c
>     @@ -519,8 +519,11 @@ get_programiv(struct gl_context *ctx, GLuint
>     program, GLenum pname, GLint *param
>
>             for (i = 0; i < shProg->NumUserUniformStorage; i++) {
>               /* Add one for the terminating NUL character.
>     +         * However if the uniform is an array, then add three extra
>     characters
>     +         * for the appended "[0]" suffix, in addition to the
>     terminating NUL.
>                */
>     -        const GLint len = strlen(shProg->UniformStorage[i].name) + 1;
>     +        const GLint len = strlen(shProg->UniformStorage[i].name) + 1 +
>     +            ((shProg->UniformStorage[i].array_elements != 0) ? 3 : 0);
>
>               if (len > max_len)
>                  max_len = len;
>     --
>     1.8.1.3
>     _______________________________________________
>     mesa-dev mailing list
>     mesa-dev at lists.freedesktop.org <mailto:mesa-dev at lists.freedesktop.org>
>     http://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
>



More information about the mesa-dev mailing list