summaryrefslogtreecommitdiffstats
path: root/src/compiler
diff options
context:
space:
mode:
authorJason Ekstrand <[email protected]>2016-02-12 11:58:06 -0800
committerJason Ekstrand <[email protected]>2016-03-12 15:48:36 -0800
commit2ef4754a20be5fc7a6ecc2a8b6b8041637c998c6 (patch)
tree088f92d325c29e0707e0bf0be4cb08b146399751 /src/compiler
parent41ae553fdae5d0ff687733c45b6151a45759b2fd (diff)
nir: Add a new "param" variable mode for parameters and return variables
Reviewed-by: Jordan Justen <[email protected]>
Diffstat (limited to 'src/compiler')
-rw-r--r--src/compiler/nir/nir.c4
-rw-r--r--src/compiler/nir/nir.h9
-rw-r--r--src/compiler/nir/nir_validate.c2
3 files changed, 13 insertions, 2 deletions
diff --git a/src/compiler/nir/nir.c b/src/compiler/nir/nir.c
index df40a554714..acb2692e2a0 100644
--- a/src/compiler/nir/nir.c
+++ b/src/compiler/nir/nir.c
@@ -115,6 +115,10 @@ nir_shader_add_variable(nir_shader *shader, nir_variable *var)
assert(!"nir_shader_add_variable cannot be used for local variables");
break;
+ case nir_var_param:
+ assert(!"nir_shader_add_variable cannot be used for function parameters");
+ break;
+
case nir_var_global:
exec_list_push_tail(&shader->globals, &var->node);
break;
diff --git a/src/compiler/nir/nir.h b/src/compiler/nir/nir.h
index cfbac81dbb1..ede56953d0a 100644
--- a/src/compiler/nir/nir.h
+++ b/src/compiler/nir/nir.h
@@ -88,7 +88,8 @@ typedef enum {
nir_var_local,
nir_var_uniform,
nir_var_shader_storage,
- nir_var_system_value
+ nir_var_system_value,
+ nir_var_param,
} nir_variable_mode;
/**
@@ -331,6 +332,12 @@ typedef struct nir_variable {
#define nir_foreach_variable(var, var_list) \
foreach_list_typed(nir_variable, var, node, var_list)
+static inline bool
+nir_variable_is_global(const nir_variable *var)
+{
+ return var->data.mode != nir_var_local && var->data.mode != nir_var_param;
+}
+
typedef struct nir_register {
struct exec_node node;
diff --git a/src/compiler/nir/nir_validate.c b/src/compiler/nir/nir_validate.c
index d1a90485e7e..24094f64141 100644
--- a/src/compiler/nir/nir_validate.c
+++ b/src/compiler/nir/nir_validate.c
@@ -867,7 +867,7 @@ postvalidate_reg_decl(nir_register *reg, validate_state *state)
static void
validate_var_decl(nir_variable *var, bool is_global, validate_state *state)
{
- assert(is_global != (var->data.mode == nir_var_local));
+ assert(is_global == nir_variable_is_global(var));
/*
* TODO validate some things ir_validate.cpp does (requires more GLSL type