From: Michel Dänzer <michel.daen...@amd.com>

Fixes incorrect screen updates with TearFree enabled on PRIME slave
outputs which are not located at (0, 0).

(Ported from radeon commit a995f5830916a0fee5126263d1bfe48632be3a15)

Signed-off-by: Michel Dänzer <michel.daen...@amd.com>
---
 src/amdgpu_kms.c | 20 +++++++++++++++-----
 1 file changed, 15 insertions(+), 5 deletions(-)

diff --git a/src/amdgpu_kms.c b/src/amdgpu_kms.c
index 48e65a1..8a2fd30 100644
--- a/src/amdgpu_kms.c
+++ b/src/amdgpu_kms.c
@@ -300,11 +300,21 @@ static Bool AMDGPUCreateScreenResources_KMS(ScreenPtr 
pScreen)
 static Bool
 amdgpu_scanout_extents_intersect(xf86CrtcPtr xf86_crtc, BoxPtr extents)
 {
-       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);
+#ifdef AMDGPU_PIXMAP_SHARING
+       if (xf86_crtc->scrn->is_gpu) {
+               extents->x1 -= xf86_crtc->x;
+               extents->y1 -= xf86_crtc->y;
+               extents->x2 -= xf86_crtc->x;
+               extents->y2 -= xf86_crtc->y;
+       } else
+#endif
+       {
+               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);
-- 
2.10.2

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Reply via email to