[Mesa-dev] [PATCH] nir: Move system value -> intrinsic mapping into nir.c
Jason Ekstrand
jason at jlekstrand.net
Thu Sep 10 16:54:01 PDT 2015
This way they're right next to the map going the other direction.
---
src/glsl/nir/nir.c | 34 +++++++++++++++++++++++++++++++++
src/glsl/nir/nir.h | 1 +
src/glsl/nir/nir_lower_system_values.c | 35 +---------------------------------
3 files changed, 36 insertions(+), 34 deletions(-)
diff --git a/src/glsl/nir/nir.c b/src/glsl/nir/nir.c
index ab06ea2..0a74943 100644
--- a/src/glsl/nir/nir.c
+++ b/src/glsl/nir/nir.c
@@ -1405,6 +1405,40 @@ nir_index_ssa_defs(nir_function_impl *impl)
impl->ssa_alloc = index;
}
+nir_intrinsic_op
+nir_intrinsic_from_system_value(gl_system_value val)
+{
+ switch (val) {
+ case SYSTEM_VALUE_VERTEX_ID:
+ return nir_intrinsic_load_vertex_id;
+ case SYSTEM_VALUE_INSTANCE_ID:
+ return nir_intrinsic_load_instance_id;
+ case SYSTEM_VALUE_VERTEX_ID_ZERO_BASE:
+ return nir_intrinsic_load_vertex_id_zero_base;
+ case SYSTEM_VALUE_BASE_VERTEX:
+ return nir_intrinsic_load_base_vertex;
+ case SYSTEM_VALUE_INVOCATION_ID:
+ return nir_intrinsic_load_invocation_id;
+ case SYSTEM_VALUE_FRONT_FACE:
+ return nir_intrinsic_load_front_face;
+ case SYSTEM_VALUE_SAMPLE_ID:
+ return nir_intrinsic_load_sample_id;
+ case SYSTEM_VALUE_SAMPLE_POS:
+ return nir_intrinsic_load_sample_pos;
+ case SYSTEM_VALUE_SAMPLE_MASK_IN:
+ return nir_intrinsic_load_sample_mask_in;
+ /* FINISHME: Add tessellation intrinsics.
+ case SYSTEM_VALUE_TESS_COORD:
+ case SYSTEM_VALUE_VERTICES_IN:
+ case SYSTEM_VALUE_PRIMITIVE_ID:
+ case SYSTEM_VALUE_TESS_LEVEL_OUTER:
+ case SYSTEM_VALUE_TESS_LEVEL_INNER:
+ */
+ default:
+ unreachable("system value does not directly correspond to intrinsic");
+ }
+}
+
gl_system_value
nir_system_value_from_intrinsic(nir_intrinsic_op intrin)
{
diff --git a/src/glsl/nir/nir.h b/src/glsl/nir/nir.h
index 2ba7731..5676cfd 100644
--- a/src/glsl/nir/nir.h
+++ b/src/glsl/nir/nir.h
@@ -1855,6 +1855,7 @@ bool nir_opt_undef(nir_shader *shader);
void nir_sweep(nir_shader *shader);
+nir_intrinsic_op nir_intrinsic_from_system_value(gl_system_value val);
gl_system_value nir_system_value_from_intrinsic(nir_intrinsic_op intrin);
#ifdef __cplusplus
diff --git a/src/glsl/nir/nir_lower_system_values.c b/src/glsl/nir/nir_lower_system_values.c
index a6eec65..b6c140c 100644
--- a/src/glsl/nir/nir_lower_system_values.c
+++ b/src/glsl/nir/nir_lower_system_values.c
@@ -40,40 +40,7 @@ convert_instr(nir_intrinsic_instr *instr)
void *mem_ctx = ralloc_parent(instr);
- nir_intrinsic_op op;
-
- switch (var->data.location) {
- case SYSTEM_VALUE_FRONT_FACE:
- op = nir_intrinsic_load_front_face;
- break;
- case SYSTEM_VALUE_VERTEX_ID:
- op = nir_intrinsic_load_vertex_id;
- break;
- case SYSTEM_VALUE_VERTEX_ID_ZERO_BASE:
- op = nir_intrinsic_load_vertex_id_zero_base;
- break;
- case SYSTEM_VALUE_BASE_VERTEX:
- op = nir_intrinsic_load_base_vertex;
- break;
- case SYSTEM_VALUE_INSTANCE_ID:
- op = nir_intrinsic_load_instance_id;
- break;
- case SYSTEM_VALUE_SAMPLE_ID:
- op = nir_intrinsic_load_sample_id;
- break;
- case SYSTEM_VALUE_SAMPLE_POS:
- op = nir_intrinsic_load_sample_pos;
- break;
- case SYSTEM_VALUE_SAMPLE_MASK_IN:
- op = nir_intrinsic_load_sample_mask_in;
- break;
- case SYSTEM_VALUE_INVOCATION_ID:
- op = nir_intrinsic_load_invocation_id;
- break;
- default:
- unreachable("not reached");
- }
-
+ nir_intrinsic_op op = nir_intrinsic_from_system_value(var->data.location);
nir_intrinsic_instr *new_instr = nir_intrinsic_instr_create(mem_ctx, op);
if (instr->dest.is_ssa) {
--
2.5.0.400.gff86faf
More information about the mesa-dev
mailing list