Mesa (master): glsl: Sanity check max_ifc_array_access in ir_validate:: visit(ir_variable *).
Paul Berry
stereotype441 at kemper.freedesktop.org
Wed Oct 9 23:50:54 UTC 2013
Module: Mesa
Branch: master
Commit: ca8a5ce9193b21b2e567f6dfc877412109d106ca
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=ca8a5ce9193b21b2e567f6dfc877412109d106ca
Author: Paul Berry <stereotype441 at gmail.com>
Date: Mon Sep 23 16:03:49 2013 -0700
glsl: Sanity check max_ifc_array_access in ir_validate::visit(ir_variable *).
Reviewed-by: Jordan Justen <jordan.l.justen at intel.com>
---
src/glsl/ir_validate.cpp | 20 ++++++++++++++++++++
1 files changed, 20 insertions(+), 0 deletions(-)
diff --git a/src/glsl/ir_validate.cpp b/src/glsl/ir_validate.cpp
index d6abc8e..7bc7122 100644
--- a/src/glsl/ir_validate.cpp
+++ b/src/glsl/ir_validate.cpp
@@ -687,6 +687,26 @@ ir_validate::visit(ir_variable *ir)
}
}
+ /* If a variable is an interface block (or an array of interface blocks),
+ * verify that the maximum array index for each interface member is in
+ * bounds.
+ */
+ if (ir->is_interface_instance()) {
+ const glsl_struct_field *fields =
+ ir->get_interface_type()->fields.structure;
+ for (int i = 0; i < ir->get_interface_type()->length; i++) {
+ if (fields[i].type->array_size() > 0) {
+ if (ir->max_ifc_array_access[i] >= fields[i].type->length) {
+ printf("ir_variable has maximum access out of bounds for "
+ "field %s (%d vs %d)\n", fields[i].name,
+ ir->max_ifc_array_access[i], fields[i].type->length);
+ ir->print();
+ abort();
+ }
+ }
+ }
+ }
+
if (ir->constant_initializer != NULL && !ir->has_initializer) {
printf("ir_variable didn't have an initializer, but has a constant "
"initializer value.\n");
More information about the mesa-commit
mailing list