From: Michel Dänzer <michel.daenzer@xxxxxxx> While at it, make them use crtc->driver_private. (Ported from radeon commit 36ce7920136c0d723c9397a84e7dd5926a9c7943) Signed-off-by: Michel Dänzer <michel.daenzer at amd.com> --- src/amdgpu_kms.c | 85 ++++++++++++++++++++++++-------------------------------- 1 file changed, 36 insertions(+), 49 deletions(-) diff --git a/src/amdgpu_kms.c b/src/amdgpu_kms.c index b0f1a3d94..f665a01cd 100644 --- a/src/amdgpu_kms.c +++ b/src/amdgpu_kms.c @@ -420,6 +420,38 @@ amdgpu_sync_scanout_pixmaps(xf86CrtcPtr xf86_crtc, RegionPtr new_region, RegionUninit(&remaining); } +static void +amdgpu_scanout_flip_abort(xf86CrtcPtr crtc, void *event_data) +{ + AMDGPUEntPtr pAMDGPUEnt = AMDGPUEntPriv(crtc->scrn); + drmmode_crtc_private_ptr drmmode_crtc = crtc->driver_private; + + drmmode_crtc->scanout_update_pending = FALSE; + drmmode_fb_reference(pAMDGPUEnt->fd, &drmmode_crtc->flip_pending, + NULL); +} + +static void +amdgpu_scanout_flip_handler(xf86CrtcPtr crtc, uint32_t msc, uint64_t usec, + void *event_data) +{ + AMDGPUEntPtr pAMDGPUEnt = AMDGPUEntPriv(crtc->scrn); + drmmode_crtc_private_ptr drmmode_crtc = crtc->driver_private; + + drmmode_fb_reference(pAMDGPUEnt->fd, &drmmode_crtc->fb, + drmmode_crtc->flip_pending); + amdgpu_scanout_flip_abort(crtc, event_data); + +#ifdef HAVE_PRESENT_H + if (drmmode_crtc->present_vblank_event_id) { + present_event_notify(drmmode_crtc->present_vblank_event_id, + drmmode_crtc->present_vblank_usec, + drmmode_crtc->present_vblank_msc); + drmmode_crtc->present_vblank_event_id = 0; + } +#endif +} + #ifdef AMDGPU_PIXMAP_SHARING static RegionPtr @@ -664,38 +696,6 @@ amdgpu_prime_scanout_update(PixmapDirtyUpdatePtr dirty) drmmode_crtc->scanout_update_pending = TRUE; } -static void -amdgpu_prime_scanout_flip_abort(xf86CrtcPtr crtc, void *event_data) -{ - AMDGPUEntPtr pAMDGPUEnt = AMDGPUEntPriv(crtc->scrn); - drmmode_crtc_private_ptr drmmode_crtc = event_data; - - drmmode_crtc->scanout_update_pending = FALSE; - drmmode_fb_reference(pAMDGPUEnt->fd, &drmmode_crtc->flip_pending, - NULL); -} - -static void -amdgpu_prime_scanout_flip_handler(xf86CrtcPtr crtc, uint32_t msc, uint64_t usec, - void *event_data) -{ - AMDGPUEntPtr pAMDGPUEnt = AMDGPUEntPriv(crtc->scrn); - drmmode_crtc_private_ptr drmmode_crtc = event_data; - - drmmode_fb_reference(pAMDGPUEnt->fd, &drmmode_crtc->fb, - drmmode_crtc->flip_pending); - amdgpu_prime_scanout_flip_abort(crtc, event_data); - -#ifdef HAVE_PRESENT_H - if (drmmode_crtc->present_vblank_event_id) { - present_event_notify(drmmode_crtc->present_vblank_event_id, - drmmode_crtc->present_vblank_usec, - drmmode_crtc->present_vblank_msc); - drmmode_crtc->present_vblank_event_id = 0; - } -#endif -} - static void amdgpu_prime_scanout_flip(PixmapDirtyUpdatePtr ent) { @@ -723,9 +723,9 @@ amdgpu_prime_scanout_flip(PixmapDirtyUpdatePtr ent) drm_queue_seq = amdgpu_drm_queue_alloc(crtc, AMDGPU_DRM_QUEUE_CLIENT_DEFAULT, AMDGPU_DRM_QUEUE_ID_DEFAULT, - drmmode_crtc, - amdgpu_prime_scanout_flip_handler, - amdgpu_prime_scanout_flip_abort); + NULL, + amdgpu_scanout_flip_handler, + amdgpu_scanout_flip_abort); if (drm_queue_seq == AMDGPU_DRM_QUEUE_ERROR) { xf86DrvMsg(scrn->scrnIndex, X_WARNING, "Allocating DRM event queue entry failed for PRIME flip.\n"); @@ -975,19 +975,6 @@ amdgpu_scanout_update(xf86CrtcPtr xf86_crtc) drmmode_crtc->scanout_update_pending = TRUE; } -static void -amdgpu_scanout_flip_abort(xf86CrtcPtr crtc, void *event_data) -{ - amdgpu_prime_scanout_flip_abort(crtc, event_data); -} - -static void -amdgpu_scanout_flip_handler(xf86CrtcPtr crtc, uint32_t msc, uint64_t usec, - void *event_data) -{ - amdgpu_prime_scanout_flip_handler(crtc, msc, usec, event_data); -} - static void amdgpu_scanout_flip(ScreenPtr pScreen, AMDGPUInfoPtr info, xf86CrtcPtr xf86_crtc) @@ -1014,7 +1001,7 @@ amdgpu_scanout_flip(ScreenPtr pScreen, AMDGPUInfoPtr info, drm_queue_seq = amdgpu_drm_queue_alloc(xf86_crtc, AMDGPU_DRM_QUEUE_CLIENT_DEFAULT, AMDGPU_DRM_QUEUE_ID_DEFAULT, - drmmode_crtc, + NULL, amdgpu_scanout_flip_handler, amdgpu_scanout_flip_abort); if (drm_queue_seq == AMDGPU_DRM_QUEUE_ERROR) { -- 2.14.1