mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-28 18:20:23 +01:00
mesa: fix assignment / parameter passing of sampler types
This commit is contained in:
parent
b3cfcd326b
commit
90cdb8a4de
3 changed files with 29 additions and 4 deletions
|
|
@ -2439,8 +2439,6 @@ _slang_gen_var_decl(slang_assemble_ctx *A, slang_variable *var)
|
|||
/*assert(!var->declared);*/
|
||||
var->declared = GL_TRUE;
|
||||
|
||||
assert(!is_sampler_type(&var->type));
|
||||
|
||||
n = new_node0(IR_VAR_DECL);
|
||||
if (n) {
|
||||
_slang_attach_storage(n, var);
|
||||
|
|
@ -2449,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) {
|
||||
|
|
|
|||
|
|
@ -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) &&
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue