From: Gustavo Padovan <gustavo@padovan.org>
To: "Ville Syrjälä" <ville.syrjala@linux.intel.com>,
"Gustavo Padovan" <gustavo.padovan@collabora.com>,
marcheu@google.com, "Daniel Stone" <daniels@collabora.com>,
seanpaul@google.com, linux-kernel@vger.kernel.org,
dri-devel@lists.freedesktop.org,
laurent.pinchart@ideasonboard.com,
"Gustavo Padovan" <gustavo.padovan@collabora.co.uk>,
"John Harrison" <John.C.Harrison@Intel.com>,
m.chehab@samsung.com
Subject: Re: [PATCH v5 4/4] drm/fence: add out-fences support
Date: Fri, 21 Oct 2016 11:07:32 -0200 [thread overview]
Message-ID: <20161021130732.GD2734@joana> (raw)
In-Reply-To: <20161021125730.GF20761@phenom.ffwll.local>
2016-10-21 Daniel Vetter <daniel@ffwll.ch>:
> On Thu, Oct 20, 2016 at 10:15:20PM +0300, Ville Syrjälä wrote:
> > On Thu, Oct 20, 2016 at 07:34:44PM +0300, Ville Syrjälä wrote:
> > > On Thu, Oct 20, 2016 at 01:55:38PM -0200, Gustavo Padovan wrote:
> > > > 2016-10-20 Ville Syrjälä <ville.syrjala@linux.intel.com>:
> > > >
> > > > > On Thu, Oct 20, 2016 at 12:50:05PM -0200, Gustavo Padovan wrote:
> > > > > > From: Gustavo Padovan <gustavo.padovan@collabora.co.uk>
> > > > > >
> > > > > > Support DRM out-fences by creating a sync_file with a fence for each CRTC
> > > > > > that sets the OUT_FENCE_PTR property.
> > > > >
> > > > > I still maintain the out fence should also be per fb (well, per plane
> > > > > since we can't add it to fbs). Otherwise it's not going to be at all
> > > > > useful if you do fps>vrefresh and don't include the same set of planes
> > > > > in every atomic ioctl, eg. if you only ever include ones that are
> > > > > somehow dirty.
> > > >
> > > > How would the kernel signal these dirty planes then? Right now we signal
> > > > at the vblank.
> > >
> > > So if I think about it in terms of the previous fbs something like this
> > > comes to mind:
> > >
> > > starting point:
> > > plane a, fb 0
> > > plane b, fb 1
> > >
> > > ioctl:
> > > plane a, fb 2, fence A
> > > plane b, fb 3, fence B
> > >
> > > ioctl:
> > > plane a, fb 4, fence C
> > > -> fb 2 can be reused, so fence C should signal immediately?
> > >
> > > vblank:
> > > -> fb 0,1 can be reused, so fence A,B signal?
> > >
> > > It feels a bit wonky since the fence is effectively associated with the
> > > previous fb after the previous fb was already submitted to the kernel.
> > > One might assume fence A to be the one signalled early, but that would
> > > give the impression that fb 0 would be free for reuse when it's not.
> >
> > OK, so after hashing this out on irc with Gustavo and Brian, we came
> > to the conclusion that the per-crtc out fence should be sufficient
> > after all.
> >
> > The way it can work is that the first ioctl will return the fence,
> > doesn't really matter how many of the planes are involved in this
> > ioctl. Subsequent ioctls that manage to get in before the next
> > vblank will get back a -1 as the fence, even if the set if planes
> > involved is not the same as in the first ioctl. From the -1
> > userspace can tell what happened, and can then consult its own
> > records to see which still pending flips were overwritten, and
> > thus knows which buffers can be reused immediately.
> >
> > If userspace plans on sending out the now free buffers to someone
> > else accompanied by a fence, it can just create an already signalled
> > fence to send instead of sending the fence it got back from the
> > atomic ioctl since that one is still associated with the original
> > scanout buffers.
> >
> > The fence returned by the atomic ioctl will only signal after the
> > vblank, at which point userspace will obviously know that the
> > orginal scanout buffers are now also ready for reuse, and that
> > the last buffer submitted for each plane is now being actively
> > scanned out. So if userspace wants to send out some of the
> > original buffers to someone else, it can send along the fence
> > returned from the atomic ioctl.
> >
> > So requires a bit more work from userspace perhaps. But obviously
> > it only has to do this if it plans on submitting multiple operations
> > per frame.
> >
> > So a slightly expanded version of my previous example might look like:
> > starting point:
> > plane a, fb 0
> > plane b, fb 1
> >
> > ioctl:
> > crtc: fence A
> > plane a, fb 2
> > plane b, fb 3
> >
> > ioctl:
> > crtc: fence -1
> > plane a, fb 4
> > -> the previously submitted fb for plane a (fb 2) can be reused
> >
> > ioctl:
> > crtc: fence -1
> > plane a, fb 5
> > -> the previously submitted fb for plane a (fb 4) can be reused
> >
> > vblank:
> > -> fence A signals, fb 0,1 can be reused
> > fb 3 and 5 being scanned out now
> >
> >
> > We also had a quick side track w.r.t. variable refresh rate displays,
> > and I think the conclusion was that there the vblank may just happen
> > sooner or later. Nothing else should change. What's unclear is how
> > the refresh rate would be controlled. The two obvious options are
> > explicit control, and automagic based on the submit rate. But that's
> > a separate topic entirely.
>
> Thanks a lot for doing this discussion and the detailed write-up. Imo we
> should bake this into the kerneldoc, as uabi documentation examples.
> Gustavo, can you pls include this? I'd put it into the kerneldoc for
> @out_fence, with inline struct comments we can be rather excessive in
> their lenght ;-)
Sure, I'll work on kernel doc for this.
Gustavo
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
WARNING: multiple messages have this Message-ID (diff)
From: Gustavo Padovan <gustavo@padovan.org>
To: "Ville Syrjälä" <ville.syrjala@linux.intel.com>,
"Gustavo Padovan" <gustavo.padovan@collabora.com>,
marcheu@google.com, "Daniel Stone" <daniels@collabora.com>,
seanpaul@google.com, linux-kernel@vger.kernel.org,
dri-devel@lists.freedesktop.org,
laurent.pinchart@ideasonboard.com,
"Gustavo Padovan" <gustavo.padovan@collabora.co.uk>,
"John Harrison" <John.C.Harrison@Intel.com>,
m.chehab@samsung.com
Subject: Re: [PATCH v5 4/4] drm/fence: add out-fences support
Date: Fri, 21 Oct 2016 11:07:32 -0200 [thread overview]
Message-ID: <20161021130732.GD2734@joana> (raw)
In-Reply-To: <20161021125730.GF20761@phenom.ffwll.local>
2016-10-21 Daniel Vetter <daniel@ffwll.ch>:
> On Thu, Oct 20, 2016 at 10:15:20PM +0300, Ville Syrjälä wrote:
> > On Thu, Oct 20, 2016 at 07:34:44PM +0300, Ville Syrjälä wrote:
> > > On Thu, Oct 20, 2016 at 01:55:38PM -0200, Gustavo Padovan wrote:
> > > > 2016-10-20 Ville Syrjälä <ville.syrjala@linux.intel.com>:
> > > >
> > > > > On Thu, Oct 20, 2016 at 12:50:05PM -0200, Gustavo Padovan wrote:
> > > > > > From: Gustavo Padovan <gustavo.padovan@collabora.co.uk>
> > > > > >
> > > > > > Support DRM out-fences by creating a sync_file with a fence for each CRTC
> > > > > > that sets the OUT_FENCE_PTR property.
> > > > >
> > > > > I still maintain the out fence should also be per fb (well, per plane
> > > > > since we can't add it to fbs). Otherwise it's not going to be at all
> > > > > useful if you do fps>vrefresh and don't include the same set of planes
> > > > > in every atomic ioctl, eg. if you only ever include ones that are
> > > > > somehow dirty.
> > > >
> > > > How would the kernel signal these dirty planes then? Right now we signal
> > > > at the vblank.
> > >
> > > So if I think about it in terms of the previous fbs something like this
> > > comes to mind:
> > >
> > > starting point:
> > > plane a, fb 0
> > > plane b, fb 1
> > >
> > > ioctl:
> > > plane a, fb 2, fence A
> > > plane b, fb 3, fence B
> > >
> > > ioctl:
> > > plane a, fb 4, fence C
> > > -> fb 2 can be reused, so fence C should signal immediately?
> > >
> > > vblank:
> > > -> fb 0,1 can be reused, so fence A,B signal?
> > >
> > > It feels a bit wonky since the fence is effectively associated with the
> > > previous fb after the previous fb was already submitted to the kernel.
> > > One might assume fence A to be the one signalled early, but that would
> > > give the impression that fb 0 would be free for reuse when it's not.
> >
> > OK, so after hashing this out on irc with Gustavo and Brian, we came
> > to the conclusion that the per-crtc out fence should be sufficient
> > after all.
> >
> > The way it can work is that the first ioctl will return the fence,
> > doesn't really matter how many of the planes are involved in this
> > ioctl. Subsequent ioctls that manage to get in before the next
> > vblank will get back a -1 as the fence, even if the set if planes
> > involved is not the same as in the first ioctl. From the -1
> > userspace can tell what happened, and can then consult its own
> > records to see which still pending flips were overwritten, and
> > thus knows which buffers can be reused immediately.
> >
> > If userspace plans on sending out the now free buffers to someone
> > else accompanied by a fence, it can just create an already signalled
> > fence to send instead of sending the fence it got back from the
> > atomic ioctl since that one is still associated with the original
> > scanout buffers.
> >
> > The fence returned by the atomic ioctl will only signal after the
> > vblank, at which point userspace will obviously know that the
> > orginal scanout buffers are now also ready for reuse, and that
> > the last buffer submitted for each plane is now being actively
> > scanned out. So if userspace wants to send out some of the
> > original buffers to someone else, it can send along the fence
> > returned from the atomic ioctl.
> >
> > So requires a bit more work from userspace perhaps. But obviously
> > it only has to do this if it plans on submitting multiple operations
> > per frame.
> >
> > So a slightly expanded version of my previous example might look like:
> > starting point:
> > plane a, fb 0
> > plane b, fb 1
> >
> > ioctl:
> > crtc: fence A
> > plane a, fb 2
> > plane b, fb 3
> >
> > ioctl:
> > crtc: fence -1
> > plane a, fb 4
> > -> the previously submitted fb for plane a (fb 2) can be reused
> >
> > ioctl:
> > crtc: fence -1
> > plane a, fb 5
> > -> the previously submitted fb for plane a (fb 4) can be reused
> >
> > vblank:
> > -> fence A signals, fb 0,1 can be reused
> > fb 3 and 5 being scanned out now
> >
> >
> > We also had a quick side track w.r.t. variable refresh rate displays,
> > and I think the conclusion was that there the vblank may just happen
> > sooner or later. Nothing else should change. What's unclear is how
> > the refresh rate would be controlled. The two obvious options are
> > explicit control, and automagic based on the submit rate. But that's
> > a separate topic entirely.
>
> Thanks a lot for doing this discussion and the detailed write-up. Imo we
> should bake this into the kerneldoc, as uabi documentation examples.
> Gustavo, can you pls include this? I'd put it into the kerneldoc for
> @out_fence, with inline struct comments we can be rather excessive in
> their lenght ;-)
Sure, I'll work on kernel doc for this.
Gustavo
next prev parent reply other threads:[~2016-10-21 13:07 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-10-20 14:50 [PATCH v5 0/4] drm: add explicit fencing Gustavo Padovan
2016-10-20 14:50 ` [PATCH v5 1/4] drm/fence: add in-fences support Gustavo Padovan
2016-10-21 12:51 ` Daniel Vetter
2016-10-21 12:51 ` Daniel Vetter
2016-10-20 14:50 ` [PATCH v5 2/4] drm/fence: release fence reference when canceling event Gustavo Padovan
2016-10-21 12:52 ` Daniel Vetter
2016-10-21 12:52 ` Daniel Vetter
2016-10-20 14:50 ` [PATCH v5 3/4] drm/fence: add fence timeline to drm_crtc Gustavo Padovan
2016-10-20 17:20 ` Brian Starkey
2016-10-20 20:12 ` Gustavo Padovan
2016-10-21 12:54 ` Daniel Vetter
2016-10-21 12:54 ` Daniel Vetter
2016-10-20 14:50 ` [PATCH v5 4/4] drm/fence: add out-fences support Gustavo Padovan
2016-10-20 15:35 ` Ville Syrjälä
2016-10-20 15:55 ` Gustavo Padovan
2016-10-20 16:34 ` Ville Syrjälä
2016-10-20 19:15 ` Ville Syrjälä
2016-10-21 12:57 ` Daniel Vetter
2016-10-21 12:57 ` Daniel Vetter
2016-10-21 13:07 ` Gustavo Padovan [this message]
2016-10-21 13:07 ` Gustavo Padovan
2016-10-20 17:48 ` Brian Starkey
2016-10-20 17:48 ` Brian Starkey
2016-10-20 20:30 ` Gustavo Padovan
2016-10-21 10:55 ` Brian Starkey
2016-10-21 13:00 ` Daniel Vetter
2016-10-21 13:00 ` Daniel Vetter
2016-10-21 15:44 ` Brian Starkey
2016-10-21 13:04 ` [PATCH v5 0/4] drm: add explicit fencing Daniel Vetter
2016-10-21 13:04 ` Daniel Vetter
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=20161021130732.GD2734@joana \
--to=gustavo@padovan.org \
--cc=John.C.Harrison@Intel.com \
--cc=daniels@collabora.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=gustavo.padovan@collabora.co.uk \
--cc=gustavo.padovan@collabora.com \
--cc=laurent.pinchart@ideasonboard.com \
--cc=linux-kernel@vger.kernel.org \
--cc=m.chehab@samsung.com \
--cc=marcheu@google.com \
--cc=seanpaul@google.com \
--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 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.