diff --git a/src/sna/sna_accel.c b/src/sna/sna_accel.c index 308f52fc..c4a43a19 100644 --- a/src/sna/sna_accel.c +++ b/src/sna/sna_accel.c @@ -10942,6 +10942,12 @@ sna_glyph_blt(DrawablePtr drawable, GCPtr gc, _kgem_submit(&sna->kgem); _kgem_set_mode(&sna->kgem, KGEM_BLT); } + + DBG(("%s: glyph clip box (%d, %d), (%d, %d)\n", + __FUNCTION__, + extents->x1, extents->y1, + extents->x2, extents->y2)); + b = sna->kgem.batch + sna->kgem.nbatch; b[0] = XY_SETUP_BLT | 3 << 20; b[1] = bo->pitch; @@ -10984,12 +10990,12 @@ sna_glyph_blt(DrawablePtr drawable, GCPtr gc, goto skip; len = (w8 * h + 7) >> 3 << 1; - DBG(("%s glyph: (%d, %d) x (%d[%d], %d), len=%d\n" ,__FUNCTION__, - x,y, w, w8, h, len)); - x1 = x + c->metrics.leftSideBearing; y1 = y - c->metrics.ascent; + DBG(("%s glyph: (%d, %d) -> (%d, %d) x (%d[%d], %d), len=%d\n" ,__FUNCTION__, + x,y, x1, y1, w, w8, h, len)); + if (x1 >= extents->x2 || y1 >= extents->y2) goto skip; if (x1 + w <= extents->x1 || y1 + h <= extents->y1) @@ -11000,6 +11006,11 @@ sna_glyph_blt(DrawablePtr drawable, GCPtr gc, _kgem_submit(&sna->kgem); _kgem_set_mode(&sna->kgem, KGEM_BLT); + DBG(("%s: new batch, glyph clip box (%d, %d), (%d, %d)\n", + __FUNCTION__, + extents->x1, extents->y1, + extents->x2, extents->y2)); + b = sna->kgem.batch + sna->kgem.nbatch; b[0] = XY_SETUP_BLT | 3 << 20; b[1] = bo->pitch; @@ -11059,6 +11070,11 @@ skip: b = sna->kgem.batch + sna->kgem.nbatch; sna->kgem.nbatch += 3; + DBG(("%s: glyph clip box (%d, %d), (%d, %d)\n", + __FUNCTION__, + extents->x1, extents->y1, + extents->x2, extents->y2)); + b[0] = XY_SETUP_CLIP; b[1] = extents->y1 << 16 | extents->x1; b[2] = extents->y2 << 16 | extents->x2; @@ -11637,6 +11653,11 @@ sna_reversed_glyph_blt(DrawablePtr drawable, GCPtr gc, _kgem_submit(&sna->kgem); _kgem_set_mode(&sna->kgem, KGEM_BLT); } + + DBG(("%s: glyph clip box (%d, %d), (%d, %d)\n", + __FUNCTION__, + extents->x1, extents->y1, + extents->x2, extents->y2)); b = sna->kgem.batch + sna->kgem.nbatch; b[0] = XY_SETUP_BLT | 1 << 20; b[1] = bo->pitch; @@ -11675,12 +11696,12 @@ sna_reversed_glyph_blt(DrawablePtr drawable, GCPtr gc, goto skip; len = (w8 * h + 7) >> 3 << 1; - DBG(("%s glyph: (%d, %d) x (%d[%d], %d), len=%d\n" ,__FUNCTION__, - x,y, w, w8, h, len)); - x1 = x + c->metrics.leftSideBearing; y1 = y - c->metrics.ascent; + DBG(("%s glyph: (%d, %d) -> (%d, %d) x (%d[%d], %d), len=%d\n" ,__FUNCTION__, + x,y, x1, y1, w, w8, h, len)); + if (x1 >= extents->x2 || y1 >= extents->y2 || x1 + w <= extents->x1 || y1 + h <= extents->y1) { DBG(("%s: glyph is clipped (%d, %d)x(%d,%d) against extents (%d, %d), (%d, %d)\n", @@ -11713,6 +11734,11 @@ sna_reversed_glyph_blt(DrawablePtr drawable, GCPtr gc, _kgem_submit(&sna->kgem); _kgem_set_mode(&sna->kgem, KGEM_BLT); + DBG(("%s: new batch, glyph clip box (%d, %d), (%d, %d)\n", + __FUNCTION__, + extents->x1, extents->y1, + extents->x2, extents->y2)); + b = sna->kgem.batch + sna->kgem.nbatch; b[0] = XY_SETUP_BLT | 1 << 20; b[1] = bo->pitch; @@ -11778,6 +11804,11 @@ skip: b = sna->kgem.batch + sna->kgem.nbatch; sna->kgem.nbatch += 3; + DBG(("%s: glyph clip box (%d, %d), (%d, %d)\n", + __FUNCTION__, + extents->x1, extents->y1, + extents->x2, extents->y2)); + b[0] = XY_SETUP_CLIP; b[1] = extents->y1 << 16 | extents->x1; b[2] = extents->y2 << 16 | extents->x2;