xf86-video-intel: 4 commits - src/sna/gen3_render.c src/sna/gen4_render.c src/sna/gen5_render.c src/sna/gen6_render.c src/sna/gen7_render.c src/sna/kgem.c src/sna/sna_accel.c src/sna/sna_video_hwmc.c

Chris Wilson ickle at kemper.freedesktop.org
Thu Dec 20 02:14:32 PST 2012


 src/sna/gen3_render.c    |    3 ++-
 src/sna/gen4_render.c    |   19 ++++++++++---------
 src/sna/gen5_render.c    |   19 ++++++++++---------
 src/sna/gen6_render.c    |   19 ++++++++++---------
 src/sna/gen7_render.c    |    3 ++-
 src/sna/kgem.c           |    2 +-
 src/sna/sna_accel.c      |    2 +-
 src/sna/sna_video_hwmc.c |    4 ++--
 8 files changed, 38 insertions(+), 33 deletions(-)

New commits:
commit 1f4ede0ef8f8a8d07e11781ad05617ecdfcd3faf
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Wed Dec 19 20:39:10 2012 +0000

    sna: Do not throttle before move-to-cpu
    
    The idea being that when creating a surface to perform inplace
    rasterisation, we won't be using the GPU for a while and so give it time
    to naturally throttle.
    
    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 01bc8ab..408c98c 100644
--- a/src/sna/sna_accel.c
+++ b/src/sna/sna_accel.c
@@ -431,7 +431,7 @@ sna_pixmap_alloc_cpu(struct sna *sna,
 						  pixmap->drawable.width,
 						  pixmap->drawable.height,
 						  pixmap->drawable.bitsPerPixel,
-						  from_gpu ? 0 : CREATE_CPU_MAP | CREATE_INACTIVE);
+						  from_gpu ? 0 : CREATE_CPU_MAP | CREATE_INACTIVE | CREATE_NO_THROTTLE);
 		if (priv->cpu_bo) {
 			priv->ptr = kgem_bo_map__cpu(&sna->kgem, priv->cpu_bo);
 			priv->stride = priv->cpu_bo->pitch;
commit 5deba2832dc42072d9abaeaa7934bc0e1b28b3ed
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Wed Dec 19 20:03:33 2012 +0000

    sna: Ignore throttling during vertex close
    
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/gen3_render.c b/src/sna/gen3_render.c
index 34dcd04..a75efba 100644
--- a/src/sna/gen3_render.c
+++ b/src/sna/gen3_render.c
@@ -1707,7 +1707,8 @@ static void gen3_vertex_close(struct sna *sna)
 			DBG(("%s: new vbo: %d\n", __FUNCTION__,
 			     sna->render.vertex_used));
 			bo = kgem_create_linear(&sna->kgem,
-						4*sna->render.vertex_used, 0);
+						4*sna->render.vertex_used,
+						CREATE_NO_THROTTLE);
 			if (bo) {
 				assert(bo->snoop == false);
 				kgem_bo_write(&sna->kgem, bo,
diff --git a/src/sna/gen4_render.c b/src/sna/gen4_render.c
index d6ba346..3f12062 100644
--- a/src/sna/gen4_render.c
+++ b/src/sna/gen4_render.c
@@ -347,7 +347,8 @@ static void gen4_vertex_close(struct sna *sna)
 			sna->kgem.nbatch += sna->render.vertex_used;
 		} else {
 			bo = kgem_create_linear(&sna->kgem,
-						4*sna->render.vertex_used, 0);
+						4*sna->render.vertex_used,
+						CREATE_NO_THROTTLE);
 			if (bo && !kgem_bo_write(&sna->kgem, bo,
 						 sna->render.vertex_data,
 						 4*sna->render.vertex_used)) {
diff --git a/src/sna/gen5_render.c b/src/sna/gen5_render.c
index 054829e..8f5ea2f 100644
--- a/src/sna/gen5_render.c
+++ b/src/sna/gen5_render.c
@@ -339,7 +339,8 @@ static void gen5_vertex_close(struct sna *sna)
 			sna->kgem.nbatch += sna->render.vertex_used;
 		} else {
 			bo = kgem_create_linear(&sna->kgem,
-						4*sna->render.vertex_used, 0);
+						4*sna->render.vertex_used,
+						CREATE_NO_THROTTLE);
 			if (bo && !kgem_bo_write(&sna->kgem, bo,
 						 sna->render.vertex_data,
 						 4*sna->render.vertex_used)) {
diff --git a/src/sna/gen6_render.c b/src/sna/gen6_render.c
index a274f9b..5a60787 100644
--- a/src/sna/gen6_render.c
+++ b/src/sna/gen6_render.c
@@ -1058,7 +1058,8 @@ static void gen6_vertex_close(struct sna *sna)
 			sna->kgem.nbatch += sna->render.vertex_used;
 		} else {
 			bo = kgem_create_linear(&sna->kgem,
-						4*sna->render.vertex_used, 0);
+						4*sna->render.vertex_used,
+						CREATE_NO_THROTTLE);
 			if (bo && !kgem_bo_write(&sna->kgem, bo,
 						 sna->render.vertex_data,
 						 4*sna->render.vertex_used)) {
diff --git a/src/sna/gen7_render.c b/src/sna/gen7_render.c
index 4c67340..cc3199d 100644
--- a/src/sna/gen7_render.c
+++ b/src/sna/gen7_render.c
@@ -1195,7 +1195,8 @@ static void gen7_vertex_close(struct sna *sna)
 			sna->kgem.nbatch += sna->render.vertex_used;
 		} else {
 			bo = kgem_create_linear(&sna->kgem,
-						4*sna->render.vertex_used, 0);
+						4*sna->render.vertex_used,
+						CREATE_NO_THROTTLE);
 			if (bo && !kgem_bo_write(&sna->kgem, bo,
 						 sna->render.vertex_data,
 						 4*sna->render.vertex_used)) {
diff --git a/src/sna/kgem.c b/src/sna/kgem.c
index 2933ec4..974201e 100644
--- a/src/sna/kgem.c
+++ b/src/sna/kgem.c
@@ -2877,7 +2877,7 @@ search_linear_cache(struct kgem *kgem, unsigned int num_pages, unsigned flags)
 			return NULL;
 		}
 
-		if (!__kgem_throttle_retire(kgem, 0)) {
+		if (!__kgem_throttle_retire(kgem, flags)) {
 			DBG(("%s: nothing retired\n", __FUNCTION__));
 			return NULL;
 		}
commit f91a24fdba517c8e9df5a074db2c789fbf066bb3
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Thu Dec 20 09:46:32 2012 +0000

    sna/video: Remove XvMCScreenInitProc
    
    The symbols disappears without warning in xorg-1.14
    
    Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=58552
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/sna_video_hwmc.c b/src/sna/sna_video_hwmc.c
index def85fd..b3e065d 100644
--- a/src/sna/sna_video_hwmc.c
+++ b/src/sna/sna_video_hwmc.c
@@ -206,7 +206,7 @@ Bool sna_video_xvmc_setup(struct sna *sna,
 	char bus[64];
 	int i;
 
-	if (!XvMCScreenInitProc)
+	if (!xf86LoaderCheckSymbol("XvMCScreenInit"))
 		return FALSE;
 
 	/* Needs KMS support. */
@@ -253,7 +253,7 @@ Bool sna_video_xvmc_setup(struct sna *sna,
 		adaptors->surfaces = surface_info_i915;
 	}
 
-	if (XvMCScreenInitProc(screen, 1, adaptors) != Success) {
+	if (XvMCScreenInit(screen, 1, adaptors) != Success) {
 		xf86DrvMsg(sna->scrn->scrnIndex, X_INFO,
 			   "[XvMC] Failed to initialize XvMC.\n");
 		free(adaptors);
commit ee99511846a0f10abeeba8d25d8fb5bf59621b02
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Wed Dec 19 18:02:50 2012 +0000

    sna/gen4+: Tweak preference of GPU placement for spans
    
    If the CPU bo is busy, make sure we do not stall for an inplace
    operation.
    
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/gen4_render.c b/src/sna/gen4_render.c
index ee37378..d6ba346 100644
--- a/src/sna/gen4_render.c
+++ b/src/sna/gen4_render.c
@@ -2681,15 +2681,15 @@ gen4_check_composite_spans(struct sna *sna,
 		return FORCE_SPANS > 0;
 
 	if ((flags & COMPOSITE_SPANS_RECTILINEAR) == 0) {
-		if ((flags & COMPOSITE_SPANS_INPLACE_HINT) == 0) {
-			struct sna_pixmap *priv = sna_pixmap_from_drawable(dst->pDrawable);
-			assert(priv);
+		struct sna_pixmap *priv = sna_pixmap_from_drawable(dst->pDrawable);
+		assert(priv);
 
-			if ((priv->cpu_bo && kgem_bo_is_busy(priv->cpu_bo)) ||
-			    (priv->gpu_bo && kgem_bo_is_busy(priv->gpu_bo))) {
-				return true;
-			}
-		}
+		if (priv->cpu_bo && kgem_bo_is_busy(priv->cpu_bo))
+			return true;
+
+		if ((flags & COMPOSITE_SPANS_INPLACE_HINT) == 0 &&
+		    priv->gpu_bo && kgem_bo_is_busy(priv->gpu_bo))
+			return true;
 
 		DBG(("%s: fallback, non-rectilinear spans to idle bo\n",
 		     __FUNCTION__));
diff --git a/src/sna/gen5_render.c b/src/sna/gen5_render.c
index 3a9fd8c..054829e 100644
--- a/src/sna/gen5_render.c
+++ b/src/sna/gen5_render.c
@@ -2693,15 +2693,15 @@ gen5_check_composite_spans(struct sna *sna,
 	}
 
 	if ((flags & COMPOSITE_SPANS_RECTILINEAR) == 0) {
-		if ((flags & COMPOSITE_SPANS_INPLACE_HINT) == 0) {
-			struct sna_pixmap *priv = sna_pixmap_from_drawable(dst->pDrawable);
-			assert(priv);
+		struct sna_pixmap *priv = sna_pixmap_from_drawable(dst->pDrawable);
+		assert(priv);
 
-			if ((priv->cpu_bo && kgem_bo_is_busy(priv->cpu_bo)) ||
-			    (priv->gpu_bo && kgem_bo_is_busy(priv->gpu_bo))) {
-				return true;
-			}
-		}
+		if (priv->cpu_bo && kgem_bo_is_busy(priv->cpu_bo))
+			return true;
+
+		if ((flags & COMPOSITE_SPANS_INPLACE_HINT) == 0 &&
+		    priv->gpu_bo && kgem_bo_is_busy(priv->gpu_bo))
+			return true;
 
 		DBG(("%s: fallback, non-rectilinear spans to idle bo\n",
 		     __FUNCTION__));
diff --git a/src/sna/gen6_render.c b/src/sna/gen6_render.c
index c614363..a274f9b 100644
--- a/src/sna/gen6_render.c
+++ b/src/sna/gen6_render.c
@@ -3132,15 +3132,15 @@ gen6_check_composite_spans(struct sna *sna,
 	}
 
 	if ((flags & COMPOSITE_SPANS_RECTILINEAR) == 0) {
-		if ((flags & COMPOSITE_SPANS_INPLACE_HINT) == 0) {
-			struct sna_pixmap *priv = sna_pixmap_from_drawable(dst->pDrawable);
-			assert(priv);
+		struct sna_pixmap *priv = sna_pixmap_from_drawable(dst->pDrawable);
+		assert(priv);
 
-			if ((priv->cpu_bo && kgem_bo_is_busy(priv->cpu_bo)) ||
-			    (priv->gpu_bo && kgem_bo_is_busy(priv->gpu_bo))) {
-				return true;
-			}
-		}
+		if (priv->cpu_bo && kgem_bo_is_busy(priv->cpu_bo))
+			return true;
+
+		if ((flags & COMPOSITE_SPANS_INPLACE_HINT) == 0 &&
+		    priv->gpu_bo && kgem_bo_is_busy(priv->gpu_bo))
+			return true;
 
 		DBG(("%s: fallback, non-rectilinear spans to idle bo\n",
 		     __FUNCTION__));


More information about the xorg-commit mailing list