summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrian Paul <[email protected]>2010-07-08 09:22:52 -0600
committerBrian Paul <[email protected]>2010-07-08 09:22:54 -0600
commit3751e6e1fc385739022d0942b46e175632ad0d4b (patch)
tree04c9be46f865d4a8fb2972422a6e4d8db7a5a5f0
parent7c6a89727543e7f0b72b792ec77f02565337e923 (diff)
glsl: fix 'if ((x=foo()) > 1.0)' bug
Fixes fd.o bug 27216. May also be the root cause of fd.o bug 28950. We weren't propogating the storage info for the x=foo() expression up through the IR tree to the inequality expression. NOTE: This is a candidate for the Mesa 7.8 branch.
-rw-r--r--src/mesa/slang/slang_emit.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/src/mesa/slang/slang_emit.c b/src/mesa/slang/slang_emit.c
index aa9d6624d5b..127c6725542 100644
--- a/src/mesa/slang/slang_emit.c
+++ b/src/mesa/slang/slang_emit.c
@@ -2361,7 +2361,10 @@ emit(slang_emit_info *emitInfo, slang_ir_node *n)
#if 0
assert(!n->Store);
#endif
- n->Store = n->Children[1]->Store;
+ if (n->Children[1]->Store)
+ n->Store = n->Children[1]->Store;
+ else
+ n->Store = n->Children[0]->Store;
return inst;
case IR_SCOPE:
@@ -2369,6 +2372,7 @@ emit(slang_emit_info *emitInfo, slang_ir_node *n)
_slang_push_var_table(emitInfo->vt);
inst = emit(emitInfo, n->Children[0]);
_slang_pop_var_table(emitInfo->vt);
+ n->Store = n->Children[0]->Store;
return inst;
case IR_VAR_DECL: