xf86-video-intel: src/i830_exa.c
Zhenyu Wang
zhen at kemper.freedesktop.org
Tue Dec 30 23:03:45 PST 2008
src/i830_exa.c | 19 +++++++++++++------
1 file changed, 13 insertions(+), 6 deletions(-)
New commits:
commit 1f61e97904dfe5f8c08bb9f284cfdfe878f7e541
Author: Zhenyu Wang <zhenyu.z.wang at intel.com>
Date: Wed Dec 31 22:56:57 2008 +0800
UXA: Fallback to dri_bo_map() if pin failed
This fixes VT switch issue with UXA after Eric's
aae4008096399a0e84abc7c016b35092caf9db25 on 2D side.
diff --git a/src/i830_exa.c b/src/i830_exa.c
index 636aa0a..aeffedd 100644
--- a/src/i830_exa.c
+++ b/src/i830_exa.c
@@ -785,11 +785,15 @@ i830_uxa_prepare_access (PixmapPtr pixmap, uxa_access_t access)
i830->need_sync = FALSE;
}
- if (drm_intel_bo_pin(bo, 4096) != 0)
- return FALSE;
-
- drm_intel_gem_bo_start_gtt_access(bo, access == UXA_ACCESS_RW);
- pixmap->devPrivate.ptr = pI830->FbBase + bo->offset;
+ if (drm_intel_bo_pin(bo, 4096) != 0) {
+ /* happen in vt switched */
+ if (dri_bo_map(bo, access == UXA_ACCESS_RW) != 0)
+ return FALSE;
+ pixmap->devPrivate.ptr = bo->virtual;
+ } else {
+ drm_intel_gem_bo_start_gtt_access(bo, access == UXA_ACCESS_RW);
+ pixmap->devPrivate.ptr = pI830->FbBase + bo->offset;
+ }
}
return TRUE;
}
@@ -804,7 +808,10 @@ i830_uxa_finish_access (PixmapPtr pixmap)
ScrnInfoPtr scrn = xf86Screens[screen->myNum];
I830Ptr i830 = I830PTR(scrn);
- drm_intel_bo_unpin(bo);
+ if (bo->virtual)
+ dri_bo_unmap(bo);
+ else
+ drm_intel_bo_unpin(bo);
pixmap->devPrivate.ptr = NULL;
if (bo == i830->front_buffer->bo)
More information about the xorg-commit
mailing list