summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrian <brian@yutani.localnet.net>2007-02-20 16:56:49 -0700
committerBrian <brian@yutani.localnet.net>2007-02-20 16:56:49 -0700
commit760c114b24fd679bb5c5d386c5935f53ef03e8e5 (patch)
tree3fce0ba95f817842a89c950bb587b266ca7b3186
parent10f42ddb9ea75fcce05d5777e8c64cdf42152ff2 (diff)
alloc IR_FIELD's Storage in codegen, like IR_ELEMENT
-rw-r--r--src/mesa/shader/slang/slang_codegen.c4
-rw-r--r--src/mesa/shader/slang/slang_emit.c9
2 files changed, 9 insertions, 4 deletions
diff --git a/src/mesa/shader/slang/slang_codegen.c b/src/mesa/shader/slang/slang_codegen.c
index a23d4e16d0..789ab8a50b 100644
--- a/src/mesa/shader/slang/slang_codegen.c
+++ b/src/mesa/shader/slang/slang_codegen.c
@@ -2184,12 +2184,16 @@ _slang_gen_field(slang_assemble_ctx * A, slang_operation *oper)
/* oper->children[0] is the base */
/* oper->a_id is the field name */
slang_ir_node *base, *n;
+ GLint size = 4; /* XXX fix? */
base = _slang_gen_operation(A, &oper->children[0]);
n = new_node1(IR_FIELD, base);
if (n) {
n->Target = (char *) oper->a_id;
+ n->Store = _slang_new_ir_storage(base->Store->File,
+ base->Store->Index,
+ size);
}
return n;
diff --git a/src/mesa/shader/slang/slang_emit.c b/src/mesa/shader/slang/slang_emit.c
index 67cf9c32d4..c174f7b6b4 100644
--- a/src/mesa/shader/slang/slang_emit.c
+++ b/src/mesa/shader/slang/slang_emit.c
@@ -1319,16 +1319,17 @@ emit_field(slang_var_table *vt, slang_ir_node *n, struct gl_program *prog)
/* state variable sub-field */
GLint pos;
GLuint swizzle;
+ assert(n->Children[0]->Opcode == IR_VAR);
pos = _slang_lookup_statevar_field((char *) n->Children[0]->Var->a_name,
n->Target,
prog->Parameters, &swizzle);
if (pos < 0) {
RETURN_ERROR2("Undefined structure member", n->Target, 0);
}
-
- n->Store = _slang_new_ir_storage(PROGRAM_STATE_VAR, pos, 4);/*XXX size*/
- if (n->Store)
- n->Store->Swizzle = swizzle;
+ assert(n->Store);
+ assert(n->Store->File == PROGRAM_STATE_VAR);
+ n->Store->Index = pos;
+ n->Store->Swizzle = swizzle;
}
/*