From fa1b36ddc2b6407e3c0e2b938e94f40d825e33f0 Mon Sep 17 00:00:00 2001 From: Alyssa Rosenzweig Date: Fri, 15 Feb 2019 06:38:23 +0000 Subject: [PATCH] panfrost: Preserve w sign in perspective division This fixes issues where polygons that should be culled (due to negative w, for instance) may not be. Signed-off-by: Alyssa Rosenzweig --- 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.30.2