diff options
author | Paul Berry <[email protected]> | 2013-09-28 10:04:41 -0700 |
---|---|---|
committer | Paul Berry <[email protected]> | 2013-10-10 14:27:22 -0700 |
commit | 24b9bba19b6d1d48fd40ce6af537da806e45d53f (patch) | |
tree | 0ae1c37ee8700e6765514aa9d603863d199c670e | |
parent | 3699ff4dd19c6102f39edc5d87bd772b380aa168 (diff) |
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 <[email protected]>
-rw-r--r-- | src/glsl/ir.h | 25 |
1 files changed, 25 insertions, 0 deletions
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; |