diff options
author | Timothy Arceri <[email protected]> | 2018-01-08 10:37:27 +1100 |
---|---|---|
committer | Timothy Arceri <[email protected]> | 2018-01-30 09:08:47 +1100 |
commit | 5b8de4bdffa1f0caed55a7a3f615dae9f625c53e (patch) | |
tree | a7179d1ff117ee25bf0888c5309e579ee42b278a /src/compiler/glsl/glsl_to_nir.cpp | |
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 <[email protected]>
Diffstat (limited to 'src/compiler/glsl/glsl_to_nir.cpp')
-rw-r--r-- | src/compiler/glsl/glsl_to_nir.cpp | 14 |
1 files changed, 9 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) |