xf86-video-intel: src/intel_uxa.c
Chris Wilson
ickle at kemper.freedesktop.org
Sat Sep 4 04:38:08 PDT 2010
src/intel_uxa.c | 35 ++++++++++++++---------------------
1 file changed, 14 insertions(+), 21 deletions(-)
New commits:
commit 501e78b0095b00a635dc1dc182fc132f14f08f22
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Sat Sep 4 12:37:39 2010 +0100
Force use of GTT and fence registers for mapping tiled objects
If the buffer object is tiled, we need to use the fence registers to
perform the appropriate untiling for CPU access. Ensure that we always
take this path for tiled objects, regardless of their size.
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
diff --git a/src/intel_uxa.c b/src/intel_uxa.c
index 3f5383f..1681b70 100644
--- a/src/intel_uxa.c
+++ b/src/intel_uxa.c
@@ -662,24 +662,16 @@ static Bool intel_uxa_prepare_access(PixmapPtr pixmap, uxa_access_t access)
(access == UXA_ACCESS_RW || priv->batch_write))
intel_batch_submit(scrn, FALSE);
- if (bo->size > intel->max_gtt_map_size) {
- ret = dri_bo_map(bo, access == UXA_ACCESS_RW);
- if (ret != 0) {
- xf86DrvMsg(scrn->scrnIndex, X_WARNING,
- "%s: bo map failed: %s\n",
- __FUNCTION__,
- strerror(-ret));
- return FALSE;
- }
- } else {
+ if (priv->tiling || bo->size <= intel->max_gtt_map_size)
ret = drm_intel_gem_bo_map_gtt(bo);
- if (ret != 0) {
- xf86DrvMsg(scrn->scrnIndex, X_WARNING,
- "%s: gtt bo map failed: %s\n",
- __FUNCTION__,
- strerror(-ret));
- return FALSE;
- }
+ else
+ ret = dri_bo_map(bo, access == UXA_ACCESS_RW);
+ if (ret) {
+ xf86DrvMsg(scrn->scrnIndex, X_WARNING,
+ "%s: bo map failed: %s\n",
+ __FUNCTION__,
+ strerror(-ret));
+ return FALSE;
}
pixmap->devPrivate.ptr = bo->virtual;
@@ -690,18 +682,19 @@ static Bool intel_uxa_prepare_access(PixmapPtr pixmap, uxa_access_t access)
static void intel_uxa_finish_access(PixmapPtr pixmap)
{
- dri_bo *bo = intel_get_pixmap_bo(pixmap);
ScreenPtr screen = pixmap->drawable.pScreen;
ScrnInfoPtr scrn = xf86Screens[screen->myNum];
intel_screen_private *intel = intel_get_screen_private(scrn);
+ struct intel_pixmap *priv = intel_get_pixmap_private(pixmap);
+ dri_bo *bo = priv->bo;
if (bo == intel->front_buffer)
intel->need_sync = TRUE;
- if (bo->size > intel->max_gtt_map_size)
- dri_bo_unmap(bo);
- else
+ if (priv->tiling || bo->size <= intel->max_gtt_map_size)
drm_intel_gem_bo_unmap_gtt(bo);
+ else
+ dri_bo_unmap(bo);
pixmap->devPrivate.ptr = NULL;
}
More information about the xorg-commit
mailing list