[Mesa-dev] [PATCH v2] glsl: Use the without_array predicate to simplify some code

Timothy Arceri t_arceri at yahoo.com.au
Tue Jul 29 23:12:55 PDT 2014


On Tue, 2014-07-29 at 16:15 -0700, Ian Romanick wrote:
> From: Ian Romanick <ian.d.romanick at intel.com>
> 
> Signed-off-by: Ian Romanick <ian.d.romanick at intel.com>
> Reviewed-by: Matt Turner <mattst88 at gmail.com> [v1]
> Cc: Timothy Arceri <t_arceri at yahoo.com.au>
> ---
>  src/glsl/ast_to_hir.cpp    |  3 +--
>  src/glsl/glsl_types.cpp    |  3 +--
>  src/glsl/link_uniforms.cpp | 23 ++++++++---------------
>  src/glsl/link_varyings.cpp |  6 ++----
>  4 files changed, 12 insertions(+), 23 deletions(-)
> 
> diff --git a/src/glsl/ast_to_hir.cpp b/src/glsl/ast_to_hir.cpp
> index a15ee9c..844e11c 100644
> --- a/src/glsl/ast_to_hir.cpp
> +++ b/src/glsl/ast_to_hir.cpp
> @@ -5203,8 +5203,7 @@ ast_process_structure_or_interface_block(exec_list *instructions,
>                               "in uniform blocks or structures.");
>           }
>  
> -         if (field_type->is_matrix() ||
> -             (field_type->is_array() && field_type->fields.array->is_matrix())) {
> +         if (field_type->without_array()->is_matrix()) {
>              fields[i].row_major = block_row_major;
>              if (qual->flags.q.row_major)
>                 fields[i].row_major = true;
> diff --git a/src/glsl/glsl_types.cpp b/src/glsl/glsl_types.cpp
> index f9cd258..737e6dd 100644
> --- a/src/glsl/glsl_types.cpp
> +++ b/src/glsl/glsl_types.cpp
> @@ -872,8 +872,7 @@ glsl_type::std140_size(bool row_major) const
>      *     and <R> rows, the matrix is stored identically to a row of <S>*<R>
>      *     row vectors with <C> components each, according to rule (4).
>      */
> -   if (this->is_matrix() || (this->is_array() &&
> -			     this->fields.array->is_matrix())) {
> +   if (this->without_array()->is_matrix()) {
>        const struct glsl_type *element_type;
>        const struct glsl_type *vec_type;
>        unsigned int array_len;
> diff --git a/src/glsl/link_uniforms.cpp b/src/glsl/link_uniforms.cpp
> index 6c73197..7489536 100644
> --- a/src/glsl/link_uniforms.cpp
> +++ b/src/glsl/link_uniforms.cpp
> @@ -59,10 +59,8 @@ values_for_type(const glsl_type *type)
>  void
>  program_resource_visitor::process(const glsl_type *type, const char *name)
>  {
> -   assert(type->is_record()
> -          || (type->is_array() && type->fields.array->is_record())
> -          || type->is_interface()
> -          || (type->is_array() && type->fields.array->is_interface()));
> +   assert(type->without_array()->is_record()
> +          || type->without_array()->is_interface());
>  
>     char *name_copy = ralloc_strdup(NULL, name);
>     recursion(type, &name_copy, strlen(name), false, NULL);
> @@ -136,7 +134,7 @@ program_resource_visitor::process(ir_variable *var)
>         */
>        recursion(var->type, &name, strlen(name), false, NULL);
>        ralloc_free(name);
> -   } else if (t->is_record() || (t->is_array() && t->fields.array->is_record())) {
> +   } else if (t->without_array()->is_record()) {
>        char *name = ralloc_strdup(NULL, var->name);
>        recursion(var->type, &name, strlen(name), false, NULL);
>        ralloc_free(name);
> @@ -299,10 +297,8 @@ private:
>     virtual void visit_field(const glsl_type *type, const char *name,
>                              bool row_major)
>     {
> -      assert(!type->is_record());
> -      assert(!(type->is_array() && type->fields.array->is_record()));
> -      assert(!type->is_interface());
> -      assert(!(type->is_array() && type->fields.array->is_interface()));
> +      assert(!type->without_array()->is_record());
> +      assert(!type->without_array()->is_interface());
>  
>        (void) row_major;
>  
> @@ -514,10 +510,8 @@ private:
>     virtual void visit_field(const glsl_type *type, const char *name,
>                              bool row_major, const glsl_type *record_type)
>     {
> -      assert(!type->is_record());
> -      assert(!(type->is_array() && type->fields.array->is_record()));
> -      assert(!type->is_interface());
> -      assert(!(type->is_array() && type->fields.array->is_interface()));
> +      assert(!type->without_array()->is_record());
> +      assert(!type->without_array()->is_interface());
>  
>        (void) row_major;
>  
> @@ -590,8 +584,7 @@ private:
>  	    this->uniforms[id].array_stride = 0;
>  	 }
>  
> -	 if (type->is_matrix() ||
> -	     (type->is_array() && type->fields.array->is_matrix())) {
> +	 if (type->without_array()->is_matrix()) {
>  	    this->uniforms[id].matrix_stride = 16;
>  	    this->uniforms[id].row_major = ubo_row_major;
>  	 } else {
> diff --git a/src/glsl/link_varyings.cpp b/src/glsl/link_varyings.cpp
> index a3fc2ae..1438a4b 100644
> --- a/src/glsl/link_varyings.cpp
> +++ b/src/glsl/link_varyings.cpp
> @@ -1068,10 +1068,8 @@ private:
>     virtual void visit_field(const glsl_type *type, const char *name,
>                              bool row_major)
>     {
> -      assert(!type->is_record());
> -      assert(!(type->is_array() && type->fields.array->is_record()));
> -      assert(!type->is_interface());
> -      assert(!(type->is_array() && type->fields.array->is_interface()));
> +      assert(!type->without_array()->is_record());
> +      assert(!type->without_array()->is_interface());
>  
>        (void) row_major;
>  

Reviewed-by: Timothy Arceri <t_arceri at yahoo.com.au>




More information about the mesa-dev mailing list