diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2012-01-19 17:33:25 +0000 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2012-01-19 17:35:09 +0000 |
commit | 5caf806d42a1909ff3a7716d8bc592fa68a02377 (patch) | |
tree | 54a6eb5dcbfafddb1f6c542ff96f7a2ca8d68e1b | |
parent | dbc75532d5f6a10e9fc7cfe3634d5a0db7304a99 (diff) |
sna: BLT use dword pitch only for tiled surfaces
The gen4+ spec is a little misleading as states that all BLT pitches for
the XY commands are in dwords. Apparently not, as the upload/download
functions were already demonstrating. This only became apparent when
accelerating core text routines to offscreen pixmaps, such as composited
windows.
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
-rw-r--r-- | src/sna/sna_accel.c | 60 |
1 files changed, 24 insertions, 36 deletions
diff --git a/src/sna/sna_accel.c b/src/sna/sna_accel.c index 9690cb0e..9b934d60 100644 --- a/src/sna/sna_accel.c +++ b/src/sna/sna_accel.c @@ -2575,9 +2575,8 @@ sna_put_xybitmap_blt(DrawablePtr drawable, GCPtr gc, RegionPtr region, b[0] |= 3 << 20; b[0] |= ((box->x1 - x) & 7) << 17; b[1] = priv->gpu_bo->pitch; - if (sna->kgem.gen >= 40) { - if (priv->gpu_bo->tiling) - b[0] |= BLT_DST_TILED; + if (sna->kgem.gen >= 40 && priv->gpu_bo->tiling) { + b[0] |= BLT_DST_TILED; b[1] >>= 2; } b[1] |= blt_depth(drawable->depth) << 24; @@ -2705,9 +2704,8 @@ sna_put_xypixmap_blt(DrawablePtr drawable, GCPtr gc, RegionPtr region, b[0] |= 3 << 20; b[0] |= ((box->x1 - x) & 7) << 17; b[1] = bo->pitch; - if (sna->kgem.gen >= 40) { - if (bo->tiling) - b[0] |= BLT_DST_TILED; + if (sna->kgem.gen >= 40 && bo->tiling) { + b[0] |= BLT_DST_TILED; b[1] >>= 2; } b[1] |= 1 << 31; /* solid pattern */ @@ -4012,9 +4010,8 @@ sna_copy_bitmap_blt(DrawablePtr _bitmap, DrawablePtr drawable, GCPtr gc, br00 = 3 << 20; br13 = priv->gpu_bo->pitch; - if (sna->kgem.gen >= 40) { - if (priv->gpu_bo->tiling) - br00 |= BLT_DST_TILED; + if (sna->kgem.gen >= 40 && priv->gpu_bo->tiling) { + br00 |= BLT_DST_TILED; br13 >>= 2; } br13 |= blt_depth(drawable->depth) << 24; @@ -4177,9 +4174,8 @@ sna_copy_plane_blt(DrawablePtr source, DrawablePtr drawable, GCPtr gc, if (drawable->bitsPerPixel == 32) br00 |= 3 << 20; br13 = priv->gpu_bo->pitch; - if (sna->kgem.gen >= 40) { - if (priv->gpu_bo->tiling) - br00 |= BLT_DST_TILED; + if (sna->kgem.gen >= 40 && priv->gpu_bo->tiling) { + br00 |= BLT_DST_TILED; br13 >>= 2; } br13 |= blt_depth(drawable->depth) << 24; @@ -7619,9 +7615,8 @@ sna_poly_fill_rect_stippled_8x8_blt(DrawablePtr drawable, br00 |= 3 << 20; br13 = bo->pitch; - if (sna->kgem.gen >= 40) { - if (bo->tiling) - br00 |= BLT_DST_TILED; + if (sna->kgem.gen >= 40 && bo->tiling) { + br00 |= BLT_DST_TILED; br13 >>= 2; } br13 |= (gc->fillStyle == FillStippled) << 28; @@ -7859,9 +7854,8 @@ sna_poly_fill_rect_stippled_1_blt(DrawablePtr drawable, br00 = 3 << 20; br13 = bo->pitch; - if (sna->kgem.gen >= 40) { - if (bo->tiling) - br00 |= BLT_DST_TILED; + if (sna->kgem.gen >= 40 && bo->tiling) { + br00 |= BLT_DST_TILED; br13 >>= 2; } br13 |= (gc->fillStyle == FillStippled) << 29; @@ -8383,9 +8377,8 @@ sna_poly_fill_rect_stippled_n_blt(DrawablePtr drawable, br00 = XY_MONO_SRC_COPY_IMM | 3 << 20; br13 = bo->pitch; - if (sna->kgem.gen >= 40) { - if (bo->tiling) - br00 |= BLT_DST_TILED; + if (sna->kgem.gen >= 40 && bo->tiling) { + br00 |= BLT_DST_TILED; br13 >>= 2; } br13 |= (gc->fillStyle == FillStippled) << 29; @@ -8854,9 +8847,8 @@ sna_glyph_blt(DrawablePtr drawable, GCPtr gc, b = sna->kgem.batch + sna->kgem.nbatch; b[0] = XY_SETUP_BLT | 3 << 20; b[1] = bo->pitch; - if (sna->kgem.gen >= 40) { - if (bo->tiling) - b[0] |= BLT_DST_TILED; + if (sna->kgem.gen >= 40 && bo->tiling) { + b[0] |= BLT_DST_TILED; b[1] >>= 2; } b[1] |= 1 << 30 | transparent << 29 | blt_depth(drawable->depth) << 24 | rop << 16; @@ -8909,9 +8901,8 @@ sna_glyph_blt(DrawablePtr drawable, GCPtr gc, b = sna->kgem.batch + sna->kgem.nbatch; b[0] = XY_SETUP_BLT | 3 << 20; b[1] = bo->pitch; - if (sna->kgem.gen >= 40) { - if (bo->tiling) - b[0] |= BLT_DST_TILED; + if (sna->kgem.gen >= 40 && bo->tiling) { + b[0] |= BLT_DST_TILED; b[1] >>= 2; } b[1] |= 1 << 30 | transparent << 29 | blt_depth(drawable->depth) << 24 | rop << 16; @@ -9450,9 +9441,8 @@ sna_reversed_glyph_blt(DrawablePtr drawable, GCPtr gc, b = sna->kgem.batch + sna->kgem.nbatch; b[0] = XY_SETUP_BLT | 1 << 20; b[1] = priv->gpu_bo->pitch; - if (sna->kgem.gen >= 40) { - if (priv->gpu_bo->tiling) - b[0] |= BLT_DST_TILED; + if (sna->kgem.gen >= 40 && priv->gpu_bo->tiling) { + b[0] |= BLT_DST_TILED; b[1] >>= 2; } b[1] |= 1 << 30 | transparent << 29 | blt_depth(drawable->depth) << 24 | rop << 16; @@ -9505,9 +9495,8 @@ sna_reversed_glyph_blt(DrawablePtr drawable, GCPtr gc, b = sna->kgem.batch + sna->kgem.nbatch; b[0] = XY_SETUP_BLT | 1 << 20; b[1] = priv->gpu_bo->pitch; - if (sna->kgem.gen >= 40) { - if (priv->gpu_bo->tiling) - b[0] |= BLT_DST_TILED; + if (sna->kgem.gen >= 40 && priv->gpu_bo->tiling) { + b[0] |= BLT_DST_TILED; b[1] >>= 2; } b[1] |= 1 << 30 | transparent << 29 | blt_depth(drawable->depth) << 24 | rop << 16; @@ -9801,9 +9790,8 @@ sna_push_pixels_solid_blt(GCPtr gc, b[0] |= 3 << 20; b[0] |= ((box->x1 - region->extents.x1) & 7) << 17; b[1] = priv->gpu_bo->pitch; - if (sna->kgem.gen >= 40) { - if (priv->gpu_bo->tiling) - b[0] |= BLT_DST_TILED; + if (sna->kgem.gen >= 40 && priv->gpu_bo->tiling) { + b[0] |= BLT_DST_TILED; b[1] >>= 2; } b[1] |= 1 << 29; |