[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