xf86-video-intel: 4 commits - src/sna/kgem.c src/sna/sna_accel.c
Chris Wilson
ickle at kemper.freedesktop.org
Wed Jan 16 01:40:08 PST 2013
src/sna/kgem.c | 35 ++++++++++++++++++++++++++++-------
src/sna/sna_accel.c | 5 ++++-
2 files changed, 32 insertions(+), 8 deletions(-)
New commits:
commit ab36300a22222086b94857f356612106ffbeb480
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Wed Jan 16 09:17:59 2013 +0000
sna: Correct DBG to refer to the actual tiling mode forced
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
diff --git a/src/sna/kgem.c b/src/sna/kgem.c
index 74a7c24..98f3ec9 100644
--- a/src/sna/kgem.c
+++ b/src/sna/kgem.c
@@ -3293,12 +3293,12 @@ int kgem_choose_tiling(struct kgem *kgem, int tiling, int width, int height, int
tiling = I915_TILING_X;
if (width*bpp > (MAXSHORT-512) * 8) {
- DBG(("%s: large pitch [%d], forcing TILING_X\n",
- __FUNCTION__, width*bpp/8));
if (tiling > 0)
tiling = -tiling;
else if (tiling == 0)
tiling = -I915_TILING_X;
+ DBG(("%s: large pitch [%d], forcing TILING [%d]\n",
+ __FUNCTION__, width*bpp/8, tiling));
} else if (tiling && (width|height) > 8192) {
DBG(("%s: large tiled buffer [%dx%d], forcing TILING_X\n",
__FUNCTION__, width, height));
commit a6ecb6d31d8c543f38fca0be6b0ec82e59dcd8d2
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Wed Jan 16 09:14:40 2013 +0000
sna: Discard the batch if we are discarding the only buffer in it
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
diff --git a/src/sna/kgem.c b/src/sna/kgem.c
index af5702a..74a7c24 100644
--- a/src/sna/kgem.c
+++ b/src/sna/kgem.c
@@ -1738,6 +1738,18 @@ static void __kgem_bo_destroy(struct kgem *kgem, struct kgem_bo *bo)
assert(bo->io == false);
assert(bo->scanout == false);
+ if (bo->exec && kgem->nexec == 1) {
+ DBG(("%s: only handle in batch, discarding last operations\n",
+ __FUNCTION__));
+ assert(bo->exec == &kgem->exec[0]);
+ assert(kgem->exec[0].handle == bo->handle);
+ assert(RQ(bo->rq) == kgem->next_request);
+ bo->refcnt = 1;
+ kgem_reset(kgem);
+ assert(bo->rq == NULL);
+ bo->refcnt = 0;
+ }
+
if (bo->rq) {
struct list *cache;
@@ -2397,6 +2409,8 @@ void kgem_reset(struct kgem *kgem)
request);
list_del(&bo->request);
+ assert(RQ(bo->rq) == rq);
+
bo->binding.offset = 0;
bo->exec = NULL;
bo->target_handle = -1;
@@ -2411,8 +2425,10 @@ void kgem_reset(struct kgem *kgem)
}
}
- if (kgem->next_request != &kgem->static_request)
- free(kgem->next_request);
+ if (rq != &kgem->static_request) {
+ list_init(&rq->list);
+ __kgem_request_free(rq);
+ }
}
kgem->nfence = 0;
commit 26db2438e34feb8f28444bf7418869b4ecd870da
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Wed Jan 16 09:00:21 2013 +0000
sna: Fix computation of large object sizes to prevent overflow
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
diff --git a/src/sna/kgem.c b/src/sna/kgem.c
index fdba699..af5702a 100644
--- a/src/sna/kgem.c
+++ b/src/sna/kgem.c
@@ -1075,6 +1075,11 @@ void kgem_init(struct kgem *kgem, int fd, struct pci_device *dev, unsigned gen)
if (aperture.aper_size == 0)
aperture.aper_size = 64*1024*1024;
+ DBG(("%s: aperture size %lld, available now %lld\n",
+ __FUNCTION__,
+ (long long)aperture.aper_size,
+ (long long)aperture.aper_available_size));
+
kgem->aperture_total = aperture.aper_size;
kgem->aperture_high = aperture.aper_size * 3/4;
kgem->aperture_low = aperture.aper_size * 1/3;
@@ -1102,7 +1107,7 @@ void kgem_init(struct kgem *kgem, int fd, struct pci_device *dev, unsigned gen)
DBG(("%s: buffer size=%d [%d KiB]\n", __FUNCTION__,
kgem->buffer_size, kgem->buffer_size / 1024));
- kgem->max_object_size = 3 * kgem->aperture_high / 4;
+ kgem->max_object_size = 3 * (kgem->aperture_high >> 12) << 10;
kgem->max_gpu_size = kgem->max_object_size;
if (!kgem->has_llc)
kgem->max_gpu_size = MAX_CACHE_SIZE;
@@ -1119,9 +1124,9 @@ void kgem_init(struct kgem *kgem, int fd, struct pci_device *dev, unsigned gen)
if (kgem->max_gpu_size > totalram / 4)
kgem->max_gpu_size = totalram / 4;
- half_gpu_max = kgem->max_gpu_size / 2;
- kgem->max_cpu_size = half_gpu_max;
+ kgem->max_cpu_size = kgem->max_object_size;
+ half_gpu_max = kgem->max_gpu_size / 2;
kgem->max_copy_tile_size = (MAX_CACHE_SIZE + 1)/2;
if (kgem->max_copy_tile_size > half_gpu_max)
kgem->max_copy_tile_size = half_gpu_max;
commit 54c1d97d5ab325874e1c7b2639e58111d7a6b93f
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Wed Jan 16 09:00:04 2013 +0000
sna: Add DBG for when we add the inplace hint
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
diff --git a/src/sna/sna_accel.c b/src/sna/sna_accel.c
index 2d947a3..4bb50cd 100644
--- a/src/sna/sna_accel.c
+++ b/src/sna/sna_accel.c
@@ -1906,8 +1906,11 @@ sna_drawable_move_region_to_cpu(DrawablePtr drawable,
if (USE_INPLACE &&
(flags & MOVE_READ) == 0 &&
- (priv->flush || box_inplace(pixmap, ®ion->extents)))
+ (priv->flush || box_inplace(pixmap, ®ion->extents))) {
+ DBG(("%s: marking for inplace hint (%d, %d)\n",
+ __FUNCTION__, priv->flush, box_inplace(pixmap, ®ion->extents)));
flags |= MOVE_INPLACE_HINT;
+ }
if (flags & MOVE_WHOLE_HINT)
return _sna_pixmap_move_to_cpu(pixmap, flags);
More information about the xorg-commit
mailing list