xf86-video-ati/U_07-Adapt-to-XF86_CRTC_VERSION-7.patch
Max Staudt 84a4590c79 Accepting request 438260 from home:mstaudt:branches:X11:XOrg
- U_01-* ... U_20-* :
  Include patches that haven't made it into the 7.7.1 release.

  This means almost all commits between xf86-video-ati-7.7.0
  and 12d30eeb9711bd2b1609d6bbb74c4a1760596f72.

  Fixes (bsc#990066).

OBS-URL: https://build.opensuse.org/request/show/438260
OBS-URL: https://build.opensuse.org/package/show/X11:XOrg/xf86-video-ati?expand=0&rev=51
2016-11-02 10:39:34 +00:00

81 lines
2.8 KiB
Diff

From: Michel Dänzer <michel.daenzer@amd.com>
Date: Mon Mar 28 18:49:15 2016 +0900
Subject: [PATCH 7/20]Adapt to XF86_CRTC_VERSION 7
Patch-mainline: Upstream
Git-repo: git://anongit.freedesktop.org/xorg/driver/xf86-video-ati
Git-commit: 7835558acdce318130ba4a09ef936fd675e3197d
References: bsc#990066
Signed-off-by: Max Staudt <mstaudt@suse.de>
Now the HW cursor can be used with TearFree rotation.
This also allows always using the separate scanout pixmap mechanism for
rotation, so that should be much smoother even without TearFree enabled.
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
---
src/drmmode_display.c | 18 +++++++++++++-----
1 file changed, 13 insertions(+), 5 deletions(-)
diff --git a/src/drmmode_display.c b/src/drmmode_display.c
index 34b76e9..e32791d 100644
--- a/src/drmmode_display.c
+++ b/src/drmmode_display.c
@@ -643,7 +643,7 @@ drmmode_can_use_hw_cursor(xf86CrtcPtr crtc)
if (crtc->transformPresent)
return FALSE;
-#if XF86_CRTC_VERSION >= 4
+#if XF86_CRTC_VERSION >= 4 && XF86_CRTC_VERSION < 7
/* Xorg doesn't correctly handle cursor position transform in the
* rotation case
*/
@@ -666,11 +666,19 @@ drmmode_can_use_hw_cursor(xf86CrtcPtr crtc)
static Bool
drmmode_handle_transform(xf86CrtcPtr crtc)
{
- RADEONInfoPtr info = RADEONPTR(crtc->scrn);
Bool ret;
+#if XF86_CRTC_VERSION >= 7
+ if (!crtc->transformPresent && crtc->rotation != RR_Rotate_0)
+ crtc->driverIsPerformingTransform = XF86DriverTransformOutput;
+ else
+ crtc->driverIsPerformingTransform = XF86DriverTransformNone;
+#else
+ RADEONInfoPtr info = RADEONPTR(crtc->scrn);
+
crtc->driverIsPerformingTransform = info->tear_free &&
!crtc->transformPresent && crtc->rotation != RR_Rotate_0;
+#endif
ret = xf86CrtcRotate(crtc);
@@ -921,7 +929,7 @@ drmmode_set_cursor_position (xf86CrtcPtr crtc, int x, int y)
drmmode_crtc_private_ptr drmmode_crtc = crtc->driver_private;
drmmode_ptr drmmode = drmmode_crtc->drmmode;
-#if XF86_CRTC_VERSION >= 4
+#if XF86_CRTC_VERSION >= 4 && XF86_CRTC_VERSION < 7
if (crtc->driverIsPerformingTransform) {
x += crtc->x;
y += crtc->y;
@@ -932,7 +940,7 @@ drmmode_set_cursor_position (xf86CrtcPtr crtc, int x, int y)
drmModeMoveCursor(drmmode->fd, drmmode_crtc->mode_crtc->crtc_id, x, y);
}
-#if XF86_CRTC_VERSION >= 4
+#if XF86_CRTC_VERSION >= 4 && XF86_CRTC_VERSION < 7
static int
drmmode_cursor_src_offset(Rotation rotation, int width, int height,
@@ -978,7 +986,7 @@ drmmode_load_cursor_argb (xf86CrtcPtr crtc, CARD32 *image)
/* cursor should be mapped already */
ptr = (uint32_t *)(drmmode_crtc->cursor_bo->ptr);
-#if XF86_CRTC_VERSION >= 4
+#if XF86_CRTC_VERSION >= 4 && XF86_CRTC_VERSION < 7
if (crtc->driverIsPerformingTransform) {
uint32_t cursor_w = info->cursor_w, cursor_h = info->cursor_h;
int dstx, dsty;