aboutsummaryrefslogtreecommitdiffstats
path: root/src/compiler/glsl
diff options
context:
space:
mode:
authorTimothy Arceri <[email protected]>2020-03-05 14:46:26 +1100
committerMarge Bot <[email protected]>2020-04-18 11:50:44 +0000
commitc7355c4fb98cd052951f323b2dd241942000ac21 (patch)
tree476ae4868068661f6ba22d761f48a6ae787664b5 /src/compiler/glsl
parent5442712c6dae60529ceed0ea199751da7c9dd8e7 (diff)
glsl: fix explicit locations for the glsl linker
We already reserved explicit locations in the GLSL linker. Reviewed-by: Alejandro PiƱeiro <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4623>
Diffstat (limited to 'src/compiler/glsl')
-rw-r--r--src/compiler/glsl/gl_nir_link_uniforms.c21
1 files changed, 16 insertions, 5 deletions
diff --git a/src/compiler/glsl/gl_nir_link_uniforms.c b/src/compiler/glsl/gl_nir_link_uniforms.c
index ef19ced288c..69d7aa57022 100644
--- a/src/compiler/glsl/gl_nir_link_uniforms.c
+++ b/src/compiler/glsl/gl_nir_link_uniforms.c
@@ -48,9 +48,17 @@ static void
nir_setup_uniform_remap_tables(struct gl_context *ctx,
struct gl_shader_program *prog)
{
- prog->UniformRemapTable = rzalloc_array(prog,
- struct gl_uniform_storage *,
- prog->NumUniformRemapTable);
+ /* For glsl this may have been allocated by reserve_explicit_locations() so
+ * that we can keep track of unused uniforms with explicit locations.
+ */
+ assert(!prog->data->spirv ||
+ (prog->data->spirv && !prog->UniformRemapTable));
+ if (!prog->UniformRemapTable) {
+ prog->UniformRemapTable = rzalloc_array(prog,
+ struct gl_uniform_storage *,
+ prog->NumUniformRemapTable);
+ }
+
union gl_constant_value *data =
rzalloc_array(prog->data,
union gl_constant_value, prog->data->NumUniformDataSlots);
@@ -93,7 +101,8 @@ nir_setup_uniform_remap_tables(struct gl_context *ctx,
}
/* Reserve locations for rest of the uniforms. */
- link_util_update_empty_uniform_locations(prog);
+ if (prog->data->spirv)
+ link_util_update_empty_uniform_locations(prog);
for (unsigned i = 0; i < prog->data->NumUniformStorage; i++) {
struct gl_uniform_storage *uniform = &prog->data->UniformStorage[i];
@@ -1396,9 +1405,11 @@ gl_nir_link_uniforms(struct gl_context *ctx,
}
prog->data->NumHiddenUniforms = state.num_hidden_uniforms;
- prog->NumUniformRemapTable = state.max_uniform_location;
prog->data->NumUniformDataSlots = state.num_values;
+ if (prog->data->spirv)
+ prog->NumUniformRemapTable = state.max_uniform_location;
+
nir_setup_uniform_remap_tables(ctx, prog);
gl_nir_set_uniform_initializers(ctx, prog);