mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-02-16 08:40:29 +01:00
radeon: fix scissor calcs.
For non-FBOs we need to invert, for FBOs the scissors are non-inverted. no matter what we need to clamp them to the buffer sizes.
This commit is contained in:
parent
09c73c7437
commit
82ff3190de
1 changed files with 20 additions and 15 deletions
|
|
@ -231,26 +231,31 @@ void radeonSetCliprects(radeonContextPtr radeon)
|
|||
void radeonUpdateScissor( GLcontext *ctx )
|
||||
{
|
||||
radeonContextPtr rmesa = RADEON_CONTEXT(ctx);
|
||||
GLint x = ctx->Scissor.X, y = ctx->Scissor.Y;
|
||||
GLsizei w = ctx->Scissor.Width, h = ctx->Scissor.Height;
|
||||
int x1, y1, x2, y2;
|
||||
|
||||
if (!ctx->DrawBuffer)
|
||||
return;
|
||||
|
||||
if ( !ctx->DrawBuffer->Name ) {
|
||||
__DRIdrawablePrivate *dPriv = radeon_get_drawable(rmesa);
|
||||
|
||||
int x = ctx->Scissor.X;
|
||||
int y = dPriv->h - ctx->Scissor.Y - ctx->Scissor.Height;
|
||||
int w = ctx->Scissor.X + ctx->Scissor.Width - 1;
|
||||
int h = dPriv->h - ctx->Scissor.Y - 1;
|
||||
|
||||
rmesa->state.scissor.rect.x1 = x + dPriv->x;
|
||||
rmesa->state.scissor.rect.y1 = y + dPriv->y;
|
||||
rmesa->state.scissor.rect.x2 = w + dPriv->x + 1;
|
||||
rmesa->state.scissor.rect.y2 = h + dPriv->y + 1;
|
||||
x1 = x;
|
||||
y1 = ctx->DrawBuffer->Height - (y + h);
|
||||
x2 = x + w - 1;
|
||||
y2 = y1 + h - 1;
|
||||
} else {
|
||||
rmesa->state.scissor.rect.x1 = ctx->Scissor.X;
|
||||
rmesa->state.scissor.rect.y1 = ctx->Scissor.Y;
|
||||
rmesa->state.scissor.rect.x2 = ctx->Scissor.X + ctx->Scissor.Width;
|
||||
rmesa->state.scissor.rect.y2 = ctx->Scissor.Y + ctx->Scissor.Height;
|
||||
x1 = x;
|
||||
y1 = y;
|
||||
x2 = x + w - 1;
|
||||
y2 = y + h - 1;
|
||||
|
||||
}
|
||||
|
||||
rmesa->state.scissor.rect.x1 = CLAMP(x1, 0, ctx->DrawBuffer->Width - 1);
|
||||
rmesa->state.scissor.rect.y1 = CLAMP(y1, 0, ctx->DrawBuffer->Height - 1);
|
||||
rmesa->state.scissor.rect.x2 = CLAMP(x2, 0, ctx->DrawBuffer->Width - 1);
|
||||
rmesa->state.scissor.rect.y2 = CLAMP(y2, 0, ctx->DrawBuffer->Height - 1);
|
||||
|
||||
radeonRecalcScissorRects( rmesa );
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue