It looks like the purpose of "dmabuf_batch" is to send a more complex set of arguments to the dmabuf::create_buffer request. This is a variable-sized list of fd's, each containing a variable-sized list of planes. The Wayland protocol does not have a method of passing this as a request argument, so this object is used to build it with multiple requests. Is this correct? And is this considered the correct way to do this sort of thing in Wayland?

It is not clear but I assume you must add at least one fd to the dmabuf_batch for this to work, right?

Assuming this is correct, I think some consolidation of the objects would help. A few ideas:

- Make create_buffer a method on dmabuf_batch, not on dmabuf.

- Get rid of dmabuf_create_feedback object, and just reuse the already-existing dmabuf_batch object to deliver the success/failure event.

- I am a bit suspicious of the exactly 3 planes, there are 4:2:2 formats with alpha channels. I think it would be better if there was a request per-plane.

- Isn't there a problem with having an event deliver a new object (ie the wl_buffer in the create_successful event)? Can the dmabuf_batch object just "be" a wl_buffer, but you cannot use it as a wl_buffer until you get the success event?

So in the most-cleaned-up version I can come up with the api is more like this:

dmabuf - singleton factory used to create dmabuf_buffer.

dmabuf::create_buffer - create a new dmabuf_buffer. You must then do some requests on it before it can be used as a wl_buffer.

dmabuf::format event - same as you describe it

dmabuf_buffer - A subclass of wl_buffer representing a (potential) dma buffer.

dmabuf_buffer::add_fd - Add a new fd describing a dmabuf

dmabuf_buffer::add_plane - Add a plane (offset + stride) to map from the most recent fd.

dmabuf_buffer::create - try to create the dma buffer. After this you cannot do the add_fd/plane requests.

dmabuf_buffer::create_successful event - you can now use the dmabuf_buffer as a wl_buffer (for instance to attach it to a wl_surface).

dmabuf_buffer::create_failed event - It did not work. The only thing you are allowed to do is destroy the dmabuf_buffer.
_______________________________________________
wayland-devel mailing list
wayland-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to