[Mesa-dev] [PATCH 16/32] glsl: Modify uniform_field_visitor::visit_field to take a row_major parameter

Paul Berry stereotype441 at gmail.com
Wed Jan 23 19:34:41 PST 2013


On 22 January 2013 00:52, Ian Romanick <idr at freedesktop.org> wrote:

> From: Ian Romanick <ian.d.romanick at intel.com>
>
> Not used yet, but the UBO layout visitor will use this.
>
> Signed-off-by: Ian Romanick <ian.d.romanick at intel.com>
> ---
>  src/glsl/link_uniforms.cpp      | 15 ++++++++++-----
>  src/glsl/linker.h               |  4 +++-
>  src/mesa/program/ir_to_mesa.cpp |  8 ++++++--
>  3 files changed, 19 insertions(+), 8 deletions(-)
>
> diff --git a/src/glsl/link_uniforms.cpp b/src/glsl/link_uniforms.cpp
> index 66a2804..4b8dc42 100644
> --- a/src/glsl/link_uniforms.cpp
> +++ b/src/glsl/link_uniforms.cpp
> @@ -68,7 +68,7 @@ uniform_field_visitor::process(ir_variable *var)
>        recursion(var->type, &name, strlen(name), false);
>        ralloc_free(name);
>     } else {
> -      this->visit_field(t, var->name);
> +      this->visit_field(t, var->name, false);
>

Similar question here to the question I had on the last patch: why is it
safe to pass false for row_major here?


>     }
>  }
>
> @@ -104,7 +104,7 @@ uniform_field_visitor::recursion(const glsl_type *t,
> char **name,
>                     t->fields.structure[i].row_major);
>        }
>     } else {
> -      this->visit_field(t, *name);
> +      this->visit_field(t, *name, row_major);
>     }
>  }
>
> @@ -154,11 +154,14 @@ public:
>     unsigned num_shader_uniform_components;
>
>  private:
> -   virtual void visit_field(const glsl_type *type, const char *name)
> +   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()));
>
> +      (void) row_major;
> +
>        /* Count the number of samplers regardless of whether the uniform is
>         * already in the hash table.  The hash table prevents adding the
> same
>         * uniform for multiple shader targets, but in this case we want to
> @@ -258,11 +261,14 @@ public:
>     int ubo_byte_offset;
>
>  private:
> -   virtual void visit_field(const glsl_type *type, const char *name)
> +   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()));
>
> +      (void) row_major;
> +
>        unsigned id;
>        bool found = this->map->get(id, name);
>        assert(found);
> @@ -454,7 +460,6 @@ link_update_uniform_buffer_variables(struct gl_shader
> *shader)
>          for (unsigned j = 0; j < shader->UniformBlocks[i].NumUniforms;
> j++) {
>             if (!strcmp(var->name,
> shader->UniformBlocks[i].Uniforms[j].Name)) {
>                found = true;
> -              var->uniform_block = i;
>                var->location = j;
>                break;
>             }
> diff --git a/src/glsl/linker.h b/src/glsl/linker.h
> index 2af1925..f394bfe 100644
> --- a/src/glsl/linker.h
> +++ b/src/glsl/linker.h
> @@ -84,8 +84,10 @@ protected:
>      *
>      * \param type  Type of the field.
>      * \param name  Fully qualified name of the field.
> +    * \param row_major  For a matrix type, is it stored row-major.
>      */
> -   virtual void visit_field(const glsl_type *type, const char *name) = 0;
> +   virtual void visit_field(const glsl_type *type, const char *name,
> +                            bool row_major) = 0;
>
>  private:
>     /**
> diff --git a/src/mesa/program/ir_to_mesa.cpp
> b/src/mesa/program/ir_to_mesa.cpp
> index 36d0bdc..c85372a 100644
> --- a/src/mesa/program/ir_to_mesa.cpp
> +++ b/src/mesa/program/ir_to_mesa.cpp
> @@ -2382,7 +2382,8 @@ public:
>     }
>
>  private:
> -   virtual void visit_field(const glsl_type *type, const char *name);
> +   virtual void visit_field(const glsl_type *type, const char *name,
> +                            bool row_major);
>
>     struct gl_shader_program *shader_program;
>     struct gl_program_parameter_list *params;
> @@ -2390,10 +2391,13 @@ private:
>  };
>
>  void
> -add_uniform_to_shader::visit_field(const glsl_type *type, const char
> *name)
> +add_uniform_to_shader::visit_field(const glsl_type *type, const char
> *name,
> +                                   bool row_major)
>  {
>     unsigned int size;
>
> +   (void) row_major;
> +
>     if (type->is_vector() || type->is_scalar()) {
>        size = type->vector_elements;
>     } else {
> --
> 1.7.11.7
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20130123/21326736/attachment.html>


More information about the mesa-dev mailing list