This fixes issues where polygons that should be culled (due to negative w, for instance) may not be.
Signed-off-by: Alyssa Rosenzweig <aly...@rosenzweig.io> --- src/gallium/drivers/panfrost/midgard/midgard_compile.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/gallium/drivers/panfrost/midgard/midgard_compile.c b/src/gallium/drivers/panfrost/midgard/midgard_compile.c index 6b6a405d963..cd8412c2dff 100644 --- a/src/gallium/drivers/panfrost/midgard/midgard_compile.c +++ b/src/gallium/drivers/panfrost/midgard/midgard_compile.c @@ -2919,13 +2919,15 @@ write_transformed_position(nir_builder *b, nir_src input_point_src, int uniform_ /* gl_Position will be written out in screenspace xyz, with w set to * the reciprocal we computed earlier. The transformed w component is - * then used for perspective-correct varying interpolation */ + * then used for perspective-correct varying interpolation. The + * transformed w component must preserve its original sign; this is + * used in depth clipping computations */ nir_ssa_def *screen_space = nir_vec4(b, nir_channel(b, viewport_xy, 0), nir_channel(b, viewport_xy, 1), screen_depth, - nir_fabs(b, w_recip)); + w_recip); /* Finally, write out the transformed values to the varying */ -- 2.20.1 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev