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 <nunes.erico@gmail.com>
Reviewed-by: Vasily Khoruzhick <anarsoul@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/9933>
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);