xf86-video-intel: 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/sna_render_inline.h
Chris Wilson
ickle at kemper.freedesktop.org
Sun Nov 13 03:02:46 PST 2011
src/sna/gen2_render.c | 5 ++++-
src/sna/gen3_render.c | 32 ++++----------------------------
src/sna/gen4_render.c | 1 +
src/sna/gen5_render.c | 2 ++
src/sna/gen6_render.c | 2 ++
src/sna/gen7_render.c | 1 +
src/sna/sna_render_inline.h | 20 ++++++++++++++++++++
7 files changed, 34 insertions(+), 29 deletions(-)
New commits:
commit f0acc6c0f15875fd51f6df6c8f13d589f9149771
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Sun Nov 13 09:39:47 2011 +0000
sna/composite: Attempt to reduce the damage is the operation is contained
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 8e09915..1b1c8aa 100644
--- a/src/sna/gen2_render.c
+++ b/src/sna/gen2_render.c
@@ -1201,7 +1201,8 @@ gen2_composite_set_target(struct sna_composite_op *op,
return FALSE;
op->dst.bo = priv->gpu_bo;
- if (!priv->gpu_only)
+ if (!sna_damage_is_all(&priv->gpu_damage,
+ op->dst.width, op->dst.height))
op->damage = &priv->gpu_damage;
get_drawable_deltas(dst->pDrawable, op->dst.pixmap,
@@ -1289,6 +1290,7 @@ gen2_render_composite(struct sna *sna,
__FUNCTION__));
return FALSE;
}
+ sna_render_reduce_damage(tmp, dst_x, dst_y, width, height);
tmp->op = op;
if (tmp->dst.width > 2048 ||
@@ -1714,6 +1716,7 @@ gen2_render_composite_spans(struct sna *sna,
__FUNCTION__));
return FALSE;
}
+ sna_render_reduce_damage(&tmp->base, dst_x, dst_y, width, height);
tmp->base.op = op;
if (tmp->base.dst.width > 2048 ||
diff --git a/src/sna/gen3_render.c b/src/sna/gen3_render.c
index 0a17e4c..682fdd7 100644
--- a/src/sna/gen3_render.c
+++ b/src/sna/gen3_render.c
@@ -2171,26 +2171,6 @@ gen3_align_vertex(struct sna *sna,
}
}
-static void
-reduce_damage(struct sna_composite_op *op,
- int dst_x, int dst_y,
- int width, int height)
-{
- BoxRec r;
-
- if (op->damage == NULL)
- return;
-
- r.x1 = dst_x + op->dst.x;
- r.x2 = r.x1 + width;
-
- r.y1 = dst_y + op->dst.y;
- r.y2 = r.y1 + height;
-
- if (sna_damage_contains_box(*op->damage, &r) == PIXMAN_REGION_IN)
- op->damage = NULL;
-}
-
static Bool
gen3_composite_set_target(struct sna_composite_op *op, PicturePtr dst)
{
@@ -2207,8 +2187,8 @@ gen3_composite_set_target(struct sna_composite_op *op, PicturePtr dst)
return FALSE;
op->dst.bo = priv->gpu_bo;
- if (!priv->gpu_only &&
- !sna_damage_is_all(&priv->gpu_damage, op->dst.width, op->dst.height))
+ if (!sna_damage_is_all(&priv->gpu_damage,
+ op->dst.width, op->dst.height))
op->damage = &priv->gpu_damage;
get_drawable_deltas(dst->pDrawable, op->dst.pixmap,
@@ -2310,9 +2290,7 @@ gen3_render_composite(struct sna *sna,
__FUNCTION__));
return FALSE;
}
-
- if (width && height)
- reduce_damage(tmp, dst_x, dst_y, width, height);
+ sna_render_reduce_damage(tmp, dst_x, dst_y, width, height);
tmp->op = op;
tmp->rb_reversed = gen3_dst_rb_reversed(tmp->dst.format);
@@ -2848,9 +2826,7 @@ gen3_render_composite_spans(struct sna *sna,
__FUNCTION__));
return FALSE;
}
-
- if (width && height)
- reduce_damage(&tmp->base, dst_x, dst_y, width, height);
+ sna_render_reduce_damage(&tmp->base, dst_x, dst_y, width, height);
tmp->base.op = op;
tmp->base.rb_reversed = gen3_dst_rb_reversed(tmp->base.dst.format);
diff --git a/src/sna/gen4_render.c b/src/sna/gen4_render.c
index ae535b1..7224e83 100644
--- a/src/sna/gen4_render.c
+++ b/src/sna/gen4_render.c
@@ -1932,6 +1932,7 @@ gen4_render_composite(struct sna *sna,
if (!gen4_composite_set_target(dst, tmp))
return FALSE;
+ sna_render_reduce_damage(tmp, dst_x, dst_y, width, height);
if (tmp->dst.width > 8192 || tmp->dst.height > 8192) {
if (!sna_render_composite_redirect(sna, tmp,
diff --git a/src/sna/gen5_render.c b/src/sna/gen5_render.c
index 0b8a947..de1f976 100644
--- a/src/sna/gen5_render.c
+++ b/src/sna/gen5_render.c
@@ -1962,6 +1962,7 @@ gen5_render_composite(struct sna *sna,
DBG(("%s: failed to set composite target\n", __FUNCTION__));
return FALSE;
}
+ sna_render_reduce_damage(tmp, dst_x, dst_y, width, height);
if (tmp->dst.width > 8192 || tmp->dst.height > 8192) {
if (!sna_render_composite_redirect(sna, tmp,
@@ -2314,6 +2315,7 @@ gen5_render_composite_spans(struct sna *sna,
tmp->base.op = op;
if (!gen5_composite_set_target(dst, &tmp->base))
return FALSE;
+ sna_render_reduce_damage(&tmp->base, dst_x, dst_y, width, height);
if (tmp->base.dst.width > 8192 || tmp->base.dst.height > 8192) {
if (!sna_render_composite_redirect(sna, &tmp->base,
diff --git a/src/sna/gen6_render.c b/src/sna/gen6_render.c
index 12fcd31..66bbb9e 100644
--- a/src/sna/gen6_render.c
+++ b/src/sna/gen6_render.c
@@ -2129,6 +2129,7 @@ gen6_render_composite(struct sna *sna,
tmp->op = op;
if (!gen6_composite_set_target(tmp, dst))
return FALSE;
+ sna_render_reduce_damage(tmp, dst_x, dst_y, width, height);
if (tmp->dst.width > 8192 || tmp->dst.height > 8192) {
if (!sna_render_composite_redirect(sna, tmp,
@@ -2482,6 +2483,7 @@ gen6_render_composite_spans(struct sna *sna,
tmp->base.op = op;
if (!gen6_composite_set_target(&tmp->base, dst))
return FALSE;
+ sna_render_reduce_damage(&tmp->base, dst_x, dst_y, width, height);
if (tmp->base.dst.width > 8192 || tmp->base.dst.height > 8192) {
if (!sna_render_composite_redirect(sna, &tmp->base,
diff --git a/src/sna/gen7_render.c b/src/sna/gen7_render.c
index f620285..ca32cc3 100644
--- a/src/sna/gen7_render.c
+++ b/src/sna/gen7_render.c
@@ -2260,6 +2260,7 @@ gen7_render_composite(struct sna *sna,
tmp->op = op;
if (!gen7_composite_set_target(tmp, dst))
return FALSE;
+ sna_render_reduce_damage(tmp, dst_x, dst_y, width, height);
if (tmp->dst.width > GEN7_MAX_SIZE || tmp->dst.height > GEN7_MAX_SIZE) {
if (!sna_render_composite_redirect(sna, tmp,
diff --git a/src/sna/sna_render_inline.h b/src/sna/sna_render_inline.h
index 91aa7e4..6dd93a4 100644
--- a/src/sna/sna_render_inline.h
+++ b/src/sna/sna_render_inline.h
@@ -125,4 +125,24 @@ sna_render_get_alpha_gradient(struct sna *sna)
return kgem_bo_reference(sna->render.alpha_cache.cache_bo);
}
+static inline void
+sna_render_reduce_damage(struct sna_composite_op *op,
+ int dst_x, int dst_y,
+ int width, int height)
+{
+ BoxRec r;
+
+ if (width == 0 || height == 0 || op->damage == NULL)
+ return;
+
+ r.x1 = dst_x + op->dst.x;
+ r.x2 = r.x1 + width;
+
+ r.y1 = dst_y + op->dst.y;
+ r.y2 = r.y1 + height;
+
+ if (sna_damage_contains_box(*op->damage, &r) == PIXMAN_REGION_IN)
+ op->damage = NULL;
+}
+
#endif /* SNA_RENDER_INLINE_H */
More information about the xorg-commit
mailing list