diff options
author | Michel Dänzer <michel.daenzer@amd.com> | 2012-05-03 15:07:30 +0200 |
---|---|---|
committer | Michel Dänzer <michel@daenzer.net> | 2012-05-03 15:10:37 +0200 |
commit | 6bda7ceda645e838723883d133d614def1511d16 (patch) | |
tree | 4ec775c34e5e3cb6f27b9c12a10ba707175c61d9 /src/radeon_exa_shared.c | |
parent | b33cf9cf9dce5add8aaccab10ba5aaa64247c8ce (diff) |
EXA: Attempt to fix solid picture acceleration with UMS.
Only compile tested, but should fix
https://bugs.freedesktop.org/show_bug.cgi?id=49182 .
Signed-off-by: Michel Dänzer <michel.daenzer@amd.com>
Diffstat (limited to 'src/radeon_exa_shared.c')
-rw-r--r-- | src/radeon_exa_shared.c | 27 |
1 files changed, 22 insertions, 5 deletions
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; } |