All of lore.kernel.org
 help / color / mirror / Atom feed
From: Maxime Ripard <maxime.ripard-LDxbnhwyfcJBDgjK7y7TUQ@public.gmane.org>
To: Daniel Vetter <daniel-/w4YWyX8dFk@public.gmane.org>
Cc: Paul Kocialkowski <contact-W9ppeneeCTY@public.gmane.org>,
	Chen-Yu Tsai <wens-jdAy2FN1RRM@public.gmane.org>,
	linux-sunxi <linux-sunxi-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org>,
	dri-devel
	<dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org>
Subject: Re: Planes enumeration with sun4i-drm driver
Date: Thu, 18 Oct 2018 12:27:23 +0200	[thread overview]
Message-ID: <20181018102723.ugrz6yn4vax6d2ei@flea> (raw)
In-Reply-To: <CAKMK7uHU--mbR1AQWqDB58U2pjzDSgSK+Ma3zyNEtJ4kCks+uw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>

On Mon, Oct 15, 2018 at 04:52:04PM +0200, Daniel Vetter wrote:
> On Mon, Oct 15, 2018 at 10:29 AM Maxime Ripard
> <maxime.ripard-LDxbnhwyfcJBDgjK7y7TUQ@public.gmane.org> wrote:
> > On Fri, Oct 12, 2018 at 06:47:13PM +0200, Paul Kocialkowski wrote:
> > > I'm looking at the sun4i DRM driver these days (especially for
> > > mainlining the VPU tiled format support through the frontend).
> > >
> > > The way things are done currently, all the possibly-supported plane
> > > formats are listed in sun4i_backend_layer_formats and exposed as-is to
> > > userspace for every plane. However, some of these formats cannot be
> > > used on all planes at the same time and will be rejected when checking
> > > the atomic commit.
> > >
> > > I find this a bit confusing from a userspace perspective.
> > >
> > > Not all constraints can be provided to userspace (e.g. the number of
> > > planes we can effectively scale), but when it comes to formats, we have
> > > that possibility. So perhaps it would make sense to only enumerate
> > > formats as many times as we can support them.
> > >
> > > For instance, it could look like:
> > > # plane 0: primary, RGB only
> > > # plane 1: overlay, RGB + backend YUV formats
> > > # plane 2: overlay, RGB + frontend YUV formats
> > > # plane 3: overlay, RGB only
> > >
> > > That's not perfect either, because e.g. requesting a scaled RGB plane
> > > will require the frontend and thus make it impossible to use the
> > > frontend YUV formats that would still be described. But it feels like
> > > it would be closer to representing hardware capabilities than our
> > > current situation.
> >
> > That's really arguable. The hardware capabilities are that you can use
> > any of those formats or features, on any plane, *but* on only one
> > plane at the same time. What you describe isn't closer to it, it's
> > just a way to workaround the issue we are facing (ie being able to
> > show those constraints to userspace), and an imperfect workaround.
> >
> > > I am really not sure about the DRM subsystem policy about this, though.
> > > Perhaps it was already decided that it's fine to deal with everything
> > > at commit checking time and report more formats than the hardware can
> > > really handle.
> >
> > It doesn't really matter what the DRM policy is here. Any change in
> > the direction you suggest would be a regression from the userspace
> > point of view and therefore would have to be reverted.
> 
> How exactly can this cause a regression? Do you have some userspace
> that card-codes it's allocation of planes, which would then fail here
> and worked beforehand?

Would that be considered completely unlikely that someone would have
used the primary plane with say, an YUV format to output video to it?

> > IIRC Weston tries to discover those constraints by brute-forcing
> > atomic_check and figuring out a combination that works, and we would
> > surely benefit some kind of API to expose composition constraints.
> 
> The current hints we have is to limit the features each plane exposes.
> Currently there's no proposal to do stuff like "only x of y planes can
> do $feature" at all. So yeah, Paul's idea doesn't seem entirely out of
> hand to me, and for the "bug regressions" we need a concrete example
> of what will break. Since we're fine-tuning the drm api all the time,
> within the limits of what userspace expects :-)

It's really not just a matter of formats. The scaler is also involved,
or the CSC.

There's two IP's, basically, the frontend and the backend. The backend
has support for 4 framebuffers, and can have in input RGB. It can also
support YUV through an additional data path whose output can be routed
to one plane. So you can have one YUV plane, on any plane.

Then comes the tiled YUV formats. They can be supported through the
frontend, and the frontend output can be output on any plane of the
backend. Except that there is just one frontend.

Then comes the scaler. If you have a scaling factor of 2 or 4, it can
be done on any of the backend plane. For any other factor, this has to
be supported through the frontend.

The frontend doesn't support all the formats the backend does though,
so you have to make sure that combination works. And then, you have to
make sure that you're not using the tiled YUV format and the scaler on
two different planes.

And then, the CSC is also performed by the frontend. So you have to
throw that into the mix too.

Last time we discussed this, before introducing support for those, at
XDC 2016, every one agreed that the atomic_check was the way to go. As
you can see above, reducing the list of formats exposed doesn't even
solve the issue, it just reduces part of its scope, while not
adressing the main issue being that we have no way from the userspace
to get those constraints in the first place.

Maxime

-- 
Maxime Ripard, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com

  parent reply	other threads:[~2018-10-18 10:27 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-10-12 16:47 Planes enumeration with sun4i-drm driver Paul Kocialkowski
     [not found] ` <032bb9a1511e9c89d119cd8a0cd8dbb08226e286.camel-W9ppeneeCTY@public.gmane.org>
2018-10-15  8:29   ` Maxime Ripard
2018-10-15 14:52     ` Daniel Vetter
     [not found]       ` <CAKMK7uHU--mbR1AQWqDB58U2pjzDSgSK+Ma3zyNEtJ4kCks+uw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2018-10-18 10:27         ` Maxime Ripard [this message]
2018-10-18 11:45           ` Daniel Vetter
     [not found]             ` <CAKMK7uG=GcE_S9trcNft9ueLi-L9jtUYwEyTxPXB088h6ryQeg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2018-10-26  8:29               ` Maxime Ripard

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20181018102723.ugrz6yn4vax6d2ei@flea \
    --to=maxime.ripard-ldxbnhwyfcjbdgjk7y7tuq@public.gmane.org \
    --cc=contact-W9ppeneeCTY@public.gmane.org \
    --cc=daniel-/w4YWyX8dFk@public.gmane.org \
    --cc=dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org \
    --cc=linux-sunxi-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org \
    --cc=wens-jdAy2FN1RRM@public.gmane.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.