From 542aeca6e67fc64f9133ca3e27ac8eca28af6d25 Mon Sep 17 00:00:00 2001 From: Chris Wilson Date: Tue, 17 Jun 2014 12:26:30 +0100 Subject: sna: Tweak creation 8x8 tiled patterns Avoid reading back from a GTT mmapping. Signed-off-by: Chris Wilson --- src/sna/sna_accel.c | 27 ++++++++++++++------------- src/sna/sna_dri2.c | 2 +- 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/src/sna/sna_accel.c b/src/sna/sna_accel.c index 43fb6b99..5d9723b4 100644 --- a/src/sna/sna_accel.c +++ b/src/sna/sna_accel.c @@ -12256,45 +12256,46 @@ sna_poly_fill_rect_tiled_nxm_blt(DrawablePtr drawable, PixmapPtr pixmap = get_drawable_pixmap(drawable); struct sna *sna = to_sna_from_pixmap(pixmap); PixmapPtr tile = gc->tile.pixmap; + int w, h, bpp = tile->drawable.bitsPerPixel; struct kgem_bo *upload; - int w, h, cpp; void *ptr; bool ret; DBG(("%s: %dx%d\n", __FUNCTION__, tile->drawable.width, tile->drawable.height)); + assert(tile->drawable.height && tile->drawable.height <= 8); + assert(tile->drawable.width && tile->drawable.width <= 8); if (!sna_pixmap_move_to_cpu(tile, MOVE_READ)) return false; - upload = kgem_create_buffer(&sna->kgem, 8*tile->drawable.bitsPerPixel, - KGEM_BUFFER_WRITE_INPLACE, + upload = kgem_create_buffer(&sna->kgem, 8*bpp, + tile->drawable.height < 8 ? KGEM_BUFFER_WRITE : KGEM_BUFFER_WRITE_INPLACE, &ptr); if (upload == NULL) return false; - assert(tile->drawable.height && tile->drawable.height <= 8); - assert(tile->drawable.width && tile->drawable.width <= 8); - assert(has_coherent_ptr(sna, sna_pixmap(tile), MOVE_READ)); - upload->pitch = 8*tile->drawable.bitsPerPixel >> 3; /* for sanity checks */ + upload->pitch = bpp; /* for sanity checks */ assert(tile->devKind); - cpp = tile->drawable.bitsPerPixel/8; + assert(has_coherent_ptr(sna, sna_pixmap(tile), MOVE_READ)); for (h = 0; h < tile->drawable.height; h++) { uint8_t *src = (uint8_t *)tile->devPrivate.ptr + tile->devKind*h; - uint8_t *dst = (uint8_t *)ptr + 8*cpp*h; + uint8_t *dst = (uint8_t *)ptr + bpp*h; - w = tile->drawable.width*cpp; + w = tile->drawable.width*bpp/8; memcpy(dst, src, w); - while (w < 8*cpp) { - memcpy(dst+w, dst, w); + while (w < bpp) { + memcpy(dst+w, src, w); w *= 2; } + assert(w == bpp); } while (h < 8) { - memcpy((uint8_t*)ptr + h*w, ptr, h*w); + memcpy((uint8_t*)ptr + bpp*h, ptr, bpp*h); h *= 2; } + assert(h == 8); ret = sna_poly_fill_rect_tiled_8x8_blt(drawable, bo, damage, upload, gc, n, rect, diff --git a/src/sna/sna_dri2.c b/src/sna/sna_dri2.c index 2686b7c8..c35e0bdf 100644 --- a/src/sna/sna_dri2.c +++ b/src/sna/sna_dri2.c @@ -1705,7 +1705,7 @@ sna_dri2_xchg(DrawablePtr draw, DRI2BufferPtr front, DRI2BufferPtr back) assert(front_bo != back_bo); DBG(("%s: win=%ld, exchange front=%d/%d and back=%d/%d, pixmap=%ld %dx%d\n", - __FUNCTION__, win->id, + __FUNCTION__, win->drawable.id, front_bo->handle, front->name, back_bo->handle, back->name, pixmap->drawable.serialNumber, -- cgit v1.2.3