On Sun, Oct 24, 2010 at 3:28 PM, Mario Kleiner
<mario.klei...@tuebingen.mpg.de> wrote:
> Hi all,
>
> after obsessing over these for another month after xds 2010,
> this is the first version of my vblank timestamping patches that
> i'm not totally ashamed off.
>

Mario, these look great.  Nice work!

Reviewed-by: Alex Deucher <alexdeuc...@gmail.com>

> 1st patch modifies the drm vblank handling to maintain precise
> timestamps of when vblanks happen. It timestamps the end of
> each vblank interval (= start of active scanout of the following
> frame), as required by the OpenML OML_sync_control extension spec,
> so the DRI2 swap & sync bits should return proper timestamps to
> gl clients. It also takes care of keeping timestamps and vblcounts
> consistent across vblank irq on/off and hopefully fixes a few
> off-by-one vblank counts due to race conditions in those on/off bits.
>
> There is still one small race condition between the vblank on/off
> bits and the gpu (updating its hardware vblank counter at the
> wrong moment) which can cause miscounting of vblanks across
> enable/disable. I have an idea how to fix that, based on these
> patches but will need to tinker around with it a bit more. After
> that we could reduce the vblankoffdelay from 5000 msecs to something
> smaller like 100 msecs to save more power on desktops with
> desktop composition enabled, where already a blinking cursor
> in a terminal window or a ticking clock in the menu bar
> can keep vblanks turned on all the time with a 5000 msecs timeout.
>
> All the timestamping inside the drmWaitVblank ioctl() and in
> vblank event handling now uses the timestamps calculated in this
> patch.
>
> 2nd and 3rd patches add the new timestamping and scanout position
> functions to the i915 and radeon drivers.
>
> Wrt. what i showed you at xds, i made the following changes:
>
> I've moved the actual timestamping routine as a helper function
> into the core. kms drivers now optionally export the crtc scanout
> position query function in addition to the vblank timestamping function
> to the drm core. Whenever the core has to recalculate timestamps it
> goes like:
>
> core -> kmsdriver-timestamping() -> core-timestampinghelper() ->
> kmsdriver-getscanoutposition()
>
> The kms driver can implement its own version of the timestamping function,
> e.g., using special hardware timestamping registers in some more recent
> gpu's, or it can simply export a getscanoutposition() function with
> standardized behaviour across drivers and call the timestamping routine
> implemented in the core. The routine in the core works in non-interlaced,
> non-doublescan video modes, with or without panel scaling. It can
> compensate for any random delay up to 1 video refresh duration. For
> more robustness one would need to use a gpu specific hardware method.
>
> I also moved the calculation of the constants needed for timetamping
> into the drm_crtc_helper routine, so they only get recalculated after
> a mode switch, not at each vblank. At modeset time i cache the
> adjusted_mode after validation/adjustment by the crtc and encoders
> inside the drm_crtc struct. Needed to account for panel scaling, and
> i have a few other ideas that would require that cached value.
>
> More details in the different commit messages and the code, just
> some more remarks.
>
> @Jesse: I replaced the n extra dynamically allocated spin-locks for n
> crtc's by one statically allocated lock shared by all crtc's and renamed
> it. I think i also worked all your other suggestions into the patches.
> Thanks a lot for your first review of the earlier version.
>
> The intel driver uses the timestamps inside the finish pageflip function
> for timestamps of bufferswap completion. I've tested with an Atom
> Mini netbook with Intel 945 GME gpu and there it works perfect. I don't
> have any other intel test machines, so the finish pageflip and scanout
> query functions for ironlake, gen6 and g4x aren't tested, only coded
> based on some of the intel manuals at xorg. In the pageflip irq
> handlers there is this uncertainty if pageflip irq's get delivered
> before or after the vblank irq's for the vblank interval of swap
> completion. The i945 delivers pagflip irq's before handling the
> vblank irq's so the completion handler needs to account for that.
> I guessed from the code, which ones do deliver before/after vblank,
> but that guesses may be wrong, so this needs testing.
>
> @Alex: Thanks for your feedback at xds. I think the radeon part
> should be as we discussed. The radeon patch builds onto what you
> committed already into drm-radeon-testing for the reclocking fixes.
> It slightly changes the interface between the scanout query function and
> radeon_pm_in_vbl(), but doesn't change the implementation.
>
> Testing of the timestamps on the Intel 945GME, a Radeon R500 and a R600
> against external measurement equipment shows that the timestamps are
> essentially perfect. Error wrt. to the external measurement is less
> than 20 microseconds (for the radeon's) and jitter is +/- 1 usec. The
> intel error is less than 0.5 msecs, but i can't test how much better
> because my photo-diode can't do better and my usec precise equipment only
> works with DVI, but the intel test machine only has a vga output.
>
> Now this swapbuffers timestamping is only trustworthy for pageflipped
> swaps, ie. at the moment only on intel. Alex is working on pageflipping
> support for radeon and i can test those bits and add timestamping.
> For the swap by blitting case, more work needs to be done.
>
> My current test scripts are written as matlab/octave scripts against my
> toolkit (http://www.psychtoolbox.org). I could prepare a little zip
> file with the minimum bits needed to run those under gnu/octave.
> I'll translate the most essential tests into c in the next couple of days
> if there is some kind of test suite for this?
>
> Thanks,
> -mario
>
>

------------------------------------------------------------------------------
Nokia and AT&T present the 2010 Calling All Innovators-North America contest
Create new apps & games for the Nokia N8 for consumers in  U.S. and Canada
$10 million total in prizes - $4M cash, 500 devices, nearly $6M in marketing
Develop with Nokia Qt SDK, Web Runtime, or Java and Publish to Ovi Store 
http://p.sf.net/sfu/nokia-dev2dev
--
_______________________________________________
Dri-devel mailing list
Dri-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/dri-devel

Reply via email to