diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2012-02-06 20:37:54 +0000 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2012-02-06 21:10:35 +0000 |
commit | ef335a65a9d9f7eb96873201b546c25fd03d090c (patch) | |
tree | 4494a1ea110603f098f8cd8662ef959693af65f2 | |
parent | b7e3aaf773f05ce82405e135c0f99b40b3c2f434 (diff) |
sna: Search all active buckets for a temporary allocation
Reduce the need for creating a new object if we only need the allocation
for a single operation.
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
-rw-r--r-- | src/sna/kgem.c | 7 | ||||
-rw-r--r-- | src/sna/kgem.h | 1 | ||||
-rw-r--r-- | src/sna/sna_accel.c | 4 | ||||
-rw-r--r-- | src/sna/sna_render.c | 4 |
4 files changed, 9 insertions, 7 deletions
diff --git a/src/sna/kgem.c b/src/sna/kgem.c index 259666e6..e80eaaee 100644 --- a/src/sna/kgem.c +++ b/src/sna/kgem.c @@ -2291,13 +2291,14 @@ struct kgem_bo *kgem_create_2d(struct kgem *kgem, if (tiling < 0) tiling = -tiling, flags |= CREATE_EXACT; - DBG(("%s(%dx%d, bpp=%d, tiling=%d, exact=%d, inactive=%d, cpu-mapping=%d, gtt-mapping=%d, scanout?=%d)\n", __FUNCTION__, + DBG(("%s(%dx%d, bpp=%d, tiling=%d, exact=%d, inactive=%d, cpu-mapping=%d, gtt-mapping=%d, scanout?=%d, temp?=%d)\n", __FUNCTION__, width, height, bpp, tiling, !!(flags & CREATE_EXACT), !!(flags & CREATE_INACTIVE), !!(flags & CREATE_CPU_MAP), !!(flags & CREATE_GTT_MAP), - !!(flags & CREATE_SCANOUT))); + !!(flags & CREATE_SCANOUT), + !!(flags & CREATE_TEMPORARY))); size = kgem_surface_size(kgem, kgem->has_relaxed_fencing, @@ -2404,7 +2405,7 @@ struct kgem_bo *kgem_create_2d(struct kgem *kgem, /* Best active match */ retry = NUM_CACHE_BUCKETS - bucket; - if (retry > 3) + if (retry > 3 && (flags & CREATE_TEMPORARY) == 0) retry = 3; search_again: assert(bucket < NUM_CACHE_BUCKETS); diff --git a/src/sna/kgem.h b/src/sna/kgem.h index b6930e0c..f3a7b94e 100644 --- a/src/sna/kgem.h +++ b/src/sna/kgem.h @@ -221,6 +221,7 @@ enum { CREATE_CPU_MAP = 0x4, CREATE_GTT_MAP = 0x8, CREATE_SCANOUT = 0x10, + CREATE_TEMPORARY = 0x20, }; struct kgem_bo *kgem_create_2d(struct kgem *kgem, int width, diff --git a/src/sna/sna_accel.c b/src/sna/sna_accel.c index a8bfe40c..2a4aaecc 100644 --- a/src/sna/sna_accel.c +++ b/src/sna/sna_accel.c @@ -700,7 +700,7 @@ sna_pixmap_create_scratch(ScreenPtr screen, priv->gpu_bo = kgem_create_2d(&sna->kgem, width, height, bpp, tiling, - 0); + CREATE_TEMPORARY); if (priv->gpu_bo == NULL) { free(priv); fbDestroyPixmap(pixmap); @@ -5522,7 +5522,7 @@ sna_poly_zero_line_blt(DrawablePtr drawable, adx, ady, sdx, sdy, 1, 1, octant); - DBG(("%s: adx=(%d, %d), sdx=(%d, %d), oc1=%d, oc2\n", + DBG(("%s: adx=(%d, %d), sdx=(%d, %d), oc1=%d, oc2=%d\n", __FUNCTION__, adx, ady, sdx, sdy, oc1, oc2)); if (adx == 0 || ady == 0) { if (x1 <= x2) { diff --git a/src/sna/sna_render.c b/src/sna/sna_render.c index c2b9e798..3309157d 100644 --- a/src/sna/sna_render.c +++ b/src/sna/sna_render.c @@ -1146,7 +1146,7 @@ sna_render_picture_extract(struct sna *sna, kgem_choose_tiling(&sna->kgem, I915_TILING_X, w, h, pixmap->drawable.bitsPerPixel), - 0); + CREATE_TEMPORARY); if (bo) { PixmapRec tmp; @@ -1725,7 +1725,7 @@ sna_render_composite_redirect(struct sna *sna, width, height, bpp, kgem_choose_tiling(&sna->kgem, I915_TILING_X, width, height, bpp), - CREATE_SCANOUT); + CREATE_SCANOUT | CREATE_TEMPORARY); if (!bo) return FALSE; |