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: d0f746b645
("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>
This commit is contained in:
parent
937b905569
commit
372ed42d22
|
@ -317,6 +317,17 @@ nir_lower_clip_vs(nir_shader *shader, unsigned ucp_enables, bool use_vars,
|
||||||
if (!ucp_enables)
|
if (!ucp_enables)
|
||||||
return false;
|
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_builder_init(&b, impl);
|
||||||
|
|
||||||
/* NIR should ensure that, even in case of loops/if-else, there
|
/* NIR should ensure that, even in case of loops/if-else, there
|
||||||
|
|
Loading…
Reference in New Issue