Mesa (master): glsl: Mark the array access for whole-array comparisons.
Eric Anholt
anholt at kemper.freedesktop.org
Thu Dec 2 00:31:34 UTC 2010
Module: Mesa
Branch: master
Commit: b4f585665c31b1f80d909e38b3b2a9fab0c03076
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=b4f585665c31b1f80d909e38b3b2a9fab0c03076
Author: Eric Anholt <eric at anholt.net>
Date: Wed Dec 1 15:55:53 2010 -0800
glsl: Mark the array access for whole-array comparisons.
By not doing so, the uniform contents of
glsl-uniform-non-uniform-array-compare.shader_test was getting thrown
out since nobody was recorded as dereferencing the array.
---
src/glsl/ast_to_hir.cpp | 14 ++++++++++++++
1 files changed, 14 insertions(+), 0 deletions(-)
diff --git a/src/glsl/ast_to_hir.cpp b/src/glsl/ast_to_hir.cpp
index 04b221e..f5b1120 100644
--- a/src/glsl/ast_to_hir.cpp
+++ b/src/glsl/ast_to_hir.cpp
@@ -745,6 +745,16 @@ ast_node::hir(exec_list *instructions,
return NULL;
}
+static void
+mark_whole_array_access(ir_rvalue *access)
+{
+ ir_dereference_variable *deref = access->as_dereference_variable();
+
+ if (deref) {
+ deref->var->max_array_access = deref->type->length - 1;
+ }
+}
+
static ir_rvalue *
do_comparison(void *mem_ctx, int operation, ir_rvalue *op0, ir_rvalue *op1)
{
@@ -780,6 +790,10 @@ do_comparison(void *mem_ctx, int operation, ir_rvalue *op0, ir_rvalue *op1)
last = result;
}
}
+
+ mark_whole_array_access(op0);
+ mark_whole_array_access(op1);
+
return last;
}
More information about the mesa-commit
mailing list