xf86-video-intel: 3 commits - src/sna/gen6_common.h src/sna/gen6_render.c src/sna/gen7_render.c src/sna/gen8_render.c src/sna/kgem.c src/sna/sna_dri2.c

Chris Wilson ickle at kemper.freedesktop.org
Thu Jan 15 02:35:55 PST 2015


 src/sna/gen6_common.h |   10 +++++++---
 src/sna/gen6_render.c |    5 +++--
 src/sna/gen7_render.c |    5 +++--
 src/sna/gen8_render.c |    5 +++--
 src/sna/kgem.c        |    2 ++
 src/sna/sna_dri2.c    |    1 +
 6 files changed, 19 insertions(+), 9 deletions(-)

New commits:
commit bb279d5c65d519a022109bc1a25f66c07cae3f97
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Thu Jan 15 10:06:51 2015 +0000

    sna/gen6+: Prefer using RENDER pipeline for uncached destinations on large GT
    
    If the sampler can be cached, the RENDER pipeline can write to an
    uncached destination surface faster than main memory bw would seem to
    actually allow... Notably, performance does not drastically fall off
    with small areas compared to BLT as it once did. However, using a solid
    source (which is not yet implemented well in the RENDER pipeline) is
    still much faster with the BLT.
    
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/gen6_common.h b/src/sna/gen6_common.h
index 6668620..8ce360e 100644
--- a/src/sna/gen6_common.h
+++ b/src/sna/gen6_common.h
@@ -90,7 +90,7 @@ static inline bool untiled_tlb_miss(struct kgem_bo *bo)
 	return bo->tiling == I915_TILING_NONE && bo->pitch >= 4096;
 }
 
-static int prefer_blt_bo(struct sna *sna, struct kgem_bo *bo)
+static int prefer_blt_bo(struct sna *sna, struct kgem_bo *bo, bool dst)
 {
 	if (PREFER_RENDER)
 		return PREFER_RENDER < 0;
@@ -101,6 +101,9 @@ static int prefer_blt_bo(struct sna *sna, struct kgem_bo *bo)
 	if (sna->flags & SNA_POWERSAVE)
 		return true;
 
+	if (dst && sna->render_state.gt > 1)
+		return false;
+
 	return bo->tiling == I915_TILING_NONE || is_uncached(sna, bo);
 }
 
@@ -166,7 +169,8 @@ prefer_blt_composite(struct sna *sna, struct sna_composite_op *tmp)
 	if (!prefer_blt_ring(sna, tmp->dst.bo, 0))
 		return false;
 
-	return prefer_blt_bo(sna, tmp->dst.bo) || prefer_blt_bo(sna, tmp->src.bo);
+	return (prefer_blt_bo(sna, tmp->dst.bo, true) ||
+		prefer_blt_bo(sna, tmp->src.bo, false));
 }
 
 static inline bool prefer_blt_fill(struct sna *sna,
@@ -196,7 +200,7 @@ static inline bool prefer_blt_fill(struct sna *sna,
 		    return true;
 	}
 
-	return prefer_blt_bo(sna, bo);
+	return prefer_blt_bo(sna, bo, false);
 }
 
 void gen6_render_context_switch(struct kgem *kgem, int new_mode);
diff --git a/src/sna/gen6_render.c b/src/sna/gen6_render.c
index 2504468..51aa03a 100644
--- a/src/sna/gen6_render.c
+++ b/src/sna/gen6_render.c
@@ -1995,7 +1995,7 @@ try_blt(struct sna *sna,
 		if (bo == NULL)
 			return true;
 
-		if (prefer_blt_bo(sna, bo))
+		if (prefer_blt_bo(sna, bo, false))
 			return true;
 	}
 
@@ -2696,7 +2696,8 @@ static inline bool prefer_blt_copy(struct sna *sna,
 	if (!prefer_blt_ring(sna, dst_bo, flags))
 		return false;
 
-	return prefer_blt_bo(sna, src_bo) || prefer_blt_bo(sna, dst_bo);
+	return (prefer_blt_bo(sna, dst_bo, true) ||
+		prefer_blt_bo(sna, src_bo, false));
 }
 
 static bool
diff --git a/src/sna/gen7_render.c b/src/sna/gen7_render.c
index a057704..2281962 100644
--- a/src/sna/gen7_render.c
+++ b/src/sna/gen7_render.c
@@ -2215,7 +2215,7 @@ try_blt(struct sna *sna,
 		if (bo == NULL)
 			return true;
 
-		if (prefer_blt_bo(sna, bo))
+		if (prefer_blt_bo(sna, bo, false))
 			return true;
 	}
 
@@ -2898,7 +2898,8 @@ prefer_blt_copy(struct sna *sna,
 	if (!prefer_blt_ring(sna, dst_bo, flags))
 		return false;
 
-	return prefer_blt_bo(sna, src_bo) || prefer_blt_bo(sna, dst_bo);
+	return (prefer_blt_bo(sna, dst_bo, true) ||
+		prefer_blt_bo(sna, src_bo, false));
 }
 
 static bool
diff --git a/src/sna/gen8_render.c b/src/sna/gen8_render.c
index 6eb1145..52fca10 100644
--- a/src/sna/gen8_render.c
+++ b/src/sna/gen8_render.c
@@ -2032,7 +2032,7 @@ try_blt(struct sna *sna,
 		if (bo == NULL)
 			return true;
 
-		if (prefer_blt_bo(sna, bo))
+		if (prefer_blt_bo(sna, bo, false))
 			return RQ_IS_BLT(bo->rq);
 	}
 
@@ -2720,7 +2720,8 @@ prefer_blt_copy(struct sna *sna,
 	if (!prefer_blt_ring(sna, dst_bo, flags))
 		return false;
 
-	return prefer_blt_bo(sna, src_bo) || prefer_blt_bo(sna, dst_bo);
+	return (prefer_blt_bo(sna, dst_bo, true) ||
+		prefer_blt_bo(sna, src_bo, false));
 }
 
 static bool
commit 442a43464621922e7d6f4ead6f22f071c38cae60
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Wed Jan 14 16:26:05 2015 +0000

    sna/dri2: Add a DBG message for when Xorg triple buffering is available
    
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/sna_dri2.c b/src/sna/sna_dri2.c
index 06a9ab1..e639f9d 100644
--- a/src/sna/sna_dri2.c
+++ b/src/sna/sna_dri2.c
@@ -3305,6 +3305,7 @@ bool sna_dri2_open(struct sna *sna, ScreenPtr screen)
 
 #if DRI2INFOREC_VERSION >= 6
 	if (xorg_can_triple_buffer()) {
+		DBG(("%s: enabling Xorg triple buffering\n", __FUNCTION__));
 		info.version = 6;
 		info.SwapLimitValidate = sna_dri2_swap_limit_validate;
 		info.ReuseBufferNotify = sna_dri2_reuse_buffer;
commit e7ef57ce1f450aabe87c36488e04e2f874d7af47
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Wed Jan 14 11:52:31 2015 +0000

    sna: Actually check for has_wc_mmap before use
    
    The callers assumed that the callee was doing the check and vice versa.
    The result was that no did and we ended up using an incoherent mapping
    instead on old kernels.
    
    Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=88350
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/kgem.c b/src/sna/kgem.c
index fb6a289..cb838ac 100644
--- a/src/sna/kgem.c
+++ b/src/sna/kgem.c
@@ -6320,6 +6320,8 @@ void *kgem_bo_map__wc(struct kgem *kgem, struct kgem_bo *bo)
 
 	if (bo->map__wc)
 		return bo->map__wc;
+	if (!kgem->has_wc_mmap)
+		return NULL;
 
 	kgem_trim_vma_cache(kgem, MAP_GTT, bucket(bo));
 	return __kgem_bo_map__wc(kgem, bo);


More information about the xorg-commit mailing list