xf86-video-intel: src/sna/gen3_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
Thu Sep 20 14:47:27 PDT 2012
src/sna/gen3_render.c | 8 ++------
src/sna/gen5_render.c | 8 ++------
src/sna/gen6_render.c | 8 ++------
src/sna/gen7_render.c | 8 ++------
src/sna/sna_render_inline.h | 19 +++++++++++++++++++
5 files changed, 27 insertions(+), 24 deletions(-)
New commits:
commit d853064e7eebc5719645c12605782f995131a6fe
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Thu Sep 20 22:43:26 2012 +0100
sna/gen3+: Trim the target extents to the CompositeClip
When computing the active region with of a composite operation with
unknown extents we try to simply use the whole Drawable. However, this
needs to be clipped otherwise it may trigger assertion failure with an
offscreen pixmap.
References: https://bugs.freedesktop.org/show_bug.cgi?id=55164
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 723dd5e..4c4271e 100644
--- a/src/sna/gen3_render.c
+++ b/src/sna/gen3_render.c
@@ -2500,12 +2500,8 @@ gen3_composite_set_target(struct sna *sna,
box.y1 = y;
box.x2 = x + w;
box.y2 = y + h;
- } else {
- box.x1 = dst->pDrawable->x;
- box.y1 = dst->pDrawable->y;
- box.x2 = box.x1 + dst->pDrawable->width;
- box.y2 = box.y1 + dst->pDrawable->height;
- }
+ } else
+ sna_render_picture_extents(dst, &box);
op->dst.bo = sna_drawable_use_bo (dst->pDrawable,
PREFER_GPU | FORCE_GPU | RENDER_GPU,
diff --git a/src/sna/gen5_render.c b/src/sna/gen5_render.c
index c9a2cc0..a141766 100644
--- a/src/sna/gen5_render.c
+++ b/src/sna/gen5_render.c
@@ -1983,12 +1983,8 @@ gen5_composite_set_target(struct sna *sna,
box.y1 = y;
box.x2 = x + w;
box.y2 = y + h;
- } else {
- box.x1 = dst->pDrawable->x;
- box.y1 = dst->pDrawable->y;
- box.x2 = box.x1 + dst->pDrawable->width;
- box.y2 = box.y1 + dst->pDrawable->height;
- }
+ } else
+ sna_render_picture_extents(dst, &box);
op->dst.bo = sna_drawable_use_bo (dst->pDrawable,
PREFER_GPU | FORCE_GPU | RENDER_GPU,
diff --git a/src/sna/gen6_render.c b/src/sna/gen6_render.c
index 8e10af3..4990062 100644
--- a/src/sna/gen6_render.c
+++ b/src/sna/gen6_render.c
@@ -2331,12 +2331,8 @@ gen6_composite_set_target(struct sna *sna,
box.y1 = y;
box.x2 = x + w;
box.y2 = y + h;
- } else {
- box.x1 = dst->pDrawable->x;
- box.y1 = dst->pDrawable->y;
- box.x2 = box.x1 + dst->pDrawable->width;
- box.y2 = box.y1 + dst->pDrawable->height;
- }
+ } else
+ sna_render_picture_extents(dst, &box);
op->dst.bo = sna_drawable_use_bo (dst->pDrawable,
PREFER_GPU | FORCE_GPU | RENDER_GPU,
diff --git a/src/sna/gen7_render.c b/src/sna/gen7_render.c
index 51b002e..1f59eb3 100644
--- a/src/sna/gen7_render.c
+++ b/src/sna/gen7_render.c
@@ -2438,12 +2438,8 @@ gen7_composite_set_target(struct sna *sna,
box.y1 = y;
box.x2 = x + w;
box.y2 = y + h;
- } else {
- box.x1 = dst->pDrawable->x;
- box.y1 = dst->pDrawable->y;
- box.x2 = box.x1 + dst->pDrawable->width;
- box.y2 = box.y1 + dst->pDrawable->height;
- }
+ } else
+ sna_render_picture_extents(dst, &box);
op->dst.bo = sna_drawable_use_bo (dst->pDrawable,
PREFER_GPU | FORCE_GPU | RENDER_GPU,
diff --git a/src/sna/sna_render_inline.h b/src/sna/sna_render_inline.h
index 64f8a46..216937a 100644
--- a/src/sna/sna_render_inline.h
+++ b/src/sna/sna_render_inline.h
@@ -140,6 +140,25 @@ sna_render_get_alpha_gradient(struct sna *sna)
}
static inline void
+sna_render_picture_extents(PicturePtr p, BoxRec *box)
+{
+ box->x1 = p->pDrawable->x;
+ box->y1 = p->pDrawable->y;
+ box->x2 = p->pDrawable->x + p->pDrawable->width;
+ box->y2 = p->pDrawable->y + p->pDrawable->height;
+
+ if (box->x1 < p->pCompositeClip->extents.x1)
+ box->x1 = p->pCompositeClip->extents.x1;
+ if (box->y1 < p->pCompositeClip->extents.y1)
+ box->y1 = p->pCompositeClip->extents.y1;
+
+ if (box->x2 > p->pCompositeClip->extents.x2)
+ box->x2 = p->pCompositeClip->extents.x2;
+ if (box->y2 > p->pCompositeClip->extents.y2)
+ box->y2 = p->pCompositeClip->extents.y2;
+}
+
+static inline void
sna_render_reduce_damage(struct sna_composite_op *op,
int dst_x, int dst_y,
int width, int height)
More information about the xorg-commit
mailing list