<p dir="ltr">Why does the kernel need to be the arbiter for buffer content constraints? Instead, can't the client program query each hardware device for its capabilities and then settle on a buffer format in common itself?</p>

<p dir="ltr">That said, I am writing a kernel driver for a video decoder and was looking for ways to pass frames in and out - and I was under the impression that DMA buf was mostly an in kernel interface, with FD handles for passing them between syscalls. There was no way to allocate a new dma-buf descriptor in userspace yourself.</p>

<div class="gmail_quot<blockquote class=" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On Mon, 9 Jun 2014 12:23:18 +0100<br>
Daniel Stone <<a href="mailto:daniel@fooishbar.org">daniel@fooishbar.org</a>> wrote:<br>
<br>
> Hi,<br>
><br>
> On 9 June 2014 12:06, Pekka Paalanen <<a href="mailto:pekka.paalanen@collabora.co.uk">pekka.paalanen@collabora.co.uk</a>> wrote:<br>
><br>
> > On Mon, 9 Jun 2014 11:00:04 +0200<br>
> > Benjamin Gaignard <<a href="mailto:benjamin.gaignard@linaro.org">benjamin.gaignard@linaro.org</a>> wrote:<br>
> > > One of the main comment on the latest patches was that wl_dmabuf use<br>
> > > DRM for buffer allocation.<br>
> > > This appear to be an issue since wayland doesn't want to rely on one<br>
> > > specific framework (DRM, or V4L2) for buffer allocation, so we have<br>
> > > start working on a "central dmabuf allocation" on kernel side. The<br>
> > > goal is provide some as generic as possible to make it acceptable by<br>
> > > wayland.<br>
> ><br>
> > Why would Wayland need a central allocator for dmabuf?<br>
> ><br>
><br>
> I think you've just answered your own question further below:<br>
><br>
><br>
> > > On my hardware the patches you have (+ this one on gstwaylandsink<br>
> > > <a href="https://bugzilla.gnome.org/show_bug.cgi?id=711155" target="_blank">https://bugzilla.gnome.org/show_bug.cgi?id=711155</a>) allow me to do zero<br>
> > > copy between the hardware video decoder and the display engine. I<br>
> > > don't have implemented GPU yet because my hardware is able to do<br>
> > > compose few video overlays planes and it was enough for my tests.<br>
> ><br>
> > Right.<br>
> ><br>
> > What I have been thinking is, that the compositor must be able to use<br>
> > the new wl_buffer and we need to guarantee that before-hand. If the<br>
> > compositor fails to use a wl_buffer when the client has already<br>
> > attached it to a wl_surface and it is time to repaint, it is too late<br>
> > and the user will see a glitch. Recovering from that requires asking<br>
> > the client to provide a new wl_buffer of a different kind, which might<br>
> > take time. Or a very rude compositor would just send a protocol error,<br>
> > and then we'd get bug reports like "the video player just disappears<br>
> > when I try to play (and ps. I have an old kernel that doesn't support<br>
> > importing whatever)".<br>
> ><br>
> > I believe we must allow the compositor to test the wl_buffer before it<br>
> > is usable for the client. That is the reason for the roundtrippy design<br>
> > of the below proposal.<br>
> ><br>
><br>
> A central allocator would solve these issues, by having everyone agree on<br>
> the restrictions upfront, instead of working out which of the media decode<br>
> engine, camera, GPU, or display controller is the lowest common<br>
> denominator, and forcing all allocations through there.<br>
><br>
> One such solution was discussed a while back WRT ION:<br>
> <a href="https://lwn.net/Articles/565469/" target="_blank">https://lwn.net/Articles/565469/</a><br>
><br>
> See the 'possible solutions' part for a way for people to agree on<br>
> restrictions wrt tiling, stride, contiguousness, etc.<br>
<br>
Hi,<br>
<br>
that's an excellent article. I didn't know that delayed allocation of<br>
dmabufs was not even possible yet, which would have allowed us to<br>
not think about importing failures and simply let the client fall back<br>
with "ok, don't use dmabuf with this particular device then".<br>
<br>
What is the conclusion here?<br>
<br>
Wayland protocol does not need to consider import failures at all, and<br>
can simply punt those as protocol errors, which essentially kill the app<br>
if they ever happen?<br>
<br>
Do we need to wait for the central allocator in kernel to materialize<br>
before we can design the protocol? Is it simply too early to try to do<br>
it now?<br>
<br>
Was the idea of dmabuf in-kernel constraint negotiation with delayed<br>
allocation rejected in favour of a central allocator?<br>
<br>
Will Intel, Nouveau and Radeon support the central allocator, or will<br>
it remain for ARM-related devices only?<br>
<br>
<br>
Thanks,<br>
pq<br>
_______________________________________________<br>
wayland-devel mailing list<br>
<a href="mailto:wayland-devel@lists.freedesktop.org">wayland-devel@lists.freedesktop.org</a><br>
<a href="http://lists.freedesktop.org/mailman/listinfo/wayland-devel" target="_blank">http://lists.freedesktop.org/mailman/listinfo/wayland-devel</a><br>
</div>