new userspace API approaches atomic *

Daniel Vetter daniel at ffwll.ch
Sun Dec 16 03:11:13 PST 2012


On Sun, Dec 16, 2012 at 7:04 AM, Dave Airlie <airlied at gmail.com> wrote:
> The "I can't test it" argument doesn't fly with me, you are creating a
> new API that adds a useful feature, it should be possible to get a few
> other driver maintainers interested, but also I'd hope that most of
> the ideas for converting to a new API would be mechanical in a lot of
> ways. Atomic semantics aren't hw specific from what i can see, if they
> are then the API is obviously wrong.

For actual semantics I think we need to split the discussion into the
modeset and the pageflip part:

- For modeset it shouldn't be hard to whip up some helpers which use
the current crtc helpers to do modeset changes accross multiple crtcs.
Like currently, drivers might refuse a modeset in one of their
callbacks, and that might only happen once the hw touching has started
already. Which means we can't efficiently implement a check flag mode
for those drivers. But otoh if they have global constraints they might
want to implement their own magic like i915. Or we could add a new
global ->check_modeset callback which checks for these (after
crtc/encoders have done the respective checking).

- For pageflip things are a bit messier, since we really should aim
for all changes to be applied on the same vblank. But luckily the set
of drivers which support more than one of cursors/pageflips/plane is
manageable, and most are just cursosrs+pageflip. Since I've just read
through them all I think it shouldn't be too hard to whip up a
(totally broken) patch for each of them to guide driver maintainers.

So imo to really exploit atomic modeset/pageflip we need special
support from each driver to check a given configuration before
committing it (this also seems to be the only sane way for userspace
to figure out what works and what doesn't without causing tons of
flickering). And doing that for each driver is obviously out of the
question.

But reworking internal interfaces and converting drivers in a
simplistic fashion which assume that no global state checking is
required (assuming e.g. for modesets the current crtc/encoder checks
are good enough) is a requirement I agree with. Which is why I think
we should aim first for something much more restricted than the
current "every possible feature for kms" approach, for example just
pageflips on one crtc ...

>From an i915 perspective I'm leaning towards pageflips because things
are much simpler there (similar to all other drivers). It's much more
immediately useful for us and for atomic modeset our driver-internal
code is simple not yet ready to do global state-checking up-front
before we start touching hw - we need to move around quite a bit of
code until that's doable. So atomic modeset won't really help us yet
to for 3-pipe pll sharing and similar shared global resources issues
and how to correctly expose them to userspace.

Yours, Daniel

PS: My totally broken exynos patch, which Inki Dae fixed up for me,
and the 3 radeon patches are already merged. It's really not rocket
science afaict ... just requires pinging relevant people early so that
they can check your patches quickly and know what you're up to.
-- 
Daniel Vetter
Software Engineer, Intel Corporation
+41 (0) 79 365 57 48 - http://blog.ffwll.ch


More information about the dri-devel mailing list