nir: Return correct size in nir_assign_io_var_locations()
It was double-counting cases where multiple variables were assigned to the same slot, and not handling the case where the last variable is a compact variable. Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
This commit is contained in:
@@ -1064,7 +1064,6 @@ nir_assign_io_var_locations(struct exec_list *var_list, unsigned *size,
|
|||||||
if (processed) {
|
if (processed) {
|
||||||
unsigned driver_location = assigned_locations[var->data.location];
|
unsigned driver_location = assigned_locations[var->data.location];
|
||||||
var->data.driver_location = driver_location;
|
var->data.driver_location = driver_location;
|
||||||
*size += glsl_count_attribute_slots(type, false);
|
|
||||||
|
|
||||||
/* An array may be packed such that is crosses multiple other arrays
|
/* An array may be packed such that is crosses multiple other arrays
|
||||||
* or variables, we need to make sure we have allocated the elements
|
* or variables, we need to make sure we have allocated the elements
|
||||||
@@ -1096,6 +1095,9 @@ nir_assign_io_var_locations(struct exec_list *var_list, unsigned *size,
|
|||||||
location += var_size;
|
location += var_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
*size += location;
|
if (last_partial)
|
||||||
|
location++;
|
||||||
|
|
||||||
|
*size = location;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user