diff --git a/src/i830_exa.c b/src/i830_exa.c index 8623159..4389dc0 100644 --- a/src/i830_exa.c +++ b/src/i830_exa.c @@ -35,6 +35,7 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. #include "xaarop.h" #include "i830.h" #include "i810_reg.h" +#include "drmmode_display.h" #include #ifdef I830DEBUG @@ -465,8 +466,6 @@ i830_transform_is_affine (PictTransformPtr t) return t->matrix[2][0] == 0 && t->matrix[2][1] == 0; } -#ifdef XF86DRM_MODE - static void * I830EXACreatePixmap(ScreenPtr screen, int size, int align) { @@ -503,6 +502,9 @@ I830EXADestroyPixmap(ScreenPtr pScreen, void *driverPriv) static Bool I830EXAPixmapIsOffscreen(PixmapPtr pPix) { + ScreenPtr screen = pPix->drawable.pScreen; + ScrnInfoPtr scrn = xf86Screens[screen->myNum]; + I830Ptr i830 = I830PTR(scrn); struct i830_exa_pixmap_priv *driver_priv = exaGetPixmapDriverPrivate(pPix); if (driver_priv && driver_priv->bo) @@ -535,7 +537,7 @@ static Bool I830EXAPrepareAccess(PixmapPtr pPix, int index) I830Sync(scrn); i830->need_sync = FALSE; } - if (dri_gem_bo_map_gtt(driver_priv->bo)) { + if (dri_gem_bo_map_gtt(driver_priv->bo, driver_priv->bo->align)) { xf86DrvMsg(scrn->scrnIndex, X_WARNING, "%s: bo map failed\n", __FUNCTION__); return FALSE; @@ -581,7 +583,7 @@ static Bool I830EXAModifyPixmapHeader(PixmapPtr pPix, int width, int height, if (!driver_priv) return FALSE; - +#ifdef XF86DRM_MODE if (pI830->use_drm_mode && drmmode_is_rotate_pixmap(pScrn, pPixData, &driver_priv->bo)) { /* this is a rotate pixmap */ @@ -590,7 +592,7 @@ static Bool I830EXAModifyPixmapHeader(PixmapPtr pPix, int width, int height, miModifyPixmapHeader(pPix, width, height, depth, bitsPerPixel, devKind, NULL); } - +#endif if (pPixData == pI830->FbBase + pScrn->fbOffset) { if (driver_priv->bo) dri_bo_unreference(driver_priv->bo); @@ -608,8 +610,6 @@ static Bool I830EXAModifyPixmapHeader(PixmapPtr pPix, int width, int height, return FALSE; } -#endif /* XF86DRM_MODE */ - Bool I830EXAInit(ScreenPtr pScreen) { @@ -636,38 +636,17 @@ I830EXAInit(ScreenPtr pScreen) "EXA compatibility mode. Output rotation rendering " "performance may suffer\n"); #endif - if (!pI830->use_drm_mode) { - pI830->EXADriverPtr->memoryBase = pI830->FbBase; - if (pI830->exa_offscreen) { - pI830->EXADriverPtr->offScreenBase = pI830->exa_offscreen->offset; - pI830->EXADriverPtr->memorySize = pI830->exa_offscreen->offset + - pI830->exa_offscreen->size; - } else { - pI830->EXADriverPtr->offScreenBase = pI830->FbMapSize; - pI830->EXADriverPtr->memorySize = pI830->FbMapSize; - } - pI830->EXADriverPtr->flags = EXA_OFFSCREEN_PIXMAPS; - } else { -#ifdef XF86DRM_MODE - pI830->EXADriverPtr->flags = EXA_OFFSCREEN_PIXMAPS | EXA_HANDLES_PIXMAPS; - pI830->EXADriverPtr->PrepareAccess = I830EXAPrepareAccess; - pI830->EXADriverPtr->FinishAccess = I830EXAFinishAccess; + pI830->EXADriverPtr->flags = EXA_OFFSCREEN_PIXMAPS | EXA_HANDLES_PIXMAPS; + pI830->EXADriverPtr->PrepareAccess = I830EXAPrepareAccess; + pI830->EXADriverPtr->FinishAccess = I830EXAFinishAccess; #if EXA_VERSION_MINOR >= 4 - pI830->EXADriverPtr->CreatePixmap = I830EXACreatePixmap; - pI830->EXADriverPtr->DestroyPixmap = I830EXADestroyPixmap; - pI830->EXADriverPtr->PixmapIsOffscreen = I830EXAPixmapIsOffscreen; - pI830->EXADriverPtr->ModifyPixmapHeader = I830EXAModifyPixmapHeader; + pI830->EXADriverPtr->CreatePixmap = I830EXACreatePixmap; + pI830->EXADriverPtr->DestroyPixmap = I830EXADestroyPixmap; + pI830->EXADriverPtr->PixmapIsOffscreen = I830EXAPixmapIsOffscreen; + pI830->EXADriverPtr->ModifyPixmapHeader = I830EXAModifyPixmapHeader; #endif -#endif /* XF86DRM_MODE */ - } - - DPRINTF(PFX, "EXA Mem: memoryBase 0x%x, end 0x%x, offscreen base 0x%x, " - "memorySize 0x%x\n", - pI830->EXADriverPtr->memoryBase, - pI830->EXADriverPtr->memoryBase + pI830->EXADriverPtr->memorySize, - pI830->EXADriverPtr->offScreenBase, - pI830->EXADriverPtr->memorySize); + /* Needed for EXA_HANDLES_PIXMAPS? */ pI830->EXADriverPtr->pixmapOffsetAlign = pI830->accel_pixmap_offset_alignment; pI830->EXADriverPtr->pixmapPitchAlign = pI830->accel_pixmap_pitch_alignment; pI830->EXADriverPtr->maxX = pI830->accel_max_x; @@ -705,10 +684,6 @@ I830EXAInit(ScreenPtr pScreen) pI830->EXADriverPtr->Composite = i965_composite; pI830->EXADriverPtr->DoneComposite = i830_done_composite; } -#if EXA_VERSION_MINOR >= 2 - if (!pI830->use_drm_mode) - pI830->EXADriverPtr->PixmapIsOffscreen = i830_exa_pixmap_is_offscreen; -#endif if(!exaDriverInit(pScreen, pI830->EXADriverPtr)) { xf86DrvMsg(pScrn->scrnIndex, X_INFO, @@ -742,13 +717,12 @@ i830_get_pixmap_bo(PixmapPtr pixmap) return dixLookupPrivate(&pixmap->devPrivates, &uxa_pixmap_index); } #endif -#ifdef XF86DRM_MODE + if (i830->accel == ACCEL_EXA) { struct i830_exa_pixmap_priv *driver_priv = exaGetPixmapDriverPrivate(pixmap); return driver_priv ? driver_priv->bo : NULL; } -#endif return NULL; } diff --git a/src/i830_memory.c b/src/i830_memory.c index ecfdf2a..8c70137 100644 --- a/src/i830_memory.c +++ b/src/i830_memory.c @@ -775,7 +775,7 @@ i830_allocate_memory_bo(ScrnInfoPtr pScrn, const char *name, mem->end = -1; mem->size = size; mem->allocated_size = size; - mem->alignment = align; + mem->alignment = mem->bo->align = align; if (flags & NEED_LIFETIME_FIXED) mem->lifetime_fixed_offset = TRUE;