summaryrefslogtreecommitdiffstats
path: root/src/glsl/ir_set_program_inouts.cpp
diff options
context:
space:
mode:
authorPaul Berry <[email protected]>2013-08-09 07:58:43 -0700
committerPaul Berry <[email protected]>2013-08-14 10:53:47 -0700
commit98d2498404ba69a3efc1c765b1a1885d151181ed (patch)
tree6b3fc8d02e8f845c39e0372e1f54a0464b0a52a1 /src/glsl/ir_set_program_inouts.cpp
parentd1ba1055d98c246d1ee9d9c14706bb9fba6a98c7 (diff)
glsl: Fix incorrect pattern matching in ir_set_program_inouts
In commit 8fc41df (glsl: Modify ir_set_program_inouts to handle geometry shaders), when attempting to pattern match the "foo" part of expressions such as: foo[i][j] foo[i] I incorrectly called as_dereference_variable() on the subexpression foo[i] instead of foo. As a result, the pattern never matched, so ir_set_program_inouts would fall back on marking the entire variable as used, rather than just the portion indexed by the array. This didn't result in incorrect behaviour, but it could have resulted in inefficiency by causing the back-end to allocate resources for unused parts of an input or output array. Reviewed-by: Kenneth Graunke <[email protected]>
Diffstat (limited to 'src/glsl/ir_set_program_inouts.cpp')
-rw-r--r--src/glsl/ir_set_program_inouts.cpp4
1 files changed, 2 insertions, 2 deletions
diff --git a/src/glsl/ir_set_program_inouts.cpp b/src/glsl/ir_set_program_inouts.cpp
index c6abc828254..6196d6a6425 100644
--- a/src/glsl/ir_set_program_inouts.cpp
+++ b/src/glsl/ir_set_program_inouts.cpp
@@ -235,7 +235,7 @@ ir_set_program_inouts_visitor::visit_enter(ir_dereference_array *ir)
* inner_array => foo[i]
*/
if (ir_dereference_variable * const deref_var =
- inner_array->as_dereference_variable()) {
+ inner_array->array->as_dereference_variable()) {
if (this->shader_type == GL_GEOMETRY_SHADER &&
deref_var->var->mode == ir_var_shader_in) {
/* foo is a geometry shader input, so i is the vertex, and j the
@@ -253,7 +253,7 @@ ir_set_program_inouts_visitor::visit_enter(ir_dereference_array *ir)
}
}
} else if (ir_dereference_variable * const deref_var =
- ir->as_dereference_variable()) {
+ ir->array->as_dereference_variable()) {
/* ir => foo[i], where foo is a variable. */
if (this->shader_type == GL_GEOMETRY_SHADER &&
deref_var->var->mode == ir_var_shader_in) {