xf86-video-intel: 3 commits - src/sna/sna_display.c
Chris Wilson
ickle at kemper.freedesktop.org
Tue Jan 13 04:14:03 PST 2015
src/sna/sna_display.c | 32 ++++++++++++++++++++++++++------
1 file changed, 26 insertions(+), 6 deletions(-)
New commits:
commit 1cffbd9a8e96642bdbabf4e40829a5f1473b5bf9
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Tue Jan 13 10:50:36 2015 +0000
sna: Combine slave CRTC offsets with rotation
When applying both a slave offset and an output rotation, order is
important. To get the order right, we need to combine the two into a
single transformation.
Reported-by: Maarten Lankhorst <maarten.lankhorst at canonical.com>
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
diff --git a/src/sna/sna_display.c b/src/sna/sna_display.c
index 569c585..0657c47 100644
--- a/src/sna/sna_display.c
+++ b/src/sna/sna_display.c
@@ -6696,6 +6696,7 @@ sna_crtc_redisplay__fallback(xf86CrtcPtr crtc, RegionPtr region, struct kgem_bo
ScreenPtr screen = sna->scrn->pScreen;
DrawablePtr draw = crtc_source(crtc, &sx, &sy);
PictFormatPtr format;
+ PictTransform T;
PicturePtr src, dst;
PixmapPtr pixmap;
int depth, error;
@@ -6735,9 +6736,14 @@ sna_crtc_redisplay__fallback(xf86CrtcPtr crtc, RegionPtr region, struct kgem_bo
if (!src)
goto free_pixmap;
- error = SetPictureTransform(src, &crtc->crtc_to_framebuffer);
- if (error)
- goto free_src;
+ pixman_transform_init_translate(&T, sx << 16, sy << 16);
+ pixman_transform_multiply(&T, &T, &crtc->crtc_to_framebuffer);
+ if (!sna_transform_is_integer_translation(&T, &sx, &sy)) {
+ error = SetPictureTransform(src, &T);
+ if (error)
+ goto free_src;
+ sx = sy = 0;
+ }
if (crtc->filter && crtc->transform_in_use)
SetPicturePictFilter(src, crtc->filter,
@@ -6789,6 +6795,7 @@ sna_crtc_redisplay__composite(xf86CrtcPtr crtc, RegionPtr region, struct kgem_bo
DrawablePtr draw = crtc_source(crtc, &sx, &sy);
struct sna_composite_op tmp;
PictFormatPtr format;
+ PictTransform T;
PicturePtr src, dst;
PixmapPtr pixmap;
const BoxRec *b;
@@ -6829,9 +6836,14 @@ sna_crtc_redisplay__composite(xf86CrtcPtr crtc, RegionPtr region, struct kgem_bo
if (!src)
goto free_pixmap;
- error = SetPictureTransform(src, &crtc->crtc_to_framebuffer);
- if (error)
- goto free_src;
+ pixman_transform_init_translate(&T, sx << 16, sy << 16);
+ pixman_transform_multiply(&T, &T, &crtc->crtc_to_framebuffer);
+ if (!sna_transform_is_integer_translation(&T, &sx, &sy)) {
+ error = SetPictureTransform(src, &T);
+ if (error)
+ goto free_src;
+ sx = sy = 0;
+ }
if (crtc->filter && crtc->transform_in_use)
SetPicturePictFilter(src, crtc->filter,
commit 2b1353689a453f5be29b82be002c9f872475b29a
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Tue Jan 13 10:20:10 2015 +0000
sna: Add a small DBG message for when PRIME slave tracking is enabled
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
diff --git a/src/sna/sna_display.c b/src/sna/sna_display.c
index 89d4e4e..569c585 100644
--- a/src/sna/sna_display.c
+++ b/src/sna/sna_display.c
@@ -1461,6 +1461,8 @@ static bool sna_crtc_enable_shadow(struct sna *sna, struct sna_crtc *crtc)
if (crtc->slave_pixmap) {
assert(crtc->slave_damage == NULL);
+ DBG(("%s: enabling PRIME slave tracking on CRTC %d [pipe=%d], pixmap=%ld\n",
+ __FUNCTION__, crtc->id, crtc->pipe, crtc->slave_pixmap->drawable.serialNumber));
crtc->slave_damage = DamageCreate(sna_crtc_slave_damage, NULL,
DamageReportRawRegion, TRUE,
sna->scrn->pScreen, crtc);
commit 1978b17cb011388fd9de67e78467b236af637379
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Tue Jan 13 10:04:33 2015 +0000
sna: Throw away CRTC damage if the CRTC is outside the screen bounds
As the damage is entirely empty due to the screen clipping, we can save
a few electrons by not recording it. Ordinarily, we will then get the
damage event later when the screen is resized.
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
diff --git a/src/sna/sna_display.c b/src/sna/sna_display.c
index cf871bc..89d4e4e 100644
--- a/src/sna/sna_display.c
+++ b/src/sna/sna_display.c
@@ -2230,6 +2230,12 @@ sna_crtc_damage(xf86CrtcPtr crtc)
if (region.extents.y2 > screen->height)
region.extents.y2 = screen->height;
+ if (region.extents.x2 <= region.extents.x1 ||
+ region.extents.y2 <= region.extents.y1) {
+ DBG(("%s: crtc not damaged, all-clipped\n", __FUNCTION__));
+ return;
+ }
+
DBG(("%s: marking crtc %d as completely damaged (%d, %d), (%d, %d)\n",
__FUNCTION__, to_sna_crtc(crtc)->id,
region.extents.x1, region.extents.y1,
More information about the xorg-commit
mailing list