diff options
Diffstat (limited to 'staging/xf86-video-ati/0003-poor-man-s-solid-picture-support-for-r200.patch')
-rw-r--r-- | staging/xf86-video-ati/0003-poor-man-s-solid-picture-support-for-r200.patch | 179 |
1 files changed, 0 insertions, 179 deletions
diff --git a/staging/xf86-video-ati/0003-poor-man-s-solid-picture-support-for-r200.patch b/staging/xf86-video-ati/0003-poor-man-s-solid-picture-support-for-r200.patch deleted file mode 100644 index 0a448fc93..000000000 --- a/staging/xf86-video-ati/0003-poor-man-s-solid-picture-support-for-r200.patch +++ /dev/null @@ -1,179 +0,0 @@ -From c5c8310858f8018a1754f2457d7b102dc7d62b23 Mon Sep 17 00:00:00 2001 -From: Alex Deucher <alexander.deucher@amd.com> -Date: Fri, 13 Apr 2012 13:28:10 -0400 -Subject: [PATCH 3/3] poor man's solid picture support for r200 - -Signed-off-by: Alex Deucher <alexander.deucher@amd.com> ---- - src/radeon_exa_render.c | 101 +++++++++++++++++++++++++++-------------------- - 1 files changed, 58 insertions(+), 43 deletions(-) - -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); - --- -1.7.7.5 - |