nir: Add a new "param" variable mode for parameters and return variables
authorJason Ekstrand <jason.ekstrand@intel.com>
Fri, 12 Feb 2016 19:58:06 +0000 (11:58 -0800)
committerJason Ekstrand <jason.ekstrand@intel.com>
Sat, 12 Mar 2016 23:48:36 +0000 (15:48 -0800)
Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
src/compiler/nir/nir.c
src/compiler/nir/nir.h
src/compiler/nir/nir_validate.c

index df40a554714cdbb7e0d6ba5808c9eee8e31f1823..acb2692e2a0375b4191d4064e1596b6ea8b38698 100644 (file)
@@ -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;
index cfbac81dbb1995fc41a4c52e5ce3bf25159a070f..ede56953d0a3a66bbecfe211ae3e0c138aa5490b 100644 (file)
@@ -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;
 
index d1a90485e7ecfda1c03162cbf9edd72d96d27b1f..24094f64141564b711a8f2bfb4af7e95b608579e 100644 (file)
@@ -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