summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAlejandro Piñeiro <[email protected]>2018-03-21 09:39:32 +0100
committerAlejandro Piñeiro <[email protected]>2018-08-13 16:28:27 +0200
commitd6c80666634378d5f4b1df383510214808b225d6 (patch)
tree81422352df50ac3c2edae8fa1576a617fb5a824b /src
parentaf194bd38e1f75495f9251934340d3d3bcc80ee4 (diff)
nir/glsl: make nir_remap_attributes public
As we plan to reuse it for ARB_gl_spirv implementation. Reviewed-by: Timothy Arceri <[email protected]>
Diffstat (limited to 'src')
-rw-r--r--src/compiler/glsl/glsl_to_nir.cpp17
-rw-r--r--src/compiler/nir/nir.c24
-rw-r--r--src/compiler/nir/nir.h3
3 files changed, 27 insertions, 17 deletions
diff --git a/src/compiler/glsl/glsl_to_nir.cpp b/src/compiler/glsl/glsl_to_nir.cpp
index 1e4d9f9d3c8..b1d1da89111 100644
--- a/src/compiler/glsl/glsl_to_nir.cpp
+++ b/src/compiler/glsl/glsl_to_nir.cpp
@@ -128,23 +128,6 @@ private:
} /* end of anonymous namespace */
-static void
-nir_remap_attributes(nir_shader *shader,
- const nir_shader_compiler_options *options)
-{
- if (options->vs_inputs_dual_locations) {
- nir_foreach_variable(var, &shader->inputs) {
- var->data.location +=
- _mesa_bitcount_64(shader->info.vs.double_inputs &
- BITFIELD64_MASK(var->data.location));
- }
- }
-
- /* Once the remap is done, reset double_inputs_read, so later it will have
- * which location/slots are doubles */
- shader->info.vs.double_inputs = 0;
-}
-
nir_shader *
glsl_to_nir(const struct gl_shader_program *shader_prog,
gl_shader_stage stage,
diff --git a/src/compiler/nir/nir.c b/src/compiler/nir/nir.c
index 5e76654ca3d..e12aa5d80f5 100644
--- a/src/compiler/nir/nir.c
+++ b/src/compiler/nir/nir.c
@@ -32,6 +32,9 @@
#include <assert.h>
#include <math.h>
+#include "main/imports.h" /* _mesa_bitcount_64 */
+#include "main/menums.h" /* BITFIELD64_MASK */
+
nir_shader *
nir_shader_create(void *mem_ctx,
gl_shader_stage stage,
@@ -1847,3 +1850,24 @@ nir_system_value_from_intrinsic(nir_intrinsic_op intrin)
unreachable("intrinsic doesn't produce a system value");
}
}
+
+/* OpenGL utility method that remaps the location attributes if they are
+ * doubles. Not needed for vulkan due the differences on the input location
+ * count for doubles on vulkan vs OpenGL
+ */
+void
+nir_remap_attributes(nir_shader *shader,
+ const nir_shader_compiler_options *options)
+{
+ if (options->vs_inputs_dual_locations) {
+ nir_foreach_variable(var, &shader->inputs) {
+ var->data.location +=
+ _mesa_bitcount_64(shader->info.vs.double_inputs &
+ BITFIELD64_MASK(var->data.location));
+ }
+ }
+
+ /* Once the remap is done, reset double_inputs_read, so later it will have
+ * which location/slots are doubles */
+ shader->info.vs.double_inputs = 0;
+}
diff --git a/src/compiler/nir/nir.h b/src/compiler/nir/nir.h
index 1ccbccc8bbb..d0fa693884b 100644
--- a/src/compiler/nir/nir.h
+++ b/src/compiler/nir/nir.h
@@ -2999,6 +2999,9 @@ bool nir_opt_conditional_discard(nir_shader *shader);
void nir_sweep(nir_shader *shader);
+void nir_remap_attributes(nir_shader *shader,
+ const nir_shader_compiler_options *options);
+
nir_intrinsic_op nir_intrinsic_from_system_value(gl_system_value val);
gl_system_value nir_system_value_from_intrinsic(nir_intrinsic_op intrin);