summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRob Clark <robdclark@chromium.org>2019-12-03 16:28:26 -0800
committerRob Clark <robdclark@chromium.org>2019-12-04 13:08:52 -0800
commit372ed42d222a274abe712b62f4b037cbeb6fddb5 (patch)
tree6f0086b3b4b4cf28affe7cd08b1985f3bfe84512
parent937b9055698be0dfdb7d2e0673a989e2ecc05912 (diff)
downloadmesa-372ed42d222a274abe712b62f4b037cbeb6fddb5.tar.gz
nir/lower_clip: Fix incorrect driver loc for clipdist outputs
Somehow adjusting maxloc based on existing outputs got lost, resulting in the clipdist varying clobbering the position varying. Causing a shader that had no position output in freedreno/ir3, which triggers GPU hangs in neverball. Fixes: d0f746b6458 ("nir: Save nir_variable pointers in nir_lower_clip_vs rather than locs.") Signed-off-by: Rob Clark <robdclark@chromium.org> Reviewed-by: Kristian H. Kristensen <hoegsberg@google.com>
-rw-r--r--src/compiler/nir/nir_lower_clip.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/src/compiler/nir/nir_lower_clip.c b/src/compiler/nir/nir_lower_clip.c
index cf8a5d93c76..0f0d2eb2c73 100644
--- a/src/compiler/nir/nir_lower_clip.c
+++ b/src/compiler/nir/nir_lower_clip.c
@@ -317,6 +317,17 @@ nir_lower_clip_vs(nir_shader *shader, unsigned ucp_enables, bool use_vars,
if (!ucp_enables)
return false;
+ /* find clipvertex/position outputs: */
+ nir_foreach_variable(var, &shader->outputs) {
+ int loc = var->data.driver_location;
+
+ /* keep track of last used driver-location.. we'll be
+ * appending CLIP_DIST0/CLIP_DIST1 after last existing
+ * output:
+ */
+ maxloc = MAX2(maxloc, loc);
+ }
+
nir_builder_init(&b, impl);
/* NIR should ensure that, even in case of loops/if-else, there