On Fre, 2012-12-14 at 10:55 +0100, Michel Dänzer wrote: 
> On Don, 2012-12-13 at 14:46 -0500, Ilija Hadzic wrote: 
> > @@ -1337,6 +1345,20 @@ static int radeon_dri2_schedule_swap(ClientPtr 
> > client, DrawablePtr draw,
> >          goto blit_fallback;
> >      }
> >  
> > +    nominal_vblank_period = crtc->mode.HTotal * crtc->mode.VTotal;
> > +    nominal_vblank_period /= crtc->mode.Clock;
> > +    /*
> > +     * CRTC is in DPMS off state, fallback to blit, but pace the
> > +     * application at the rate that roughly approximates the
> > +     * nominal frame rate of the relevant CRTC
> > +     */
> > +    if (!radeon_crtc_is_enabled(crtc)) {
> > +   TimerSet(NULL, 0, nominal_vblank_period, radeon_dri2_deferred_swap,
> > +            swap_info);
> > +   *target_msc = 0;
> > +   return TRUE;
> > +    }
> 
> This will always wait for (at least) nominal_vblank_period milliseconds
> before performing the swap, but a significant part of that (or even more
> time) might have passed already since the last swap of the drawable. You
> could keep track of the previous swap time (from the event tv_(u)sec
> values or GetTimeInMillis()) in a drawable private and only wait for the
> amount of time actually necessary.

Also, this needs to take target_msc into account.


-- 
Earthling Michel Dänzer           |                   http://www.amd.com
Libre software enthusiast         |          Debian, X and DRI developer
_______________________________________________
xorg-driver-ati mailing list
[email protected]
http://lists.x.org/mailman/listinfo/xorg-driver-ati

Reply via email to