diff options
author | Brian Paul <brianp@vmware.com> | 2010-07-08 09:22:52 -0600 |
---|---|---|
committer | Brian Paul <brianp@vmware.com> | 2010-07-08 09:22:54 -0600 |
commit | 3751e6e1fc385739022d0942b46e175632ad0d4b (patch) | |
tree | 04c9be46f865d4a8fb2972422a6e4d8db7a5a5f0 | |
parent | 7c6a89727543e7f0b72b792ec77f02565337e923 (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.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/src/mesa/slang/slang_emit.c b/src/mesa/slang/slang_emit.c index aa9d6624d5..127c672554 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: |