xf86-video-intel: 2 commits - src/sna/kgem.c src/sna/kgem_debug.c src/sna/sna_blt.c

Chris Wilson ickle at kemper.freedesktop.org
Tue Sep 13 09:27:10 PDT 2011


 src/sna/kgem.c       |   18 ++++++++++++++++++
 src/sna/kgem_debug.c |    8 ++++++++
 src/sna/sna_blt.c    |   14 ++++++++++----
 3 files changed, 36 insertions(+), 4 deletions(-)

New commits:
commit 34c03f22158d8fc1ec2fc56cb5e87f74e42d9a8f
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Tue Sep 13 17:24:14 2011 +0100

    sna: Clear the list of buffers upon server regen
    
    Or else we may try to clear the new framebuffer with an invalid batch,
    because it will reuse the same bo as last time and that bo may still
    think it is part of the old batch.
    
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/kgem.c b/src/sna/kgem.c
index 615e3c5..82c5cf1 100644
--- a/src/sna/kgem.c
+++ b/src/sna/kgem.c
@@ -815,6 +815,22 @@ static int kgem_batch_write(struct kgem *kgem, uint32_t handle)
 
 void kgem_reset(struct kgem *kgem)
 {
+	struct kgem_request *rq = kgem->next_request;
+	struct kgem_bo *bo;
+
+	while (!list_is_empty(&rq->buffers)) {
+		bo = list_first_entry(&rq->buffers, struct kgem_bo, request);
+
+		bo->src_bound = bo->dst_bound = 0;
+		bo->exec = NULL;
+		bo->dirty = false;
+		bo->gpu = true;
+		bo->cpu_read = false;
+		bo->cpu_write = false;
+
+		list_del(&bo->request);
+	}
+
 	kgem->nfence = 0;
 	kgem->nexec = 0;
 	kgem->nreloc = 0;
@@ -1614,6 +1630,8 @@ uint32_t kgem_add_reloc(struct kgem *kgem,
 {
 	int index;
 
+	assert ((read_write_domain & 0x7fff) == 0 || bo != NULL);
+
 	index = kgem->nreloc++;
 	assert(index < ARRAY_SIZE(kgem->reloc));
 	kgem->reloc[index].offset = pos * sizeof(kgem->batch[0]);
diff --git a/src/sna/sna_blt.c b/src/sna/sna_blt.c
index c8bf92f..e7a74aa 100644
--- a/src/sna/sna_blt.c
+++ b/src/sna/sna_blt.c
@@ -186,7 +186,9 @@ static void sna_blt_fill_one(struct sna *sna,
 	b[3] = ((y + height) << 16) | (x + width);
 	b[4] = kgem_add_reloc(kgem, kgem->nbatch + 4,
 			      blt->bo[0],
-			      I915_GEM_DOMAIN_RENDER << 16 | I915_GEM_DOMAIN_RENDER | KGEM_RELOC_FENCED,
+			      I915_GEM_DOMAIN_RENDER << 16 |
+			      I915_GEM_DOMAIN_RENDER |
+			      KGEM_RELOC_FENCED,
 			      0);
 	b[5] = blt->pixel;
 	kgem->nbatch += 6;
@@ -276,7 +278,8 @@ static void sna_blt_copy_one(struct sna *sna,
 		b[6] = blt->pitch[0];
 		b[7] = kgem_add_reloc(kgem, kgem->nbatch + 7 - 6,
 				      blt->bo[0],
-				      I915_GEM_DOMAIN_RENDER << 16 | KGEM_RELOC_FENCED,
+				      I915_GEM_DOMAIN_RENDER << 16 |
+				      KGEM_RELOC_FENCED,
 				      0);
 		kgem->nbatch += 8 - 6;
 		return;
@@ -293,13 +296,16 @@ static void sna_blt_copy_one(struct sna *sna,
 	b[3] = ((dst_y + height) << 16) | (dst_x + width);
 	b[4] = kgem_add_reloc(kgem, kgem->nbatch + 4,
 			      blt->bo[1],
-			      I915_GEM_DOMAIN_RENDER << 16 | I915_GEM_DOMAIN_RENDER | KGEM_RELOC_FENCED,
+			      I915_GEM_DOMAIN_RENDER << 16 |
+			      I915_GEM_DOMAIN_RENDER |
+			      KGEM_RELOC_FENCED,
 			      0);
 	b[5] = (src_y << 16) | src_x;
 	b[6] = blt->pitch[0];
 	b[7] = kgem_add_reloc(kgem, kgem->nbatch + 7,
 			      blt->bo[0],
-			      I915_GEM_DOMAIN_RENDER << 16 | KGEM_RELOC_FENCED,
+			      I915_GEM_DOMAIN_RENDER << 16 |
+			      KGEM_RELOC_FENCED,
 			      0);
 	kgem->nbatch += 8;
 }
commit 831cdb837189e92aee80030dec553f28e53ba0bc
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Tue Sep 13 17:09:38 2011 +0100

    sna/debug: Assert that BLT commands on gen2/3 are properly fenced
    
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/kgem_debug.c b/src/sna/kgem_debug.c
index 745c7b9..2cc7b3a 100644
--- a/src/sna/kgem_debug.c
+++ b/src/sna/kgem_debug.c
@@ -272,6 +272,8 @@ decode_2d(struct kgem *kgem, uint32_t offset)
 				 kgem_debug_handle_is_fenced(kgem, reloc->target_handle),
 				 kgem_debug_handle_tiling(kgem, reloc->target_handle));
 		kgem_debug_print(data, offset, 5, "color\n");
+		assert(kgem->gen >= 40 ||
+		       kgem_debug_handle_is_fenced(kgem, reloc->target_handle));
 		return len;
 
 	case 0x53:
@@ -317,6 +319,9 @@ decode_2d(struct kgem *kgem, uint32_t offset)
 				 reloc->read_domains, reloc->write_domain,
 				 kgem_debug_handle_is_fenced(kgem, reloc->target_handle),
 				 kgem_debug_handle_tiling(kgem, reloc->target_handle));
+		assert(kgem->gen >= 40 ||
+		       kgem_debug_handle_is_fenced(kgem, reloc->target_handle));
+
 		kgem_debug_print(data, offset, 5, "src (%d,%d)\n",
 				 data[5] & 0xffff, data[5] >> 16);
 		kgem_debug_print(data, offset, 6, "src pitch %d\n",
@@ -329,6 +334,9 @@ decode_2d(struct kgem *kgem, uint32_t offset)
 				 reloc->read_domains, reloc->write_domain,
 				 kgem_debug_handle_is_fenced(kgem, reloc->target_handle),
 				 kgem_debug_handle_tiling(kgem, reloc->target_handle));
+		assert(kgem->gen >= 40 ||
+		       kgem_debug_handle_is_fenced(kgem, reloc->target_handle));
+
 		return len;
 	}
 


More information about the xorg-commit mailing list