From 38a62ede6c68f292615ff8eaac749e12652dbdb9 Mon Sep 17 00:00:00 2001 From: Brian Paul Date: Tue, 29 Jul 2008 17:15:08 -0600 Subject: mesa: rework array/struct addressing code. The slang_ir_storage type now has a pointer to parent storage to represent storage of an array element within an array, or a field within a struct. This fixes some problems related to addressing of fields/elements in non- trivial cases. More work to follow. --- src/mesa/shader/slang/slang_builtin.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'src/mesa/shader/slang/slang_builtin.c') diff --git a/src/mesa/shader/slang/slang_builtin.c b/src/mesa/shader/slang/slang_builtin.c index f0f59aa87a..f99a59e3e1 100644 --- a/src/mesa/shader/slang/slang_builtin.c +++ b/src/mesa/shader/slang/slang_builtin.c @@ -35,6 +35,7 @@ #include "shader/prog_parameter.h" #include "shader/prog_statevars.h" #include "shader/slang/slang_ir.h" +#include "shader/slang/slang_emit.h" #include "shader/slang/slang_builtin.h" @@ -438,8 +439,13 @@ _slang_alloc_statevar(slang_ir_node *n, pos = lookup_statevar(var, index1, index2, field, &swizzle, paramList); assert(pos >= 0); if (pos >= 0) { - n0->Store->Index = pos; - n0->Store->Swizzle = swizzle; + /* XXX should overwrite Store's fields instead of changing pointers + * since there may be a child storage_info pointing to this one. + */ + n0->Store = _slang_new_ir_storage_swz(PROGRAM_STATE_VAR, + pos, + n0->Store->Size, + swizzle); } return pos; } -- cgit v1.2.3