From: Daniel Vetter <daniel@ffwll.ch>
To: Thomas Hellstrom <thomas@shipmail.org>
Cc: "Daniel Vetter" <daniel@ffwll.ch>,
"Rob Clark" <robdclark@gmail.com>,
"Noralf Trønnes" <noralf@tronnes.org>,
dri-devel <dri-devel@lists.freedesktop.org>,
freedreno <freedreno@lists.freedesktop.org>,
linux-arm-msm <linux-arm-msm@vger.kernel.org>,
"Ville Syrjälä" <ville.syrjala@linux.intel.com>,
"Lukasz Spintzyk" <lukasz.spintzyk@displaylink.com>,
"Deepak Singh Rawat" <drawat@vmware.com>,
"Gustavo Padovan" <gustavo@padovan.org>,
"Maarten Lankhorst" <maarten.lankhorst@linux.intel.com>,
"Sean Paul" <seanpaul@chromium.org>,
"David Airlie" <airlied@linux.ie>,
"Linux Kernel Mailing List" <linux-kernel@vger.kernel.org>
Subject: Re: [RFC] drm/atomic+msm: add helper to implement legacy dirtyfb
Date: Wed, 4 Apr 2018 10:43:20 +0200 [thread overview]
Message-ID: <20180404084320.GA3881@phenom.ffwll.local> (raw)
In-Reply-To: <307adb15-412a-1fe2-f116-27fe5b4a657d@shipmail.org>
On Wed, Apr 04, 2018 at 10:22:21AM +0200, Thomas Hellstrom wrote:
> Hi,
>
> On 04/04/2018 08:58 AM, Daniel Vetter wrote:
> > On Wed, Apr 4, 2018 at 12:42 AM, Rob Clark <robdclark@gmail.com> wrote:
> > > Add an atomic helper to implement dirtyfb support. This is needed to
> > > support DSI command-mode panels with x11 userspace (ie. when we can't
> > > rely on pageflips to trigger a flush to the panel).
> > >
> > > To signal to the driver that the async atomic update needs to
> > > synchronize with fences, even though the fb didn't change, the
> > > drm_atomic_state::dirty flag is added.
> > >
> > > Signed-off-by: Rob Clark <robdclark@gmail.com>
> > > ---
> > > Background: there are a number of different folks working on getting
> > > upstream kernel working on various different phones/tablets with qcom
> > > SoC's.. many of them have command mode panels, so we kind of need a
> > > way to support the legacy dirtyfb ioctl for x11 support.
> > >
> > > I know there is work on a proprer non-legacy atomic property for
> > > userspace to communicate dirty-rect(s) to the kernel, so this can
> > > be improved from triggering a full-frame flush once that is in
> > > place. But we kinda needa a stop-gap solution.
> > >
> > > I had considered an in-driver solution for this, but things get a
> > > bit tricky if userspace ands up combining dirtyfb ioctls with page-
> > > flips, because we need to synchronize setting various CTL.FLUSH bits
> > > with setting the CTL.START bit. (ie. really all we need to do for
> > > cmd mode panels is bang CTL.START, but is this ends up racing with
> > > pageflips setting FLUSH bits, then bad things.) The easiest soln
> > > is to wrap this up as an atomic commit and rely on the worker to
> > > serialize things. Hence adding an atomic dirtyfb helper.
> > >
> > > I guess at least the helper, with some small addition to translate
> > > and pass-thru the dirty rect(s) is useful to the final atomic dirty-
> > > rect property solution. Depending on how far off that is, a stop-
> > > gap solution could be useful.
> > Adding Noralf, who iirc already posted the full dirty helpers already somewhere.
> > -Daniel
>
> I've asked Deepak to RFC the core changes suggested for the full dirty blob
> on dri-devel. It builds on DisplayLink's suggestion, with a simple helper to
> get to the desired coordinates.
>
> One thing to perhaps discuss is how we would like to fit this with
> front-buffer rendering and the dirty ioctl. In the page-flip context, the
> dirty rects, like egl's swapbuffer_with_damage is a hint to restrict the
> damage region that can be fully ignored by the driver, new content is
> indicated by a new framebuffer.
>
> We could do the same for frontbuffer rendering: Either set a dirty flag like
> you do here, or provide a content_age state member. Since we clear the dirty
> flag on state copies, I guess that would be sufficient. The blob rectangles
> would then become a hint to restrict the damage region.
I'm not entirely following here - I thought for frontbuffer rendering the
dirty rects have always just been a hint, and that the driver was always
free to re-upload the entire buffer to the screen.
And through a helper like Rob's proposing here (and have floated around in
different versions already) we'd essentially map a frontbuffer dirtyfb
call to a fake flip with dirty rect. Manual upload drivers already need to
upload the entire screen if they get a flip, since some userspace uses
that to flush out frontbuffer rendering (instead of calling dirtyfb).
So from that pov the new dirty flag is kinda not necessary imo.
> Another approach would be to have the presence of dirty rects without
> framebuffer change to indicate frontbuffer rendering.
>
> I think I like the first approach best, although it may be tempting for
> user-space apps to just set the dirty bit instead of providing the full
> damage region.
Or I'm not following you here, because I don't quite see the difference
between dirtyfb and a flip.
-Daniel
--
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
next prev parent reply other threads:[~2018-04-04 8:43 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-04-03 22:42 [RFC] drm/atomic+msm: add helper to implement legacy dirtyfb Rob Clark
2018-04-04 6:58 ` Daniel Vetter
2018-04-04 8:22 ` Thomas Hellstrom
2018-04-04 8:43 ` Daniel Vetter [this message]
2018-04-04 9:10 ` Thomas Hellstrom
2018-04-04 9:56 ` Daniel Vetter
2018-04-04 10:28 ` Thomas Hellstrom
2018-04-04 11:46 ` Thomas Hellstrom
2018-04-04 12:13 ` Daniel Vetter
2018-04-04 11:40 ` Rob Clark
2018-04-04 12:16 ` Daniel Vetter
2018-04-04 13:24 ` Rob Clark
2018-04-04 13:28 ` Daniel Vetter
2018-04-05 13:30 ` Thomas Hellstrom
2018-04-05 13:35 ` Daniel Vetter
2018-04-06 0:19 ` Deepak Singh Rawat
2018-04-06 0:36 ` Rob Clark
2018-04-04 10:03 ` Daniel Vetter
2018-04-04 10:21 ` Daniel Vetter
2018-04-04 10:36 ` Maarten Lankhorst
2018-04-04 11:37 ` Rob Clark
2018-04-04 11:49 ` Maarten Lankhorst
2018-04-04 12:05 ` Rob Clark
2018-04-04 12:23 ` Maarten Lankhorst
2018-04-04 12:26 ` Daniel Vetter
2018-04-04 12:28 ` Maarten Lankhorst
2018-04-04 13:26 ` Rob Clark
2018-04-04 11:35 ` Rob Clark
2018-04-04 12:18 ` Daniel Vetter
2018-04-04 17:41 ` Noralf Trønnes
2018-04-04 17:56 ` Daniel Vetter
2018-04-04 18:52 ` Noralf Trønnes
2018-04-04 19:19 ` Rob Clark
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=20180404084320.GA3881@phenom.ffwll.local \
--to=daniel@ffwll.ch \
--cc=airlied@linux.ie \
--cc=drawat@vmware.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=freedreno@lists.freedesktop.org \
--cc=gustavo@padovan.org \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=lukasz.spintzyk@displaylink.com \
--cc=maarten.lankhorst@linux.intel.com \
--cc=noralf@tronnes.org \
--cc=robdclark@gmail.com \
--cc=seanpaul@chromium.org \
--cc=thomas@shipmail.org \
--cc=ville.syrjala@linux.intel.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox