[Buildroot] [PATCH 2/2 v4] package/mesa3d: make it aware of libglvnd and support it when present
Romain Naour
romain.naour at gmail.com
Mon Jan 3 21:20:45 UTC 2022
Hello Yann, Thomas,
Le 27/07/2020 à 19:35, Yann E. MORIN a écrit :
> Thomas, All,
>
> On 2020-07-27 17:38 +0200, Thomas Petazzoni spake thusly:
>> On Mon, 27 Jul 2020 10:47:02 +0200
>> "Yann E. MORIN" <yann.morin.1998 at free.fr> wrote:
>>> From: Jakub Skrzypnik <jskrzypnik at novomatic-tech.com>
>>>
>>> When libglvnd is enabled, mesa3d must be told so, so as it installs its
>>> libraries with the vendor suffix (e.g. libEGL_mesa.so instead of
>>> libEGL.so).
>>>
>>> Additionally, the provider (in Buildroot parlance) is libglvnd, not mesa3d.
> [--SNIP--]
>>> config BR2_PACKAGE_MESA3D_OPENGL_GLX
>>> bool "OpenGL GLX"
>>> depends on BR2_PACKAGE_XORG7
>>> - select BR2_PACKAGE_HAS_LIBGL
>>> + select BR2_PACKAGE_HAS_LIBGL if !BR2_PACKAGE_LIBGLVND
>>> + select BR2_PACKAGE_LIBGLVND_DISPATCH_GL if BR2_PACKAGE_LIBGLVND
>>
>> I don't immediately see a good solution for this, but I find that
>> solution to be quite annoying :-/
>
> At first, I though so too, and I also looked for a better approach,
> but...
>
>> Indeed, I understand that once libglvnd is enabled, the GL-provider is
>> libglvnd, which in the background is using mesa3d. The dance to handle
>> libglvnd in mesa3d is already not nice, and we would have to have the
>> same dance in other GL providers that support libglvnd.
>
> Well, it is not _so_ bad. We could maybe make it a bit simpler, with:
>
> config BR2_PACKAGE_MESA3D_OPENGL_GLX
> bool "OpenGL GLX"
> select BR2_PACKAGE_HAS_LIBGL
>
> We still need to declare emsa3d as providing libgl depending on whether
> libglvnd is enabled, but we can make it a bit more "compact":
>
> if !BR2_PACKAGE_LIBGLVND
>
> config BR2_PACKAGE_PROVIDES_LIBGL
> default "mesa3d" if BR2_PACKAGE_MESA3D_OPENGL_GLX
>
> [EGL and GLES too here]
>
> endif
>
> And in mesa3d.mk too:
>
> ifeq ($(BR2_PACKAGE_MESA3D_OPENGL_GLX),y)
> MESA3D_PROVIDES += $(if $(BR2_PACKAGE_LIBGLVND),,libgl)
> [...]
> endif
>
> But now, in libglvnd, we don't need any extra symbol, we can just re-use
> BR2_PACKAGE_PROVIDES_LIBGL et al.:
>
> config BR2_PACKAGE_LIBGLVND
> bool "libglvnd"
> select BR2_PACKAGE_XLIB_LIBX11 if BR2_PACKAGE_PROVIDES_LIBGL
> select BR2_PACKAGE_XLIB_LIBXEXT if BR2_PACKAGE_PROVIDES_LIBGL
> select BR2_PACKAGE_XLIB_XORGPROTO if BR2_PACKAGE_PROVIDES_LIBGL
> select BR2_PACKAGE_HAS_LIBGL if BR2_PACKAGE_PROVIDES_LIBGL
>
> if BR2_PACKAGE_LIBGLVND
>
> config BR2_PACKAGE_PROVIDES_LIBGL
> default "libglvnd" if BR2_PACKAGE_HAS_LIBGL
>
> endif
>
> and in libglvnd.mk:
>
> ifeq ($(BR2_PACKAGE_PROVIDES_LIBGL),y)
> LIBGLVND_DEPENDENCIES += xlib_libXext xorgproto
> LIBGLVND_CONF_OPTS += -Dglx=enabled
> LIBGLVND_PROVIDES += libgl
> else
> LIBGLVND_CONF_OPTS += -Dglx=disabled
> endif
>
>> OK, here is some vague idea for a possible solution:
>> - We introduce an intermediate "layer" between libgl and GL providers.
> [--SNIP--]
>> I *think* this would perhaps avoid that complexity in mesa3d...
>> obviously for additional complexity in terms of how the virtual
>> packages in GL world all work together.
>
> You are reinventing libglvnd in between libglvnd and actual providers, no?
>
> Also, remember that individual GL providers will still have to function
> as providers without libglvnd, which is not required.
>
> But I would like we progress on the topic, and when we have a second
> candidate for libglvnd use, we can revisit the topic and see if we can
> over-engineer the thing.
>
> Usually, we wait for three or four cases before trying to solve the
> problem in a generic fashion, and so I'd like to do here as well.
> Because so far, only two providers are known to work with libglvnd:
> mewsa3d and nvidia. ATI might be a third one, but I have no clue about
> it. And in the SoC land, there is not much that is libglvnd compatible
> so far, if at all.
>
> So, in the short-to-medium term, we'd at best have three providers. Is
> that enough to delve into a generic infra so far? Not sure...
I had an issue with a package (ogre) that now use OPENGL_glx_LIBRARY to find the
"GLVND 'GLX' library"
https://github.com/OGRECave/ogre/commit/aa9ffa7a51e52cb714f1bf5a3a00b9ef9f5a7dc2
https://cmake.org/cmake/help/latest/module/FindOpenGL.html
I guess libglvnd will be required at some point.
Best regards,
Romain
>
> Regards,
> Yann E. MORIN.
>
More information about the buildroot
mailing list