From d6c80666634378d5f4b1df383510214808b225d6 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Alejandro=20Pi=C3=B1eiro?= Date: Wed, 21 Mar 2018 09:39:32 +0100 Subject: [PATCH] nir/glsl: make nir_remap_attributes public As we plan to reuse it for ARB_gl_spirv implementation. Reviewed-by: Timothy Arceri --- src/compiler/glsl/glsl_to_nir.cpp | 17 ----------------- src/compiler/nir/nir.c | 24 ++++++++++++++++++++++++ src/compiler/nir/nir.h | 3 +++ 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 #include +#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); -- 2.30.2