summaryrefslogtreecommitdiff
path: root/src/mesa/shader/slang/slang_compile_variable.c
diff options
context:
space:
mode:
authorMichal Krol <mjkrol@gmail.org>2006-02-13 11:38:37 +0000
committerMichal Krol <mjkrol@gmail.org>2006-02-13 11:38:37 +0000
commit02eb9acc5e4307db09662592951ef44319a0cda5 (patch)
tree585a539ed6d6775801dcc9e685759521680da9f9 /src/mesa/shader/slang/slang_compile_variable.c
parent44e9ccc708bb0a92dfeaf038ded60295dfe2d3ae (diff)
Get it running for ARB_vertex_shader.
Add experimental print functions to builtin library. Some functionality missing: - automatic arrays; - general constructors; - local variable initialization; - texture sampling and noise; - semantic error checking; - function prototypes.
Diffstat (limited to 'src/mesa/shader/slang/slang_compile_variable.c')
-rw-r--r--src/mesa/shader/slang/slang_compile_variable.c27
1 files changed, 11 insertions, 16 deletions
diff --git a/src/mesa/shader/slang/slang_compile_variable.c b/src/mesa/shader/slang/slang_compile_variable.c
index 39aabd8312..da3b24fb7e 100644
--- a/src/mesa/shader/slang/slang_compile_variable.c
+++ b/src/mesa/shader/slang/slang_compile_variable.c
@@ -33,7 +33,6 @@
#include "slang_compile_variable.h"
#include "slang_compile_struct.h"
#include "slang_compile_operation.h"
-#include "slang_compile_function.h"
/* slang_type_specifier_type */
@@ -269,17 +268,18 @@ int slang_variable_construct (slang_variable *var)
{
if (!slang_fully_specified_type_construct (&var->type))
return 0;
- var->name = NULL;
+ var->a_name = SLANG_ATOM_NULL;
var->array_size = NULL;
var->initializer = NULL;
var->address = ~0;
+ var->size = 0;
+ var->global = 0;
return 1;
}
void slang_variable_destruct (slang_variable *var)
{
slang_fully_specified_type_destruct (&var->type);
- slang_alloc_free (var->name);
if (var->array_size != NULL)
{
slang_operation_destruct (var->array_size);
@@ -303,15 +303,7 @@ int slang_variable_copy (slang_variable *x, const slang_variable *y)
slang_variable_destruct (&z);
return 0;
}
- if (y->name != NULL)
- {
- z.name = slang_string_duplicate (y->name);
- if (z.name == NULL)
- {
- slang_variable_destruct (&z);
- return 0;
- }
- }
+ z.a_name = y->a_name;
if (y->array_size != NULL)
{
z.array_size = (slang_operation *) slang_alloc_malloc (sizeof (slang_operation));
@@ -352,20 +344,23 @@ int slang_variable_copy (slang_variable *x, const slang_variable *y)
return 0;
}
}
+ z.address = y->address;
+ z.size = y->size;
+ z.global = y->global;
slang_variable_destruct (x);
*x = z;
return 1;
}
-slang_variable *_slang_locate_variable (slang_variable_scope *scope, const char *name, int all)
+slang_variable *_slang_locate_variable (slang_variable_scope *scope, slang_atom a_name, int all)
{
unsigned int i;
for (i = 0; i < scope->num_variables; i++)
- if (slang_string_compare (name, scope->variables[i].name) == 0)
- return scope->variables + i;
+ if (a_name == scope->variables[i].a_name)
+ return &scope->variables[i];
if (all && scope->outer_scope != NULL)
- return _slang_locate_variable (scope->outer_scope, name, 1);
+ return _slang_locate_variable (scope->outer_scope, a_name, 1);
return NULL;
}