nir: Add a new "param" variable mode for parameters and return variables
Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
This commit is contained in:
@@ -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");
|
assert(!"nir_shader_add_variable cannot be used for local variables");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case nir_var_param:
|
||||||
|
assert(!"nir_shader_add_variable cannot be used for function parameters");
|
||||||
|
break;
|
||||||
|
|
||||||
case nir_var_global:
|
case nir_var_global:
|
||||||
exec_list_push_tail(&shader->globals, &var->node);
|
exec_list_push_tail(&shader->globals, &var->node);
|
||||||
break;
|
break;
|
||||||
|
@@ -88,7 +88,8 @@ typedef enum {
|
|||||||
nir_var_local,
|
nir_var_local,
|
||||||
nir_var_uniform,
|
nir_var_uniform,
|
||||||
nir_var_shader_storage,
|
nir_var_shader_storage,
|
||||||
nir_var_system_value
|
nir_var_system_value,
|
||||||
|
nir_var_param,
|
||||||
} nir_variable_mode;
|
} nir_variable_mode;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -331,6 +332,12 @@ typedef struct nir_variable {
|
|||||||
#define nir_foreach_variable(var, var_list) \
|
#define nir_foreach_variable(var, var_list) \
|
||||||
foreach_list_typed(nir_variable, var, node, 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 {
|
typedef struct nir_register {
|
||||||
struct exec_node node;
|
struct exec_node node;
|
||||||
|
|
||||||
|
@@ -867,7 +867,7 @@ postvalidate_reg_decl(nir_register *reg, validate_state *state)
|
|||||||
static void
|
static void
|
||||||
validate_var_decl(nir_variable *var, bool is_global, validate_state *state)
|
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
|
* TODO validate some things ir_validate.cpp does (requires more GLSL type
|
||||||
|
Reference in New Issue
Block a user