diff options
-rw-r--r-- | src/mesa/drivers/dri/unichrome/via_context.c | 5 | ||||
-rw-r--r-- | src/mesa/drivers/dri/unichrome/via_ioctl.c | 4 | ||||
-rw-r--r-- | src/mesa/drivers/dri/unichrome/via_state.c | 6 |
3 files changed, 11 insertions, 4 deletions
diff --git a/src/mesa/drivers/dri/unichrome/via_context.c b/src/mesa/drivers/dri/unichrome/via_context.c index e48df63d0b9..0c52374d603 100644 --- a/src/mesa/drivers/dri/unichrome/via_context.c +++ b/src/mesa/drivers/dri/unichrome/via_context.c @@ -676,6 +676,11 @@ viaMakeCurrent(__DRIcontextPrivate *driContextPriv, _mesa_update_state(vmesa->glCtx); viaValidateState(vmesa->glCtx); + ctx->Driver.Scissor(vmesa->glCtx, + vmesa->glCtx->Scissor.X, + vmesa->glCtx->Scissor.Y, + vmesa->glCtx->Scissor.Width, + vmesa->glCtx->Scissor.Height); } else { _mesa_make_current(0,0); diff --git a/src/mesa/drivers/dri/unichrome/via_ioctl.c b/src/mesa/drivers/dri/unichrome/via_ioctl.c index efb7cf6b6cf..c7b616f4057 100644 --- a/src/mesa/drivers/dri/unichrome/via_ioctl.c +++ b/src/mesa/drivers/dri/unichrome/via_ioctl.c @@ -665,10 +665,10 @@ void viaFlushDmaLocked(viaContextPtr vmesa, GLuint flags) b.y1 = pbox[i].y1 - vmesa->drawY; b.y2 = pbox[i].y2 - vmesa->drawY; - if (vmesa->glCtx->Scissor.Enabled && + if (vmesa->scissor && !intersect_rect(&b, &b, &vmesa->scissorRect)) continue; - + b.x1 += vmesa->drawXoff; b.x2 += vmesa->drawXoff; diff --git a/src/mesa/drivers/dri/unichrome/via_state.c b/src/mesa/drivers/dri/unichrome/via_state.c index 49782c78aa6..fffea017895 100644 --- a/src/mesa/drivers/dri/unichrome/via_state.c +++ b/src/mesa/drivers/dri/unichrome/via_state.c @@ -612,14 +612,15 @@ static void viaScissor(GLcontext *ctx, GLint x, GLint y, if (VIA_DEBUG) fprintf(stderr, "%s %d,%d %dx%d, drawH %d\n", __FUNCTION__, x,y,w,h, vmesa->driDrawable->h); - if (ctx->Scissor.Enabled) { + if (vmesa->scissor) { VIA_FLUSH_DMA(vmesa); /* don't pipeline cliprect changes */ } vmesa->scissorRect.x1 = x; - vmesa->scissorRect.y1 = vmesa->driDrawable->h - (y + h); + vmesa->scissorRect.y1 = vmesa->driDrawable->h - y - h; vmesa->scissorRect.x2 = x + w; vmesa->scissorRect.y2 = vmesa->driDrawable->h - y; + if (VIA_DEBUG) fprintf(stderr, "%s out\n", __FUNCTION__); } @@ -630,6 +631,7 @@ static void viaEnable(GLcontext *ctx, GLenum cap, GLboolean state) switch (cap) { case GL_SCISSOR_TEST: VIA_FLUSH_DMA(vmesa); + vmesa->scissor = state; break; default: break; |