r300: disable clip-discard watermark for triangles
Some checks are pending
macOS-CI / macOS-CI (dri) (push) Waiting to run
macOS-CI / macOS-CI (xlib) (push) Waiting to run

Commit 0d4aa5f55f introduced the watermark to optimize the guardband
state changes and always computed new_distance as MAX2(distance,
watermark).

That is correct for point/line paths where distance > 0, but it keeps a
non-zero discard distance alive when the next draw sets distance = 0
(triangles). This leaks wide point/line clip-discard state into later
triangle draws and can clip away large parts of geometry (as observed in
Sauerbraten). Only apply the watermark when distance > 0 and reset it to
zero otherwise so triangle draws disable clip-discard as intended.

Fixes: 0d4aa5f55f ("r300: pop-free clipping")
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/14959
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/40223>
This commit is contained in:
Pavel Ondračka 2026-03-02 20:29:14 +01:00 committed by Marge Bot
parent 8f10e2886c
commit ce33f82f83

View file

@ -147,7 +147,8 @@ void r300_set_clip_discard_distance(struct r300_context *r300, float distance)
r300->min_clip_discard_distance_watermark = MIN2(distance, 6.0f);
}
float new_distance = MAX2(distance, r300->min_clip_discard_distance_watermark);
float new_distance = distance > 0.0f ?
MAX2(distance, r300->min_clip_discard_distance_watermark) : 0.0f;
if (r300->current_clip_discard_distance != new_distance) {
r300->current_clip_discard_distance = new_distance;