From fcbfeb5d28aea87c60f2d02daa213d0c0c2516e8 Mon Sep 17 00:00:00 2001 From: Brian Paul Date: Thu, 1 Sep 2005 04:03:44 +0000 Subject: Finish up some of the gl_renderbuffer work. Use driRenderbuffer's offset, pitch fields in the span routines. Remove the SetBuffer driver function. Consolidate the code for setting CTX_RB3D_COLOROFFSET and CTX_RB3D_COLORPITCH state in new radeonUpdateDrawBuffer() function. Old code is surrounded by #if 000 / #endif, temporarily. --- src/mesa/drivers/dri/r200/r200_lock.c | 39 +++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) (limited to 'src/mesa/drivers/dri/r200/r200_lock.c') diff --git a/src/mesa/drivers/dri/r200/r200_lock.c b/src/mesa/drivers/dri/r200/r200_lock.c index 9b82c18d1f..f0858f2c31 100644 --- a/src/mesa/drivers/dri/r200/r200_lock.c +++ b/src/mesa/drivers/dri/r200/r200_lock.c @@ -39,6 +39,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. #include "r200_tex.h" #include "r200_state.h" #include "r200_ioctl.h" +#include "drirenderbuffer.h" #if DEBUG_LOCKING char *prevLockFile = NULL; @@ -50,6 +51,7 @@ int prevLockLine = 0; static void r200UpdatePageFlipping( r200ContextPtr rmesa ) { +#if 000 int use_back; rmesa->doPageFlip = rmesa->sarea->pfState; @@ -68,6 +70,43 @@ r200UpdatePageFlipping( r200ContextPtr rmesa ) 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, re 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 } -- cgit v1.2.3