nir/print: Do not access invalid indices of load_uniform

load_uniform does not have io_semantics and component.

Fixes: a83fd26 ("nir/print: stop trying to match i/o vars using base/driver_location")
Reviewed-By: Mike Blumenkrantz <michael.blumenkrantz@gmail.com>
Reviewed-by: Christian Gmeiner <cgmeiner@igalia.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/28962>
This commit is contained in:
Konstantin Seurer 2024-04-23 10:09:02 +02:00
parent cc9141f044
commit ea863c0c1c

View file

@ -1639,13 +1639,17 @@ print_intrinsic_instr(nir_intrinsic_instr *instr, print_state *state)
nir_foreach_variable_with_modes(var, state->shader, var_mode) {
if (!var->name)
continue;
if (((instr->intrinsic == nir_intrinsic_load_uniform &&
var->data.driver_location == nir_intrinsic_base(instr)) ||
(instr->intrinsic != nir_intrinsic_load_uniform &&
var->data.location == nir_intrinsic_io_semantics(instr).location)) &&
((nir_intrinsic_component(instr) >= var->data.location_frac &&
nir_intrinsic_component(instr) <
(var->data.location_frac + glsl_get_components(var->type))))) {
bool match;
if (instr->intrinsic == nir_intrinsic_load_uniform) {
match = var->data.driver_location == nir_intrinsic_base(instr);
} else {
match = nir_intrinsic_component(instr) >= var->data.location_frac &&
nir_intrinsic_component(instr) <
(var->data.location_frac + glsl_get_components(var->type));
}
if (match) {
fprintf(fp, " // %s", var->name);
break;
}