diff options
author | Brian Paul <brian.paul@tungstengraphics.com> | 2005-09-01 20:10:17 +0000 |
---|---|---|
committer | Brian Paul <brian.paul@tungstengraphics.com> | 2005-09-01 20:10:17 +0000 |
commit | da84f0b642a65614c2618121869d5cd45ad986f5 (patch) | |
tree | 3aa7d5f103bd8446e2b2fcca0e661e23d47d7829 /src/mesa/drivers/dri/r200 | |
parent | 98e92d261bbf11a35a1a26d1c1bdc3cfb304b2ae (diff) |
fix page flipping breakage
Diffstat (limited to 'src/mesa/drivers/dri/r200')
-rw-r--r-- | src/mesa/drivers/dri/r200/r200_ioctl.c | 9 | ||||
-rw-r--r-- | src/mesa/drivers/dri/r200/r200_lock.c | 59 |
2 files changed, 12 insertions, 56 deletions
diff --git a/src/mesa/drivers/dri/r200/r200_ioctl.c b/src/mesa/drivers/dri/r200/r200_ioctl.c index bf2d091759..e45a59fe3a 100644 --- a/src/mesa/drivers/dri/r200/r200_ioctl.c +++ b/src/mesa/drivers/dri/r200/r200_ioctl.c @@ -49,9 +49,9 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. #include "r200_sanity.h" #include "radeon_reg.h" +#include "drirenderbuffer.h" #include "vblank.h" - #define R200_TIMEOUT 512 #define R200_IDLE_RETRY 16 @@ -573,6 +573,13 @@ void r200PageFlip( const __DRIdrawablePrivate *dPriv ) rmesa->hw.ctx.cmd[CTX_RB3D_COLORPITCH] |= R200_COLOR_TILE_ENABLE; } #else + /* Get ready for drawing next frame. Update the renderbuffers' + * flippedOffset/Pitch fields so we draw into the right place. + */ + driFlipRenderbuffers(rmesa->glCtx->WinSysDrawBuffer, + rmesa->sarea->pfCurrentPage); + + r200UpdateDrawBuffer(rmesa->glCtx); #endif } diff --git a/src/mesa/drivers/dri/r200/r200_lock.c b/src/mesa/drivers/dri/r200/r200_lock.c index 2edf5b6637..1279cd70f9 100644 --- a/src/mesa/drivers/dri/r200/r200_lock.c +++ b/src/mesa/drivers/dri/r200/r200_lock.c @@ -32,15 +32,16 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * Authors: * Keith Whitwell <keith@tungstengraphics.com> */ -#include <string.h> #include "r200_context.h" #include "r200_lock.h" #include "r200_tex.h" #include "r200_state.h" #include "r200_ioctl.h" + #include "drirenderbuffer.h" + #if DEBUG_LOCKING char *prevLockFile = NULL; int prevLockLine = 0; @@ -51,62 +52,10 @@ int prevLockLine = 0; static void r200UpdatePageFlipping( r200ContextPtr rmesa ) { -#if 000 - int use_back; rmesa->doPageFlip = rmesa->sarea->pfState; - - use_back = (rmesa->glCtx->DrawBuffer->_ColorDrawBufferMask[0] == BUFFER_BIT_BACK_LEFT); - use_back ^= (rmesa->sarea->pfCurrentPage == 1); - - if (use_back) { - rmesa->state.color.drawOffset = rmesa->r200Screen->backOffset; - rmesa->state.color.drawPitch = rmesa->r200Screen->backPitch; - } else { - rmesa->state.color.drawOffset = rmesa->r200Screen->frontOffset; - rmesa->state.color.drawPitch = rmesa->r200Screen->frontPitch; + if (!rmesa->doPageFlip) { + driFlipRenderbuffers(rmesa->glCtx->WinSysDrawBuffer, GL_FALSE); } - - R200_STATECHANGE( rmesa, ctx ); - rmesa->hw.ctx.cmd[CTX_RB3D_COLOROFFSET] = rmesa->state.color.drawOffset - + rmesa->r200Screen->fbLocation; - rmesa->hw.ctx.cmd[CTX_RB3D_COLORPITCH] = rmesa->state.color.drawPitch; -#else - if (rmesa->doPageFlip != rmesa->sarea->pfState - || rmesa->sarea->pfState) { - /* If page flipping is on, or we're turning it on/off now we need - * to update the flipped buffer info. - */ - struct gl_framebuffer *fb = rmesa->glCtx->WinSysDrawBuffer; - driRenderbuffer *front_drb - = (driRenderbuffer *) fb->Attachment[BUFFER_FRONT_LEFT].Renderbuffer; - driRenderbuffer *back_drb - = (driRenderbuffer *) fb->Attachment[BUFFER_BACK_LEFT].Renderbuffer; - - if (rmesa->sarea->pfState && rmesa->sarea->pfCurrentPage == 1) { - /* flipped buffers */ - front_drb->flippedOffset = back_drb->offset; - front_drb->flippedPitch = back_drb->pitch; - back_drb->flippedOffset = front_drb->offset; - back_drb->flippedPitch = front_drb->pitch; - } - else { - /* unflipped buffers */ - front_drb->flippedOffset = front_drb->offset; - front_drb->flippedPitch = front_drb->pitch; - if (back_drb) { - /* back buffer is non-existant when single buffered */ - back_drb->flippedOffset = back_drb->offset; - back_drb->flippedPitch = back_drb->pitch; - } - } - - /* update local state */ - rmesa->doPageFlip = rmesa->sarea->pfState; - - /* set hw.ctx.cmd state here */ - r200UpdateDrawBuffer(rmesa->glCtx); - } -#endif } |