[Mesa-dev] [RFC PATCH 05/26] glsl: add new glsl_type helpers for bindless sampler/image types

Ilia Mirkin imirkin at alum.mit.edu
Tue Apr 11 17:18:34 UTC 2017


Reviewed-by: Ilia Mirkin <imirkin at alum.mit.edu>

On Tue, Apr 11, 2017 at 12:48 PM, Samuel Pitoiset
<samuel.pitoiset at gmail.com> wrote:
> Similar to existing helpers for sampler/image types.
>
> Signed-off-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
> ---
>  src/compiler/glsl_types.cpp | 31 +++++++++++++++++++++++++++++++
>  src/compiler/glsl_types.h   | 28 ++++++++++++++++++++++++++++
>  2 files changed, 59 insertions(+)
>
> diff --git a/src/compiler/glsl_types.cpp b/src/compiler/glsl_types.cpp
> index 1b06eb68f4..c7a41b785e 100644
> --- a/src/compiler/glsl_types.cpp
> +++ b/src/compiler/glsl_types.cpp
> @@ -225,6 +225,21 @@ glsl_type::contains_sampler() const
>     }
>  }
>
> +bool
> +glsl_type::contains_bindless_sampler() const
> +{
> +   if (this->is_array()) {
> +      return this->fields.array->contains_bindless_sampler();
> +   } else if (this->is_record() || this->is_interface()) {
> +      for (unsigned int i = 0; i < this->length; i++) {
> +         if (this->fields.structure[i].type->contains_bindless_sampler())
> +            return true;
> +      }
> +      return false;
> +   } else {
> +      return this->is_bindless_sampler();
> +   }
> +}
>
>  bool
>  glsl_type::contains_integer() const
> @@ -341,6 +356,22 @@ glsl_type::contains_image() const
>     }
>  }
>
> +bool
> +glsl_type::contains_bindless_image() const
> +{
> +   if (this->is_array()) {
> +      return this->fields.array->contains_bindless_image();
> +   } else if (this->is_record() || this->is_interface()) {
> +      for (unsigned int i = 0; i < this->length; i++) {
> +         if (this->fields.structure[i].type->contains_bindless_image())
> +            return true;
> +      }
> +      return false;
> +   } else {
> +      return this->is_bindless_image();
> +   }
> +}
> +
>  const glsl_type *glsl_type::get_base_type() const
>  {
>     switch (base_type) {
> diff --git a/src/compiler/glsl_types.h b/src/compiler/glsl_types.h
> index 4cb330e4a3..230fc7dbee 100644
> --- a/src/compiler/glsl_types.h
> +++ b/src/compiler/glsl_types.h
> @@ -552,12 +552,26 @@ struct glsl_type {
>     }
>
>     /**
> +    * Query whether or not a type is a bindless sampler.
> +    */
> +   bool is_bindless_sampler() const
> +   {
> +      return base_type == GLSL_TYPE_BINDLESS_SAMPLER;
> +   }
> +
> +   /**
>      * Query whether or not type is a sampler, or for struct, interface and
>      * array types, contains a sampler.
>      */
>     bool contains_sampler() const;
>
>     /**
> +    * Query whether or not type is a bindless sampler, or for struct, interface
> +    * and array types, contains a bindless sampler.
> +    */
> +   bool contains_bindless_sampler() const;
> +
> +   /**
>      * Get the Mesa texture target index for a sampler type.
>      */
>     gl_texture_index sampler_index() const;
> @@ -569,6 +583,12 @@ struct glsl_type {
>     bool contains_image() const;
>
>     /**
> +    * Query whether or not type is a bindless image, or for struct, interface
> +    * and array types, contains a bindless image.
> +    */
> +   bool contains_bindless_image() const;
> +
> +   /**
>      * Query whether or not a type is an image
>      */
>     bool is_image() const
> @@ -577,6 +597,14 @@ struct glsl_type {
>     }
>
>     /**
> +    * Query whether or not a type is a bindless image.
> +    */
> +   bool is_bindless_image() const
> +   {
> +      return base_type == GLSL_TYPE_BINDLESS_IMAGE;
> +   }
> +
> +   /**
>      * Query whether or not a type is an array
>      */
>     bool is_array() const
> --
> 2.12.2
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list