From 24b9bba19b6d1d48fd40ce6af537da806e45d53f Mon Sep 17 00:00:00 2001 From: Paul Berry Date: Sat, 28 Sep 2013 10:04:41 -0700 Subject: [PATCH] glsl: Add an ir_variable::reinit_interface_type() function. This will be used by future patches to change an ir_variable's interface type when the gl_PerVertex built-in interface block is redeclared. Reviewed-by: Ian Romanick --- src/glsl/ir.h | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/src/glsl/ir.h b/src/glsl/ir.h index 0f8e9a15d96..aac8cbb7dbe 100644 --- a/src/glsl/ir.h +++ b/src/glsl/ir.h @@ -420,6 +420,31 @@ public: this->interface_type = type; } + /** + * Change this->interface_type on a variable that previously had a + * different, and incompatible, interface_type. This is used during + * compilation to handle redeclaration of the built-in gl_PerVertex + * interface block. + */ + void reinit_interface_type(const struct glsl_type *type) + { + if (this->max_ifc_array_access != NULL) { +#ifndef _NDEBUG + /* Redeclaring gl_PerVertex is only allowed if none of the built-ins + * it defines have been accessed yet; so it's safe to throw away the + * old max_ifc_array_access pointer, since all of its values are + * zero. + */ + for (unsigned i = 0; i < this->interface_type->length; i++) + assert(this->max_ifc_array_access[i] == 0); +#endif + ralloc_free(this->max_ifc_array_access); + this->max_ifc_array_access = NULL; + } + this->interface_type = NULL; + init_interface_type(type); + } + const glsl_type *get_interface_type() const { return this->interface_type; -- 2.30.2