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 /src/mesa/drivers/dri/savage | |
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.
Diffstat (limited to 'src/mesa/drivers/dri/savage')
-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)); |