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, &region->extents)))
+	    (priv->flush || box_inplace(pixmap, &region->extents))) {
+		DBG(("%s: marking for inplace hint (%d, %d)\n",
+		     __FUNCTION__, priv->flush, box_inplace(pixmap, &region->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