From 6bda7ceda645e838723883d133d614def1511d16 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michel=20D=C3=A4nzer?= Date: Thu, 3 May 2012 15:07:30 +0200 Subject: EXA: Attempt to fix solid picture acceleration with UMS. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Only compile tested, but should fix https://bugs.freedesktop.org/show_bug.cgi?id=49182 . Signed-off-by: Michel Dänzer --- src/radeon_exa_shared.c | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/radeon_exa_shared.c b/src/radeon_exa_shared.c index 28dc3358..31e28703 100644 --- a/src/radeon_exa_shared.c +++ b/src/radeon_exa_shared.c @@ -128,19 +128,36 @@ Bool RADEONCheckBPP(int bpp) PixmapPtr RADEONSolidPixmap(ScreenPtr pScreen, uint32_t solid) { + ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum]; + RADEONInfoPtr info = RADEONPTR(pScrn); PixmapPtr pPix = pScreen->CreatePixmap(pScreen, 1, 1, 32, 0); - struct radeon_bo *bo; exaMoveInPixmap(pPix); - bo = radeon_get_pixmap_bo(pPix); - if (radeon_bo_map(bo, 1)) { +#if defined(XF86DRM_MODE) + if (info->cs) { + struct radeon_bo *bo; + + bo = radeon_get_pixmap_bo(pPix); + + if (radeon_bo_map(bo, 1)) { + pScreen->DestroyPixmap(pPix); + return NULL; + } + + memcpy(bo->ptr, &solid, 4); + radeon_bo_unmap(bo); + + return pPix; + } +#endif + + if (!exaDrawableIsOffscreen(&pPix->drawable)) { pScreen->DestroyPixmap(pPix); return NULL; } - memcpy(bo->ptr, &solid, 4); - radeon_bo_unmap(bo); + memcpy(info->FB + exaGetPixmapOffset(pPix), &solid, 4); return pPix; } -- cgit v1.2.3