From: Alyssa Rosenzweig Date: Fri, 15 Feb 2019 06:38:23 +0000 (+0000) Subject: panfrost: Preserve w sign in perspective division X-Git-Tag: upstream/19.3.0~9724 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=fa1b36ddc2b6407e3c0e2b938e94f40d825e33f0;p=platform%2Fupstream%2Fmesa.git 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 --- diff --git a/src/gallium/drivers/panfrost/midgard/midgard_compile.c b/src/gallium/drivers/panfrost/midgard/midgard_compile.c index 6b6a405..cd8412c 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 */