static GLboolean multipass_cliprect( struct gl_context *ctx, GLuint pass ) { sisContextPtr smesa = SIS_CONTEXT( ctx ); if (pass >= smesa->driDrawable->numClipRects) { return GL_FALSE; } else { GLint x1, y1, x2, y2; x1 = smesa->driDrawable->pClipRects[pass].x1 - smesa->driDrawable->x; y1 = smesa->driDrawable->pClipRects[pass].y1 - smesa->driDrawable->y; x2 = smesa->driDrawable->pClipRects[pass].x2 - smesa->driDrawable->x; y2 = smesa->driDrawable->pClipRects[pass].y2 - smesa->driDrawable->y; if (ctx->Scissor.Enabled) { GLint scisy1 = Y_FLIP(ctx->Scissor.Y + ctx->Scissor.Height - 1); GLint scisy2 = Y_FLIP(ctx->Scissor.Y); if (ctx->Scissor.X > x1) x1 = ctx->Scissor.X; if (scisy1 > y1) y1 = scisy1; if (ctx->Scissor.X + ctx->Scissor.Width - 1 < x2) x2 = ctx->Scissor.X + ctx->Scissor.Width - 1; if (scisy2 < y2) y2 = scisy2; } MMIO(REG_3D_ClipTopBottom, y1 << 13 | y2); MMIO(REG_3D_ClipLeftRight, x1 << 13 | x2); /* Mark that we clobbered these registers */ smesa->GlobalFlag |= GFLAG_CLIPPING; return GL_TRUE; } }
void sis6326UpdateClipping(GLcontext *ctx) { sisContextPtr smesa = SIS_CONTEXT(ctx); __GLSiSHardware *prev = &smesa->prev; __GLSiSHardware *current = &smesa->current; GLint x1, y1, x2, y2; x1 = 0; y1 = 0; x2 = smesa->width - 1; y2 = smesa->height - 1; if (ctx->Scissor.Enabled) { if (ctx->Scissor.X > x1) x1 = ctx->Scissor.X; if (ctx->Scissor.Y > y1) y1 = ctx->Scissor.Y; if (ctx->Scissor.X + ctx->Scissor.Width - 1 < x2) x2 = ctx->Scissor.X + ctx->Scissor.Width - 1; if (ctx->Scissor.Y + ctx->Scissor.Height - 1 < y2) y2 = ctx->Scissor.Y + ctx->Scissor.Height - 1; } y1 = Y_FLIP(y1); y2 = Y_FLIP(y2); /*current->clipTopBottom = (y2 << 13) | y1; current->clipLeftRight = (x1 << 13) | x2;*/ /* XXX */ current->clipTopBottom = (0 << 13) | smesa->height; current->clipLeftRight = (0 << 13) | smesa->width; if ((current->clipTopBottom != prev->clipTopBottom) || (current->clipLeftRight != prev->clipLeftRight)) { prev->clipTopBottom = current->clipTopBottom; prev->clipLeftRight = current->clipLeftRight; smesa->GlobalFlag |= GFLAG_CLIPPING; } }