mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 20:28:04 +02:00
st/mesa: fix int->uint conversion for negative scissor bound values
Based on a patch by Xavier Chantry <chantry.xavier@gmail.com>: If x+width or y+height is negative, then maxx or maxy will get a bogus value when converting that to unsigned. Fix this by setting 0 as minimal value. This was also triggered by teeworlds, but only with some combination of resolution and map section. For example upper part of dm2 at 1280x1024.
This commit is contained in:
parent
e88d6fe299
commit
47d30b0c2c
1 changed files with 9 additions and 4 deletions
|
|
@ -31,6 +31,7 @@
|
|||
*/
|
||||
|
||||
|
||||
#include "main/macros.h"
|
||||
#include "st_context.h"
|
||||
#include "pipe/p_context.h"
|
||||
#include "st_atom.h"
|
||||
|
|
@ -52,15 +53,19 @@ update_scissor( struct st_context *st )
|
|||
scissor.maxy = fb->Height;
|
||||
|
||||
if (st->ctx->Scissor.Enabled) {
|
||||
/* need to be careful here with xmax or ymax < 0 */
|
||||
GLint xmax = MAX2(0, st->ctx->Scissor.X + st->ctx->Scissor.Width);
|
||||
GLint ymax = MAX2(0, st->ctx->Scissor.Y + st->ctx->Scissor.Height);
|
||||
|
||||
if (st->ctx->Scissor.X > (GLint)scissor.minx)
|
||||
scissor.minx = st->ctx->Scissor.X;
|
||||
if (st->ctx->Scissor.Y > (GLint)scissor.miny)
|
||||
scissor.miny = st->ctx->Scissor.Y;
|
||||
|
||||
if (st->ctx->Scissor.X + st->ctx->Scissor.Width < (GLint)scissor.maxx)
|
||||
scissor.maxx = st->ctx->Scissor.X + st->ctx->Scissor.Width;
|
||||
if (st->ctx->Scissor.Y + st->ctx->Scissor.Height < (GLint)scissor.maxy)
|
||||
scissor.maxy = st->ctx->Scissor.Y + st->ctx->Scissor.Height;
|
||||
if (xmax < (GLint) scissor.maxx)
|
||||
scissor.maxx = xmax;
|
||||
if (ymax < (GLint) scissor.maxy)
|
||||
scissor.maxy = ymax;
|
||||
|
||||
/* check for null space */
|
||||
if (scissor.minx >= scissor.maxx || scissor.miny >= scissor.maxy)
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue