diff options
author | Michel Dänzer <michel.daenzer@amd.com> | 2016-09-21 17:38:57 +0900 |
---|---|---|
committer | Michel Dänzer <michel@daenzer.net> | 2016-09-21 18:20:19 +0900 |
commit | 80d794f11a5f047663897e4349da75d89ceff7c7 (patch) | |
tree | d425e98ce1572d7467c8984878ca70f083bc91a2 /src/radeon_kms.c | |
parent | 09ba7b3b7b1b724aa386dbf2d33f567d7f26326b (diff) |
Make the dedicated scanout mechanism work with arbitrary transforms
This makes TearFree work with arbitrary transforms, and makes transforms
work better even without TearFree, with xserver >= 1.12.
(Ported from amdgpu commit bf000ea7ef91f5ecb59fc3c1ab8ed9eddcc0841d)
Diffstat (limited to 'src/radeon_kms.c')
-rw-r--r-- | src/radeon_kms.c | 29 |
1 files changed, 10 insertions, 19 deletions
diff --git a/src/radeon_kms.c b/src/radeon_kms.c index b64c6367..9d968117 100644 --- a/src/radeon_kms.c +++ b/src/radeon_kms.c @@ -386,19 +386,16 @@ static Bool radeon_scanout_extents_intersect(xf86CrtcPtr xf86_crtc, BoxPtr extents, int w, int h) { - extents->x1 = max(extents->x1 - xf86_crtc->x, 0); - extents->y1 = max(extents->y1 - xf86_crtc->y, 0); - - switch (xf86_crtc->rotation & 0xf) { - case RR_Rotate_90: - case RR_Rotate_270: - extents->x2 = min(extents->x2 - xf86_crtc->x, h); - extents->y2 = min(extents->y2 - xf86_crtc->y, w); - break; - default: - extents->x2 = min(extents->x2 - xf86_crtc->x, w); - extents->y2 = min(extents->y2 - xf86_crtc->y, h); - } + extents->x1 -= xf86_crtc->filter_width >> 1; + extents->x2 += xf86_crtc->filter_width >> 1; + extents->y1 -= xf86_crtc->filter_height >> 1; + extents->y2 += xf86_crtc->filter_height >> 1; + pixman_f_transform_bounds(&xf86_crtc->f_framebuffer_to_crtc, extents); + + extents->x1 = max(extents->x1, 0); + extents->y1 = max(extents->y1, 0); + extents->x2 = min(extents->x2, w); + extents->y2 = min(extents->y2, h); return (extents->x1 < extents->x2 && extents->y1 < extents->y2); } @@ -928,12 +925,6 @@ radeon_scanout_do_update(xf86CrtcPtr xf86_crtc, int scanout_id) SetPicturePictFilter(src, xf86_crtc->filter, xf86_crtc->params, xf86_crtc->nparams); - extents.x1 += xf86_crtc->x - (xf86_crtc->filter_width >> 1); - extents.x2 += xf86_crtc->x + (xf86_crtc->filter_width >> 1); - extents.y1 += xf86_crtc->y - (xf86_crtc->filter_height >> 1); - extents.y2 += xf86_crtc->y + (xf86_crtc->filter_height >> 1); - pixman_f_transform_bounds(&xf86_crtc->f_framebuffer_to_crtc, &extents); - pScreen->SourceValidate = NULL; CompositePicture(PictOpSrc, src, NULL, dst, |