[Mesa-stable] [PATCH] glsl: fix uniform location count used for glsl types
Emil Velikov
emil.l.velikov at gmail.com
Wed Oct 29 12:00:17 PDT 2014
Hi Tapani,
For future patches please include the Cc: mesa-stable... tag within the
commit message.
Thanks
Emil
P.S. Just landed both (this and "mesa: check that uniform exists in
glUniform* functions") in the 10.3 branch.
On 03/10/14 05:14, Tapani Pälli wrote:
> Patch fixes the slot count used by vector types and adds 1 slot
> to be used by image and sampler types.
>
> Signed-off-by: Tapani Pälli <tapani.palli at intel.com>
> Reviewed-by: Francisco Jerez <currojerez at riseup.net>
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=82921
> ---
> src/glsl/glsl_types.cpp | 18 +++++++++---------
> src/glsl/glsl_types.h | 3 +++
> 2 files changed, 12 insertions(+), 9 deletions(-)
>
> diff --git a/src/glsl/glsl_types.cpp b/src/glsl/glsl_types.cpp
> index 66e9b13..3c13fce 100644
> --- a/src/glsl/glsl_types.cpp
> +++ b/src/glsl/glsl_types.cpp
> @@ -678,12 +678,17 @@ glsl_type::component_slots() const
> unsigned
> glsl_type::uniform_locations() const
> {
> - if (this->is_matrix())
> - return 1;
> -
> unsigned size = 0;
>
> switch (this->base_type) {
> + case GLSL_TYPE_UINT:
> + case GLSL_TYPE_INT:
> + case GLSL_TYPE_FLOAT:
> + case GLSL_TYPE_BOOL:
> + case GLSL_TYPE_SAMPLER:
> + case GLSL_TYPE_IMAGE:
> + return 1;
> +
> case GLSL_TYPE_STRUCT:
> case GLSL_TYPE_INTERFACE:
> for (unsigned i = 0; i < this->length; i++)
> @@ -692,13 +697,8 @@ glsl_type::uniform_locations() const
> case GLSL_TYPE_ARRAY:
> return this->length * this->fields.array->uniform_locations();
> default:
> - break;
> + return 0;
> }
> -
> - /* The location count for many types match with component_slots() result,
> - * all expections should be handled above.
> - */
> - return component_slots();
> }
>
> bool
> diff --git a/src/glsl/glsl_types.h b/src/glsl/glsl_types.h
> index d545533..5a307bb 100644
> --- a/src/glsl/glsl_types.h
> +++ b/src/glsl/glsl_types.h
> @@ -279,6 +279,9 @@ struct glsl_type {
> /**
> * Calculate the number of unique values from glGetUniformLocation for the
> * elements of the type.
> + *
> + * This is used to allocate slots in the UniformRemapTable, the amount of
> + * locations may not match with actual used storage space by the driver.
> */
> unsigned uniform_locations() const;
>
>
More information about the mesa-stable
mailing list