diff options
author | Timothy Arceri <tarceri@itsqueeze.com> | 2018-01-08 10:37:27 +1100 |
---|---|---|
committer | Timothy Arceri <tarceri@itsqueeze.com> | 2018-01-30 09:08:47 +1100 |
commit | 5b8de4bdffa1f0caed55a7a3f615dae9f625c53e (patch) | |
tree | a7179d1ff117ee25bf0888c5309e579ee42b278a /src/compiler | |
parent | f63e05ae9ea0be38a8fb2dd0ae8f391b8699e757 (diff) |
nir: add vs_inputs_dual_locations compiler option
Allows nir drivers to either use a single or dual locations for
vs double inputs.
i965 uses dual locations for both OpenGL and Vulkan drivers, for
now gallium OpenGL drivers only use a single location.
The following patch will also make use of this option when
calling nir_shader_gather_info().
Reviewed-by: Karol Herbst <kherbst@redhat.com>
Diffstat (limited to 'src/compiler')
-rw-r--r-- | src/compiler/glsl/glsl_to_nir.cpp | 14 | ||||
-rw-r--r-- | src/compiler/nir/nir.h | 6 |
2 files changed, 15 insertions, 5 deletions
diff --git a/src/compiler/glsl/glsl_to_nir.cpp b/src/compiler/glsl/glsl_to_nir.cpp index 29e32cde53c..1a579f41cd3 100644 --- a/src/compiler/glsl/glsl_to_nir.cpp +++ b/src/compiler/glsl/glsl_to_nir.cpp @@ -130,11 +130,15 @@ private: } /* end of anonymous namespace */ static void -nir_remap_attributes(nir_shader *shader) +nir_remap_attributes(nir_shader *shader, + const nir_shader_compiler_options *options) { - nir_foreach_variable(var, &shader->inputs) { - var->data.location += _mesa_bitcount_64(shader->info.vs.double_inputs & - BITFIELD64_MASK(var->data.location)); + 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 @@ -164,7 +168,7 @@ glsl_to_nir(const struct gl_shader_program *shader_prog, * location 0 and vec4 attr1 in location 1, in NIR attr0 will use * locations/slots 0 and 1, and attr1 will use location/slot 2 */ if (shader->info.stage == MESA_SHADER_VERTEX) - nir_remap_attributes(shader); + nir_remap_attributes(shader, options); shader->info.name = ralloc_asprintf(shader, "GLSL%d", shader_prog->Name); if (shader_prog->Label) diff --git a/src/compiler/nir/nir.h b/src/compiler/nir/nir.h index 41a07b0b48c..4bb96c3c952 100644 --- a/src/compiler/nir/nir.h +++ b/src/compiler/nir/nir.h @@ -1892,6 +1892,12 @@ typedef struct nir_shader_compiler_options { */ bool use_interpolated_input_intrinsics; + /** + * Do vertex shader double inputs use two locations? The Vulkan spec + * requires two locations to be used, OpenGL allows a single location. + */ + bool vs_inputs_dual_locations; + unsigned max_unroll_iterations; } nir_shader_compiler_options; |