xf86-video-intel: 6 commits - src/sna/brw src/sna/gen6_render.c src/sna/gen8_eu.c src/sna/kgem.c src/sna/kgem.h src/sna/sna_accel.c src/sna/sna_composite.c src/sna/sna_display.c

Chris Wilson ickle at kemper.freedesktop.org
Fri Oct 31 09:21:25 PDT 2014


 src/sna/brw/brw_test_gen4.c |   12 +++++-----
 src/sna/brw/brw_test_gen5.c |   14 ++++++-----
 src/sna/brw/brw_test_gen6.c |    6 ++---
 src/sna/brw/brw_test_gen7.c |    2 -
 src/sna/brw/brw_wm.c        |    4 +--
 src/sna/gen6_render.c       |    2 -
 src/sna/gen8_eu.c           |    4 +--
 src/sna/kgem.c              |   52 ++++++++++++++++++++++++++++++++++++++++++--
 src/sna/kgem.h              |   10 ++++++--
 src/sna/sna_accel.c         |    6 ++---
 src/sna/sna_composite.c     |    2 -
 src/sna/sna_display.c       |   12 ++++++++--
 12 files changed, 96 insertions(+), 30 deletions(-)

New commits:
commit d959014c10e2408ed2f073bd5fcb8c558a17da07
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Fri Oct 31 16:12:37 2014 +0000

    sna: Modicum of extra DBG for transformed redisplay
    
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/gen6_render.c b/src/sna/gen6_render.c
index 95eb415..2504468 100644
--- a/src/sna/gen6_render.c
+++ b/src/sna/gen6_render.c
@@ -755,7 +755,7 @@ gen6_emit_drawing_rectangle(struct sna *sna,
 	OUT_BATCH(0);
 
 	DBG(("%s: offset=(%d, %d), limit=(%d, %d)\n",
-	     __FUNCTION__, op->dst.x, op->dst.y, op->dst.width, op->dst.width));
+	     __FUNCTION__, op->dst.x, op->dst.y, op->dst.width, op->dst.height));
 	OUT_BATCH(GEN6_3DSTATE_DRAWING_RECTANGLE | (4 - 2));
 	OUT_BATCH(0);
 	OUT_BATCH(limit);
diff --git a/src/sna/sna_display.c b/src/sna/sna_display.c
index f3971c6..0889f9d 100644
--- a/src/sna/sna_display.c
+++ b/src/sna/sna_display.c
@@ -6604,6 +6604,10 @@ sna_crtc_redisplay__fallback(xf86CrtcPtr crtc, RegionPtr region, struct kgem_bo
 		return;
 	}
 
+	DBG(("%s: dst format=%08x, depth=%d, bpp=%d, pitch=%d, size=%dx%d\n",
+	     __FUNCTION__, format->format, depth, draw->bitsPerPixel,
+	     bo->pitch, crtc->mode.HDisplay, crtc->mode.VDisplay));
+
 	ptr = kgem_bo_map__gtt(&sna->kgem, bo);
 	if (ptr == NULL)
 		return;
@@ -6627,7 +6631,7 @@ sna_crtc_redisplay__fallback(xf86CrtcPtr crtc, RegionPtr region, struct kgem_bo
 	if (error)
 		goto free_src;
 
-	if (crtc->filter)
+	if (crtc->filter && crtc->transform_in_use)
 		SetPicturePictFilter(src, crtc->filter,
 				     crtc->params, crtc->nparams);
 
@@ -6693,6 +6697,10 @@ sna_crtc_redisplay__composite(xf86CrtcPtr crtc, RegionPtr region, struct kgem_bo
 		return;
 	}
 
+	DBG(("%s: dst format=%08x, depth=%d, bpp=%d, pitch=%d, size=%dx%d\n",
+	     __FUNCTION__, format->format, depth, draw->bitsPerPixel,
+	     bo->pitch, crtc->mode.HDisplay, crtc->mode.VDisplay));
+
 	pixmap = sna_pixmap_create_unattached(screen, 0, 0, depth);
 	if (pixmap == NullPixmap)
 		return;
@@ -6717,7 +6725,7 @@ sna_crtc_redisplay__composite(xf86CrtcPtr crtc, RegionPtr region, struct kgem_bo
 	if (error)
 		goto free_src;
 
-	if (crtc->filter)
+	if (crtc->filter && crtc->transform_in_use)
 		SetPicturePictFilter(src, crtc->filter,
 				     crtc->params, crtc->nparams);
 
commit 1040d92e31eea4556c2605c809d18ec4c864424a
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Fri Oct 31 16:11:54 2014 +0000

    sna/gen6+: Fix projective sample coordinates
    
    Reported-by: "Ding, Chi" <chix.ding at intel.com>
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/brw/brw_wm.c b/src/sna/brw/brw_wm.c
index 1d1dda6..859e826 100644
--- a/src/sna/brw/brw_wm.c
+++ b/src/sna/brw/brw_wm.c
@@ -539,8 +539,8 @@ static void brw_wm_projective_st(struct brw_compile *p, int dw,
 			brw_vec8_grf(2, 0));
 		brw_PLN(p,
 			brw_vec8_grf(28, 0),
-			brw_vec1_grf(uv, 0),
-			brw_vec8_grf(4, 0));
+			brw_vec1_grf(uv, 4),
+			brw_vec8_grf(2, 0));
 
 		brw_MUL(p,
 			brw_message_reg(msg),
diff --git a/src/sna/gen8_eu.c b/src/sna/gen8_eu.c
index 2fd990a..71338c0 100644
--- a/src/sna/gen8_eu.c
+++ b/src/sna/gen8_eu.c
@@ -1247,8 +1247,8 @@ static void wm_projective_st(struct brw_compile *p, int dw,
 		 brw_vec8_grf(2, 0));
 	gen8_PLN(p,
 		 brw_vec8_grf(28, 0),
-		 brw_vec1_grf(uv, 0),
-		 brw_vec8_grf(4, 0));
+		 brw_vec1_grf(uv, 4),
+		 brw_vec8_grf(2, 0));
 
 	gen8_MUL(p,
 		 brw_message_reg(msg),
commit 30fded8dfa77c74de165ad53f82412a2e7fa88ae
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Fri Oct 31 16:11:28 2014 +0000

    sna/brw: Fix EU tests to select the right gen
    
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/brw/brw_test_gen4.c b/src/sna/brw/brw_test_gen4.c
index 742c7c2..c0a185f 100644
--- a/src/sna/brw/brw_test_gen4.c
+++ b/src/sna/brw/brw_test_gen4.c
@@ -127,6 +127,8 @@ static const uint32_t ps_kernel_planar_static[][4] = {
 #include "exa_wm_write.g4b"
 };
 
+#define GEN 040
+
 #define compare(old) brw_test_compare(__FUNCTION__, p.gen, p.store, p.nr_insn, (struct brw_instruction *)old, ARRAY_SIZE(old)-8)
 
 static void gen4_sf__nomask(void)
@@ -134,7 +136,7 @@ static void gen4_sf__nomask(void)
 	uint32_t store[128];
 	struct brw_compile p;
 
-	brw_compile_init(&p, 40, store);
+	brw_compile_init(&p, GEN, store);
 	brw_sf_kernel__nomask(&p);
 
 	compare(sf_kernel);
@@ -145,7 +147,7 @@ static void gen4_sf__mask(void)
 	uint32_t store[128];
 	struct brw_compile p;
 
-	brw_compile_init(&p, 40, store);
+	brw_compile_init(&p, GEN, store);
 	brw_sf_kernel__mask(&p);
 
 	compare(sf_kernel_mask);
@@ -157,7 +159,7 @@ gen4_wm_kernel__affine_nomask(void)
 	uint32_t store[128];
 	struct brw_compile p;
 
-	brw_compile_init(&p, 40, store);
+	brw_compile_init(&p, GEN, store);
 	brw_wm_kernel__affine(&p, 16);
 
 	compare(ps_kernel_nomask_affine);
@@ -169,7 +171,7 @@ gen4_wm_kernel__affine_mask_noca(void)
 	uint32_t store[128];
 	struct brw_compile p;
 
-	brw_compile_init(&p, 40, store);
+	brw_compile_init(&p, GEN, store);
 	brw_wm_kernel__affine_mask(&p, 16);
 
 	compare(ps_kernel_masknoca_affine);
@@ -181,7 +183,7 @@ gen4_wm_kernel__projective_nomask(void)
 	uint32_t store[128];
 	struct brw_compile p;
 
-	brw_compile_init(&p, 40, store);
+	brw_compile_init(&p, GEN, store);
 	brw_wm_kernel__projective(&p, 16);
 
 	compare(ps_kernel_nomask_projective);
diff --git a/src/sna/brw/brw_test_gen5.c b/src/sna/brw/brw_test_gen5.c
index 62a999e..5f909fe 100644
--- a/src/sna/brw/brw_test_gen5.c
+++ b/src/sna/brw/brw_test_gen5.c
@@ -129,12 +129,14 @@ static const uint32_t ps_kernel_planar_static[][4] = {
 
 #define compare(old) brw_test_compare(__FUNCTION__, p.gen, p.store, p.nr_insn, (struct brw_instruction *)old, ARRAY_SIZE(old))
 
+#define GEN 050
+
 static void gen5_sf(void)
 {
 	uint32_t store[128];
 	struct brw_compile p;
 
-	brw_compile_init(&p, 50, store);
+	brw_compile_init(&p, GEN, store);
 	brw_sf_kernel__nomask(&p);
 
 	compare(sf_kernel);
@@ -145,7 +147,7 @@ static void gen5_sf_mask(void)
 	uint32_t store[128];
 	struct brw_compile p;
 
-	brw_compile_init(&p, 50, store);
+	brw_compile_init(&p, GEN, store);
 	brw_sf_kernel__mask(&p);
 
 	compare(sf_kernel_mask);
@@ -156,7 +158,7 @@ static void gen5_wm_affine_nomask(void)
 	uint32_t store[128];
 	struct brw_compile p;
 
-	brw_compile_init(&p, 50, store);
+	brw_compile_init(&p, GEN, store);
 	brw_wm_kernel__affine(&p, 16);
 
 	compare(ps_kernel_nomask_affine);
@@ -167,7 +169,7 @@ static void gen5_wm_affine_mask_noca(void)
 	uint32_t store[128];
 	struct brw_compile p;
 
-	brw_compile_init(&p, 50, store);
+	brw_compile_init(&p, GEN, store);
 	brw_wm_kernel__affine_mask(&p, 16);
 
 	compare(ps_kernel_masknoca_affine);
@@ -178,7 +180,7 @@ static void gen5_wm_affine_mask_ca(void)
 	uint32_t store[128];
 	struct brw_compile p;
 
-	brw_compile_init(&p, 50, store);
+	brw_compile_init(&p, GEN, store);
 	brw_wm_kernel__affine_mask_ca(&p, 16);
 
 	compare(ps_kernel_maskca_affine);
@@ -189,7 +191,7 @@ static void gen5_wm_projective_nomask(void)
 	uint32_t store[128];
 	struct brw_compile p;
 
-	brw_compile_init(&p, 50, store);
+	brw_compile_init(&p, GEN, store);
 	brw_wm_kernel__projective(&p, 16);
 
 	compare(ps_kernel_nomask_projective);
diff --git a/src/sna/brw/brw_test_gen6.c b/src/sna/brw/brw_test_gen6.c
index 64bc2fb..813ea8a 100644
--- a/src/sna/brw/brw_test_gen6.c
+++ b/src/sna/brw/brw_test_gen6.c
@@ -172,7 +172,7 @@ static void gen6_ps_nomask_affine(void)
 	uint32_t store[1024];
 	struct brw_compile p;
 
-	brw_compile_init(&p, 60, store);
+	brw_compile_init(&p, 060, store);
 	brw_wm_kernel__affine(&p, 16);
 
 	compare(ps_kernel_nomask_affine);
@@ -183,7 +183,7 @@ static void gen6_ps_mask_affine(void)
 	uint32_t store[1024];
 	struct brw_compile p;
 
-	brw_compile_init(&p, 60, store);
+	brw_compile_init(&p, 060, store);
 	brw_wm_kernel__affine_mask(&p, 16);
 
 	compare(ps_kernel_masknoca_affine);
@@ -194,7 +194,7 @@ static void gen6_ps_nomask_projective(void)
 	uint32_t store[1024];
 	struct brw_compile p;
 
-	brw_compile_init(&p, 60, store);
+	brw_compile_init(&p, 060, store);
 	brw_wm_kernel__projective(&p, 16);
 
 	compare(ps_kernel_nomask_projective);
diff --git a/src/sna/brw/brw_test_gen7.c b/src/sna/brw/brw_test_gen7.c
index 085b25c..297ae47 100644
--- a/src/sna/brw/brw_test_gen7.c
+++ b/src/sna/brw/brw_test_gen7.c
@@ -110,7 +110,7 @@ static const uint32_t ps_kernel_planar[][4] = {
 };
 
 #define compare(old) brw_test_compare(__FUNCTION__, p.gen, p.store, p.nr_insn, (struct brw_instruction *)old, ARRAY_SIZE(old))
-#define GEN 70
+#define GEN 070
 
 static void gen7_ps_nomask_affine(void)
 {
commit 71d79daf458c05f771441eb268693c34be0a97c3
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Thu Oct 30 19:20:13 2014 +0000

    sna: Remove extraneous tab whitespace before parameter name
    
    Reported-by: Arthur Koziol
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/sna_composite.c b/src/sna/sna_composite.c
index 3753afa..d19dc42 100644
--- a/src/sna/sna_composite.c
+++ b/src/sna/sna_composite.c
@@ -132,7 +132,7 @@ picture_has_clip(PicturePtr p)
 }
 
 static inline bool
-clip_to_src(RegionPtr region, PicturePtr p, int dx, int	 dy)
+clip_to_src(RegionPtr region, PicturePtr p, int dx, int dy)
 {
 	bool result;
 
commit 9115406b651eb11779f37c4b048d55188b9d6e02
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Thu Oct 30 19:21:02 2014 +0000

    sna: Retire all requests when a bo is found to be not busy
    
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/kgem.c b/src/sna/kgem.c
index 8681018..f1e426d 100644
--- a/src/sna/kgem.c
+++ b/src/sna/kgem.c
@@ -2551,6 +2551,7 @@ static bool __kgem_retire_rq(struct kgem *kgem, struct kgem_request *rq)
 		}
 
 		bo->domain = DOMAIN_NONE;
+		bo->gtt_dirty = false;
 		bo->rq = NULL;
 		if (bo->refcnt)
 			continue;
@@ -2703,6 +2704,21 @@ bool __kgem_ring_is_idle(struct kgem *kgem, int ring)
 	return true;
 }
 
+void __kgem_retire_requests_upto(struct kgem *kgem, struct kgem_request *rq)
+{
+	struct list *requests = &kgem->requests[RQ_RING(rq) == I915_EXEC_BLT];
+	struct kgem_request *tmp;
+
+	rq = RQ(rq);
+	assert(rq != &kgem->static_request);
+
+	do {
+		tmp = list_first_entry(requests, struct kgem_request, list);
+		assert(tmp->ring == rq->ring);
+		__kgem_retire_rq(kgem, tmp);
+	} while (tmp != rq);
+}
+
 #if 0
 static void kgem_commit__check_reloc(struct kgem *kgem)
 {
diff --git a/src/sna/kgem.h b/src/sna/kgem.h
index bea518f..c77866f 100644
--- a/src/sna/kgem.h
+++ b/src/sna/kgem.h
@@ -618,6 +618,7 @@ static inline bool kgem_bo_is_busy(struct kgem_bo *bo)
 	return bo->rq;
 }
 
+void __kgem_retire_requests_upto(struct kgem *kgem, struct kgem_request *rq);
 static inline bool __kgem_bo_is_busy(struct kgem *kgem, struct kgem_bo *bo)
 {
 	DBG(("%s: handle=%d, domain: %d exec? %d, rq? %d\n", __FUNCTION__,
@@ -627,8 +628,12 @@ static inline bool __kgem_bo_is_busy(struct kgem *kgem, struct kgem_bo *bo)
 	if (bo->exec)
 		return true;
 
-	if (bo->rq && !__kgem_busy(kgem, bo->handle))
-		__kgem_bo_clear_busy(bo);
+	if (bo->rq && !__kgem_busy(kgem, bo->handle)) {
+		__kgem_retire_requests_upto(kgem, bo->rq);
+		assert(list_is_empty(&bo->request));
+		assert(bo->rq == NULL);
+		assert(bo->domain == DOMAIN_NONE);
+	}
 
 	return kgem_bo_is_busy(bo);
 }
commit 9d48d2817927bc2532953f09b6be2002c2086e1f
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Fri Oct 24 09:12:49 2014 +0100

    sna: Reuse the same fence until retired
    
    In order to reduce the number of breadcrumbs the kernel must emit to
    track our batches, reuse the last query until it has retired.
    
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/kgem.c b/src/sna/kgem.c
index 0eef036..8681018 100644
--- a/src/sna/kgem.c
+++ b/src/sna/kgem.c
@@ -2523,6 +2523,9 @@ static bool __kgem_retire_rq(struct kgem *kgem, struct kgem_request *rq)
 	     __FUNCTION__, rq->bo->handle));
 	assert(RQ(rq->bo->rq) == rq);
 
+	if (rq == kgem->fence[rq->ring])
+		kgem->fence[rq->ring] = NULL;
+
 	while (!list_is_empty(&rq->buffers)) {
 		struct kgem_bo *bo;
 
@@ -2653,21 +2656,50 @@ bool __kgem_ring_is_idle(struct kgem *kgem, int ring)
 	assert(ring < ARRAY_SIZE(kgem->requests));
 	assert(!list_is_empty(&kgem->requests[ring]));
 
+	rq = kgem->fence[ring];
+	if (rq) {
+		struct kgem_request *tmp;
+
+		if (__kgem_busy(kgem, rq->bo->handle)) {
+			DBG(("%s: last fence handle=%d still busy\n",
+			     __FUNCTION__, rq->bo->handle));
+			return false;
+		}
+
+		do {
+			tmp = list_first_entry(&kgem->requests[ring],
+					       struct kgem_request,
+					       list);
+			assert(tmp->ring == ring);
+			__kgem_retire_rq(kgem, tmp);
+		} while (tmp != rq);
+
+		assert(kgem->fence[ring] == NULL);
+		if (list_is_empty(&kgem->requests[ring]))
+			return true;
+	}
+
 	rq = list_last_entry(&kgem->requests[ring],
 			     struct kgem_request, list);
 	assert(rq->ring == ring);
 	if (__kgem_busy(kgem, rq->bo->handle)) {
 		DBG(("%s: last requests handle=%d still busy\n",
 		     __FUNCTION__, rq->bo->handle));
+		kgem->fence[ring] = rq;
 		return false;
 	}
 
 	DBG(("%s: ring=%d idle (handle=%d)\n",
 	     __FUNCTION__, ring, rq->bo->handle));
 
-	kgem_retire__requests_ring(kgem, ring);
+	while (!list_is_empty(&kgem->requests[ring])) {
+		rq = list_first_entry(&kgem->requests[ring],
+				      struct kgem_request,
+				      list);
+		assert(rq->ring == ring);
+		__kgem_retire_rq(kgem, rq);
+	}
 
-	assert(list_is_empty(&kgem->requests[ring]));
 	return true;
 }
 
diff --git a/src/sna/kgem.h b/src/sna/kgem.h
index 4a74f2e..bea518f 100644
--- a/src/sna/kgem.h
+++ b/src/sna/kgem.h
@@ -155,6 +155,7 @@ struct kgem {
 	struct list batch_buffers, active_buffers;
 
 	struct list requests[2];
+	struct kgem_request *fence[2];
 	struct kgem_request *next_request;
 	struct kgem_request static_request;
 
diff --git a/src/sna/sna_accel.c b/src/sna/sna_accel.c
index b2fe6d4..d214260 100644
--- a/src/sna/sna_accel.c
+++ b/src/sna/sna_accel.c
@@ -1398,9 +1398,9 @@ void sna_add_flush_pixmap(struct sna *sna,
 	assert(priv->gpu_damage == NULL || priv->gpu_bo);
 	list_move(&priv->flush_list, &sna->flush_pixmaps);
 
-	if (bo->exec == NULL && kgem_is_idle(&sna->kgem)) {
-		DBG(("%s: new flush bo, flushin before\n", __FUNCTION__));
-		kgem_submit(&sna->kgem);
+	if (bo->exec == NULL && sna->kgem.nbatch && kgem_is_idle(&sna->kgem)) {
+		DBG(("%s: new flush bo, flushing before\n", __FUNCTION__));
+		_kgem_submit(&sna->kgem);
 	}
 }
 


More information about the xorg-commit mailing list