On 25/04/17 01:54 AM, Mario Kleiner wrote: > Make sure we do not program a hw pageflip inside vblank 'n' iff the > atomic flip is comitted while inside the same vblank 'n'. We must > defer such a flip by one refresh cycle to vblank 'n+1', unless this > is a DRM_MODE_PAGE_FLIP_ASYNC async pageflip, which must always > execute as soon as possible. > > Without this, pageflips programmed via X11 GLX_OML_sync_control extensions > glXSwapBuffersMscOML(..., target_msc, ...); call and/or via DRI3/Present > PresentPixmap(..., target_msc, ...); request will complete one vblank > too early whenever target_msc > current_msc + 1, ie. more than 1 vblank > in the future. In such a case, the call of the pageflip ioctl() would be > triggered by a queued drmWaitVblank() vblank event, which itself gets > dispatched inside the vblank one frame before the target_msc vblank. > > Testing with this patch does no longer show any problems with > OML_sync_control swap scheduling or flip completion timestamps. > Tested on R9 380 Tonga. > > v2: Add acked/r-b by Harry and Michel. > v3: Feedback from Andrey: Must not wait an extra frame for > DRM_MODE_PAGE_FLIP_ASYNC flips. > > Signed-off-by: Mario Kleiner <mario.kleiner.de at gmail.com> > Acked-by: Harry Wentland <harry.wentland at amd.com> > Reviewed-by: Michel Dänzer <michel.daenzer at amd.com> This patch and v2 of patch 1 pushed to the internal amd-staging-4.9 branch, thanks! -- Earthling Michel Dänzer | http://www.amd.com Libre software enthusiast | Mesa and X developer