From 1e1ba54a94d4c0a0685c430bffad49d47cec15ca Mon Sep 17 00:00:00 2001 From: Brian Paul Date: Sat, 1 Nov 2008 15:53:14 -0600 Subject: mesa: fix assignment / parameter passing of sampler types --- src/mesa/shader/slang/slang_codegen.c | 14 +++++++------- src/mesa/shader/slang/slang_emit.c | 8 ++++++++ src/mesa/shader/slang/slang_vartable.c | 15 ++++++++++++++- 3 files changed, 29 insertions(+), 8 deletions(-) (limited to 'src/mesa') diff --git a/src/mesa/shader/slang/slang_codegen.c b/src/mesa/shader/slang/slang_codegen.c index de7e96f167..d8a92e23c0 100644 --- a/src/mesa/shader/slang/slang_codegen.c +++ b/src/mesa/shader/slang/slang_codegen.c @@ -2439,12 +2439,6 @@ _slang_gen_var_decl(slang_assemble_ctx *A, slang_variable *var) /*assert(!var->declared);*/ var->declared = GL_TRUE; - if(is_sampler_type(&var->type)) { - slang_info_log_error(A->log, "redeclaration of sampler '%s'", - (char*) var->a_name); - return NULL; - } - n = new_node0(IR_VAR_DECL); if (n) { _slang_attach_storage(n, var); @@ -2453,7 +2447,13 @@ _slang_gen_var_decl(slang_assemble_ctx *A, slang_variable *var) assert(n->Store); assert(n->Store->Index < 0); - n->Store->File = PROGRAM_TEMPORARY; + if (is_sampler_type(&var->type)) { + n->Store->File = PROGRAM_SAMPLER; + } + else { + n->Store->File = PROGRAM_TEMPORARY; + } + n->Store->Size = _slang_sizeof_type_specifier(&n->Var->type.specifier); if (n->Store->Size <= 0) { diff --git a/src/mesa/shader/slang/slang_emit.c b/src/mesa/shader/slang/slang_emit.c index 9e8daa1051..010b55827f 100644 --- a/src/mesa/shader/slang/slang_emit.c +++ b/src/mesa/shader/slang/slang_emit.c @@ -1085,6 +1085,14 @@ emit_copy(slang_emit_info *emitInfo, slang_ir_node *n) n->Store = n->Children[0]->Store; + if (n->Store->File == PROGRAM_SAMPLER) { + /* no code generated for sampler assignments, + * just copy the sampler index at compile time. + */ + n->Store->Index = n->Children[1]->Store->Index; + return NULL; + } + #if PEEPHOLE_OPTIMIZATIONS if (inst && _slang_is_temp(emitInfo->vt, n->Children[1]->Store) && diff --git a/src/mesa/shader/slang/slang_vartable.c b/src/mesa/shader/slang/slang_vartable.c index 9b607e6403..95971a70a9 100644 --- a/src/mesa/shader/slang/slang_vartable.c +++ b/src/mesa/shader/slang/slang_vartable.c @@ -115,6 +115,11 @@ _slang_pop_var_table(slang_var_table *vt) store->Index, _mesa_swizzle_string(store->Swizzle, 0, 0)); + if (store->File == PROGRAM_SAMPLER) { + /* samplers have no storage */ + continue; + } + if (store->Size == 1) comp = GET_SWZ(store->Swizzle, 0); else @@ -241,7 +246,15 @@ GLboolean _slang_alloc_var(slang_var_table *vt, slang_ir_storage *store) { struct table *t = vt->Top; - const int i = alloc_reg(vt, store->Size, GL_FALSE); + int i; + + if (store->File == PROGRAM_SAMPLER) { + /* don't really allocate storage */ + store->Index = 0; + return GL_TRUE; + } + + i = alloc_reg(vt, store->Size, GL_FALSE); if (i < 0) return GL_FALSE; -- cgit v1.2.3