diff --git a/src/mesa/drivers/dri/i915/intel_blit.c b/src/mesa/drivers/dri/i915/intel_blit.c index 48f9bf7c820..7d4f8d69f5c 100644 --- a/src/mesa/drivers/dri/i915/intel_blit.c +++ b/src/mesa/drivers/dri/i915/intel_blit.c @@ -43,10 +43,9 @@ #include "intel_bufmgr.h" - - -/* - * Copy the back buffer to the front buffer. +/** + * Copy the back color buffer to the front color buffer. + * Used for SwapBuffers(). */ void intelCopyBuffer( const __DRIdrawablePrivate *dPriv ) { @@ -67,19 +66,33 @@ void intelCopyBuffer( const __DRIdrawablePrivate *dPriv ) */ LOCK_HARDWARE( intel ); - /* XXX FBO: change this to if intel->numClipRects */ if (intel->driDrawable && intel->driDrawable->numClipRects) { - intelScreenPrivate *intelScreen = intel->intelScreen; - __DRIdrawablePrivate *dPriv = intel->driDrawable; - int nbox = dPriv->numClipRects; - drm_clip_rect_t *pbox = dPriv->pClipRects; - int pitch = intelScreen->front.pitch; /* XXX FBO change */ - int cpp = intelScreen->cpp; /* XXX FBO change */ + const intelScreenPrivate *intelScreen = intel->intelScreen; + /* XXX why are we declaring a new dPriv (already passed as param!) */ + const __DRIdrawablePrivate *dPriv = intel->driDrawable; + const struct gl_framebuffer *fb + = (const struct gl_framebuffer *) dPriv->driverPrivate; + const struct intel_renderbuffer *irbFront + = intel_renderbuffer(fb->Attachment[BUFFER_FRONT_LEFT].Renderbuffer); + const struct intel_renderbuffer *irbBack + = intel_renderbuffer(fb->Attachment[BUFFER_BACK_LEFT].Renderbuffer); + const int nbox = dPriv->numClipRects; + const drm_clip_rect_t *pbox = dPriv->pClipRects; + const int pitch = irbFront->region->pitch; + const int cpp= irbFront->region->cpp; int BR13, CMD; int i; + ASSERT(fb); + ASSERT(fb->Name == 0); /* Not a user-created FBO */ + ASSERT(irbFront); + ASSERT(irbBack); + ASSERT(irbFront->region); + ASSERT(irbBack->region); + ASSERT(irbFront->region->pitch == irbBack->region->pitch); + ASSERT(irbFront->region->cpp == irbBack->region->cpp); if (cpp == 2) { BR13 = (pitch * cpp) | (0xCC << 16) | (1<<24); @@ -106,17 +119,16 @@ void intelCopyBuffer( const __DRIdrawablePrivate *dPriv ) OUT_BATCH( (pbox->y2 << 16) | pbox->x2 ); if (intel->sarea->pf_current_page == 0) - OUT_RELOC( intel->front_region->buffer, DRM_MM_TT|DRM_MM_WRITE, 0 ); + OUT_RELOC( irbFront->region->buffer, DRM_MM_TT|DRM_MM_WRITE, 0 ); else - OUT_RELOC( intel->back_region->buffer, DRM_MM_TT|DRM_MM_WRITE, 0 ); - + OUT_RELOC( irbBack->region->buffer, DRM_MM_TT|DRM_MM_WRITE, 0 ); OUT_BATCH( (pbox->y1 << 16) | pbox->x1 ); OUT_BATCH( BR13 & 0xffff ); if (intel->sarea->pf_current_page == 0) - OUT_RELOC( intel->back_region->buffer, DRM_MM_TT|DRM_MM_READ, 0 ); + OUT_RELOC( irbBack->region->buffer, DRM_MM_TT|DRM_MM_READ, 0 ); else - OUT_RELOC( intel->front_region->buffer, DRM_MM_TT|DRM_MM_READ, 0 ); + OUT_RELOC( irbFront->region->buffer, DRM_MM_TT|DRM_MM_READ, 0 ); ADVANCE_BATCH(); }