xf86-video-intel: 6 commits - src/sna/gen2_render.c 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/kgem.h src/sna/sna_blt.c
Chris Wilson
ickle at kemper.freedesktop.org
Sun Aug 26 06:58:55 PDT 2012
src/sna/gen2_render.c | 4 +++-
src/sna/gen3_render.c | 4 +++-
src/sna/gen4_render.c | 13 +++++++++----
src/sna/gen5_render.c | 13 +++++++++----
src/sna/gen6_render.c | 24 ++++++++++--------------
src/sna/gen7_render.c | 25 ++++++++++---------------
src/sna/kgem.c | 6 +++++-
src/sna/kgem.h | 4 +++-
src/sna/sna_blt.c | 4 +++-
9 files changed, 55 insertions(+), 42 deletions(-)
New commits:
commit 8e10a5b348a37feadcf935ec7694e46cc0802bdf
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Sun Aug 26 14:53:12 2012 +0100
sna/gen6+: Do not call sna_blt_composite() after prepping the composite op
As sna_blt_composite() will overwrite parts of the composite op as it
checks whether or not it can execute that operation, it will lead to a
crash as the normal render path finds the op corrupt. (The BLT
conversion functions cater for the cases where we may wish to switch
pipelines after choosing src/dst bo.)
Reported-by: rei4dan at gmail.com
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 390da52..c364f72 100644
--- a/src/sna/gen6_render.c
+++ b/src/sna/gen6_render.c
@@ -2685,15 +2685,6 @@ gen6_render_composite(struct sna *sna,
if (!gen6_composite_set_target(sna, tmp, dst))
return false;
- if (mask == NULL && sna->kgem.mode == KGEM_BLT &&
- sna_blt_composite(sna, op,
- src, dst,
- src_x, src_y,
- dst_x, dst_y,
- width, height,
- tmp, false))
- return true;
-
sna_render_reduce_damage(tmp, dst_x, dst_y, width, height);
if (too_large(tmp->dst.width, tmp->dst.height)) {
diff --git a/src/sna/gen7_render.c b/src/sna/gen7_render.c
index f14d777..b8897d3 100644
--- a/src/sna/gen7_render.c
+++ b/src/sna/gen7_render.c
@@ -2788,16 +2788,6 @@ gen7_render_composite(struct sna *sna,
if (!gen7_composite_set_target(sna, tmp, dst))
return false;
- if (mask == NULL &&
- sna->kgem.mode == KGEM_BLT &&
- sna_blt_composite(sna, op,
- src, dst,
- src_x, src_y,
- dst_x, dst_y,
- width, height,
- tmp, false))
- return true;
-
sna_render_reduce_damage(tmp, dst_x, dst_y, width, height);
if (too_large(tmp->dst.width, tmp->dst.height)) {
commit cbbe7727e766a5ee8767673feb6c8cdec38a7051
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Sun Aug 26 14:43:47 2012 +0100
sna/gen6+: Simplify prefer_blt_bo
As we already check the tiling state, so all we need to then check is
that the pitch is within the BLT constraint.
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 9c99b2a..390da52 100644
--- a/src/sna/gen6_render.c
+++ b/src/sna/gen6_render.c
@@ -2387,7 +2387,7 @@ static inline bool untiled_tlb_miss(struct kgem_bo *bo)
static bool prefer_blt_bo(struct sna *sna, struct kgem_bo *bo)
{
- return untiled_tlb_miss(bo) && kgem_bo_can_blt(&sna->kgem, bo);
+ return untiled_tlb_miss(bo) && bo->pitch < MAXSHORT;
}
static bool
diff --git a/src/sna/gen7_render.c b/src/sna/gen7_render.c
index b1f17d7..f14d777 100644
--- a/src/sna/gen7_render.c
+++ b/src/sna/gen7_render.c
@@ -2476,7 +2476,7 @@ static inline bool untiled_tlb_miss(struct kgem_bo *bo)
static bool prefer_blt_bo(struct sna *sna, struct kgem_bo *bo)
{
- return untiled_tlb_miss(bo) && kgem_bo_can_blt(&sna->kgem, bo);
+ return untiled_tlb_miss(bo) && bo->pitch < MAXSHORT;
}
inline static bool prefer_blt_ring(struct sna *sna)
commit 0c15824a8143a288716d2eacf03252cc54eb9466
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Sun Aug 26 14:29:41 2012 +0100
sna: Add some DBG to kgem_is_idle()
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
diff --git a/src/sna/kgem.c b/src/sna/kgem.c
index 825caa7..568d120 100644
--- a/src/sna/kgem.c
+++ b/src/sna/kgem.c
@@ -1763,9 +1763,13 @@ bool __kgem_is_idle(struct kgem *kgem)
assert(!list_is_empty(&kgem->requests));
rq = list_last_entry(&kgem->requests, struct kgem_request, list);
- if (kgem_busy(kgem, rq->bo->handle))
+ if (kgem_busy(kgem, rq->bo->handle)) {
+ DBG(("%s: last requests handle=%d still busy\n",
+ __FUNCTION__, rq->bo->handle));
return false;
+ }
+ DBG(("%s: gpu idle\n", __FUNCTION__));
kgem_retire__requests(kgem);
assert(list_is_empty(&kgem->requests));
return true;
diff --git a/src/sna/kgem.h b/src/sna/kgem.h
index d085a2f..d8018b8 100644
--- a/src/sna/kgem.h
+++ b/src/sna/kgem.h
@@ -261,8 +261,10 @@ bool kgem_retire(struct kgem *kgem);
bool __kgem_is_idle(struct kgem *kgem);
static inline bool kgem_is_idle(struct kgem *kgem)
{
- if (list_is_empty(&kgem->requests))
+ if (list_is_empty(&kgem->requests)) {
+ DBG(("%s: no outstanding requests\n", __FUNCTION__));
return true;
+ }
return __kgem_is_idle(kgem);
}
commit d432983421286d343f7c487c12c7244b711f5a66
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Sun Aug 26 13:43:35 2012 +0100
sna: Add some DBG to BLT composite substitute to show if redirection is used
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
diff --git a/src/sna/sna_blt.c b/src/sna/sna_blt.c
index 656e979..c286918 100644
--- a/src/sna/sna_blt.c
+++ b/src/sna/sna_blt.c
@@ -1915,7 +1915,9 @@ sna_blt_composite__convert(struct sna *sna,
return false;
#endif
- DBG(("%s\n", __FUNCTION__));
+ DBG(("%s src=%d, dst=%d (redirect? %d)\n", __FUNCTION__,
+ tmp->src.bo->handle, tmp->dst.bo->handle,
+ tmp->redirect.real_bo ? tmp->redirect.real_bo->handle : 0));
if (!kgem_bo_can_blt(&sna->kgem, tmp->dst.bo) ||
!kgem_bo_can_blt(&sna->kgem, tmp->src.bo)) {
commit 5a5212117e7a73ce3fffb87c60a505a849e38c36
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Sun Aug 26 13:38:23 2012 +0100
sna: Cleanup composite redirection after substituting the BLT
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
diff --git a/src/sna/gen2_render.c b/src/sna/gen2_render.c
index d2f6fe7..401d84a 100644
--- a/src/sna/gen2_render.c
+++ b/src/sna/gen2_render.c
@@ -1782,8 +1782,10 @@ gen2_render_composite(struct sna *sna,
src_x, src_y,
width, height,
dst_x, dst_y,
- tmp))
+ tmp)) {
+ sna_render_composite_redirect_done(sna, tmp);
return true;
+ }
break;
}
diff --git a/src/sna/gen3_render.c b/src/sna/gen3_render.c
index ab94bdb..b13b9bf 100644
--- a/src/sna/gen3_render.c
+++ b/src/sna/gen3_render.c
@@ -2880,8 +2880,10 @@ gen3_render_composite(struct sna *sna,
src_x, src_y,
width, height,
dst_x, dst_y,
- tmp))
+ tmp)) {
+ sna_render_composite_redirect_done(sna, tmp);
return true;
+ }
gen3_composite_channel_convert(&tmp->src);
break;
diff --git a/src/sna/gen4_render.c b/src/sna/gen4_render.c
index e732810..7668caa 100644
--- a/src/sna/gen4_render.c
+++ b/src/sna/gen4_render.c
@@ -2315,8 +2315,10 @@ gen4_render_composite(struct sna *sna,
src_x, src_y,
width, height,
dst_x, dst_y,
- tmp))
+ tmp)) {
+ sna_render_composite_redirect_done(sna, tmp);
return true;
+ }
gen4_composite_channel_convert(&tmp->src);
break;
diff --git a/src/sna/gen5_render.c b/src/sna/gen5_render.c
index 0a7bc51..b24d742 100644
--- a/src/sna/gen5_render.c
+++ b/src/sna/gen5_render.c
@@ -2330,8 +2330,10 @@ gen5_render_composite(struct sna *sna,
src_x, src_y,
width, height,
dst_x, dst_y,
- tmp))
+ tmp)) {
+ sna_render_composite_redirect_done(sna, tmp);
return true;
+ }
gen5_composite_channel_convert(&tmp->src);
break;
diff --git a/src/sna/gen6_render.c b/src/sna/gen6_render.c
index 56e48ed..9c99b2a 100644
--- a/src/sna/gen6_render.c
+++ b/src/sna/gen6_render.c
@@ -2721,8 +2721,10 @@ gen6_render_composite(struct sna *sna,
src_x, src_y,
width, height,
dst_x, dst_y,
- tmp))
+ tmp)) {
+ sna_render_composite_redirect_done(sna, tmp);
return true;
+ }
gen6_composite_channel_convert(&tmp->src);
break;
diff --git a/src/sna/gen7_render.c b/src/sna/gen7_render.c
index 41921d4..b1f17d7 100644
--- a/src/sna/gen7_render.c
+++ b/src/sna/gen7_render.c
@@ -2825,8 +2825,10 @@ gen7_render_composite(struct sna *sna,
src_x, src_y,
width, height,
dst_x, dst_y,
- tmp))
+ tmp)) {
+ sna_render_composite_redirect_done(sna, tmp);
return true;
+ }
gen7_composite_channel_convert(&tmp->src);
break;
commit 335821d588460c253b2ba2c8616a7c46e5ad0150
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Sun Aug 26 13:29:04 2012 +0100
sna/gen4+: Check for allocation failure for the clear solid bo
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 632793f..e732810 100644
--- a/src/sna/gen4_render.c
+++ b/src/sna/gen4_render.c
@@ -2306,7 +2306,8 @@ gen4_render_composite(struct sna *sna,
DBG(("%s: failed to prepare source\n", __FUNCTION__));
goto cleanup_dst;
case 0:
- gen4_composite_solid_init(sna, &tmp->src, 0);
+ if (!gen4_composite_solid_init(sna, &tmp->src, 0))
+ goto cleanup_dst;
/* fall through to fixup */
case 1:
if (mask == NULL &&
@@ -2361,7 +2362,8 @@ gen4_render_composite(struct sna *sna,
DBG(("%s: failed to prepare mask\n", __FUNCTION__));
goto cleanup_src;
case 0:
- gen4_composite_solid_init(sna, &tmp->mask, 0);
+ if (!gen4_composite_solid_init(sna, &tmp->mask, 0))
+ goto cleanup_src;
/* fall through to fixup */
case 1:
gen4_composite_channel_convert(&tmp->mask);
@@ -2660,7 +2662,8 @@ gen4_render_composite_spans(struct sna *sna,
case -1:
goto cleanup_dst;
case 0:
- gen4_composite_solid_init(sna, &tmp->base.src, 0);
+ if (!gen4_composite_solid_init(sna, &tmp->base.src, 0))
+ goto cleanup_dst;
/* fall through to fixup */
case 1:
gen4_composite_channel_convert(&tmp->base.src);
diff --git a/src/sna/gen5_render.c b/src/sna/gen5_render.c
index aaf7e49..0a7bc51 100644
--- a/src/sna/gen5_render.c
+++ b/src/sna/gen5_render.c
@@ -2321,7 +2321,8 @@ gen5_render_composite(struct sna *sna,
DBG(("%s: failed to prepare source picture\n", __FUNCTION__));
goto cleanup_dst;
case 0:
- gen5_composite_solid_init(sna, &tmp->src, 0);
+ if (!gen5_composite_solid_init(sna, &tmp->src, 0))
+ goto cleanup_dst;
/* fall through to fixup */
case 1:
if (mask == NULL &&
@@ -2375,7 +2376,8 @@ gen5_render_composite(struct sna *sna,
DBG(("%s: failed to prepare mask picture\n", __FUNCTION__));
goto cleanup_src;
case 0:
- gen5_composite_solid_init(sna, &tmp->mask, 0);
+ if (!gen5_composite_solid_init(sna, &tmp->mask, 0))
+ goto cleanup_src;
/* fall through to fixup */
case 1:
gen5_composite_channel_convert(&tmp->mask);
@@ -2690,7 +2692,8 @@ gen5_render_composite_spans(struct sna *sna,
case -1:
goto cleanup_dst;
case 0:
- gen5_composite_solid_init(sna, &tmp->base.src, 0);
+ if (!gen5_composite_solid_init(sna, &tmp->base.src, 0))
+ goto cleanup_dst;
/* fall through to fixup */
case 1:
gen5_composite_channel_convert(&tmp->base.src);
diff --git a/src/sna/gen6_render.c b/src/sna/gen6_render.c
index bfbcfd8..56e48ed 100644
--- a/src/sna/gen6_render.c
+++ b/src/sna/gen6_render.c
@@ -2710,7 +2710,8 @@ gen6_render_composite(struct sna *sna,
case -1:
goto cleanup_dst;
case 0:
- gen6_composite_solid_init(sna, &tmp->src, 0);
+ if (!gen6_composite_solid_init(sna, &tmp->src, 0))
+ goto cleanup_dst;
/* fall through to fixup */
case 1:
/* Did we just switch rings to prepare the source? */
@@ -2765,7 +2766,8 @@ gen6_render_composite(struct sna *sna,
case -1:
goto cleanup_src;
case 0:
- gen6_composite_solid_init(sna, &tmp->mask, 0);
+ if (!gen6_composite_solid_init(sna, &tmp->mask, 0))
+ goto cleanup_src;
/* fall through to fixup */
case 1:
gen6_composite_channel_convert(&tmp->mask);
@@ -3149,7 +3151,8 @@ gen6_render_composite_spans(struct sna *sna,
case -1:
goto cleanup_dst;
case 0:
- gen6_composite_solid_init(sna, &tmp->base.src, 0);
+ if (!gen6_composite_solid_init(sna, &tmp->base.src, 0))
+ goto cleanup_dst;
/* fall through to fixup */
case 1:
gen6_composite_channel_convert(&tmp->base.src);
diff --git a/src/sna/gen7_render.c b/src/sna/gen7_render.c
index 08ba6a0..41921d4 100644
--- a/src/sna/gen7_render.c
+++ b/src/sna/gen7_render.c
@@ -2814,7 +2814,8 @@ gen7_render_composite(struct sna *sna,
case -1:
goto cleanup_dst;
case 0:
- gen7_composite_solid_init(sna, &tmp->src, 0);
+ if (!gen7_composite_solid_init(sna, &tmp->src, 0))
+ goto cleanup_dst;
/* fall through to fixup */
case 1:
/* Did we just switch rings to prepare the source? */
@@ -2869,7 +2870,8 @@ gen7_render_composite(struct sna *sna,
case -1:
goto cleanup_src;
case 0:
- gen7_composite_solid_init(sna, &tmp->mask, 0);
+ if (!gen7_composite_solid_init(sna, &tmp->mask, 0))
+ goto cleanup_src;
/* fall through to fixup */
case 1:
gen7_composite_channel_convert(&tmp->mask);
@@ -3241,7 +3243,8 @@ gen7_render_composite_spans(struct sna *sna,
case -1:
goto cleanup_dst;
case 0:
- gen7_composite_solid_init(sna, &tmp->base.src, 0);
+ if (!gen7_composite_solid_init(sna, &tmp->base.src, 0))
+ goto cleanup_dst;
/* fall through to fixup */
case 1:
gen7_composite_channel_convert(&tmp->base.src);
More information about the xorg-commit
mailing list