summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrian Paul <brian.paul@tungstengraphics.com>2008-12-12 16:20:31 -0700
committerBrian Paul <brian.paul@tungstengraphics.com>2008-12-12 16:20:31 -0700
commitd4be09fb2b4a2a45a95a388f536aee566e05f96a (patch)
treecae0f211cc8e8cbe7bb6614c83c70d589fbbddad
parent240e211c711b0ebfe6c3daa6cb70a3fa8fc8b656 (diff)
mesa: code clean-up in glsl compiler
-rw-r--r--src/mesa/shader/slang/slang_codegen.c15
1 files changed, 8 insertions, 7 deletions
diff --git a/src/mesa/shader/slang/slang_codegen.c b/src/mesa/shader/slang/slang_codegen.c
index bf7966dc13..840add105d 100644
--- a/src/mesa/shader/slang/slang_codegen.c
+++ b/src/mesa/shader/slang/slang_codegen.c
@@ -2712,12 +2712,6 @@ _slang_gen_var_decl(slang_assemble_ctx *A, slang_variable *var,
const char *varName = (const char *) var->a_name;
slang_ir_node *varRef, *init;
- varRef = new_var(A, var);
- if (!varRef) {
- slang_info_log_error(A->log, "undefined variable '%s'", varName);
- return NULL;
- }
-
if (var->type.qualifier == SLANG_QUAL_CONST) {
/* if the variable is const, the initializer must be a const
* expression as well.
@@ -2734,11 +2728,17 @@ _slang_gen_var_decl(slang_assemble_ctx *A, slang_variable *var,
/* constant-folding, etc here */
_slang_simplify(initializer, &A->space, A->atoms);
+ /* IR for initializer */
init = _slang_gen_operation(A, initializer);
if (!init)
return NULL;
- /*assert(init->Store);*/
+ /* IR for the variable we're initializing */
+ varRef = new_var(A, var);
+ if (!varRef) {
+ slang_info_log_error(A->log, "undefined variable '%s'", varName);
+ return NULL;
+ }
/* XXX remove this when type checking is added above */
if (init->Store && varRef->Store->Size != init->Store->Size) {
@@ -2746,6 +2746,7 @@ _slang_gen_var_decl(slang_assemble_ctx *A, slang_variable *var,
return NULL;
}
+ /* assign RHS to LHS */
n = new_node2(IR_COPY, varRef, init);
n = new_seq(varDecl, n);
}