From 2ef4754a20be5fc7a6ecc2a8b6b8041637c998c6 Mon Sep 17 00:00:00 2001 From: Jason Ekstrand Date: Fri, 12 Feb 2016 11:58:06 -0800 Subject: [PATCH] nir: Add a new "param" variable mode for parameters and return variables Reviewed-by: Jordan Justen --- src/compiler/nir/nir.c | 4 ++++ src/compiler/nir/nir.h | 9 ++++++++- src/compiler/nir/nir_validate.c | 2 +- 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 -- 2.30.2