From 23b7ce3a824013c8b4d7340294cb59b0b4cb8f87 Mon Sep 17 00:00:00 2001 From: Ian Romanick Date: Mon, 21 Jan 2013 22:18:16 -0500 Subject: [PATCH] glsl: Add a predicate to determine whether a variable is an interface block For the first declaration below, there will be an ir_variable named "instance" whose type and whose instance_type will be the same glsl_type. For the second declaration, there will be an ir_variable named "f" whose type is float and whose instance_type is B2. "instance" is an interface instance variable, but "f" is not. uniform B1 { float f; } instance; uniform B2 { float f; }; v2: Copy the comment message documentation into the code. Suggested by Paul Berry. Signed-off-by: Ian Romanick Reviewed-by: Carl Worth Reviewed-by: Paul Berry Reviewed-by: Kenneth Graunke --- src/glsl/ir.h | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/src/glsl/ir.h b/src/glsl/ir.h index ff47b3a5a80..7d5906d1d4f 100644 --- a/src/glsl/ir.h +++ b/src/glsl/ir.h @@ -357,6 +357,33 @@ public: return this->mode == ir_var_uniform && this->interface_type != NULL; } + /** + * Determine whether or not a variable is the declaration of an interface + * block + * + * For the first declaration below, there will be an \c ir_variable named + * "instance" whose type and whose instance_type will be the same + * \cglsl_type. For the second declaration, there will be an \c ir_variable + * named "f" whose type is float and whose instance_type is B2. + * + * "instance" is an interface instance variable, but "f" is not. + * + * uniform B1 { + * float f; + * } instance; + * + * uniform B2 { + * float f; + * }; + */ + inline bool is_interface_instance() const + { + const glsl_type *const t = this->type; + + return (t == this->interface_type) + || (t->is_array() && t->fields.array == this->interface_type); + } + /** * Declared type of the variable */ -- 2.30.2