[PATCH xf86-video-ati] Adapt to XF86_CRTC_VERSION 7
Alex Deucher
alexdeucher at gmail.com
Thu Apr 14 14:23:56 UTC 2016
On Thu, Apr 14, 2016 at 6:03 AM, Michel Dänzer <michel at daenzer.net> wrote:
> From: Michel Dänzer <michel.daenzer at amd.com>
>
> 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.
>
> Signed-off-by: Michel Dänzer <michel.daenzer at amd.com>
Reviewed-by: Alex Deucher <alexander.deucher at amd.com>
> ---
>
> See https://patchwork.freedesktop.org/patch/78319/ for the corresponding
> xserver change.
>
> 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 4c66ca7..42c0b9c 100644
> --- a/src/drmmode_display.c
> +++ b/src/drmmode_display.c
> @@ -621,7 +621,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
> */
> @@ -644,11 +644,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);
>
> @@ -899,7 +907,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;
> @@ -910,7 +918,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,
> @@ -956,7 +964,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;
> --
> 2.8.0.rc3
>
> _______________________________________________
> xorg-driver-ati mailing list
> xorg-driver-ati at lists.x.org
> https://lists.x.org/mailman/listinfo/xorg-driver-ati
More information about the xorg-driver-ati
mailing list