[PATCH] wayland: Add an extension to create wl_buffers from EGLImages
Axel Davy
davy at clipper.ens.fr
Tue Sep 10 02:10:18 PDT 2013
System compositor: set up wl_drm to import buffers on card A
Session compositor: Detects it is on card B and not the card of wl_drm.
Creates a buffer without tiling and use wl_drm to share it with the
System compositor.
The session compositor creates a new wl_drm for its clients.
The clients: see they are on card B that is the card of the wl_drm they
see. They create a buffer with tiling since it is better performance
wise, and share it with the Session compositor.
Without your extension, the session compositor has to copy the contents
of the clients (with card B) in its own buffer (readable by card A and
B) and commit it to the System compositor. Card A only sees a buffer
without tiling, even if the clients used tiling.
Your extension avoid the copy, and the tiling mode is not changed (it
would need a copy). Since A doesn't understand the tiling mode of B, the
buffers will not be displayed correctly.
Prime support isn't implemented in Mesa yet (It'll use render-nodes).
I suggest you design your extension so it can fail if the texture cannot
be used on the card of the System compositor. When Prime support would
be ready, it will be needed to check if the card described by wl_drm of
the System compositor and the Session compositor is the same than the
one used by the session compositor.
I assume a variable would be added to the dri2_dpy structure to tell if
it can use tiling or not when creating buffers, and you would just need
to check it.
Axel Davy
Le 09/09/2013 20:39, Neil Roberts a écrit :
> Is this problem specific to the extension or is it a general problem?
> Would there not be the same issue if the session compositor wasn't using
> the extension but was creating textures from the client surfaces
> instead? Presumably if cards A and B don't share a tiling mode then it
> won't be possible for card B to make a texture out of buffers created on
> card A either.
>
> My assumption was that if you have successfully created an EGLImage out
> of the client's surface then it is a valid buffer for that EGL context.
> Perhaps this situation should be detected in eglCreateImage rather than
> in eglCreateWaylandBufferFromImage.
>
> I apologise in advance if I've misunderstood the problem.
>
> Regards,
> - Neil
>
> Axel Davy <axel.davy at ens.fr> writes:
>
>> I think there is a problem with tiling handling in your patch.
>>
>> Thinks of a session compositor running on an other graphic card for example.
>>
>>
>> Main compositor: card A
>> session compositor: card B. buffer is shared between A and B and when
>> creating it, tiling was disabled (because A and B share no tiling mode)
>> clients in the session compositor: card B. buffer is created on B, when
>> creating it, tiling was enabled.
>>
>> In this configuration, your function should fail or do a copy (because A
>> won't recognize the tiling mode of B)
>>
>> Axel Davy
> ---------------------------------------------------------------------
> Intel Corporation (UK) Limited
> Registered No. 1134945 (England)
> Registered Office: Pipers Way, Swindon SN3 1RJ
> VAT No: 860 2173 47
>
> This e-mail and any attachments may contain confidential material for
> the sole use of the intended recipient(s). Any review or distribution
> by others is strictly prohibited. If you are not the intended
> recipient, please contact the sender and delete all copies.
>
> _______________________________________________
> wayland-devel mailing list
> wayland-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/wayland-devel
>
More information about the wayland-devel
mailing list