[Mesa-dev] [PATCH] glsl: fix uniform location count used for glsl types

Francisco Jerez currojerez at riseup.net
Wed Sep 24 05:46:21 PDT 2014


Tapani Pälli <tapani.palli at intel.com> writes:

> 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>
> 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;
>  

Looks OK to me,

Reviewed-by: Francisco Jerez <currojerez at riseup.net>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 212 bytes
Desc: not available
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20140924/f4757376/attachment.sig>


More information about the mesa-dev mailing list