[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