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:
Connor Abbott
2019-05-17 14:56:45 +02:00
parent dd81d8808d
commit f3e2c65041

View File

@@ -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;
}