From a5963c9fd5e12e2238996bcf4bd79a367590d0269785c9ad3852bb9325467df5 Mon Sep 17 00:00:00 2001 From: Stefan Dirsch Date: Wed, 5 Sep 2012 14:56:45 +0000 Subject: [PATCH 1/2] Accepting request 132612 from home:klausi123:X11 Update to a the latest git snashot, don't know if it is working, but it compiles ;-) OBS-URL: https://build.opensuse.org/request/show/132612 OBS-URL: https://build.opensuse.org/package/show/X11:XOrg/xf86-video-ati?expand=0&rev=10 --- ...ix-solid-picture-acceleration-with-U.patch | 65 -- ...ize-to-the-GPU-before-writing-solid-.patch | 31 - ...ati-6.14.4-exa-solid-accel-evergreen.patch | 287 --------- ...ideo-ati-6.14.4-exa-solid-accel-r100.patch | 179 ------ ...ideo-ati-6.14.4-exa-solid-accel-r200.patch | 176 ------ ...ideo-ati-6.14.4-exa-solid-accel-r300.patch | 560 ------------------ xf86-video-ati-6.14.4.tar.bz2 | 3 - xf86-video-ati-6.14.6.2.tar.bz2 | 3 + xf86-video-ati.changes | 32 + xf86-video-ati.spec | 48 +- 10 files changed, 58 insertions(+), 1326 deletions(-) delete mode 100644 U_EXA-Attempt-to-fix-solid-picture-acceleration-with-U.patch delete mode 100644 U_EXA-UMS-Synchronize-to-the-GPU-before-writing-solid-.patch delete mode 100644 U_xf86-video-ati-6.14.4-exa-solid-accel-evergreen.patch delete mode 100644 U_xf86-video-ati-6.14.4-exa-solid-accel-r100.patch delete mode 100644 U_xf86-video-ati-6.14.4-exa-solid-accel-r200.patch delete mode 100644 U_xf86-video-ati-6.14.4-exa-solid-accel-r300.patch delete mode 100644 xf86-video-ati-6.14.4.tar.bz2 create mode 100644 xf86-video-ati-6.14.6.2.tar.bz2 diff --git a/U_EXA-Attempt-to-fix-solid-picture-acceleration-with-U.patch b/U_EXA-Attempt-to-fix-solid-picture-acceleration-with-U.patch deleted file mode 100644 index fabb6e1..0000000 --- a/U_EXA-Attempt-to-fix-solid-picture-acceleration-with-U.patch +++ /dev/null @@ -1,65 +0,0 @@ -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: [PATCH] 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 files changed, 22 insertions(+), 5 deletions(-) - -diff --git a/src/radeon_exa_shared.c b/src/radeon_exa_shared.c -index 28dc335..31e2870 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; - } --- -1.7.3.4 - diff --git a/U_EXA-UMS-Synchronize-to-the-GPU-before-writing-solid-.patch b/U_EXA-UMS-Synchronize-to-the-GPU-before-writing-solid-.patch deleted file mode 100644 index c60d805..0000000 --- a/U_EXA-UMS-Synchronize-to-the-GPU-before-writing-solid-.patch +++ /dev/null @@ -1,31 +0,0 @@ -From b0b7d8d26fd107df342b5c87b0a38e5bb08101a9 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Michel=20D=C3=A4nzer?= -Date: Wed, 9 May 2012 11:08:49 +0200 -Subject: [PATCH] EXA/UMS: Synchronize to the GPU before writing solid colour to scratch pixmap. -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -UMS doesn't do this automagically. It's a big hammer that will probably suck -for performance, but I don't have any better ideas right now. - -Signed-off-by: Michel Dänzer ---- - src/radeon_exa_shared.c | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -diff --git a/src/radeon_exa_shared.c b/src/radeon_exa_shared.c -index 31e2870..45222b5 100644 ---- a/src/radeon_exa_shared.c -+++ b/src/radeon_exa_shared.c -@@ -157,6 +157,7 @@ PixmapPtr RADEONSolidPixmap(ScreenPtr pScreen, uint32_t solid) - return NULL; - } - -+ info->accel_state->exa->WaitMarker(pScreen, info->accel_state->exaSyncMarker); - memcpy(info->FB + exaGetPixmapOffset(pPix), &solid, 4); - - return pPix; --- -1.7.3.4 - diff --git a/U_xf86-video-ati-6.14.4-exa-solid-accel-evergreen.patch b/U_xf86-video-ati-6.14.4-exa-solid-accel-evergreen.patch deleted file mode 100644 index d67e56e..0000000 --- a/U_xf86-video-ati-6.14.4-exa-solid-accel-evergreen.patch +++ /dev/null @@ -1,287 +0,0 @@ -From cac2d7ed54918579418fc762558497d3ec547fad Mon Sep 17 00:00:00 2001 -From: Alex Deucher -Date: Sat, 14 Apr 2012 12:53:39 +0000 -Subject: EXA: Support acceleration of solid pictures on Evergreen/NI. - -Signed-off-by: Alex Deucher -Reviewed-by: Michel Dänzer ---- -diff --git a/src/evergreen_exa.c b/src/evergreen_exa.c -index cee3ec2..61b47a4 100644 ---- a/src/evergreen_exa.c -+++ b/src/evergreen_exa.c -@@ -748,17 +748,8 @@ static Bool EVERGREENCheckCompositeTexture(PicturePtr pPict, - int op, - int unit) - { -- int w = pPict->pDrawable->width; -- int h = pPict->pDrawable->height; - unsigned int repeatType = pPict->repeat ? pPict->repeatType : RepeatNone; - unsigned int i; -- int max_tex_w, max_tex_h; -- -- max_tex_w = 16384; -- max_tex_h = 16384; -- -- if ((w > max_tex_w) || (h > max_tex_h)) -- RADEON_FALLBACK(("Picture w/h too large (%dx%d)\n", w, h)); - - for (i = 0; i < sizeof(EVERGREENTexFormats) / sizeof(EVERGREENTexFormats[0]); i++) { - if (EVERGREENTexFormats[i].fmt == pPict->format) -@@ -798,9 +789,16 @@ static void EVERGREENXFormSetup(PicturePtr pPict, PixmapPtr pPix, - ScrnInfoPtr pScrn = xf86Screens[pPix->drawable.pScreen->myNum]; - RADEONInfoPtr info = RADEONPTR(pScrn); - struct radeon_accel_state *accel_state = info->accel_state; -- int w = pPict->pDrawable->width; -- int h = pPict->pDrawable->height; - int const_offset = unit * 8; -+ int w, h; -+ -+ if (pPict->pDrawable) { -+ w = pPict->pDrawable->width; -+ h = pPict->pDrawable->height; -+ } else { -+ w = 1; -+ h = 1; -+ } - - if (pPict->transform != 0) { - accel_state->is_transform[unit] = TRUE; -@@ -837,9 +835,7 @@ static Bool EVERGREENTextureSetup(PicturePtr pPict, PixmapPtr pPix, - ScrnInfoPtr pScrn = xf86Screens[pPix->drawable.pScreen->myNum]; - RADEONInfoPtr info = RADEONPTR(pScrn); - struct radeon_accel_state *accel_state = info->accel_state; -- int w = pPict->pDrawable->width; -- int h = pPict->pDrawable->height; -- unsigned int repeatType = pPict->repeat ? pPict->repeatType : RepeatNone; -+ unsigned int repeatType; - unsigned int i; - tex_resource_t tex_res; - tex_sampler_t tex_samp; -@@ -854,9 +850,17 @@ static Bool EVERGREENTextureSetup(PicturePtr pPict, PixmapPtr pPix, - } - - /* Texture */ -+ if (pPict->pDrawable) { -+ tex_res.w = pPict->pDrawable->width; -+ tex_res.h = pPict->pDrawable->height; -+ repeatType = pPict->repeat ? pPict->repeatType : RepeatNone; -+ } else { -+ tex_res.w = 1; -+ tex_res.h = 1; -+ repeatType = RepeatNormal; -+ } -+ - tex_res.id = unit; -- tex_res.w = w; -- tex_res.h = h; - tex_res.pitch = accel_state->src_obj[unit].pitch; - tex_res.depth = 0; - tex_res.dim = SQ_TEX_DIM_2D; -@@ -1054,33 +1058,30 @@ static Bool EVERGREENCheckComposite(int op, PicturePtr pSrcPicture, - { - uint32_t tmp1; - PixmapPtr pSrcPixmap, pDstPixmap; -- int max_tex_w, max_tex_h, max_dst_w, max_dst_h; - - /* Check for unsupported compositing operations. */ - if (op >= (int) (sizeof(EVERGREENBlendOp) / sizeof(EVERGREENBlendOp[0]))) - RADEON_FALLBACK(("Unsupported Composite op 0x%x\n", op)); - -- if (!pSrcPicture->pDrawable) -- RADEON_FALLBACK(("Solid or gradient pictures not supported yet\n")); -+ if (pSrcPicture->pDrawable) { -+ pSrcPixmap = RADEONGetDrawablePixmap(pSrcPicture->pDrawable); - -- pSrcPixmap = RADEONGetDrawablePixmap(pSrcPicture->pDrawable); -- -- max_tex_w = 8192; -- max_tex_h = 8192; -- max_dst_w = 8192; -- max_dst_h = 8192; -+ if (pSrcPixmap->drawable.width >= 16384 || -+ pSrcPixmap->drawable.height >= 16384) { -+ RADEON_FALLBACK(("Source w/h too large (%d,%d).\n", -+ pSrcPixmap->drawable.width, -+ pSrcPixmap->drawable.height)); -+ } - -- if (pSrcPixmap->drawable.width >= max_tex_w || -- pSrcPixmap->drawable.height >= max_tex_h) { -- RADEON_FALLBACK(("Source w/h too large (%d,%d).\n", -- pSrcPixmap->drawable.width, -- pSrcPixmap->drawable.height)); -- } -+ if (!EVERGREENCheckCompositeTexture(pSrcPicture, pDstPicture, op, 0)) -+ return FALSE; -+ } else if (pSrcPicture->pSourcePict->type != SourcePictTypeSolidFill) -+ RADEON_FALLBACK(("Gradient pictures not supported yet\n")); - - pDstPixmap = RADEONGetDrawablePixmap(pDstPicture->pDrawable); - -- if (pDstPixmap->drawable.width >= max_dst_w || -- pDstPixmap->drawable.height >= max_dst_h) { -+ if (pDstPixmap->drawable.width >= 16384 || -+ pDstPixmap->drawable.height >= 16384) { - RADEON_FALLBACK(("Dest w/h too large (%d,%d).\n", - pDstPixmap->drawable.width, - pDstPixmap->drawable.height)); -@@ -1089,38 +1090,35 @@ static Bool EVERGREENCheckComposite(int op, PicturePtr pSrcPicture, - if (pMaskPicture) { - PixmapPtr pMaskPixmap; - -- if (!pMaskPicture->pDrawable) -- RADEON_FALLBACK(("Solid or gradient pictures not supported yet\n")); -- -- pMaskPixmap = RADEONGetDrawablePixmap(pMaskPicture->pDrawable); -+ if (pMaskPicture->pDrawable) { -+ pMaskPixmap = RADEONGetDrawablePixmap(pMaskPicture->pDrawable); - -- if (pMaskPixmap->drawable.width >= max_tex_w || -- pMaskPixmap->drawable.height >= max_tex_h) { -- RADEON_FALLBACK(("Mask w/h too large (%d,%d).\n", -- pMaskPixmap->drawable.width, -- pMaskPixmap->drawable.height)); -- } -+ if (pMaskPixmap->drawable.width >= 16384 || -+ pMaskPixmap->drawable.height >= 16384) { -+ RADEON_FALLBACK(("Mask w/h too large (%d,%d).\n", -+ pMaskPixmap->drawable.width, -+ pMaskPixmap->drawable.height)); -+ } - -- if (pMaskPicture->componentAlpha) { -- /* Check if it's component alpha that relies on a source alpha and -- * on the source value. We can only get one of those into the -- * single source value that we get to blend with. -- */ -- if (EVERGREENBlendOp[op].src_alpha && -- (EVERGREENBlendOp[op].blend_cntl & COLOR_SRCBLEND_mask) != -- (BLEND_ZERO << COLOR_SRCBLEND_shift)) { -- RADEON_FALLBACK(("Component alpha not supported with source " -- "alpha and source value blending.\n")); -+ if (pMaskPicture->componentAlpha) { -+ /* Check if it's component alpha that relies on a source alpha and -+ * on the source value. We can only get one of those into the -+ * single source value that we get to blend with. -+ */ -+ if (EVERGREENBlendOp[op].src_alpha && -+ (EVERGREENBlendOp[op].blend_cntl & COLOR_SRCBLEND_mask) != -+ (BLEND_ZERO << COLOR_SRCBLEND_shift)) { -+ RADEON_FALLBACK(("Component alpha not supported with source " -+ "alpha and source value blending.\n")); -+ } - } -- } - -- if (!EVERGREENCheckCompositeTexture(pMaskPicture, pDstPicture, op, 1)) -- return FALSE; -+ if (!EVERGREENCheckCompositeTexture(pMaskPicture, pDstPicture, op, 1)) -+ return FALSE; -+ } else if (pMaskPicture->pSourcePict->type != SourcePictTypeSolidFill) -+ RADEON_FALLBACK(("Gradient pictures not supported yet\n")); - } - -- if (!EVERGREENCheckCompositeTexture(pSrcPicture, pDstPicture, op, 0)) -- return FALSE; -- - if (!EVERGREENGetDestFormat(pDstPicture, &tmp1)) - return FALSE; - -@@ -1132,7 +1130,8 @@ static Bool EVERGREENPrepareComposite(int op, PicturePtr pSrcPicture, - PicturePtr pMaskPicture, PicturePtr pDstPicture, - PixmapPtr pSrc, PixmapPtr pMask, PixmapPtr pDst) - { -- ScrnInfoPtr pScrn = xf86Screens[pSrc->drawable.pScreen->myNum]; -+ ScreenPtr pScreen = pDst->drawable.pScreen; -+ ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum]; - RADEONInfoPtr info = RADEONPTR(pScrn); - struct radeon_accel_state *accel_state = info->accel_state; - uint32_t dst_format; -@@ -1142,13 +1141,19 @@ static Bool EVERGREENPrepareComposite(int op, PicturePtr pSrcPicture, - struct r600_accel_object src_obj, mask_obj, dst_obj; - float *cbuf; - -- if (pDst->drawable.bitsPerPixel < 8 || pSrc->drawable.bitsPerPixel < 8) -+ if (pDst->drawable.bitsPerPixel < 8 || (pSrc && pSrc->drawable.bitsPerPixel < 8)) - return FALSE; - -+ if (!pSrc) { -+ pSrc = RADEONSolidPixmap(pScreen, pSrcPicture->pSourcePict->solidFill.color); -+ if (!pSrc) -+ RADEON_FALLBACK("Failed to create solid scratch pixmap\n"); -+ } -+ - src_obj.offset = 0; - dst_obj.offset = 0; -- src_obj.bo = radeon_get_pixmap_bo(pSrc); - dst_obj.bo = radeon_get_pixmap_bo(pDst); -+ src_obj.bo = radeon_get_pixmap_bo(pSrc); - dst_obj.surface = radeon_get_pixmap_surface(pDst); - src_obj.surface = radeon_get_pixmap_surface(pSrc); - dst_obj.tiling_flags = radeon_get_pixmap_tiling(pDst); -@@ -1166,7 +1171,15 @@ static Bool EVERGREENPrepareComposite(int op, PicturePtr pSrcPicture, - dst_obj.bpp = pDst->drawable.bitsPerPixel; - dst_obj.domain = RADEON_GEM_DOMAIN_VRAM; - -- if (pMask) { -+ if (pMaskPicture) { -+ if (!pMask) { -+ pMask = RADEONSolidPixmap(pScreen, pMaskPicture->pSourcePict->solidFill.color); -+ if (!pMask) { -+ if (!pSrcPicture->pDrawable) -+ pScreen->DestroyPixmap(pSrc); -+ RADEON_FALLBACK("Failed to create solid scratch pixmap\n"); -+ } -+ } - mask_obj.offset = 0; - mask_obj.bo = radeon_get_pixmap_bo(pMask); - mask_obj.tiling_flags = radeon_get_pixmap_tiling(pMask); -@@ -1363,11 +1376,9 @@ static Bool EVERGREENPrepareComposite(int op, PicturePtr pSrcPicture, - return TRUE; - } - --static void EVERGREENDoneComposite(PixmapPtr pDst) -+static void EVERGREENFinishComposite(ScrnInfoPtr pScrn, PixmapPtr pDst, -+ struct radeon_accel_state *accel_state) - { -- ScrnInfoPtr pScrn = xf86Screens[pDst->drawable.pScreen->myNum]; -- RADEONInfoPtr info = RADEONPTR(pScrn); -- struct radeon_accel_state *accel_state = info->accel_state; - int vtx_size; - - if (accel_state->vsync) -@@ -1381,6 +1392,22 @@ static void EVERGREENDoneComposite(PixmapPtr pDst) - evergreen_finish_op(pScrn, vtx_size); - } - -+static void EVERGREENDoneComposite(PixmapPtr pDst) -+{ -+ ScreenPtr pScreen = pDst->drawable.pScreen; -+ ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum]; -+ RADEONInfoPtr info = RADEONPTR(pScrn); -+ struct radeon_accel_state *accel_state = info->accel_state; -+ -+ EVERGREENFinishComposite(pScrn, pDst, accel_state); -+ -+ if (!accel_state->src_pic->pDrawable) -+ pScreen->DestroyPixmap(accel_state->src_pix); -+ -+ if (accel_state->msk_pic && !accel_state->msk_pic->pDrawable) -+ pScreen->DestroyPixmap(accel_state->msk_pix); -+} -+ - static void EVERGREENComposite(PixmapPtr pDst, - int srcX, int srcY, - int maskX, int maskY, -@@ -1393,7 +1420,7 @@ static void EVERGREENComposite(PixmapPtr pDst, - float *vb; - - if (CS_FULL(info->cs)) { -- EVERGREENDoneComposite(info->accel_state->dst_pix); -+ EVERGREENFinishComposite(pScrn, pDst, info->accel_state); - radeon_cs_flush_indirect(pScrn); - EVERGREENPrepareComposite(info->accel_state->composite_op, - info->accel_state->src_pic, --- -cgit v0.9.0.2-2-gbebe diff --git a/U_xf86-video-ati-6.14.4-exa-solid-accel-r100.patch b/U_xf86-video-ati-6.14.4-exa-solid-accel-r100.patch deleted file mode 100644 index 95a5c3c..0000000 --- a/U_xf86-video-ati-6.14.4-exa-solid-accel-r100.patch +++ /dev/null @@ -1,179 +0,0 @@ -From a7754b076e355fef3aea082b6e2d3aefbb8e7a9b Mon Sep 17 00:00:00 2001 -From: Alex Deucher -Date: Fri, 13 Apr 2012 17:24:46 +0000 -Subject: EXA: Support acceleration of solid pictures on R1xx. - -Signed-off-by: Alex Deucher -Reviewed-by: Michel Dänzer ---- -diff --git a/src/radeon_exa_render.c b/src/radeon_exa_render.c -index b6cc9e4..451a625 100644 ---- a/src/radeon_exa_render.c -+++ b/src/radeon_exa_render.c -@@ -338,17 +338,8 @@ static Bool R100CheckCompositeTexture(PicturePtr pPict, - int unit) - { - unsigned int repeatType = pPict->repeat ? pPict->repeatType : RepeatNone; -- int w = pPict->pDrawable->width; -- int h = pPict->pDrawable->height; - int i; - -- /* r100 limit should be 2048, there are issues with 2048 -- * see 197a62704742a4a19736c2637ac92d1dc5ab34ed -- */ -- -- if ((w > 2047) || (h > 2047)) -- RADEON_FALLBACK(("Picture w/h too large (%dx%d)\n", w, h)); -- - for (i = 0; i < sizeof(R100TexFormats) / sizeof(R100TexFormats[0]); i++) { - if (R100TexFormats[i].fmt == pPict->format) - break; -@@ -357,7 +348,7 @@ static Bool R100CheckCompositeTexture(PicturePtr pPict, - RADEON_FALLBACK(("Unsupported picture format 0x%x\n", - (int)pPict->format)); - -- if (!RADEONCheckTexturePOT(pPict, unit == 0)) -+ if (pPict->pDrawable && !RADEONCheckTexturePOT(pPict, unit == 0)) - return FALSE; - - if (pPict->filter != PictFilterNearest && -@@ -392,15 +383,24 @@ static Bool FUNC_NAME(R100TextureSetup)(PicturePtr pPict, PixmapPtr pPix, - { - RINFO_FROM_SCREEN(pPix->drawable.pScreen); - uint32_t txfilter, txformat, txoffset, txpitch; -- int w = pPict->pDrawable->width; -- int h = pPict->pDrawable->height; -- unsigned int repeatType = pPict->repeat ? pPict->repeatType : RepeatNone; -- Bool repeat = (repeatType == RepeatNormal || repeatType == RepeatReflect) && -- !(unit == 0 && (info->accel_state->need_src_tile_x || info->accel_state->need_src_tile_y)); -- int i; -+ unsigned int repeatType; -+ Bool repeat; -+ int i, w, h; - struct radeon_exa_pixmap_priv *driver_priv; - ACCEL_PREAMBLE(); - -+ if (pPict->pDrawable) { -+ w = pPict->pDrawable->width; -+ h = pPict->pDrawable->height; -+ repeatType = pPict->repeat ? pPict->repeatType : RepeatNone; -+ } else { -+ w = h = 1; -+ repeatType = RepeatNormal; -+ } -+ -+ repeat = (repeatType == RepeatNormal || repeatType == RepeatReflect) && -+ !(unit == 0 && (info->accel_state->need_src_tile_x || info->accel_state->need_src_tile_y)); -+ - txpitch = exaGetPixmapPitch(pPix); - txoffset = 0; - -@@ -510,22 +510,6 @@ static Bool R100CheckComposite(int op, PicturePtr pSrcPicture, - if (op >= sizeof(RadeonBlendOp) / sizeof(RadeonBlendOp[0])) - RADEON_FALLBACK(("Unsupported Composite op 0x%x\n", op)); - -- if (!pSrcPicture->pDrawable) -- RADEON_FALLBACK(("Solid or gradient pictures not supported yet\n")); -- -- /* r100 limit should be 2048, there are issues with 2048 -- * see 197a62704742a4a19736c2637ac92d1dc5ab34ed -- */ -- -- pSrcPixmap = RADEONGetDrawablePixmap(pSrcPicture->pDrawable); -- -- if (pSrcPixmap->drawable.width > 2047 || -- pSrcPixmap->drawable.height > 2047) { -- RADEON_FALLBACK(("Source w/h too large (%d,%d).\n", -- pSrcPixmap->drawable.width, -- pSrcPixmap->drawable.height)); -- } -- - pDstPixmap = RADEONGetDrawablePixmap(pDstPicture->pDrawable); - - if (pDstPixmap->drawable.width > 2047 || -@@ -535,20 +519,35 @@ static Bool R100CheckComposite(int op, PicturePtr pSrcPicture, - pDstPixmap->drawable.height)); - } - -+ if (pSrcPicture->pDrawable) { -+ /* r100 limit should be 2048, there are issues with 2048 -+ * see 197a62704742a4a19736c2637ac92d1dc5ab34ed -+ */ -+ pSrcPixmap = RADEONGetDrawablePixmap(pSrcPicture->pDrawable); -+ -+ if (pSrcPixmap->drawable.width > 2047 || -+ pSrcPixmap->drawable.height > 2047) { -+ RADEON_FALLBACK(("Source w/h too large (%d,%d).\n", -+ pSrcPixmap->drawable.width, -+ pSrcPixmap->drawable.height)); -+ } -+ } else if (pSrcPicture->pSourcePict->type != SourcePictTypeSolidFill) -+ RADEON_FALLBACK(("Gradient pictures not supported yet\n")); -+ - if (pMaskPicture) { - PixmapPtr pMaskPixmap; - -- if (!pMaskPicture->pDrawable) -- RADEON_FALLBACK(("Solid or gradient pictures not supported yet\n")); -- -- pMaskPixmap = RADEONGetDrawablePixmap(pMaskPicture->pDrawable); -+ if (pMaskPicture->pDrawable) { -+ pMaskPixmap = RADEONGetDrawablePixmap(pMaskPicture->pDrawable); - -- if (pMaskPixmap->drawable.width > 2047 || -- pMaskPixmap->drawable.height > 2047) { -- RADEON_FALLBACK(("Mask w/h too large (%d,%d).\n", -- pMaskPixmap->drawable.width, -- pMaskPixmap->drawable.height)); -- } -+ if (pMaskPixmap->drawable.width > 2047 || -+ pMaskPixmap->drawable.height > 2047) { -+ RADEON_FALLBACK(("Mask w/h too large (%d,%d).\n", -+ pMaskPixmap->drawable.width, -+ pMaskPixmap->drawable.height)); -+ } -+ } else if (pMaskPicture->pSourcePict->type != SourcePictTypeSolidFill) -+ RADEON_FALLBACK(("Gradient pictures not supported yet\n")); - - if (pMaskPicture->componentAlpha) { - /* Check if it's component alpha that relies on a source alpha and -@@ -624,7 +623,8 @@ static Bool FUNC_NAME(R100PrepareComposite)(int op, - PixmapPtr pMask, - PixmapPtr pDst) - { -- RINFO_FROM_SCREEN(pDst->drawable.pScreen); -+ ScreenPtr pScreen = pDst->drawable.pScreen; -+ RINFO_FROM_SCREEN(pScreen); - uint32_t dst_format, dst_pitch, colorpitch; - uint32_t pp_cntl, blendcntl, cblend, ablend; - int pixel_shift; -@@ -648,12 +648,27 @@ static Bool FUNC_NAME(R100PrepareComposite)(int op, - - CHECK_OFFSET(pDst, 0x0f, "destination"); - -+ if (!pSrc) { -+ pSrc = RADEONSolidPixmap(pScreen, cpu_to_le32(pSrcPicture->pSourcePict->solidFill.color)); -+ if (!pSrc) -+ RADEON_FALLBACK("Failed to create solid scratch pixmap\n"); -+ } -+ - if (((dst_pitch >> pixel_shift) & 0x7) != 0) - RADEON_FALLBACK(("Bad destination pitch 0x%x\n", (int)dst_pitch)); - - if (!RADEONSetupSourceTile(pSrcPicture, pSrc, FALSE, TRUE)) - return FALSE; - -+ if (pMaskPicture && !pMask) { -+ pMask = RADEONSolidPixmap(pScreen, cpu_to_le32(pMaskPicture->pSourcePict->solidFill.color)); -+ if (!pMask) { -+ if (!pSrcPicture->pDrawable) -+ pScreen->DestroyPixmap(pSrc); -+ RADEON_FALLBACK("Failed to create solid scratch pixmap\n"); -+ } -+ } -+ - RADEONPrepareCompositeCS(op, pSrcPicture, pMaskPicture, pDstPicture, - pSrc, pMask, pDst); - --- -cgit v0.9.0.2-2-gbebe diff --git a/U_xf86-video-ati-6.14.4-exa-solid-accel-r200.patch b/U_xf86-video-ati-6.14.4-exa-solid-accel-r200.patch deleted file mode 100644 index 41d2f41..0000000 --- a/U_xf86-video-ati-6.14.4-exa-solid-accel-r200.patch +++ /dev/null @@ -1,176 +0,0 @@ -From 0bda305f7ab2a4720b3fea3f318ab2a73be151e5 Mon Sep 17 00:00:00 2001 -From: Alex Deucher -Date: Fri, 13 Apr 2012 17:28:10 +0000 -Subject: EXA: Support acceleration of solid pictures on R2xx. - -Signed-off-by: Alex Deucher -Reviewed-by: Michel Dänzer ---- -diff --git a/src/radeon_exa_render.c b/src/radeon_exa_render.c -index 451a625..7f1a3ff 100644 ---- a/src/radeon_exa_render.c -+++ b/src/radeon_exa_render.c -@@ -756,17 +756,8 @@ static Bool R200CheckCompositeTexture(PicturePtr pPict, - int unit) - { - unsigned int repeatType = pPict->repeat ? pPict->repeatType : RepeatNone; -- int w = pPict->pDrawable->width; -- int h = pPict->pDrawable->height; - int i; - -- /* r200 limit should be 2048, there are issues with 2048 -- * see bug 19269 -- */ -- -- if ((w > 2047) || (h > 2047)) -- RADEON_FALLBACK(("Picture w/h too large (%dx%d)\n", w, h)); -- - for (i = 0; i < sizeof(R200TexFormats) / sizeof(R200TexFormats[0]); i++) - { - if (R200TexFormats[i].fmt == pPict->format) -@@ -776,7 +767,7 @@ static Bool R200CheckCompositeTexture(PicturePtr pPict, - RADEON_FALLBACK(("Unsupported picture format 0x%x\n", - (int)pPict->format)); - -- if (!RADEONCheckTexturePOT(pPict, unit == 0)) -+ if (pPict->pDrawable && !RADEONCheckTexturePOT(pPict, unit == 0)) - return FALSE; - - if (pPict->filter != PictFilterNearest && -@@ -809,15 +800,24 @@ static Bool FUNC_NAME(R200TextureSetup)(PicturePtr pPict, PixmapPtr pPix, - { - RINFO_FROM_SCREEN(pPix->drawable.pScreen); - uint32_t txfilter, txformat, txoffset, txpitch; -- int w = pPict->pDrawable->width; -- int h = pPict->pDrawable->height; -- unsigned int repeatType = pPict->repeat ? pPict->repeatType : RepeatNone; -- Bool repeat = (repeatType == RepeatNormal || repeatType == RepeatReflect) && -- !(unit == 0 && (info->accel_state->need_src_tile_x || info->accel_state->need_src_tile_y)); -- int i; -+ unsigned int repeatType; -+ Bool repeat; -+ int i, w, h; - struct radeon_exa_pixmap_priv *driver_priv; - ACCEL_PREAMBLE(); - -+ if (pPict->pDrawable) { -+ w = pPict->pDrawable->width; -+ h = pPict->pDrawable->height; -+ repeatType = pPict->repeat ? pPict->repeatType : RepeatNone; -+ } else { -+ w = h = 1; -+ repeatType = RepeatNormal; -+ } -+ -+ repeat = (repeatType == RepeatNormal || repeatType == RepeatReflect) && -+ !(unit == 0 && (info->accel_state->need_src_tile_x || info->accel_state->need_src_tile_y)); -+ - txpitch = exaGetPixmapPitch(pPix); - - txoffset = 0; -@@ -926,22 +926,6 @@ static Bool R200CheckComposite(int op, PicturePtr pSrcPicture, PicturePtr pMaskP - if (op >= sizeof(RadeonBlendOp) / sizeof(RadeonBlendOp[0])) - RADEON_FALLBACK(("Unsupported Composite op 0x%x\n", op)); - -- if (!pSrcPicture->pDrawable) -- RADEON_FALLBACK(("Solid or gradient pictures not supported yet\n")); -- -- /* r200 limit should be 2048, there are issues with 2048 -- * see bug 19269 -- */ -- -- pSrcPixmap = RADEONGetDrawablePixmap(pSrcPicture->pDrawable); -- -- if (pSrcPixmap->drawable.width > 2047 || -- pSrcPixmap->drawable.height > 2047) { -- RADEON_FALLBACK(("Source w/h too large (%d,%d).\n", -- pSrcPixmap->drawable.width, -- pSrcPixmap->drawable.height)); -- } -- - pDstPixmap = RADEONGetDrawablePixmap(pDstPicture->pDrawable); - - if (pDstPixmap->drawable.width > 2047 || -@@ -951,20 +935,35 @@ static Bool R200CheckComposite(int op, PicturePtr pSrcPicture, PicturePtr pMaskP - pDstPixmap->drawable.height)); - } - -+ if (pSrcPicture->pDrawable) { -+ /* r200 limit should be 2048, there are issues with 2048 -+ * see 197a62704742a4a19736c2637ac92d1dc5ab34ed -+ */ -+ pSrcPixmap = RADEONGetDrawablePixmap(pSrcPicture->pDrawable); -+ -+ if (pSrcPixmap->drawable.width > 2047 || -+ pSrcPixmap->drawable.height > 2047) { -+ RADEON_FALLBACK(("Source w/h too large (%d,%d).\n", -+ pSrcPixmap->drawable.width, -+ pSrcPixmap->drawable.height)); -+ } -+ } else if (pSrcPicture->pSourcePict->type != SourcePictTypeSolidFill) -+ RADEON_FALLBACK(("Gradient pictures not supported yet\n")); -+ - if (pMaskPicture) { - PixmapPtr pMaskPixmap; - -- if (!pMaskPicture->pDrawable) -- RADEON_FALLBACK(("Solid or gradient pictures not supported yet\n")); -- -- pMaskPixmap = RADEONGetDrawablePixmap(pMaskPicture->pDrawable); -+ if (pMaskPicture->pDrawable) { -+ pMaskPixmap = RADEONGetDrawablePixmap(pMaskPicture->pDrawable); - -- if (pMaskPixmap->drawable.width > 2047 || -- pMaskPixmap->drawable.height > 2047) { -- RADEON_FALLBACK(("Mask w/h too large (%d,%d).\n", -- pMaskPixmap->drawable.width, -- pMaskPixmap->drawable.height)); -- } -+ if (pMaskPixmap->drawable.width > 2047 || -+ pMaskPixmap->drawable.height > 2047) { -+ RADEON_FALLBACK(("Mask w/h too large (%d,%d).\n", -+ pMaskPixmap->drawable.width, -+ pMaskPixmap->drawable.height)); -+ } -+ } else if (pMaskPicture->pSourcePict->type != SourcePictTypeSolidFill) -+ RADEON_FALLBACK(("Gradient pictures not supported yet\n")); - - if (pMaskPicture->componentAlpha) { - /* Check if it's component alpha that relies on a source alpha and -@@ -997,7 +996,8 @@ static Bool FUNC_NAME(R200PrepareComposite)(int op, PicturePtr pSrcPicture, - PicturePtr pMaskPicture, PicturePtr pDstPicture, - PixmapPtr pSrc, PixmapPtr pMask, PixmapPtr pDst) - { -- RINFO_FROM_SCREEN(pDst->drawable.pScreen); -+ ScreenPtr pScreen = pDst->drawable.pScreen; -+ RINFO_FROM_SCREEN(pScreen); - uint32_t dst_format, dst_pitch; - uint32_t pp_cntl, blendcntl, cblend, ablend, colorpitch; - int pixel_shift; -@@ -1024,9 +1024,24 @@ static Bool FUNC_NAME(R200PrepareComposite)(int op, PicturePtr pSrcPicture, - if (((dst_pitch >> pixel_shift) & 0x7) != 0) - RADEON_FALLBACK(("Bad destination pitch 0x%x\n", (int)dst_pitch)); - -+ if (!pSrc) { -+ pSrc = RADEONSolidPixmap(pScreen, cpu_to_le32(pSrcPicture->pSourcePict->solidFill.color)); -+ if (!pSrc) -+ RADEON_FALLBACK("Failed to create solid scratch pixmap\n"); -+ } -+ - if (!RADEONSetupSourceTile(pSrcPicture, pSrc, FALSE, TRUE)) - return FALSE; - -+ if (pMaskPicture && !pMask) { -+ pMask = RADEONSolidPixmap(pScreen, cpu_to_le32(pMaskPicture->pSourcePict->solidFill.color)); -+ if (!pMask) { -+ if (!pSrcPicture->pDrawable) -+ pScreen->DestroyPixmap(pSrc); -+ RADEON_FALLBACK("Failed to create solid scratch pixmap\n"); -+ } -+ } -+ - RADEONPrepareCompositeCS(op, pSrcPicture, pMaskPicture, pDstPicture, - pSrc, pMask, pDst); - --- -cgit v0.9.0.2-2-gbebe diff --git a/U_xf86-video-ati-6.14.4-exa-solid-accel-r300.patch b/U_xf86-video-ati-6.14.4-exa-solid-accel-r300.patch deleted file mode 100644 index 80334c3..0000000 --- a/U_xf86-video-ati-6.14.4-exa-solid-accel-r300.patch +++ /dev/null @@ -1,560 +0,0 @@ -From d88b9700137ee407c483f263bb55c77cd6f92fef Mon Sep 17 00:00:00 2001 -From: Michel Dänzer -Date: Fri, 13 Apr 2012 07:35:38 +0000 -Subject: EXA: Support acceleration of solid pictures on R3xx-R7xx. - -Allocate 1x1 scratch pixmaps to hold the solid picture colours. - -Signed-off-by: Michel Dänzer ---- -diff --git a/src/r600_exa.c b/src/r600_exa.c -index e1eb62f..c3ae553 100644 ---- a/src/r600_exa.c -+++ b/src/r600_exa.c -@@ -901,17 +901,8 @@ static Bool R600CheckCompositeTexture(PicturePtr pPict, - int op, - int unit) - { -- int w = pPict->pDrawable->width; -- int h = pPict->pDrawable->height; - unsigned int repeatType = pPict->repeat ? pPict->repeatType : RepeatNone; - unsigned int i; -- int max_tex_w, max_tex_h; -- -- max_tex_w = 8192; -- max_tex_h = 8192; -- -- if ((w > max_tex_w) || (h > max_tex_h)) -- RADEON_FALLBACK(("Picture w/h too large (%dx%d)\n", w, h)); - - for (i = 0; i < sizeof(R600TexFormats) / sizeof(R600TexFormats[0]); i++) { - if (R600TexFormats[i].fmt == pPict->format) -@@ -951,9 +942,7 @@ static Bool R600TextureSetup(PicturePtr pPict, PixmapPtr pPix, - ScrnInfoPtr pScrn = xf86Screens[pPix->drawable.pScreen->myNum]; - RADEONInfoPtr info = RADEONPTR(pScrn); - struct radeon_accel_state *accel_state = info->accel_state; -- int w = pPict->pDrawable->width; -- int h = pPict->pDrawable->height; -- unsigned int repeatType = pPict->repeat ? pPict->repeatType : RepeatNone; -+ unsigned int repeatType; - unsigned int i; - tex_resource_t tex_res; - tex_sampler_t tex_samp; -@@ -969,9 +958,16 @@ static Bool R600TextureSetup(PicturePtr pPict, PixmapPtr pPix, - } - - /* Texture */ -+ if (pPict->pDrawable) { -+ tex_res.w = pPict->pDrawable->width; -+ tex_res.h = pPict->pDrawable->height; -+ repeatType = pPict->repeat ? pPict->repeatType : RepeatNone; -+ } else { -+ tex_res.w = 1; -+ tex_res.h = 1; -+ repeatType = RepeatNormal; -+ } - tex_res.id = unit; -- tex_res.w = w; -- tex_res.h = h; - tex_res.pitch = accel_state->src_obj[unit].pitch; - tex_res.depth = 0; - tex_res.dim = SQ_TEX_DIM_2D; -@@ -1170,24 +1166,24 @@ static Bool R600TextureSetup(PicturePtr pPict, PixmapPtr pPix, - vs_alu_consts[0] = xFixedToFloat(pPict->transform->matrix[0][0]); - vs_alu_consts[1] = xFixedToFloat(pPict->transform->matrix[0][1]); - vs_alu_consts[2] = xFixedToFloat(pPict->transform->matrix[0][2]); -- vs_alu_consts[3] = 1.0 / w; -+ vs_alu_consts[3] = 1.0 / tex_res.w; - - vs_alu_consts[4] = xFixedToFloat(pPict->transform->matrix[1][0]); - vs_alu_consts[5] = xFixedToFloat(pPict->transform->matrix[1][1]); - vs_alu_consts[6] = xFixedToFloat(pPict->transform->matrix[1][2]); -- vs_alu_consts[7] = 1.0 / h; -+ vs_alu_consts[7] = 1.0 / tex_res.h; - } else { - accel_state->is_transform[unit] = FALSE; - - vs_alu_consts[0] = 1.0; - vs_alu_consts[1] = 0.0; - vs_alu_consts[2] = 0.0; -- vs_alu_consts[3] = 1.0 / w; -+ vs_alu_consts[3] = 1.0 / tex_res.w; - - vs_alu_consts[4] = 0.0; - vs_alu_consts[5] = 1.0; - vs_alu_consts[6] = 0.0; -- vs_alu_consts[7] = 1.0 / h; -+ vs_alu_consts[7] = 1.0 / tex_res.h; - } - - /* VS alu constants */ -@@ -1202,33 +1198,30 @@ static Bool R600CheckComposite(int op, PicturePtr pSrcPicture, PicturePtr pMaskP - { - uint32_t tmp1; - PixmapPtr pSrcPixmap, pDstPixmap; -- int max_tex_w, max_tex_h, max_dst_w, max_dst_h; - - /* Check for unsupported compositing operations. */ - if (op >= (int) (sizeof(R600BlendOp) / sizeof(R600BlendOp[0]))) - RADEON_FALLBACK(("Unsupported Composite op 0x%x\n", op)); - -- if (!pSrcPicture->pDrawable) -- RADEON_FALLBACK(("Solid or gradient pictures not supported yet\n")); -- -- pSrcPixmap = RADEONGetDrawablePixmap(pSrcPicture->pDrawable); -+ if (pSrcPicture->pDrawable) { -+ pSrcPixmap = RADEONGetDrawablePixmap(pSrcPicture->pDrawable); - -- max_tex_w = 8192; -- max_tex_h = 8192; -- max_dst_w = 8192; -- max_dst_h = 8192; -+ if (pSrcPixmap->drawable.width >= 8192 || -+ pSrcPixmap->drawable.height >= 8192) { -+ RADEON_FALLBACK(("Source w/h too large (%d,%d).\n", -+ pSrcPixmap->drawable.width, -+ pSrcPixmap->drawable.height)); -+ } - -- if (pSrcPixmap->drawable.width >= max_tex_w || -- pSrcPixmap->drawable.height >= max_tex_h) { -- RADEON_FALLBACK(("Source w/h too large (%d,%d).\n", -- pSrcPixmap->drawable.width, -- pSrcPixmap->drawable.height)); -- } -+ if (!R600CheckCompositeTexture(pSrcPicture, pDstPicture, op, 0)) -+ return FALSE; -+ } else if (pSrcPicture->pSourcePict->type != SourcePictTypeSolidFill) -+ RADEON_FALLBACK(("Gradient pictures not supported yet\n")); - - pDstPixmap = RADEONGetDrawablePixmap(pDstPicture->pDrawable); - -- if (pDstPixmap->drawable.width >= max_dst_w || -- pDstPixmap->drawable.height >= max_dst_h) { -+ if (pDstPixmap->drawable.width >= 8192 || -+ pDstPixmap->drawable.height >= 8192) { - RADEON_FALLBACK(("Dest w/h too large (%d,%d).\n", - pDstPixmap->drawable.width, - pDstPixmap->drawable.height)); -@@ -1237,38 +1230,35 @@ static Bool R600CheckComposite(int op, PicturePtr pSrcPicture, PicturePtr pMaskP - if (pMaskPicture) { - PixmapPtr pMaskPixmap; - -- if (!pMaskPicture->pDrawable) -- RADEON_FALLBACK(("Solid or gradient pictures not supported yet\n")); -+ if (pMaskPicture->pDrawable) { -+ pMaskPixmap = RADEONGetDrawablePixmap(pMaskPicture->pDrawable); - -- pMaskPixmap = RADEONGetDrawablePixmap(pMaskPicture->pDrawable); -- -- if (pMaskPixmap->drawable.width >= max_tex_w || -- pMaskPixmap->drawable.height >= max_tex_h) { -- RADEON_FALLBACK(("Mask w/h too large (%d,%d).\n", -- pMaskPixmap->drawable.width, -- pMaskPixmap->drawable.height)); -- } -+ if (pMaskPixmap->drawable.width >= 8192 || -+ pMaskPixmap->drawable.height >= 8192) { -+ RADEON_FALLBACK(("Mask w/h too large (%d,%d).\n", -+ pMaskPixmap->drawable.width, -+ pMaskPixmap->drawable.height)); -+ } - -- if (pMaskPicture->componentAlpha) { -- /* Check if it's component alpha that relies on a source alpha and -- * on the source value. We can only get one of those into the -- * single source value that we get to blend with. -- */ -- if (R600BlendOp[op].src_alpha && -- (R600BlendOp[op].blend_cntl & COLOR_SRCBLEND_mask) != -- (BLEND_ZERO << COLOR_SRCBLEND_shift)) { -- RADEON_FALLBACK(("Component alpha not supported with source " -- "alpha and source value blending.\n")); -+ if (pMaskPicture->componentAlpha) { -+ /* Check if it's component alpha that relies on a source alpha and -+ * on the source value. We can only get one of those into the -+ * single source value that we get to blend with. -+ */ -+ if (R600BlendOp[op].src_alpha && -+ (R600BlendOp[op].blend_cntl & COLOR_SRCBLEND_mask) != -+ (BLEND_ZERO << COLOR_SRCBLEND_shift)) { -+ RADEON_FALLBACK(("Component alpha not supported with source " -+ "alpha and source value blending.\n")); -+ } - } -- } - -- if (!R600CheckCompositeTexture(pMaskPicture, pDstPicture, op, 1)) -- return FALSE; -+ if (!R600CheckCompositeTexture(pMaskPicture, pDstPicture, op, 1)) -+ return FALSE; -+ } else if (pMaskPicture->pSourcePict->type != SourcePictTypeSolidFill) -+ RADEON_FALLBACK(("Gradient pictures not supported yet\n")); - } - -- if (!R600CheckCompositeTexture(pSrcPicture, pDstPicture, op, 0)) -- return FALSE; -- - if (!R600GetDestFormat(pDstPicture, &tmp1)) - return FALSE; - -@@ -1280,7 +1270,8 @@ static Bool R600PrepareComposite(int op, PicturePtr pSrcPicture, - PicturePtr pMaskPicture, PicturePtr pDstPicture, - PixmapPtr pSrc, PixmapPtr pMask, PixmapPtr pDst) - { -- ScrnInfoPtr pScrn = xf86Screens[pSrc->drawable.pScreen->myNum]; -+ ScreenPtr pScreen = pDst->drawable.pScreen; -+ ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum]; - RADEONInfoPtr info = RADEONPTR(pScrn); - struct radeon_accel_state *accel_state = info->accel_state; - uint32_t dst_format; -@@ -1288,15 +1279,21 @@ static Bool R600PrepareComposite(int op, PicturePtr pSrcPicture, - shader_config_t vs_conf, ps_conf; - struct r600_accel_object src_obj, mask_obj, dst_obj; - -- if (pDst->drawable.bitsPerPixel < 8 || pSrc->drawable.bitsPerPixel < 8) -+ if (pDst->drawable.bitsPerPixel < 8 || (pSrc && pSrc->drawable.bitsPerPixel < 8)) - return FALSE; - -+ if (!pSrc) { -+ pSrc = RADEONSolidPixmap(pScreen, pSrcPicture->pSourcePict->solidFill.color); -+ if (!pSrc) -+ RADEON_FALLBACK("Failed to create solid scratch pixmap\n"); -+ } -+ - #if defined(XF86DRM_MODE) - if (info->cs) { - src_obj.offset = 0; - dst_obj.offset = 0; -- src_obj.bo = radeon_get_pixmap_bo(pSrc); - dst_obj.bo = radeon_get_pixmap_bo(pDst); -+ src_obj.bo = radeon_get_pixmap_bo(pSrc); - dst_obj.tiling_flags = radeon_get_pixmap_tiling(pDst); - src_obj.tiling_flags = radeon_get_pixmap_tiling(pSrc); - dst_obj.surface = radeon_get_pixmap_surface(pDst); -@@ -1322,7 +1319,16 @@ static Bool R600PrepareComposite(int op, PicturePtr pSrcPicture, - dst_obj.bpp = pDst->drawable.bitsPerPixel; - dst_obj.domain = RADEON_GEM_DOMAIN_VRAM; - -- if (pMask) { -+ if (pMaskPicture) { -+ if (!pMask) { -+ pMask = RADEONSolidPixmap(pScreen, pMaskPicture->pSourcePict->solidFill.color); -+ if (!pMask) { -+ if (!pSrcPicture->pDrawable) -+ pScreen->DestroyPixmap(pSrc); -+ RADEON_FALLBACK("Failed to create solid scratch pixmap\n"); -+ } -+ } -+ - #if defined(XF86DRM_MODE) - if (info->cs) { - mask_obj.offset = 0; -@@ -1509,11 +1515,9 @@ static Bool R600PrepareComposite(int op, PicturePtr pSrcPicture, - return TRUE; - } - --static void R600DoneComposite(PixmapPtr pDst) -+static void R600FinishComposite(ScrnInfoPtr pScrn, PixmapPtr pDst, -+ struct radeon_accel_state *accel_state) - { -- ScrnInfoPtr pScrn = xf86Screens[pDst->drawable.pScreen->myNum]; -- RADEONInfoPtr info = RADEONPTR(pScrn); -- struct radeon_accel_state *accel_state = info->accel_state; - int vtx_size; - - if (accel_state->vsync) -@@ -1527,6 +1531,22 @@ static void R600DoneComposite(PixmapPtr pDst) - r600_finish_op(pScrn, vtx_size); - } - -+static void R600DoneComposite(PixmapPtr pDst) -+{ -+ ScreenPtr pScreen = pDst->drawable.pScreen; -+ ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum]; -+ RADEONInfoPtr info = RADEONPTR(pScrn); -+ struct radeon_accel_state *accel_state = info->accel_state; -+ -+ R600FinishComposite(pScrn, pDst, accel_state); -+ -+ if (!accel_state->src_pic->pDrawable) -+ pScreen->DestroyPixmap(accel_state->src_pix); -+ -+ if (accel_state->msk_pic && !accel_state->msk_pic->pDrawable) -+ pScreen->DestroyPixmap(accel_state->msk_pix); -+} -+ - static void R600Composite(PixmapPtr pDst, - int srcX, int srcY, - int maskX, int maskY, -@@ -1543,7 +1563,7 @@ static void R600Composite(PixmapPtr pDst, - - #ifdef XF86DRM_MODE - if (info->cs && CS_FULL(info->cs)) { -- R600DoneComposite(info->accel_state->dst_pix); -+ R600FinishComposite(pScrn, pDst, info->accel_state); - radeon_cs_flush_indirect(pScrn); - R600PrepareComposite(info->accel_state->composite_op, - info->accel_state->src_pic, -diff --git a/src/radeon_exa_render.c b/src/radeon_exa_render.c -index e5c231f..b6cc9e4 100644 ---- a/src/radeon_exa_render.c -+++ b/src/radeon_exa_render.c -@@ -299,8 +299,8 @@ static Bool RADEONSetupSourceTile(PicturePtr pPict, - if (repeatType == RepeatNormal || repeatType == RepeatReflect) { - Bool badPitch = needMatchingPitch && !RADEONPitchMatches(pPix); - -- int w = pPict->pDrawable->width; -- int h = pPict->pDrawable->height; -+ int w = pPict->pDrawable ? pPict->pDrawable->width : 1; -+ int h = pPict->pDrawable ? pPict->pDrawable->height : 1; - - if (pPict->transform) { - if (badPitch) -@@ -1112,23 +1112,8 @@ static Bool R300CheckCompositeTexture(PicturePtr pPict, - ScreenPtr pScreen = pDstPict->pDrawable->pScreen; - ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum]; - RADEONInfoPtr info = RADEONPTR(pScrn); -- - unsigned int repeatType = pPict->repeat ? pPict->repeatType : RepeatNone; -- int w = pPict->pDrawable->width; -- int h = pPict->pDrawable->height; - int i; -- int max_tex_w, max_tex_h; -- -- if (is_r500) { -- max_tex_w = 4096; -- max_tex_h = 4096; -- } else { -- max_tex_w = 2048; -- max_tex_h = 2048; -- } -- -- if ((w > max_tex_w) || (h > max_tex_h)) -- RADEON_FALLBACK(("Picture w/h too large (%dx%d)\n", w, h)); - - for (i = 0; i < sizeof(R300TexFormats) / sizeof(R300TexFormats[0]); i++) - { -@@ -1139,7 +1124,7 @@ static Bool R300CheckCompositeTexture(PicturePtr pPict, - RADEON_FALLBACK(("Unsupported picture format 0x%x\n", - (int)pPict->format)); - -- if (!RADEONCheckTexturePOT(pPict, unit == 0)) { -+ if (pPict->pDrawable && !RADEONCheckTexturePOT(pPict, unit == 0)) { - if (info->cs) { - struct radeon_exa_pixmap_priv *driver_priv; - PixmapPtr pPix; -@@ -1181,15 +1166,23 @@ static Bool FUNC_NAME(R300TextureSetup)(PicturePtr pPict, PixmapPtr pPix, - { - RINFO_FROM_SCREEN(pPix->drawable.pScreen); - uint32_t txfilter, txformat0, txformat1, txoffset, txpitch, us_format = 0; -- int w = pPict->pDrawable->width; -- int h = pPict->pDrawable->height; -+ int w, h; - int i, pixel_shift, out_size = 6; -- unsigned int repeatType = pPict->repeat ? pPict->repeatType : RepeatNone; -+ unsigned int repeatType; - struct radeon_exa_pixmap_priv *driver_priv; - ACCEL_PREAMBLE(); - - TRACE; - -+ if (pPict->pDrawable) { -+ w = pPict->pDrawable->width; -+ h = pPict->pDrawable->height; -+ repeatType = pPict->repeat ? pPict->repeatType : RepeatNone; -+ } else { -+ w = h = 1; -+ repeatType = RepeatNormal; -+ } -+ - txpitch = exaGetPixmapPitch(pPix); - txoffset = 0; - -@@ -1394,11 +1387,6 @@ static Bool R300CheckComposite(int op, PicturePtr pSrcPicture, PicturePtr pMaskP - if (op >= sizeof(RadeonBlendOp) / sizeof(RadeonBlendOp[0])) - RADEON_FALLBACK(("Unsupported Composite op 0x%x\n", op)); - -- if (!pSrcPicture->pDrawable) -- RADEON_FALLBACK(("Solid or gradient pictures not supported yet\n")); -- -- pSrcPixmap = RADEONGetDrawablePixmap(pSrcPicture->pDrawable); -- - if (IS_R500_3D) { - max_tex_w = 4096; - max_tex_h = 4096; -@@ -1416,13 +1404,6 @@ static Bool R300CheckComposite(int op, PicturePtr pSrcPicture, PicturePtr pMaskP - } - } - -- if (pSrcPixmap->drawable.width > max_tex_w || -- pSrcPixmap->drawable.height > max_tex_h) { -- RADEON_FALLBACK(("Source w/h too large (%d,%d).\n", -- pSrcPixmap->drawable.width, -- pSrcPixmap->drawable.height)); -- } -- - pDstPixmap = RADEONGetDrawablePixmap(pDstPicture->pDrawable); - - if (pDstPixmap->drawable.width > max_dst_w || -@@ -1432,20 +1413,32 @@ static Bool R300CheckComposite(int op, PicturePtr pSrcPicture, PicturePtr pMaskP - pDstPixmap->drawable.height)); - } - -+ if (pSrcPicture->pDrawable) { -+ pSrcPixmap = RADEONGetDrawablePixmap(pSrcPicture->pDrawable); -+ -+ if (pSrcPixmap->drawable.width > max_tex_w || -+ pSrcPixmap->drawable.height > max_tex_h) { -+ RADEON_FALLBACK(("Source w/h too large (%d,%d).\n", -+ pSrcPixmap->drawable.width, -+ pSrcPixmap->drawable.height)); -+ } -+ } else if (pSrcPicture->pSourcePict->type != SourcePictTypeSolidFill) -+ RADEON_FALLBACK(("Gradient pictures not supported yet\n")); -+ - if (pMaskPicture) { - PixmapPtr pMaskPixmap; - -- if (!pMaskPicture->pDrawable) -- RADEON_FALLBACK(("Solid or gradient pictures not supported yet\n")); -+ if (pMaskPicture->pDrawable) { -+ pMaskPixmap = RADEONGetDrawablePixmap(pMaskPicture->pDrawable); - -- pMaskPixmap = RADEONGetDrawablePixmap(pMaskPicture->pDrawable); -- -- if (pMaskPixmap->drawable.width > max_tex_w || -- pMaskPixmap->drawable.height > max_tex_h) { -- RADEON_FALLBACK(("Mask w/h too large (%d,%d).\n", -- pMaskPixmap->drawable.width, -- pMaskPixmap->drawable.height)); -- } -+ if (pMaskPixmap->drawable.width > max_tex_w || -+ pMaskPixmap->drawable.height > max_tex_h) { -+ RADEON_FALLBACK(("Mask w/h too large (%d,%d).\n", -+ pMaskPixmap->drawable.width, -+ pMaskPixmap->drawable.height)); -+ } -+ } else if (pMaskPicture->pSourcePict->type != SourcePictTypeSolidFill) -+ RADEON_FALLBACK(("Gradient pictures not supported yet\n")); - - if (pMaskPicture->componentAlpha) { - /* Check if it's component alpha that relies on a source alpha and -@@ -1479,7 +1472,8 @@ static Bool FUNC_NAME(R300PrepareComposite)(int op, PicturePtr pSrcPicture, - PicturePtr pMaskPicture, PicturePtr pDstPicture, - PixmapPtr pSrc, PixmapPtr pMask, PixmapPtr pDst) - { -- RINFO_FROM_SCREEN(pDst->drawable.pScreen); -+ ScreenPtr pScreen = pDst->drawable.pScreen; -+ RINFO_FROM_SCREEN(pScreen); - uint32_t dst_format, dst_pitch; - uint32_t txenable, colorpitch; - uint32_t blendcntl, output_fmt; -@@ -1508,9 +1502,24 @@ static Bool FUNC_NAME(R300PrepareComposite)(int op, PicturePtr pSrcPicture, - if (((dst_pitch >> pixel_shift) & 0x7) != 0) - RADEON_FALLBACK(("Bad destination pitch 0x%x\n", (int)dst_pitch)); - -+ if (!pSrc) { -+ pSrc = RADEONSolidPixmap(pScreen, cpu_to_le32(pSrcPicture->pSourcePict->solidFill.color)); -+ if (!pSrc) -+ RADEON_FALLBACK("Failed to create solid scratch pixmap\n"); -+ } -+ - if (!RADEONSetupSourceTile(pSrcPicture, pSrc, TRUE, FALSE)) - return FALSE; - -+ if (pMaskPicture && !pMask) { -+ pMask = RADEONSolidPixmap(pScreen, cpu_to_le32(pMaskPicture->pSourcePict->solidFill.color)); -+ if (!pMask) { -+ if (!pSrcPicture->pDrawable) -+ pScreen->DestroyPixmap(pSrc); -+ RADEON_FALLBACK("Failed to create solid scratch pixmap\n"); -+ } -+ } -+ - RADEONPrepareCompositeCS(op, pSrcPicture, pMaskPicture, pDstPicture, - pSrc, pMask, pDst); - -@@ -2132,7 +2141,7 @@ static Bool FUNC_NAME(R300PrepareComposite)(int op, PicturePtr pSrcPicture, - return TRUE; - } - --static void FUNC_NAME(RadeonDoneComposite)(PixmapPtr pDst) -+static void FUNC_NAME(RadeonFinishComposite)(PixmapPtr pDst) - { - RINFO_FROM_SCREEN(pDst->drawable.pScreen); - ACCEL_PREAMBLE(); -@@ -2179,6 +2188,20 @@ static void FUNC_NAME(RadeonDoneComposite)(PixmapPtr pDst) - LEAVE_DRAW(0); - } - -+static void FUNC_NAME(RadeonDoneComposite)(PixmapPtr pDst) -+{ -+ ScreenPtr pScreen = pDst->drawable.pScreen; -+ RINFO_FROM_SCREEN(pScreen); -+ struct radeon_accel_state *accel_state = info->accel_state; -+ -+ FUNC_NAME(RadeonFinishComposite)(pDst); -+ -+ if (!accel_state->src_pic->pDrawable) -+ pScreen->DestroyPixmap(accel_state->src_pix); -+ -+ if (accel_state->msk_pic && !accel_state->msk_pic->pDrawable) -+ pScreen->DestroyPixmap(accel_state->msk_pix); -+} - - #ifdef ACCEL_CP - -@@ -2257,7 +2280,7 @@ static void FUNC_NAME(RadeonCompositeTile)(ScrnInfoPtr pScrn, - if ((info->cs && CS_FULL(info->cs)) || - (!info->cs && (info->cp->indirectBuffer->used + 4 * 32) > - info->cp->indirectBuffer->total)) { -- FUNC_NAME(RadeonDoneComposite)(info->accel_state->dst_pix); -+ FUNC_NAME(RadeonFinishComposite)(info->accel_state->dst_pix); - if (info->cs) - radeon_cs_flush_indirect(pScrn); - else -diff --git a/src/radeon_exa_shared.c b/src/radeon_exa_shared.c -index be1d2fa..28dc335 100644 ---- a/src/radeon_exa_shared.c -+++ b/src/radeon_exa_shared.c -@@ -126,6 +126,25 @@ Bool RADEONCheckBPP(int bpp) - return FALSE; - } - -+PixmapPtr RADEONSolidPixmap(ScreenPtr pScreen, uint32_t solid) -+{ -+ 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)) { -+ pScreen->DestroyPixmap(pPix); -+ return NULL; -+ } -+ -+ memcpy(bo->ptr, &solid, 4); -+ radeon_bo_unmap(bo); -+ -+ return pPix; -+} -+ - static Bool radeon_vb_get(ScrnInfoPtr pScrn) - { - RADEONInfoPtr info = RADEONPTR(pScrn); -diff --git a/src/radeon_exa_shared.h b/src/radeon_exa_shared.h -index 7b8b5ca..60a1045 100644 ---- a/src/radeon_exa_shared.h -+++ b/src/radeon_exa_shared.h -@@ -40,6 +40,7 @@ extern void RADEONVlineHelperClear(ScrnInfoPtr pScrn); - extern void RADEONVlineHelperSet(ScrnInfoPtr pScrn, int x1, int y1, int x2, int y2); - extern Bool RADEONValidPM(uint32_t pm, int bpp); - extern Bool RADEONCheckBPP(int bpp); -+extern PixmapPtr RADEONSolidPixmap(ScreenPtr pScreen, uint32_t solid); - - #define RADEON_TRACE_FALL 0 - #define RADEON_TRACE_DRAW 0 --- -cgit v0.9.0.2-2-gbebe diff --git a/xf86-video-ati-6.14.4.tar.bz2 b/xf86-video-ati-6.14.4.tar.bz2 deleted file mode 100644 index f73cc93..0000000 --- a/xf86-video-ati-6.14.4.tar.bz2 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:4ffe435ef8fbe0989f6576f04f789e147a2de7fdefc3644e39d5ef626c37ef85 -size 1108681 diff --git a/xf86-video-ati-6.14.6.2.tar.bz2 b/xf86-video-ati-6.14.6.2.tar.bz2 new file mode 100644 index 0000000..ffa8cd8 --- /dev/null +++ b/xf86-video-ati-6.14.6.2.tar.bz2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:30922a440c825085239546113ed84e572ad226983d66c8def66c419d06c7f99f +size 311358 diff --git a/xf86-video-ati.changes b/xf86-video-ati.changes index 312a4d7..9774361 100644 --- a/xf86-video-ati.changes +++ b/xf86-video-ati.changes @@ -1,3 +1,35 @@ +------------------------------------------------------------------- +Fri Jun 29 18:23:21 UTC 2012 - tobias.johannes.klausmann@mni.thm.de + +- Update to version 6.14.6 + - radeon: dixPrivateKeyRegistered is only in server 1.9 + - radeon: require libdrm 2.4.36 for KMS support. + - UMS: Fix CRTC DPMS state check. + - Fix up displayWidth vs. virtualX confusion in radeon_setup_kernel_mem(). +- Removed patches: (Fixed in this release) + - U_UMS-Fix-CRTC-DPMS-state-check.patch + +------------------------------------------------------------------- +Fri Jun 15 15:53:20 UTC 2012 - tobias.johannes.klausmann@mni.thm.de + +- Update to version 6.14.5 + New in this Release: + + add solid picture accel + + tiling fixes + + new pci ids + + 6xx-9xx Xv improvements + + support for upcoming xserver API changes + + bug fixes + Added patch: + U_UMS-Fix-CRTC-DPMS-state-check.patch + Removed patches: (Fixed in this release) + U_xf86-video-ati-6.14.4-exa-solid-accel-evergreen.patch + U_xf86-video-ati-6.14.4-exa-solid-accel-r100.patch + U_xf86-video-ati-6.14.4-exa-solid-accel-r200.patch + U_xf86-video-ati-6.14.4-exa-solid-accel-r300.patch + U_EXA-Attempt-to-fix-solid-picture-acceleration-with-U.patch + U_EXA-UMS-Synchronize-to-the-GPU-before-writing-solid-.patch + ------------------------------------------------------------------- Fri Jun 8 14:58:57 UTC 2012 - sndirsch@suse.com diff --git a/xf86-video-ati.spec b/xf86-video-ati.spec index 74426e9..9361b79 100644 --- a/xf86-video-ati.spec +++ b/xf86-video-ati.spec @@ -17,7 +17,7 @@ Name: xf86-video-ati -Version: 6.14.4 +Version: 6.14.6.2 Release: 0 Summary: ATI video driver for the Xorg X server License: MIT @@ -27,17 +27,18 @@ Source0: http://xorg.freedesktop.org/releases/individual/driver/%{name}-% Patch0: xf86-video-ati.diff Patch3: xf86-video-ati-bug519261-increase-virtual.diff Patch4: xf86-video-ati-disable-dri-bug437651-ia64only.diff -Patch5: U_xf86-video-ati-6.14.4-exa-solid-accel-evergreen.patch -Patch6: U_xf86-video-ati-6.14.4-exa-solid-accel-r100.patch -Patch7: U_xf86-video-ati-6.14.4-exa-solid-accel-r200.patch -Patch8: U_xf86-video-ati-6.14.4-exa-solid-accel-r300.patch -Patch9: U_EXA-Attempt-to-fix-solid-picture-acceleration-with-U.patch -Patch10: U_EXA-UMS-Synchronize-to-the-GPU-before-writing-solid-.patch + BuildRequires: Mesa-devel +BuildRequires: autoconf >= 2.60 +BuildRequires: automake +BuildRequires: libtool BuildRequires: pkg-config BuildRequires: pkgconfig(fontsproto) -BuildRequires: pkgconfig(libdrm) >= 2.2 -BuildRequires: pkgconfig(libdrm_radeon) +# Libdrm 2.4.36 needed for kms +BuildRequires: pkgconfig(libdrm) >= 2.4.36 +# Glamor is new and we want that now +BuildRequires: pkgconfig(glamor) >= 0.3.1 +BuildRequires: pkgconfig(libdrm_radeon) >= 2.4.36 BuildRequires: pkgconfig(libudev) BuildRequires: pkgconfig(pciaccess) >= 0.8.0 BuildRequires: pkgconfig(randrproto) @@ -55,7 +56,7 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-build %x11_abi_videodrv_req %description -ati is an Xorg driver for ATI video cards. +ati is an Xorg driver for ATI/AMD video cards. It autodetects whether your hardware has a Radeon, Rage 128, or Mach64 or earlier class of chipset, and loads the radeon, r128, or mach64 @@ -63,20 +64,17 @@ driver as appropriate. %prep %setup -q -%patch0 -%patch3 -p1 +### File is gone (not applicable anymore?) +#%patch0 +### File is gone (not applicable anymore?) +#%patch3 -p1 %ifarch ia64 -%patch4 -p1 +#%patch4 -p1 %endif -%patch5 -p1 -%patch6 -p1 -%patch7 -p1 -%patch8 -p1 -%patch9 -p1 -%patch10 -p1 %build -%configure +autoreconf -fi +%configure --enable-glamor make %{?_smp_mflags} %install @@ -85,14 +83,14 @@ find %{buildroot}%{_libdir} -name '*.la' -type f -delete -print %files %defattr(-,root,root) -%doc ChangeLog COPYING README +%doc COPYING README %dir %{_libdir}/xorg/modules/drivers -%dir %{_libdir}/xorg/modules/multimedia +#%dir %{_libdir}/xorg/modules/multimedia %{_libdir}/xorg/modules/drivers/ati_drv.so %{_libdir}/xorg/modules/drivers/radeon_drv.so -%{_libdir}/xorg/modules/multimedia/theatre200_drv.so -%{_libdir}/xorg/modules/multimedia/theatre_detect_drv.so -%{_libdir}/xorg/modules/multimedia/theatre_drv.so +#%{_libdir}/xorg/modules/multimedia/theatre200_drv.so +#%{_libdir}/xorg/modules/multimedia/theatre_detect_drv.so +#%{_libdir}/xorg/modules/multimedia/theatre_drv.so %{_datadir}/man/man4/ati.4%{?ext_man} %{_datadir}/man/man4/radeon.4%{?ext_man} From 68539e43f85121a2b2074cfa427a791f50bd883d92bdb3acd4c77a7115bdfd7e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ismail=20D=C3=B6nmez?= Date: Tue, 18 Sep 2012 11:39:00 +0000 Subject: [PATCH 2/2] Fix changes for theatre driver removal OBS-URL: https://build.opensuse.org/package/show/X11:XOrg/xf86-video-ati?expand=0&rev=11 --- xf86-video-ati.changes | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/xf86-video-ati.changes b/xf86-video-ati.changes index 9774361..5dddf08 100644 --- a/xf86-video-ati.changes +++ b/xf86-video-ati.changes @@ -8,7 +8,8 @@ Fri Jun 29 18:23:21 UTC 2012 - tobias.johannes.klausmann@mni.thm.de - Fix up displayWidth vs. virtualX confusion in radeon_setup_kernel_mem(). - Removed patches: (Fixed in this release) - U_UMS-Fix-CRTC-DPMS-state-check.patch - +- Theatre drivers removed + ------------------------------------------------------------------- Fri Jun 15 15:53:20 UTC 2012 - tobias.johannes.klausmann@mni.thm.de