[Mesa-dev] [PATCH 1/3] mesa: fix UBO queries for active uniforms

Martin Peres martin.peres at linux.intel.com
Tue Apr 21 00:47:08 PDT 2015



On 21/04/15 08:27, Tapani Pälli wrote:
> Commit 34df5eb introduced regression to GetActiveUniformBlockiv
> when querying one of the following properties:
>
>     GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS
>     GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES
>
> Implementation counted all uniforms in ubo directly while query should
> check first if the uniform in quersion is _active_.

quersion=> question

Otherwise, looks good to me:

Reviewed-By: Martin Peres <martin.peres at linux.intel.com>
>
> Signed-off-by: Tapani Pälli <tapani.palli at intel.com>
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=90109
> ---
>   src/mesa/main/shader_query.cpp | 12 +++++++++++-
>   1 file changed, 11 insertions(+), 1 deletion(-)
>
> diff --git a/src/mesa/main/shader_query.cpp b/src/mesa/main/shader_query.cpp
> index b5f1d08..1428058 100644
> --- a/src/mesa/main/shader_query.cpp
> +++ b/src/mesa/main/shader_query.cpp
> @@ -860,13 +860,23 @@ get_buffer_property(struct gl_shader_program *shProg,
>            *val = RESOURCE_UBO(res)->UniformBufferSize;
>            return 1;
>         case GL_NUM_ACTIVE_VARIABLES:
> -         *val = RESOURCE_UBO(res)->NumUniforms;
> +         *val = 0;
> +         for (unsigned i = 0; i < RESOURCE_UBO(res)->NumUniforms; i++) {
> +            const char *iname = RESOURCE_UBO(res)->Uniforms[i].IndexName;
> +            struct gl_program_resource *uni =
> +               _mesa_program_resource_find_name(shProg, GL_UNIFORM, iname);
> +            if (!uni)
> +               continue;
> +            (*val)++;
> +         }
>            return 1;
>         case GL_ACTIVE_VARIABLES:
>            for (unsigned i = 0; i < RESOURCE_UBO(res)->NumUniforms; i++) {
>               const char *iname = RESOURCE_UBO(res)->Uniforms[i].IndexName;
>               struct gl_program_resource *uni =
>                  _mesa_program_resource_find_name(shProg, GL_UNIFORM, iname);
> +            if (!uni)
> +               continue;
>               *val++ =
>                  _mesa_program_resource_index(shProg, uni);
>            }



More information about the mesa-dev mailing list