R300: set the number of GB pipes on all r3xx-r5xx chips
[mesa.git] / src / mesa / drivers / dri / radeon / radeon_lock.c
index 64bb3ca103fe7d964338710d6caff9a5f7f113c3..9a7e76b245ec86832b0b4af3267c715bf7222cb5 100644 (file)
@@ -41,12 +41,11 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
 #include "main/glheader.h"
 #include "main/mtypes.h"
-#include "radeon_context.h"
+#include "main/colormac.h"
+#include "dri_util.h"
+#include "radeon_screen.h"
+#include "radeon_common.h"
 #include "radeon_lock.h"
-#include "radeon_tex.h"
-#include "radeon_state.h"
-#include "radeon_ioctl.h"
-
 #include "drirenderbuffer.h"
 
 #if DEBUG_LOCKING
@@ -56,13 +55,28 @@ int prevLockLine = 0;
 
 /* Turn on/off page flipping according to the flags in the sarea:
  */
-static void radeonUpdatePageFlipping(radeonContextPtr rmesa)
+void radeonUpdatePageFlipping(radeonContextPtr rmesa)
 {
+       int use_back;
+       __DRIdrawablePrivate *const drawable = rmesa->dri.drawable;
+       GLframebuffer *fb = drawable->driverPrivate;
+
        rmesa->doPageFlip = rmesa->sarea->pfState;
        if (rmesa->glCtx->WinSysDrawBuffer) {
-               driFlipRenderbuffers(rmesa->glCtx->WinSysDrawBuffer,
-                                    rmesa->sarea->pfCurrentPage);
+               rmesa->vtbl.update_draw_buffer(rmesa->glCtx);
        }
+
+       use_back = rmesa->glCtx->DrawBuffer ?
+           (rmesa->glCtx->DrawBuffer->_ColorDrawBufferIndexes[0] ==
+            BUFFER_BACK_LEFT) : 1;
+       use_back ^= (rmesa->sarea->pfCurrentPage == 1);
+
+       if (use_back)
+               rmesa->state.color.rrb = (void *)fb->Attachment[BUFFER_BACK_LEFT].Renderbuffer;
+       else
+               rmesa->state.color.rrb = (void *)fb->Attachment[BUFFER_FRONT_LEFT].Renderbuffer;
+
+       rmesa->state.depth.rrb = (void *)fb->Attachment[BUFFER_DEPTH].Renderbuffer;
 }
 
 /* Update the hardware state.  This is called if another context has
@@ -80,6 +94,8 @@ void radeonGetLock(radeonContextPtr rmesa, GLuint flags)
        __DRIscreenPrivate *sPriv = rmesa->dri.screen;
        drm_radeon_sarea_t *sarea = rmesa->sarea;
 
+       assert(drawable != NULL);
+
        drmGetLock(rmesa->dri.fd, rmesa->dri.hwContext, flags);
 
        /* The window might have moved, so we might need to get new clip
@@ -98,27 +114,11 @@ void radeonGetLock(radeonContextPtr rmesa, GLuint flags)
        if (rmesa->lastStamp != drawable->lastStamp) {
                radeonUpdatePageFlipping(rmesa);
                radeonSetCliprects(rmesa);
-               radeonUpdateViewportOffset(rmesa->glCtx);
+               rmesa->vtbl.update_viewport_offset(rmesa->glCtx);
                driUpdateFramebufferSize(rmesa->glCtx, drawable);
        }
 
-       RADEON_STATECHANGE(rmesa, ctx);
-       if (rmesa->sarea->tiling_enabled) {
-               rmesa->hw.ctx.cmd[CTX_RB3D_COLORPITCH] |=
-                   RADEON_COLOR_TILE_ENABLE;
-       } else {
-               rmesa->hw.ctx.cmd[CTX_RB3D_COLORPITCH] &=
-                   ~RADEON_COLOR_TILE_ENABLE;
-       }
-
-       if (sarea->ctx_owner != rmesa->dri.hwContext) {
-               int i;
-               sarea->ctx_owner = rmesa->dri.hwContext;
-
-               for (i = 0; i < rmesa->nr_heaps; i++) {
-                       DRI_AGE_TEXTURES(rmesa->texture_heaps[i]);
-               }
-       }
+       rmesa->vtbl.get_lock(rmesa);
 
        rmesa->lost_context = GL_TRUE;
 }