From 566f1931ee2916269e164e114bffaf2da1d039d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B8ren=20Sandmann=20Pedersen?= Date: Tue, 11 Jan 2011 10:33:57 -0500 Subject: [PATCH] Move miTriangles to fb as fbTriangles() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The fb version simply calls the new pixman_composite_triangles(). This allows us to get rid of miCreateAlphaPicture(). Reviewed-by: Adam Jackson Signed-off-by: Søren Sandmann --- fb/fbpict.c | 1 + fb/fbpict.h | 10 +++++ fb/fbtrap.c | 109 ++++++++++++++++++++++++++++++++++-------------- render/mipict.c | 2 +- render/mipict.h | 17 -------- render/mitrap.c | 49 ---------------------- render/mitri.c | 59 -------------------------- 7 files changed, 90 insertions(+), 157 deletions(-) diff --git a/fb/fbpict.c b/fb/fbpict.c index 6e66db844..312f3df21 100644 --- a/fb/fbpict.c +++ b/fb/fbpict.c @@ -367,6 +367,7 @@ fbPictureInit (ScreenPtr pScreen, PictFormatPtr formats, int nformats) ps->Trapezoids = fbTrapezoids; ps->AddTraps = fbAddTraps; ps->AddTriangles = fbAddTriangles; + ps->Triangles = fbTriangles; return TRUE; } diff --git a/fb/fbpict.h b/fb/fbpict.h index 03d266589..b880ebbe1 100644 --- a/fb/fbpict.h +++ b/fb/fbpict.h @@ -75,4 +75,14 @@ fbTrapezoids (CARD8 op, int ntrap, xTrapezoid *traps); +extern _X_EXPORT void +fbTriangles (CARD8 op, + PicturePtr pSrc, + PicturePtr pDst, + PictFormatPtr maskFormat, + INT16 xSrc, + INT16 ySrc, + int ntris, + xTriangle *tris); + #endif /* _FBPICT_H_ */ diff --git a/fb/fbtrap.c b/fb/fbtrap.c index 687de5527..3b197b412 100644 --- a/fb/fbtrap.c +++ b/fb/fbtrap.c @@ -157,51 +157,56 @@ fbAddTriangles (PicturePtr pPicture, } } +typedef void (* CompositeShapesFunc) (pixman_op_t op, + pixman_image_t *src, + pixman_image_t *dst, + pixman_format_code_t mask_format, + int x_src, int y_src, + int x_dst, int y_dst, + int n_shapes, const uint8_t *shapes); -void -fbTrapezoids (CARD8 op, - PicturePtr pSrc, - PicturePtr pDst, - PictFormatPtr maskFormat, - INT16 xSrc, - INT16 ySrc, - int ntrap, - xTrapezoid *traps) +static void +fbShapes (CompositeShapesFunc composite, + pixman_op_t op, + PicturePtr pSrc, + PicturePtr pDst, + PictFormatPtr maskFormat, + int16_t xSrc, + int16_t ySrc, + int16_t xDst, + int16_t yDst, + int nshapes, + int shape_size, + const uint8_t * shapes) { pixman_image_t *src, *dst; int src_xoff, src_yoff; int dst_xoff, dst_yoff; - if (ntrap == 0) - return; - src = image_from_pict (pSrc, FALSE, &src_xoff, &src_yoff); dst = image_from_pict (pDst, TRUE, &dst_xoff, &dst_yoff); if (src && dst) { pixman_format_code_t format; - int x_dst, y_dst; - int i; - x_dst = traps[0].left.p1.x >> 16; - y_dst = traps[0].left.p1.y >> 16; - if (!maskFormat) { + int i; + if (pDst->polyEdge == PolyEdgeSharp) format = PIXMAN_a1; else format = PIXMAN_a8; - for (i = 0; i < ntrap; ++i) + for (i = 0; i < nshapes; ++i) { - pixman_composite_trapezoids (op, src, dst, format, - xSrc + src_xoff, - ySrc + src_yoff, - x_dst + dst_xoff, - y_dst + dst_yoff, - 1, (pixman_trapezoid_t *)traps++); + composite (op, src, dst, format, + xSrc + src_xoff, + ySrc + src_yoff, + xDst + dst_xoff, + yDst + dst_yoff, + 1, shapes + i * shape_size); } } else @@ -221,16 +226,58 @@ fbTrapezoids (CARD8 op, format = PIXMAN_a8; break; } - - pixman_composite_trapezoids (op, src, dst, format, - xSrc + src_xoff, - ySrc + src_yoff, - x_dst + dst_xoff, - y_dst + dst_yoff, - ntrap, (pixman_trapezoid_t *)traps); + + composite (op, src, dst, format, + xSrc + src_xoff, + ySrc + src_yoff, + xDst + dst_xoff, + yDst + dst_yoff, + nshapes, shapes); } } free_pixman_pict (pSrc, src); free_pixman_pict (pDst, dst); } + +void +fbTrapezoids (CARD8 op, + PicturePtr pSrc, + PicturePtr pDst, + PictFormatPtr maskFormat, + INT16 xSrc, + INT16 ySrc, + int ntrap, + xTrapezoid *traps) +{ + int xDst, yDst; + + xDst = traps[0].left.p1.x >> 16; + yDst = traps[0].left.p1.y >> 16; + + fbShapes ((CompositeShapesFunc)pixman_composite_trapezoids, + op, pSrc, pDst, maskFormat, + xSrc, ySrc, xDst, yDst, + ntrap, sizeof (xTrapezoid), (const uint8_t *)traps); +} + +void +fbTriangles (CARD8 op, + PicturePtr pSrc, + PicturePtr pDst, + PictFormatPtr maskFormat, + INT16 xSrc, + INT16 ySrc, + int ntris, + xTriangle *tris) +{ + int xDst, yDst; + + xDst = tris[0].p1.x >> 16; + yDst = tris[0].p1.y >> 16; + + fbShapes ((CompositeShapesFunc)pixman_composite_triangles, + op, pSrc, pDst, maskFormat, + xSrc, ySrc, xDst, yDst, + ntris, sizeof (xTriangle), (const uint8_t *)tris); +} diff --git a/render/mipict.c b/render/mipict.c index 46b45b56a..3b7388879 100644 --- a/render/mipict.c +++ b/render/mipict.c @@ -632,7 +632,7 @@ miPictureInit (ScreenPtr pScreen, PictFormatPtr formats, int nformats) ps->Glyphs = miGlyphs; ps->CompositeRects = miCompositeRects; ps->Trapezoids = 0; - ps->Triangles = miTriangles; + ps->Triangles = 0; ps->TriStrip = miTriStrip; ps->TriFan = miTriFan; diff --git a/render/mipict.h b/render/mipict.h index be7b20b82..d1495891e 100644 --- a/render/mipict.h +++ b/render/mipict.h @@ -151,16 +151,6 @@ miPointFixedBounds (int npoint, xPointFixed *points, BoxPtr bounds); extern _X_EXPORT void miTriangleBounds (int ntri, xTriangle *tris, BoxPtr bounds); -extern _X_EXPORT void -miTriangles (CARD8 op, - PicturePtr pSrc, - PicturePtr pDst, - PictFormatPtr maskFormat, - INT16 xSrc, - INT16 ySrc, - int ntri, - xTriangle *tris); - extern _X_EXPORT void miTriStrip (CARD8 op, PicturePtr pSrc, @@ -181,13 +171,6 @@ miTriFan (CARD8 op, int npoint, xPointFixed *points); -extern _X_EXPORT PicturePtr -miCreateAlphaPicture (ScreenPtr pScreen, - PicturePtr pDst, - PictFormatPtr pPictFormat, - CARD16 width, - CARD16 height); - extern _X_EXPORT Bool miInitIndexed (ScreenPtr pScreen, PictFormatPtr pFormat); diff --git a/render/mitrap.c b/render/mitrap.c index 1f09a1eb9..445f23630 100644 --- a/render/mitrap.c +++ b/render/mitrap.c @@ -34,55 +34,6 @@ #include "picturestr.h" #include "mipict.h" -PicturePtr -miCreateAlphaPicture (ScreenPtr pScreen, - PicturePtr pDst, - PictFormatPtr pPictFormat, - CARD16 width, - CARD16 height) -{ - PixmapPtr pPixmap; - PicturePtr pPicture; - GCPtr pGC; - int error; - xRectangle rect; - - if (width > 32767 || height > 32767) - return 0; - - if (!pPictFormat) - { - if (pDst->polyEdge == PolyEdgeSharp) - pPictFormat = PictureMatchFormat (pScreen, 1, PICT_a1); - else - pPictFormat = PictureMatchFormat (pScreen, 8, PICT_a8); - if (!pPictFormat) - return 0; - } - - pPixmap = (*pScreen->CreatePixmap) (pScreen, width, height, - pPictFormat->depth, 0); - if (!pPixmap) - return 0; - pGC = GetScratchGC (pPixmap->drawable.depth, pScreen); - if (!pGC) - { - (*pScreen->DestroyPixmap) (pPixmap); - return 0; - } - ValidateGC (&pPixmap->drawable, pGC); - rect.x = 0; - rect.y = 0; - rect.width = width; - rect.height = height; - (*pGC->ops->PolyFillRect)(&pPixmap->drawable, pGC, 1, &rect); - FreeScratchGC (pGC); - pPicture = CreatePicture (0, &pPixmap->drawable, pPictFormat, - 0, 0, serverClient, &error); - (*pScreen->DestroyPixmap) (pPixmap); - return pPicture; -} - static xFixed miLineFixedX (xLineFixed *l, xFixed y, Bool ceil) { diff --git a/render/mitri.c b/render/mitri.c index a805a717c..b258c2156 100644 --- a/render/mitri.c +++ b/render/mitri.c @@ -67,65 +67,6 @@ miTriangleBounds (int ntri, xTriangle *tris, BoxPtr bounds) miPointFixedBounds (ntri * 3, (xPointFixed *) tris, bounds); } -void -miTriangles (CARD8 op, - PicturePtr pSrc, - PicturePtr pDst, - PictFormatPtr maskFormat, - INT16 xSrc, - INT16 ySrc, - int ntri, - xTriangle *tris) -{ - ScreenPtr pScreen = pDst->pDrawable->pScreen; - PictureScreenPtr ps = GetPictureScreen(pScreen); - - /* - * Check for solid alpha add - */ - if (op == PictOpAdd && miIsSolidAlpha (pSrc)) - { - (*ps->AddTriangles) (pDst, 0, 0, ntri, tris); - } - else if (maskFormat) - { - BoxRec bounds; - PicturePtr pPicture; - INT16 xDst, yDst; - INT16 xRel, yRel; - - xDst = tris[0].p1.x >> 16; - yDst = tris[0].p1.y >> 16; - - miTriangleBounds (ntri, tris, &bounds); - if (bounds.x2 <= bounds.x1 || bounds.y2 <= bounds.y1) - return; - pPicture = miCreateAlphaPicture (pScreen, pDst, maskFormat, - bounds.x2 - bounds.x1, - bounds.y2 - bounds.y1); - if (!pPicture) - return; - (*ps->AddTriangles) (pPicture, -bounds.x1, -bounds.y1, ntri, tris); - - xRel = bounds.x1 + xSrc - xDst; - yRel = bounds.y1 + ySrc - yDst; - CompositePicture (op, pSrc, pPicture, pDst, - xRel, yRel, 0, 0, bounds.x1, bounds.y1, - bounds.x2 - bounds.x1, bounds.y2 - bounds.y1); - FreePicture (pPicture, 0); - } - else - { - if (pDst->polyEdge == PolyEdgeSharp) - maskFormat = PictureMatchFormat (pScreen, 1, PICT_a1); - else - maskFormat = PictureMatchFormat (pScreen, 8, PICT_a8); - - for (; ntri; ntri--, tris++) - miTriangles (op, pSrc, pDst, maskFormat, xSrc, ySrc, 1, tris); - } -} - void miTriStrip (CARD8 op, PicturePtr pSrc,