mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-04 11:20:20 +01:00
glsl: track total amount of uniform locations used
Linker missed a check for situation where we exceed max amount of uniform locations with explicit + implicit locations. Patch adds this check to already existing iteration over uniforms in linker. Fixes following CTS test: ES31-CTS.explicit_uniform_location.uniform-loc-negative-link-max-num-of-locations v2: use var->type->uniform_locations() (Timothy) Signed-off-by: Tapani Pälli <tapani.palli@intel.com> Reviewed-by: Timothy Arceri <timothy.arceri@collabora.com>
This commit is contained in:
parent
395b53dad6
commit
4985159ad6
1 changed files with 15 additions and 2 deletions
|
|
@ -3130,6 +3130,7 @@ check_explicit_uniform_locations(struct gl_context *ctx,
|
|||
return;
|
||||
}
|
||||
|
||||
unsigned entries_total = 0;
|
||||
for (unsigned i = 0; i < MESA_SHADER_STAGES; i++) {
|
||||
struct gl_shader *sh = prog->_LinkedShaders[i];
|
||||
|
||||
|
|
@ -3138,8 +3139,12 @@ check_explicit_uniform_locations(struct gl_context *ctx,
|
|||
|
||||
foreach_in_list(ir_instruction, node, sh->ir) {
|
||||
ir_variable *var = node->as_variable();
|
||||
if (var && (var->data.mode == ir_var_uniform &&
|
||||
var->data.explicit_location)) {
|
||||
if (!var || var->data.mode != ir_var_uniform)
|
||||
continue;
|
||||
|
||||
entries_total += var->type->uniform_locations();
|
||||
|
||||
if (var->data.explicit_location) {
|
||||
bool ret;
|
||||
if (var->type->is_subroutine())
|
||||
ret = reserve_subroutine_explicit_locations(prog, sh, var);
|
||||
|
|
@ -3153,6 +3158,14 @@ check_explicit_uniform_locations(struct gl_context *ctx,
|
|||
}
|
||||
}
|
||||
|
||||
/* Verify that total amount of entries for explicit and implicit locations
|
||||
* is less than MAX_UNIFORM_LOCATIONS.
|
||||
*/
|
||||
if (entries_total >= ctx->Const.MaxUserAssignableUniformLocations) {
|
||||
linker_error(prog, "count of uniform locations >= MAX_UNIFORM_LOCATIONS"
|
||||
"(%u >= %u)", entries_total,
|
||||
ctx->Const.MaxUserAssignableUniformLocations);
|
||||
}
|
||||
delete uniform_map;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue