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 <apinheiro@igalia.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/3992>
This commit is contained in:
Timothy Arceri 2020-02-06 12:49:10 +11:00 committed by Marge Bot
parent 190a1ed170
commit e0aa0a839f
1 changed files with 8 additions and 4 deletions

View File

@ -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 */