diff options
author | Felix Kuehling <[email protected]> | 2005-01-23 01:46:14 +0000 |
---|---|---|
committer | Felix Kuehling <[email protected]> | 2005-01-23 01:46:14 +0000 |
commit | 8736c228cb20e5e62cff01ae86c300633d607bad (patch) | |
tree | 1b1f2deeb7a08422f8caf57284773461985f6361 | |
parent | 3b50f004333a922a259a4f733395c27002965ded (diff) |
Fixed initialization of draw destination to front buffer on single
buffered visuals. Also don't change span draw/read buffers in
savageDDDrawBuffer. Now glean's polygon offset test works (and PASSes
with fixed point depth buffer) with single buffered visuals without
winding up in an infinite loop.
-rw-r--r-- | src/mesa/drivers/dri/savage/savagestate.c | 68 |
1 files changed, 19 insertions, 49 deletions
diff --git a/src/mesa/drivers/dri/savage/savagestate.c b/src/mesa/drivers/dri/savage/savagestate.c index 2b512c11410..b86586c8b80 100644 --- a/src/mesa/drivers/dri/savage/savagestate.c +++ b/src/mesa/drivers/dri/savage/savagestate.c @@ -660,18 +660,14 @@ static void savageDDDrawBuffer(GLcontext *ctx, GLenum mode ) switch ( ctx->Color._DrawDestMask[0] ) { case DD_FRONT_LEFT_BIT: imesa->IsDouble = GL_FALSE; - - imesa->drawMap = (char *)imesa->apertureBase[TARGET_FRONT]; - imesa->readMap = (char *)imesa->apertureBase[TARGET_FRONT]; imesa->regs.s4.destCtrl.ni.offset = imesa->savageScreen->frontOffset>>11; + imesa->NotFirstFrame = GL_FALSE; savageXMesaSetFrontClipRects( imesa ); FALLBACK( ctx, SAVAGE_FALLBACK_DRAW_BUFFER, GL_FALSE ); break; case DD_BACK_LEFT_BIT: imesa->IsDouble = GL_TRUE; - imesa->drawMap = (char *)imesa->apertureBase[TARGET_BACK]; - imesa->readMap = (char *)imesa->apertureBase[TARGET_BACK]; imesa->regs.s4.destCtrl.ni.offset = imesa->savageScreen->backOffset>>11; imesa->NotFirstFrame = GL_FALSE; savageXMesaSetBackClipRects( imesa ); @@ -1779,66 +1775,40 @@ void savageDDInitState( savageContextPtr imesa ) { /*fprintf(stderr,"DBflag:%d\n",imesa->glCtx->Visual->DBflag);*/ /* zbufoffset and destctrl have the same position and layout on * savage4 and savage3d. */ - imesa->regs.s4.destCtrl.ni.offset = imesa->savageScreen->backOffset>>11; - if(imesa->savageScreen->cpp == 2) - { + if (imesa->glCtx->Visual.doubleBufferMode) { + imesa->IsDouble = GL_TRUE; + imesa->toggle = TARGET_BACK; + imesa->regs.s4.destCtrl.ni.offset = + imesa->savageScreen->backOffset>>11; + } else { + imesa->IsDouble = GL_FALSE; + imesa->toggle = TARGET_FRONT; + imesa->regs.s4.destCtrl.ni.offset = + imesa->savageScreen->frontOffset>>11; + } + if(imesa->savageScreen->cpp == 2) { imesa->regs.s4.destCtrl.ni.dstPixFmt = 0; imesa->regs.s4.destCtrl.ni.dstWidthInTile = (imesa->savageScreen->width+63)>>6; - } - else - { + } else { imesa->regs.s4.destCtrl.ni.dstPixFmt = 1; imesa->regs.s4.destCtrl.ni.dstWidthInTile = (imesa->savageScreen->width+31)>>5; } - - imesa->IsDouble = GL_TRUE; - + imesa->drawMap = (char *)imesa->apertureBase[imesa->toggle]; + imesa->readMap = (char *)imesa->apertureBase[imesa->toggle]; imesa->NotFirstFrame = GL_FALSE; + imesa->regs.s4.zBufOffset.ni.offset=imesa->savageScreen->depthOffset>>11; - if(imesa->savageScreen->zpp == 2) - { + if(imesa->savageScreen->zpp == 2) { imesa->regs.s4.zBufOffset.ni.zBufWidthInTiles = (imesa->savageScreen->width+63)>>6; imesa->regs.s4.zBufOffset.ni.zDepthSelect = 0; - } - else - { + } else { imesa->regs.s4.zBufOffset.ni.zBufWidthInTiles = (imesa->savageScreen->width+31)>>5; imesa->regs.s4.zBufOffset.ni.zDepthSelect = 1; } - - if (imesa->glCtx->Color._DrawDestMask[0] == DD_BACK_LEFT_BIT) { - if(imesa->IsFullScreen) - { - imesa->toggle = TARGET_BACK; - - imesa->drawMap = (char *)imesa->apertureBase[imesa->toggle]; - imesa->readMap = (char *)imesa->apertureBase[imesa->toggle]; - } - else - { - imesa->drawMap = (char *)imesa->apertureBase[TARGET_BACK]; - imesa->readMap = (char *)imesa->apertureBase[TARGET_BACK]; - } - - } else { - - if(imesa->IsFullScreen) - { - imesa->toggle = TARGET_BACK; - - imesa->drawMap = (char *)imesa->apertureBase[imesa->toggle]; - imesa->readMap = (char *)imesa->apertureBase[imesa->toggle]; - } - else - { - imesa->drawMap = (char *)imesa->apertureBase[TARGET_BACK]; - imesa->readMap = (char *)imesa->apertureBase[TARGET_BACK]; - } - } memcpy (imesa->oldRegs.ui, imesa->regs.ui, SAVAGE_NR_REGS*sizeof(u_int32_t)); |