summaryrefslogtreecommitdiffstats
path: root/src/compiler
diff options
context:
space:
mode:
authorAlejandro Piñeiro <[email protected]>2018-05-08 08:58:59 +0200
committerAlejandro Piñeiro <[email protected]>2018-08-13 16:28:26 +0200
commit5332d7582dc82fcf25cd48e9096dc98ef998453e (patch)
tree3cec0c4108ba8dfc7ba233f83bf9e03a3503b574 /src/compiler
parentbe6f472b2387f508e55ffbe758da8cbea75717d6 (diff)
nir: add how_declared to nir_variable.data
Equivalent to the already existing how_declared at GLSL IR. The only difference is that we are not adding all the declaration_type available on GLSL, only the one that we will use on the short term. We would add more mode if needed on the future. Reviewed-by: Timothy Arceri <[email protected]>
Diffstat (limited to 'src/compiler')
-rw-r--r--src/compiler/nir/nir.c1
-rw-r--r--src/compiler/nir/nir.h24
-rw-r--r--src/compiler/nir/nir_lower_wpos_ytransform.c2
3 files changed, 26 insertions, 1 deletions
diff --git a/src/compiler/nir/nir.c b/src/compiler/nir/nir.c
index a849664134f..5e76654ca3d 100644
--- a/src/compiler/nir/nir.c
+++ b/src/compiler/nir/nir.c
@@ -162,6 +162,7 @@ nir_variable_create(nir_shader *shader, nir_variable_mode mode,
var->name = ralloc_strdup(var, name);
var->type = type;
var->data.mode = mode;
+ var->data.how_declared = nir_var_declared_normally;
if ((mode == nir_var_shader_in &&
shader->info.stage != MESA_SHADER_VERTEX) ||
diff --git a/src/compiler/nir/nir.h b/src/compiler/nir/nir.h
index bca6a32c956..1ccbccc8bbb 100644
--- a/src/compiler/nir/nir.h
+++ b/src/compiler/nir/nir.h
@@ -163,6 +163,22 @@ typedef enum {
} nir_depth_layout;
/**
+ * Enum keeping track of how a variable was declared.
+ */
+typedef enum {
+ /**
+ * Normal declaration.
+ */
+ nir_var_declared_normally = 0,
+
+ /**
+ * Variable is implicitly generated by the compiler and should not be
+ * visible via the API.
+ */
+ nir_var_hidden,
+} nir_var_declaration_type;
+
+/**
* Either a uniform, global variable, shader input, or shader output. Based on
* ir_variable - it should be easy to translate between the two.
*/
@@ -350,6 +366,14 @@ typedef struct nir_variable {
unsigned xfb_stride;
/**
+ * How the variable was declared. See nir_var_declaration_type.
+ *
+ * This is used to detect variables generated by the compiler, so should
+ * not be visible via the API.
+ */
+ unsigned how_declared:2;
+
+ /**
* ARB_shader_image_load_store qualifiers.
*/
struct {
diff --git a/src/compiler/nir/nir_lower_wpos_ytransform.c b/src/compiler/nir/nir_lower_wpos_ytransform.c
index fc61beb7872..444e211b680 100644
--- a/src/compiler/nir/nir_lower_wpos_ytransform.c
+++ b/src/compiler/nir/nir_lower_wpos_ytransform.c
@@ -61,7 +61,7 @@ get_transform(lower_wpos_ytransform_state *state)
var->state_slots[0].swizzle = SWIZZLE_XYZW;
memcpy(var->state_slots[0].tokens, state->options->state_tokens,
sizeof(var->state_slots[0].tokens));
-
+ var->data.how_declared = nir_var_hidden;
state->transform = var;
}
return nir_load_var(&state->b, state->transform);