diff options
author | Timothy Arceri <[email protected]> | 2020-03-05 14:46:26 +1100 |
---|---|---|
committer | Marge Bot <[email protected]> | 2020-04-18 11:50:44 +0000 |
commit | c7355c4fb98cd052951f323b2dd241942000ac21 (patch) | |
tree | 476ae4868068661f6ba22d761f48a6ae787664b5 /src/compiler/glsl | |
parent | 5442712c6dae60529ceed0ea199751da7c9dd8e7 (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.c | 21 |
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); |