diff options
author | Tapani Pälli <[email protected]> | 2016-01-20 22:02:22 +0200 |
---|---|---|
committer | Tapani Pälli <[email protected]> | 2016-01-20 22:04:46 +0200 |
commit | f1152c3455d0fa1a8b3cafee2aaeffb31d5ba49b (patch) | |
tree | 1281ba68b6afc1848b257e892992928bf6b2c11d /src/glsl/link_uniforms.cpp | |
parent | 4475d8f9169195baefa893b9b147fe20414cda7c (diff) |
Revert "glsl: move uniform calculation to link_uniforms"
This reverts commit 4475d8f9169195baefa893b9b147fe20414cda7c.
Diffstat (limited to 'src/glsl/link_uniforms.cpp')
-rw-r--r-- | src/glsl/link_uniforms.cpp | 87 |
1 files changed, 10 insertions, 77 deletions
diff --git a/src/glsl/link_uniforms.cpp b/src/glsl/link_uniforms.cpp index 76ee70dd400..33b2d4c8646 100644 --- a/src/glsl/link_uniforms.cpp +++ b/src/glsl/link_uniforms.cpp @@ -1057,40 +1057,9 @@ assign_hidden_uniform_slot_id(const char *name, unsigned hidden_id, uniform_size->map->put(hidden_uniform_start + hidden_id, name); } -/** - * Search UniformRemapTable for empty block big enough to hold given uniform. - * TODO Optimize this algorithm later if it turns out to be a major bottleneck. - */ -static int -find_empty_block(struct gl_shader_program *prog, - struct gl_uniform_storage *uniform) -{ - const unsigned entries = MAX2(1, uniform->array_elements); - for (unsigned i = 0, j; i < prog->NumUniformRemapTable; i++) { - /* We found empty space in UniformRemapTable. */ - if (prog->UniformRemapTable[i] == NULL) { - for (j = i; j < entries && j < prog->NumUniformRemapTable; j++) { - if (prog->UniformRemapTable[j] != NULL) { - /* Entries do not fit in this space, continue searching - * after this location. - */ - i = j + 1; - break; - } - } - /* Entries fit, we can return this location. */ - if (i != j + 1) { - return i; - } - } - } - return -1; -} - void link_assign_uniform_locations(struct gl_shader_program *prog, - unsigned int boolean_true, - unsigned int max_locations) + unsigned int boolean_true) { ralloc_free(prog->UniformStorage); prog->UniformStorage = NULL; @@ -1181,20 +1150,6 @@ link_assign_uniform_locations(struct gl_shader_program *prog, parcel_out_uniform_storage parcel(prog->UniformHash, uniforms, data); - unsigned total_entries = 0; - - /* Calculate amount of 'holes' left after explicit locations were - * reserved from UniformRemapTable. - */ - unsigned empty_locs = 0; - for (unsigned i = 0; i < prog->NumUniformRemapTable; i++) - if (prog->UniformRemapTable[i] == NULL) - empty_locs++; - - /* Add all the reserved explicit locations - empty locations in remap table. */ - if (prog->NumUniformRemapTable) - total_entries = (prog->NumUniformRemapTable - 1) - empty_locs; - for (unsigned i = 0; i < MESA_SHADER_STAGES; i++) { if (prog->_LinkedShaders[i] == NULL) continue; @@ -1258,43 +1213,21 @@ link_assign_uniform_locations(struct gl_shader_program *prog, /* how many new entries for this uniform? */ const unsigned entries = MAX2(1, uniforms[i].array_elements); - /* Find UniformRemapTable for empty blocks where we can fit this uniform. */ - int chosen_location = -1; - - if (empty_locs) - chosen_location = find_empty_block(prog, &uniforms[i]); - - if (chosen_location != -1) { - empty_locs -= entries; - } else { - chosen_location = prog->NumUniformRemapTable; - - /* Add new entries to the total amount of entries. */ - total_entries += entries; - - /* resize remap table to fit new entries */ - prog->UniformRemapTable = - reralloc(prog, - prog->UniformRemapTable, - gl_uniform_storage *, - prog->NumUniformRemapTable + entries); - prog->NumUniformRemapTable += entries; - } + /* resize remap table to fit new entries */ + prog->UniformRemapTable = + reralloc(prog, + prog->UniformRemapTable, + gl_uniform_storage *, + prog->NumUniformRemapTable + entries); /* set pointers for this uniform */ for (unsigned j = 0; j < entries; j++) - prog->UniformRemapTable[chosen_location + j] = &uniforms[i]; + prog->UniformRemapTable[prog->NumUniformRemapTable+j] = &uniforms[i]; /* set the base location in remap table for the uniform */ - uniforms[i].remap_location = chosen_location; - } + uniforms[i].remap_location = prog->NumUniformRemapTable; - /* Verify that total amount of entries for explicit and implicit locations - * is less than MAX_UNIFORM_LOCATIONS. - */ - if (total_entries >= max_locations) { - linker_error(prog, "count of uniform locations >= MAX_UNIFORM_LOCATIONS" - "(%u >= %u)", total_entries, max_locations); + prog->NumUniformRemapTable += entries; } /* Reserve all the explicit locations of the active subroutine uniforms. */ |