aboutsummaryrefslogtreecommitdiffstats
path: root/src/compiler
diff options
context:
space:
mode:
authorTimothy Arceri <[email protected]>2020-02-06 12:49:10 +1100
committerMarge Bot <[email protected]>2020-02-28 23:48:46 +0000
commite0aa0a839f9c168784a1f50013c83877cc876094 (patch)
tree4e8f8c8eeb35e8394a99ba79a93985489e8f54be /src/compiler
parent190a1ed170231d6f1db0526a1867a6766ccd4823 (diff)
glsl: fix resizing of the uniform remap table
In the NIR linker we were not resizing the remap table correctly for explicit locations when it was needed. Reviewed-by: Alejandro PiƱeiro <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/3992>
Diffstat (limited to 'src/compiler')
-rw-r--r--src/compiler/glsl/gl_nir_link_uniforms.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/src/compiler/glsl/gl_nir_link_uniforms.c b/src/compiler/glsl/gl_nir_link_uniforms.c
index 7196d8b2c1f..7249829c564 100644
--- a/src/compiler/glsl/gl_nir_link_uniforms.c
+++ b/src/compiler/glsl/gl_nir_link_uniforms.c
@@ -105,16 +105,20 @@ nir_setup_uniform_remap_tables(struct gl_context *ctx,
unsigned location =
link_util_find_empty_block(prog, &prog->data->UniformStorage[i]);
- if (location == -1) {
- location = prog->NumUniformRemapTable;
+ if (location == -1 || location + entries >= prog->NumUniformRemapTable) {
+ unsigned new_entries = entries;
+ if (location == -1)
+ location = prog->NumUniformRemapTable;
+ else
+ new_entries = location - prog->NumUniformRemapTable + entries;
/* resize remap table to fit new entries */
prog->UniformRemapTable =
reralloc(prog,
prog->UniformRemapTable,
struct gl_uniform_storage *,
- prog->NumUniformRemapTable + entries);
- prog->NumUniformRemapTable += entries;
+ prog->NumUniformRemapTable + new_entries);
+ prog->NumUniformRemapTable += new_entries;
}
/* set the base location in remap table for the uniform */