summaryrefslogtreecommitdiffstats
path: root/src/compiler
diff options
context:
space:
mode:
authorDave Airlie <[email protected]>2020-04-20 11:23:45 +1000
committerMarge Bot <[email protected]>2020-04-20 21:08:54 +0000
commitc2d8a4bf176618bcbf37ef93b6ca06ecac1b1856 (patch)
treed5904a6d2ee62f9b71a44798c8f02fc13c0e9e9e /src/compiler
parenta24ab26ff72634999ebc262dbdd3404d7b68bfea (diff)
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 <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4635>
Diffstat (limited to 'src/compiler')
-rw-r--r--src/compiler/nir/nir_linking_helpers.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/compiler/nir/nir_linking_helpers.c b/src/compiler/nir/nir_linking_helpers.c
index d187096cf45..34a6f9a4d6b 100644
--- a/src/compiler/nir/nir_linking_helpers.c
+++ b/src/compiler/nir/nir_linking_helpers.c
@@ -1113,6 +1113,14 @@ nir_assign_io_var_locations(struct exec_list *var_list, unsigned *size,
unsigned var_size;
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 */
assert(glsl_type_is_array(type));
assert(glsl_type_is_scalar(glsl_get_array_element(type)));