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) {
|
||||
unsigned driver_location = assigned_locations[var->data.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
|
||||
* 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;
|
||||
}
|
||||
|
||||
*size += location;
|
||||
if (last_partial)
|
||||
location++;
|
||||
|
||||
*size = location;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user