xf86-video-intel: 3 commits - src/sna/gen6_render.c src/sna/gen7_render.c src/sna/kgem.c src/sna/sna_render.c

Chris Wilson ickle at kemper.freedesktop.org
Tue Nov 29 07:37:12 PST 2011


 src/sna/gen6_render.c |    5 +++++
 src/sna/gen7_render.c |    5 +++++
 src/sna/kgem.c        |   12 +++++++-----
 src/sna/sna_render.c  |   12 ++++++++----
 4 files changed, 25 insertions(+), 9 deletions(-)

New commits:
commit d8f2e87473eae81e07922271b5f608fdceb4ae5e
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Tue Nov 29 10:59:48 2011 +0000

    sna/render: Fix check for "migrate whole pixmap"
    
    The whole pixmap means the sample covers the full width and height, not
    just either!
    
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/sna_render.c b/src/sna/sna_render.c
index badde7c..cf227c6 100644
--- a/src/sna/sna_render.c
+++ b/src/sna/sna_render.c
@@ -259,14 +259,18 @@ move_to_gpu(PixmapPtr pixmap, const BoxRec *box)
 
 	w = box->x2 - box->x1;
 	h = box->y2 - box->y1;
-	if (w == pixmap->drawable.width || h == pixmap->drawable.height) {
-		DBG(("%s: migrating whole pixmap (%dx%d) for source\n",
+	if (w == pixmap->drawable.width && h == pixmap->drawable.height) {
+		DBG(("%s: migrating whole pixmap (%dx%d) for source (%d,%d),(%d,%d)\n",
 		     __FUNCTION__,
-		     pixmap->drawable.width,
-		     pixmap->drawable.height));
+		     pixmap->drawable.width, pixmap->drawable.height,
+		     box->x1, box->y1, box->x2, box->y2));
 		return TRUE;
 	}
 
+	/* ignore tiny fractions */
+	if (64*w*h < pixmap->drawable.width * pixmap->drawable.height)
+		return FALSE;
+
 	count = SOURCE_BIAS;
 	priv = sna_pixmap(pixmap);
 	if (priv)
commit 20e57914089d6959529ad222e04853f5ffcb364f
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Tue Nov 29 10:59:20 2011 +0000

    sna: Fix assertion around flushing of mmap(PROT_READ)
    
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/kgem.c b/src/sna/kgem.c
index fd189cf..58b9b67 100644
--- a/src/sna/kgem.c
+++ b/src/sna/kgem.c
@@ -1804,16 +1804,18 @@ void *kgem_bo_map(struct kgem *kgem, struct kgem_bo *bo, int prot)
 {
 	void *ptr;
 
-	assert(!kgem_busy(kgem, bo->handle));
+	assert(prot == PROT_READ || !kgem_busy(kgem, bo->handle));
 
 	ptr = gem_mmap(kgem->fd, bo->handle, bo->size, prot);
 	if (ptr == NULL)
 		return NULL;
 
-	assert(!kgem_busy(kgem, bo->handle));
-	bo->needs_flush = false;
-	if (bo->gpu)
-		kgem_retire(kgem);
+	if (prot & PROT_WRITE) {
+		assert(!kgem_busy(kgem, bo->handle));
+		bo->needs_flush = false;
+		if (bo->gpu)
+			kgem_retire(kgem);
+	}
 
 	return ptr;
 }
commit 56155c91afb5a0dcafe4dbc22ade3b7c0c977674
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Tue Nov 29 10:27:18 2011 +0000

    sna/gen6: Set the batch mode prior to checking limits and flushing
    
    If we change contexts, then we will submit the batch obsoleting the
    earlier resource checks.
    
    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 a739f5c..de6ede9 100644
--- a/src/sna/gen6_render.c
+++ b/src/sna/gen6_render.c
@@ -1838,6 +1838,7 @@ gen6_render_video(struct sna *sna,
 	tmp.u.gen6.nr_inputs = 1;
 	tmp.u.gen6.ve_id = 1;
 
+	kgem_set_mode(&sna->kgem, KGEM_RENDER);
 	if (!kgem_check_bo(&sna->kgem, tmp.dst.bo, frame->bo, NULL))
 		kgem_submit(&sna->kgem);
 
@@ -2223,6 +2224,7 @@ gen6_render_composite(struct sna *sna,
 	tmp->boxes = gen6_render_composite_boxes;
 	tmp->done  = gen6_render_composite_done;
 
+	kgem_set_mode(&sna->kgem, KGEM_RENDER);
 	if (!kgem_check_bo(&sna->kgem,
 			   tmp->dst.bo, tmp->src.bo, tmp->mask.bo,
 			   NULL))
@@ -2531,6 +2533,7 @@ gen6_render_composite_spans(struct sna *sna,
 	tmp->boxes = gen6_render_composite_spans_boxes;
 	tmp->done  = gen6_render_composite_spans_done;
 
+	kgem_set_mode(&sna->kgem, KGEM_RENDER);
 	if (!kgem_check_bo(&sna->kgem,
 			   tmp->base.dst.bo, tmp->base.src.bo,
 			   NULL))
@@ -2673,6 +2676,7 @@ gen6_render_copy_boxes(struct sna *sna, uint8_t alu,
 	tmp.u.gen6.nr_inputs = 1;
 	tmp.u.gen6.ve_id = 1;
 
+	kgem_set_mode(&sna->kgem, KGEM_RENDER);
 	if (!kgem_check_bo(&sna->kgem, dst_bo, src_bo, NULL))
 		kgem_submit(&sna->kgem);
 
@@ -2820,6 +2824,7 @@ gen6_render_copy(struct sna *sna, uint8_t alu,
 	op->base.u.gen6.nr_inputs = 1;
 	op->base.u.gen6.ve_id = 1;
 
+	kgem_set_mode(&sna->kgem, KGEM_RENDER);
 	if (!kgem_check_bo(&sna->kgem, dst_bo, src_bo, NULL))
 		kgem_submit(&sna->kgem);
 
diff --git a/src/sna/gen7_render.c b/src/sna/gen7_render.c
index ce14a5d..3159da3 100644
--- a/src/sna/gen7_render.c
+++ b/src/sna/gen7_render.c
@@ -1953,6 +1953,7 @@ gen7_render_video(struct sna *sna,
 	tmp.u.gen7.nr_inputs = 1;
 	tmp.u.gen7.ve_id = 1;
 
+	kgem_set_mode(&sna->kgem, KGEM_RENDER);
 	if (!kgem_check_bo(&sna->kgem, tmp.dst.bo, frame->bo, NULL))
 		kgem_submit(&sna->kgem);
 
@@ -2343,6 +2344,7 @@ gen7_render_composite(struct sna *sna,
 	tmp->boxes = gen7_render_composite_boxes;
 	tmp->done  = gen7_render_composite_done;
 
+	kgem_set_mode(&sna->kgem, KGEM_RENDER);
 	if (!kgem_check_bo(&sna->kgem,
 			   tmp->dst.bo, tmp->src.bo, tmp->mask.bo,
 			   NULL))
@@ -2651,6 +2653,7 @@ gen7_render_composite_spans(struct sna *sna,
 	tmp->boxes = gen7_render_composite_spans_boxes;
 	tmp->done  = gen7_render_composite_spans_done;
 
+	kgem_set_mode(&sna->kgem, KGEM_RENDER);
 	if (!kgem_check_bo(&sna->kgem,
 			   tmp->base.dst.bo, tmp->base.src.bo,
 			   NULL))
@@ -2793,6 +2796,7 @@ gen7_render_copy_boxes(struct sna *sna, uint8_t alu,
 	tmp.u.gen7.nr_inputs = 1;
 	tmp.u.gen7.ve_id = 1;
 
+	kgem_set_mode(&sna->kgem, KGEM_RENDER);
 	if (!kgem_check_bo(&sna->kgem, dst_bo, src_bo, NULL))
 		kgem_submit(&sna->kgem);
 
@@ -2940,6 +2944,7 @@ gen7_render_copy(struct sna *sna, uint8_t alu,
 	op->base.u.gen7.nr_inputs = 1;
 	op->base.u.gen7.ve_id = 1;
 
+	kgem_set_mode(&sna->kgem, KGEM_RENDER);
 	if (!kgem_check_bo(&sna->kgem, dst_bo, src_bo, NULL))
 		kgem_submit(&sna->kgem);
 


More information about the xorg-commit mailing list