mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-03 18:38:11 +02:00
clean-up slang_allocate_storage()
This commit is contained in:
parent
64414ea0e9
commit
629fd78f79
1 changed files with 22 additions and 44 deletions
|
|
@ -253,20 +253,15 @@ _slang_sizeof_type_specifier(const slang_type_specifier *spec)
|
|||
|
||||
/**
|
||||
* Allocate storage info for an IR node (n->Store).
|
||||
* We may do any of the following:
|
||||
* 1. Compute Store->File/Index for program inputs/outputs/uniforms/etc.
|
||||
* 2. Allocate storage for user-declared variables.
|
||||
* 3. Allocate intermediate/unnamed storage for complex expressions.
|
||||
* 4. other?
|
||||
* If n is an IR_VAR_DECL, allocate a temporary for the variable.
|
||||
* Otherwise, if n is an IR_VAR, check if it's a uniform or constant
|
||||
* that needs to have storage allocated.
|
||||
*/
|
||||
static void
|
||||
slang_allocate_storage(slang_assemble_ctx *A, slang_ir_node *n)
|
||||
{
|
||||
struct gl_program *prog = A->program;
|
||||
assert(A->vartable);
|
||||
assert(n);
|
||||
assert(n->Opcode == IR_VAR_DECL || n->Opcode == IR_VAR);
|
||||
assert(prog);
|
||||
|
||||
if (!n->Store) {
|
||||
/* allocate storage info for this node */
|
||||
|
|
@ -291,48 +286,32 @@ slang_allocate_storage(slang_assemble_ctx *A, slang_ir_node *n)
|
|||
assert(n->Store->Size > 0);
|
||||
return;
|
||||
}
|
||||
|
||||
#if 00
|
||||
if (n->Store->File == PROGRAM_UNDEFINED) {
|
||||
printf("*** Var %s size %d\n", (char*) n->Var->a_name, n->Store->Size);
|
||||
assert(n->Store->File != PROGRAM_UNDEFINED);
|
||||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
** XXX this all has to be redone
|
||||
**/
|
||||
if (n->Store->Index < 0) {
|
||||
/* determine storage location for this var */
|
||||
|
||||
else {
|
||||
assert(n->Opcode == IR_VAR);
|
||||
assert(n->Var);
|
||||
assert(n->Store->Size > 0);
|
||||
|
||||
if (n->Store->File == PROGRAM_STATE_VAR) {
|
||||
GLint i = slang_lookup_statevar((char *) n->Var->a_name, 0,
|
||||
prog->Parameters);
|
||||
assert(i >= 0);
|
||||
if (i >= 0) {
|
||||
assert(n->Store->File == PROGRAM_STATE_VAR /*||
|
||||
n->Store->File == PROGRAM_UNIFORM*/);
|
||||
n->Store->File = PROGRAM_STATE_VAR;
|
||||
if (n->Store->Index < 0) {
|
||||
const char *varName = (char *) n->Var->a_name;
|
||||
struct gl_program *prog = A->program;
|
||||
assert(prog);
|
||||
|
||||
/* determine storage location for this var.
|
||||
* This is probably a pre-defined uniform or constant.
|
||||
* We don't allocate storage for these until they're actually
|
||||
* used to avoid wasting registers.
|
||||
*/
|
||||
if (n->Store->File == PROGRAM_STATE_VAR) {
|
||||
GLint i = slang_lookup_statevar(varName, 0, prog->Parameters);
|
||||
assert(i >= 0);
|
||||
n->Store->Index = i;
|
||||
return;
|
||||
}
|
||||
}
|
||||
else if (n->Store->File == PROGRAM_CONSTANT) {
|
||||
GLint i = slang_lookup_constant((char *) n->Var->a_name, 0,
|
||||
prog->Parameters);
|
||||
assert(i >= 0);
|
||||
if (i >= 0) {
|
||||
n->Store->File = PROGRAM_CONSTANT;
|
||||
else if (n->Store->File == PROGRAM_CONSTANT) {
|
||||
GLint i = slang_lookup_constant(varName, 0, prog->Parameters);
|
||||
assert(i >= 0);
|
||||
n->Store->Index = i;
|
||||
return;
|
||||
}
|
||||
}
|
||||
else {
|
||||
/* what's this??? */
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -2199,7 +2178,7 @@ _slang_codegen_global_variable(slang_assemble_ctx *A, slang_variable *var,
|
|||
}
|
||||
else if (var->type.qualifier == slang_qual_const && !prog) {
|
||||
/* pre-defined global constant, like gl_MaxLights */
|
||||
GLint size = -1;
|
||||
const GLint size = _slang_sizeof_type_specifier(&var->type.specifier);
|
||||
store = _slang_new_ir_storage(PROGRAM_CONSTANT, -1, size);
|
||||
if (dbg) printf("CONST ");
|
||||
}
|
||||
|
|
@ -2283,7 +2262,6 @@ _slang_codegen_function(slang_assemble_ctx * A, slang_function * fun)
|
|||
/* should have been allocated earlier: */
|
||||
assert(A->program->Parameters );
|
||||
assert(A->program->Varying);
|
||||
|
||||
assert(A->vartable);
|
||||
|
||||
/* fold constant expressions, etc. */
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue