[PATCH 2/3] present: Query the Window's CRTC every time
Chris Wilson
chris at chris-wilson.co.uk
Thu May 28 02:07:46 PDT 2015
On Thu, May 28, 2015 at 05:56:15PM +0900, Michel Dänzer wrote:
> On 28.05.2015 17:38, Chris Wilson wrote:
> > On Thu, May 28, 2015 at 04:59:14PM +0900, Michel Dänzer wrote:
> >> The patch below is an alternative fix for the problem I'm seeing, while
> >> preserving the window CRTC for MSC waits when possible. Your
> >> description sounds like it might work for you as well, Chris. Can you
> >> try it?
> >>
> >>
> >> diff --git a/present/present.c b/present/present.c
> >> index a634601..dc58f25 100644
> >> --- a/present/present.c
> >> +++ b/present/present.c
> >> @@ -713,6 +713,7 @@ present_pixmap(WindowPtr window,
> >> uint64_t ust;
> >> uint64_t target_msc;
> >> uint64_t crtc_msc;
> >> + RRCrtcPtr new_crtc;
> >> int ret;
> >> present_vblank_ptr vblank, tmp;
> >> ScreenPtr screen = window->drawable.pScreen;
> >> @@ -734,7 +735,21 @@ present_pixmap(WindowPtr window,
> >> target_crtc = present_get_crtc(window);
> >> }
> >>
> >> - present_get_ust_msc(screen, target_crtc, &ust, &crtc_msc);
> >> + if (present_get_ust_msc(screen, target_crtc, &ust, &crtc_msc) != Success) {
> >> + /* Maybe we need to try a different CRTC?
> >> + */
> >> + new_crtc = present_get_crtc(window);
> >> +
> >> + if (new_crtc != target_crtc &&
> >> + present_get_ust_msc(screen, new_crtc, &ust, &crtc_msc) == Success)
> >> + target_crtc = new_crtc;
> >> + else {
> >> + /* Fall back to fake MSC handling
> >> + */
> >> + target_crtc = NULL;
> >> + present_fake_get_ust_msc(screen, &ust, &crtc_msc);
> >> + }
> >> + }
> >
> > It survived for one more CRTC change, but still feeds passed msc into
> > the wait_vblank.
>
> By how much is it off? Does it cause a hang?
Just a few -1000 msc, which is a pretty long wait (it would be if we
honoured it at least).
> What's your test-case? Mine is the GNOME lock screen, i.e. basically
> DPMS off vs vblank waits and flips.
xf86-video-intel/test/present-test
-Chris
--
Chris Wilson, Intel Open Source Technology Centre
More information about the xorg-devel
mailing list