From: Michel Dänzer <[email protected]>

Mostly reducing function call argument passing overhead.

Also remove unused rect member pDst.

Signed-off-by: Michel Dänzer <[email protected]>
---
 exa/exa_glyphs.c |   87 ++++++++++++++++++++----------------------------------
 exa/exa_priv.h   |    1 -
 2 files changed, 32 insertions(+), 56 deletions(-)

diff --git a/exa/exa_glyphs.c b/exa/exa_glyphs.c
index 3918122..bd65c99 100644
--- a/exa/exa_glyphs.c
+++ b/exa/exa_glyphs.c
@@ -342,21 +342,14 @@ damage:
                    y + cache->glyphHeight);
 }
 
-static ExaGlyphCacheResult
-exaGlyphCacheBufferGlyph(ScreenPtr         pScreen,
-                        ExaGlyphCachePtr  cache,
-                        ExaGlyphBufferPtr buffer,
-                        GlyphPtr          pGlyph,
-                        PicturePtr        pSrc,
-                        PicturePtr        pDst,
-                        INT16             xSrc,
-                        INT16             ySrc,
-                        INT16             xMask,
-                        INT16             yMask,
-                        INT16             xDst,
-                        INT16             yDst)
+static _X_INLINE ExaGlyphCacheResult
+exaGlyphCacheBufferGlyph(ScreenPtr           pScreen,
+                        ExaGlyphCachePtr    cache,
+                        ExaGlyphBufferPtr   buffer,
+                        GlyphPtr            pGlyph,
+                        PicturePtr          pSrc,
+                        ExaCompositeRectPtr pRect)
 {
-    ExaCompositeRectPtr rect;
     struct exaGlyph *priv;
     int pos = -1;
     int x, y;
@@ -429,30 +422,20 @@ exaGlyphCacheBufferGlyph(ScreenPtr         pScreen,
     }
 
     buffer->mask = cache->picture;
-           
-    rect = &buffer->rects[buffer->count];
 
     if (pSrc)
     {
-       rect->xSrc = xSrc;
-       rect->ySrc = ySrc;
-       rect->xMask = x;
-       rect->yMask = y;
+       pRect->xMask = x;
+       pRect->yMask = y;
     }
     else
     {
-       rect->xSrc = x;
-       rect->ySrc = y;
-       rect->xMask = 0;
-       rect->yMask = 0;
+       pRect->xSrc = x;
+       pRect->ySrc = y;
+       pRect->xMask = 0;
+       pRect->yMask = 0;
     }
 
-    rect->pDst = pDst;
-    rect->xDst = xDst;
-    rect->yDst = yDst;
-    rect->width = pGlyph->info.width;
-    rect->height = pGlyph->info.height;
-
     buffer->count++;
 
     return ExaGlyphSuccess;
@@ -466,7 +449,6 @@ exaBufferGlyph(ScreenPtr         pScreen,
               ExaGlyphBufferPtr buffer,
               GlyphPtr          pGlyph,
               PicturePtr        pSrc,
-              PicturePtr        pDst,
               INT16             xSrc,
               INT16             ySrc,
               INT16             xMask,
@@ -475,11 +457,11 @@ exaBufferGlyph(ScreenPtr         pScreen,
               INT16             yDst)
 {
     ExaScreenPriv(pScreen);
-    unsigned int format = (GlyphPicture(pGlyph)[pScreen->myNum])->format;
+    PicturePtr mask = GlyphPicture(pGlyph)[pScreen->myNum];
+    unsigned int format = mask->format;
     int width = pGlyph->info.width;
     int height = pGlyph->info.height;
-    ExaCompositeRectPtr rect;
-    PicturePtr mask;
+    ExaCompositeRectPtr pRect;
     int i;
 
     if (buffer->count == GLYPH_BUFFER_SIZE)
@@ -488,6 +470,16 @@ exaBufferGlyph(ScreenPtr         pScreen,
     if (PICT_FORMAT_BPP(format) == 1)
        format = PICT_a8;
     
+    pRect = &buffer->rects[buffer->count];
+    pRect->xSrc = xSrc;
+    pRect->ySrc = ySrc;
+    pRect->xMask = xMask;
+    pRect->yMask = yMask;
+    pRect->xDst = xDst;
+    pRect->yDst = yDst;
+    pRect->width = width;
+    pRect->height = height;
+
     for (i = 0; i < EXA_NUM_GLYPH_CACHES; i++) {
        ExaGlyphCachePtr cache = &pExaScr->glyphCaches[i];
 
@@ -495,14 +487,11 @@ exaBufferGlyph(ScreenPtr         pScreen,
            width <= cache->glyphWidth &&
            height <= cache->glyphHeight) {
            ExaGlyphCacheResult result = exaGlyphCacheBufferGlyph(pScreen,
-                                                                 
&pExaScr->glyphCaches[i],
+                                                                 cache,
                                                                  buffer,
                                                                  pGlyph,
                                                                  pSrc,
-                                                                 pDst,
-                                                                 xSrc, ySrc,
-                                                                 xMask, yMask,
-                                                                 xDst, yDst);
+                                                                 pRect);
            switch (result) {
            case ExaGlyphFail:
                break;
@@ -515,22 +504,10 @@ exaBufferGlyph(ScreenPtr         pScreen,
 
     /* Couldn't find the glyph in the cache, use the glyph picture directly */
 
-    mask = GlyphPicture(pGlyph)[pScreen->myNum];
     if (buffer->mask && buffer->mask != mask)
        return ExaGlyphNeedFlush;
-
     buffer->mask = mask;
 
-    rect = &buffer->rects[buffer->count];
-    rect->xSrc = xSrc;
-    rect->ySrc = ySrc;
-    rect->xMask = xMask;
-    rect->yMask = yMask;
-    rect->xDst = xDst;
-    rect->yDst = yDst;
-    rect->width = width;
-    rect->height = height;
-
     buffer->count++;
 
     return ExaGlyphSuccess;
@@ -730,23 +707,23 @@ exaGlyphs (CARD8   op,
                /* pGlyph->info.{x,y} compensate for empty space in the glyph. 
*/
                if (maskFormat)
                {
-                   if (exaBufferGlyph(pScreen, &buffer, glyph, NULL, pMask,
+                   if (exaBufferGlyph(pScreen, &buffer, glyph, NULL,
                                       0, 0, 0, 0, x - glyph->info.x, y - 
glyph->info.y) == ExaGlyphNeedFlush)
                    {
                        exaGlyphsToMask(pMask, &buffer);
-                       exaBufferGlyph(pScreen, &buffer, glyph, NULL, pMask,
+                       exaBufferGlyph(pScreen, &buffer, glyph, NULL,
                                       0, 0, 0, 0, x - glyph->info.x, y - 
glyph->info.y);
                    }
                }
                else
                {
-                   if (exaBufferGlyph(pScreen, &buffer, glyph, pSrc, pDst,
+                   if (exaBufferGlyph(pScreen, &buffer, glyph, pSrc,
                                       xSrc + (x - glyph->info.x) - first_xOff, 
ySrc + (y - glyph->info.y) - first_yOff,
                                       0, 0, x - glyph->info.x, y - 
glyph->info.y)
                        == ExaGlyphNeedFlush)
                    {
                        exaGlyphsToDst(pSrc, pDst, &buffer);
-                       exaBufferGlyph(pScreen, &buffer, glyph, pSrc, pDst,
+                       exaBufferGlyph(pScreen, &buffer, glyph, pSrc,
                                       xSrc + (x - glyph->info.x) - first_xOff, 
ySrc + (y - glyph->info.y) - first_yOff,
                                       0, 0, x - glyph->info.x, y - 
glyph->info.y);
                    }
diff --git a/exa/exa_priv.h b/exa/exa_priv.h
index 251aad9..3d6843b 100644
--- a/exa/exa_priv.h
+++ b/exa/exa_priv.h
@@ -323,7 +323,6 @@ typedef struct {
 } ExaGCPrivRec, *ExaGCPrivPtr;
 
 typedef struct {
-    PicturePtr pDst;
     INT16 xSrc;
     INT16 ySrc;
     INT16 xMask;
-- 
1.7.5.1

_______________________________________________
[email protected]: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: http://lists.x.org/mailman/listinfo/xorg-devel

Reply via email to