From b071d98c0432eebf3318e8d7a1eb904e3c735d14 Mon Sep 17 00:00:00 2001 From: Erico Nunes Date: Sun, 28 Mar 2021 23:42:43 +0200 Subject: [PATCH] lima: increase epsilon for depthrange near == far When the application sets depthrange near == far, lima inserts an 'epsilon' difference of decreasing 'near' by 1 unit, to prevent application bugs. For some specific values of depthrange this does not seem to be sufficient, presumably due to precision limitations. Increase the difference by also incrementing the 'far' distance in this case, to further avoid bugs. Signed-off-by: Erico Nunes Reviewed-by: Vasily Khoruzhick Part-of: --- src/gallium/drivers/lima/lima_draw.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/gallium/drivers/lima/lima_draw.c b/src/gallium/drivers/lima/lima_draw.c index b779995..c66eae1 100644 --- a/src/gallium/drivers/lima/lima_draw.c +++ b/src/gallium/drivers/lima/lima_draw.c @@ -648,9 +648,14 @@ lima_pack_render_state(struct lima_context *ctx, const struct pipe_draw_info *in near = float_to_ushort(ctx->viewport.near); far = float_to_ushort(ctx->viewport.far); - /* Subtract epsilon from 'near' if far == near. Make sure we don't get overflow */ - if ((far == near) && (near != 0)) + /* Insert a small 'epsilon' difference between 'near' and 'far' when + * they are equal, to avoid application bugs. */ + if (far == near) { + if (near > 0) near--; + if (far < USHRT_MAX) + far++; + } /* overlap with plbu? any place can remove one? */ render->depth_range = near | (far << 16); -- 2.7.4