[Mesa-dev] [PATCH 1/2] glsl: Add a new glsl_type::sampler_coordinate_components() function.

Ian Romanick idr at freedesktop.org
Wed Sep 11 12:56:58 PDT 2013


On 09/11/2013 01:44 PM, Kenneth Graunke wrote:
> This computes the number of components necessary to address a sampler
> based on its dimensionality.  It will be useful for texturing built-ins.

Since the next patch uses this to replace a bunch of explicit
parameters, could we have a unit test that verifies
sampler_coordinate_components gives the values that create_builtins
expects?  That is, something that proves there won't be a change causes
by the two patches together.

I looked at the two patches, and they appear sane... and I like the
reduction in redundant information passed to _texture.  Even without the
test, both patches are

Reviewed-by: Ian Romanick <ian.d.romanick at intel.com>

> Signed-off-by: Kenneth Graunke <kenneth at whitecape.org>
> ---
>  src/glsl/glsl_types.cpp | 35 +++++++++++++++++++++++++++++++++++
>  src/glsl/glsl_types.h   | 12 ++++++++++++
>  2 files changed, 47 insertions(+)
> 
> diff --git a/src/glsl/glsl_types.cpp b/src/glsl/glsl_types.cpp
> index 0c7e8eb..3c396dd 100644
> --- a/src/glsl/glsl_types.cpp
> +++ b/src/glsl/glsl_types.cpp
> @@ -883,3 +883,38 @@ glsl_type::count_attribute_slots() const
>  
>     return 0;
>  }
> +
> +int
> +glsl_type::sampler_coordinate_components() const
> +{
> +   assert(is_sampler());
> +
> +   int size;
> +
> +   switch (sampler_dimensionality) {
> +   case GLSL_SAMPLER_DIM_1D:
> +   case GLSL_SAMPLER_DIM_BUF:
> +      size = 1;
> +      break;
> +   case GLSL_SAMPLER_DIM_2D:
> +   case GLSL_SAMPLER_DIM_RECT:
> +   case GLSL_SAMPLER_DIM_MS:
> +   case GLSL_SAMPLER_DIM_EXTERNAL:
> +      size = 2;
> +      break;
> +   case GLSL_SAMPLER_DIM_3D:
> +   case GLSL_SAMPLER_DIM_CUBE:
> +      size = 3;
> +      break;
> +   default:
> +      assert(!"Should not get here.");
> +      size = 1;
> +      break;
> +   }
> +
> +   /* Array textures need an additional component for the array index. */
> +   if (sampler_array)
> +      size += 1;
> +
> +   return size;
> +}
> diff --git a/src/glsl/glsl_types.h b/src/glsl/glsl_types.h
> index 647867a..9f61eee 100644
> --- a/src/glsl/glsl_types.h
> +++ b/src/glsl/glsl_types.h
> @@ -498,6 +498,18 @@ struct glsl_type {
>        return is_array() ? length : -1;
>     }
>  
> +   /**
> +    * Return the number of coordinate components needed for this sampler type.
> +    *
> +    * This is based purely on the sampler's dimensionality.  For example, this
> +    * returns 1 for sampler1D, and 3 for sampler2DArray.
> +    *
> +    * Note that this is often different than actual coordinate type used in
> +    * a texturing built-in function, since those pack additional values (such
> +    * as the shadow comparitor or projector) into the coordinate type.
> +    */
> +   int sampler_coordinate_components() const;
> +
>  private:
>     /**
>      * ralloc context for all glsl_type allocations
> 



More information about the mesa-dev mailing list