mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-30 09:20:23 +01:00
i965: fixed clamping in set_scissor_bits when the y is flipped
Calculating the scissor rectangle fields with the y flipped (0 on top) can generate negative values that will cause assertion failure later on as the scissor fields are all unsigned. We must clamp the bbox values again to make sure they don't exceed the fb_height. Also fixed a calculation error. Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=108999 https://bugs.freedesktop.org/show_bug.cgi?id=109594 v2: - I initially clamped the values inside the if (Y is flipped) case and I made a mistake in the calculation: the clamp of the bbox[2] should be a check if (bbox[2] >= fbheight) bbox[2] = fbheight - 1 instead and I shouldn't have changed the ScissorRectangleYMax calculation. As the fixed code is equivalent with using CLAMP instead of MAX2 at the top of the function when bbox[2] and bbox[3] are calculated, and the 2nd is more clear, I replaced it. (Nanley Chery) v3: - Reversed the CLAMP change in bbox[3] as the API guarantees that the viewport height is positive. (Nanley Chery) v4: - Added nomination for the mesa-stable branch and the link to the second bugzilla bug (Nanley Chery) CC: <mesa-stable@lists.freedesktop.org> Tested-by: Paul Chelombitko <qamonstergl@gmail.com> Reviewed-by: Nanley Chery <nanley.g.chery@intel.com>
This commit is contained in:
parent
0bf667984b
commit
fd37a19ac4
1 changed files with 1 additions and 1 deletions
|
|
@ -2446,7 +2446,7 @@ set_scissor_bits(const struct gl_context *ctx, int i,
|
|||
|
||||
bbox[0] = MAX2(ctx->ViewportArray[i].X, 0);
|
||||
bbox[1] = MIN2(bbox[0] + ctx->ViewportArray[i].Width, fb_width);
|
||||
bbox[2] = MAX2(ctx->ViewportArray[i].Y, 0);
|
||||
bbox[2] = CLAMP(ctx->ViewportArray[i].Y, 0, fb_height);
|
||||
bbox[3] = MIN2(bbox[2] + ctx->ViewportArray[i].Height, fb_height);
|
||||
_mesa_intersect_scissor_bounding_box(ctx, i, bbox);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue