nir/linking: fix issue with two compact variables in a row. (v2)
If we have a clip dist float[1] compact followed by a tess factor float[2] we don't want to overlap them, but the partial check only happens for non-compact vars. This fixes some issues seen with my sw vulkan layer with dEQP-VK.clipping.user_defined.clip_distance* v2: v1 failed with clip/cull mixtures, since in that case the cull has a location_frac to follow after the clip so only reset if we get a location_frac of 0 in a subsequent clip var Reviewed-by: Timothy Arceri <tarceri@itsqueeze.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4635>
This commit is contained in:
@@ -1113,6 +1113,14 @@ nir_assign_io_var_locations(struct exec_list *var_list, unsigned *size,
|
|||||||
|
|
||||||
unsigned var_size;
|
unsigned var_size;
|
||||||
if (var->data.compact) {
|
if (var->data.compact) {
|
||||||
|
/* If we are inside a partial compact,
|
||||||
|
* don't allow another compact to be in this slot
|
||||||
|
* if it starts at component 0.
|
||||||
|
*/
|
||||||
|
if (last_partial && var->data.location_frac == 0) {
|
||||||
|
location++;
|
||||||
|
}
|
||||||
|
|
||||||
/* compact variables must be arrays of scalars */
|
/* compact variables must be arrays of scalars */
|
||||||
assert(glsl_type_is_array(type));
|
assert(glsl_type_is_array(type));
|
||||||
assert(glsl_type_is_scalar(glsl_get_array_element(type)));
|
assert(glsl_type_is_scalar(glsl_get_array_element(type)));
|
||||||
|
Reference in New Issue
Block a user