[Mesa-dev] [PATCH 12/32] glsl: Add ir_variable::interface_type field
Ian Romanick
idr at freedesktop.org
Wed Jan 23 21:19:32 PST 2013
On 01/23/2013 10:07 PM, Paul Berry wrote:
> On 22 January 2013 00:52, Ian Romanick <idr at freedesktop.org
> <mailto:idr at freedesktop.org>> wrote:
>
> From: Ian Romanick <ian.d.romanick at intel.com
> <mailto:ian.d.romanick at intel.com>>
>
> For variables that are in an interface block or are an instance of an
> interface block, this is the GLSL_TYPE_INTERFACE type for that block.
>
> Convert the ir_variable::is_in_uniform_block method added in the
> previous commit to use this field instead of ir_variable::uniform_block.
>
> Signed-off-by: Ian Romanick <ian.d.romanick at intel.com
> <mailto:ian.d.romanick at intel.com>>
> ---
> src/glsl/ast_to_hir.cpp | 2 ++
> src/glsl/ir.h | 9 ++++++++-
> src/glsl/ir_clone.cpp | 2 ++
> 3 files changed, 12 insertions(+), 1 deletion(-)
>
> diff --git a/src/glsl/ast_to_hir.cpp b/src/glsl/ast_to_hir.cpp
> index a740a3c..47a1ae0 100644
> --- a/src/glsl/ast_to_hir.cpp
> +++ b/src/glsl/ast_to_hir.cpp
> @@ -4254,6 +4254,7 @@ ast_uniform_block::hir(exec_list *instructions,
> this->instance_name,
> ir_var_uniform);
>
> + var->interface_type = block_type;
> state->symbols->add_variable(var);
> instructions->push_tail(var);
> } else {
> @@ -4263,6 +4264,7 @@ ast_uniform_block::hir(exec_list *instructions,
> ralloc_strdup(state,
> fields[i].name),
> ir_var_uniform);
> var->uniform_block = ubo - state->uniform_blocks;
> + var->interface_type = block_type;
>
> state->symbols->add_variable(var);
> instructions->push_tail(var);
> diff --git a/src/glsl/ir.h b/src/glsl/ir.h
> index a7eb9c1..49c5f8d 100644
> --- a/src/glsl/ir.h
> +++ b/src/glsl/ir.h
> @@ -352,7 +352,7 @@ public:
> */
> inline bool is_in_uniform_block() const
> {
> - return this->mode == ir_var_uniform && this->uniform_block != -1;
> + return this->mode == ir_var_uniform && this->interface_type
> != NULL;
> }
>
> /**
> @@ -538,6 +538,13 @@ public:
> * objects.
> */
> ir_constant *constant_initializer;
> +
> + /**
> + * interface
> + *
> + * \sa ir_variable::location
> + */
> + const glsl_type *interface_type;
>
>
> This comment doesn't really help me understand what this field means.
>
> How about putting in this text (from the commit message):
>
> For variables that are in an interface block or are an instance of an
> interface block, this is the GLSL_TYPE_INTERFACE type for that block.
>
> };
>
>
> diff --git a/src/glsl/ir_clone.cpp b/src/glsl/ir_clone.cpp
> index 3e22f2d..c221a96 100644
> --- a/src/glsl/ir_clone.cpp
> +++ b/src/glsl/ir_clone.cpp
> @@ -77,6 +77,8 @@ ir_variable::clone(void *mem_ctx, struct
> hash_table *ht) const
> var->constant_initializer =
> this->constant_initializer->clone(mem_ctx, ht);
>
> + var->interface_type = this->interface_type;
> +
> if (ht) {
> hash_table_insert(ht, var, (void *)const_cast<ir_variable
> *>(this));
> }
> --
> 1.7.11.7
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org <mailto:mesa-dev at lists.freedesktop.org>
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
>
> I'm not certain whether it's strictly necessary, but I would feel much
> more confident in this patch if we also initialized interface_type to
> NULL in the ir_variable constructor.
We're (somewhat intentionally) missing many NULL initializers because
our placement new uses rzalloc. Is it okay for me to continue that
trend? :)
> With those two changes, this patch is:
>
> Reviewed-by: Paul Berry <stereotype441 at gmail.com
> <mailto:stereotype441 at gmail.com>>
More information about the mesa-dev
mailing list