diff mbox series

[v3,1/3] mesa, mesa-gl: 23.0.0

Message ID 20230306091108.3347363-2-zboszor@gmail.com
State New
Headers show
Series Mesa 23.0.0 | expand

Commit Message

Böszörményi Zoltán March 6, 2023, 9:11 a.m. UTC
Signed-off-by: Zoltán Böszörményi <zboszor@gmail.com>
---
 ...-backend-fix-gbm-compile-without-dri.patch | 65 -------------------
 ...ormat-Check-for-NEON-before-using-it.patch | 16 ++---
 .../{mesa-gl_22.3.5.bb => mesa-gl_23.0.0.bb}  |  0
 meta/recipes-graphics/mesa/mesa.inc           |  3 +-
 .../mesa/{mesa_22.3.5.bb => mesa_23.0.0.bb}   |  0
 5 files changed, 9 insertions(+), 75 deletions(-)
 delete mode 100644 meta/recipes-graphics/mesa/files/0001-gbm-backend-fix-gbm-compile-without-dri.patch
 rename meta/recipes-graphics/mesa/{mesa-gl_22.3.5.bb => mesa-gl_23.0.0.bb} (100%)
 rename meta/recipes-graphics/mesa/{mesa_22.3.5.bb => mesa_23.0.0.bb} (100%)

Comments

Otavio Salvador March 6, 2023, 3:54 p.m. UTC | #1
Em seg., 6 de mar. de 2023 às 06:11, Zoltan Boszormenyi
<zboszor@gmail.com> escreveu:
>
> Signed-off-by: Zoltán Böszörményi <zboszor@gmail.com>


Acked-by: Otavio Salvador <otavio@ossystems.com.br>
Alexander Kanavin March 7, 2023, 10:41 a.m. UTC | #2
Just wanted to give everyone a heads up that mesa 23.0 started to
strictly enforce that driver versions match the libraries that load
them:
https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/20069
https://gitlab.freedesktop.org/mesa/mesa/-/commit/1026d29344192755dd340d6ac13a9674189d2d61

This breaks our implementation of accelerated virtual graphics which
'outsources' the provision of the drivers to the host distribution's
mesa. Unfortunately enabling a useful set of drivers in mesa-native is
not straightforward, as many of them rely on llvm, or pull in other
lengthy dependency chains. I'll see what can be done: we'll probably
have to guard the rich set of drivers with a DISTRO_FEATURE. Ideas?

Alex

On Mon, 6 Mar 2023 at 16:54, Otavio Salvador
<otavio.salvador@ossystems.com.br> wrote:
>
> Em seg., 6 de mar. de 2023 às 06:11, Zoltan Boszormenyi
> <zboszor@gmail.com> escreveu:
> >
> > Signed-off-by: Zoltán Böszörményi <zboszor@gmail.com>
>
>
> Acked-by: Otavio Salvador <otavio@ossystems.com.br>
>
> --
> Otavio Salvador                             O.S. Systems
> http://www.ossystems.com.br        http://code.ossystems.com.br
> Mobile: +55 (53) 9 9981-7854          Mobile: +1 (347) 903-9750
Böszörményi Zoltán March 7, 2023, 11:39 a.m. UTC | #3
2023. 03. 07. 11:41 keltezéssel, Alexander Kanavin írta:
> Just wanted to give everyone a heads up that mesa 23.0 started to
> strictly enforce that driver versions match the libraries that load
> them:
> https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/20069
> https://gitlab.freedesktop.org/mesa/mesa/-/commit/1026d29344192755dd340d6ac13a9674189d2d61
>
> This breaks our implementation of accelerated virtual graphics which
> 'outsources' the provision of the drivers to the host distribution's
> mesa. Unfortunately enabling a useful set of drivers in mesa-native is
> not straightforward, as many of them rely on llvm, or pull in other
> lengthy dependency chains. I'll see what can be done: we'll probably
> have to guard the rich set of drivers with a DISTRO_FEATURE. Ideas?

The reasoning for the change is that glvnd is a thing.
Maybe the drivers you mention should just use that.
Recent distros enable glvnd in Mesa out of the box and
NVIDIA also supports that.

>
> Alex
>
> On Mon, 6 Mar 2023 at 16:54, Otavio Salvador
> <otavio.salvador@ossystems.com.br> wrote:
>> Em seg., 6 de mar. de 2023 às 06:11, Zoltan Boszormenyi
>> <zboszor@gmail.com> escreveu:
>>> Signed-off-by: Zoltán Böszörményi <zboszor@gmail.com>
>>
>> Acked-by: Otavio Salvador <otavio@ossystems.com.br>
>>
>> --
>> Otavio Salvador                             O.S. Systems
>> http://www.ossystems.com.br        http://code.ossystems.com.br
>> Mobile: +55 (53) 9 9981-7854          Mobile: +1 (347) 903-9750
Alexander Kanavin March 7, 2023, 3:40 p.m. UTC | #4
On Tue, 7 Mar 2023 at 12:39, Böszörményi Zoltán <zboszor@gmail.com> wrote:
> The reasoning for the change is that glvnd is a thing.
> Maybe the drivers you mention should just use that.
> Recent distros enable glvnd in Mesa out of the box and
> NVIDIA also supports that.

qemu unfortunately doesn't work this way. It links directly with
libgbm, and libgbm probes directly into the drivers. This are the
errors:

did not find extension DRI_Mesa version 1
failed to bind extensions
did not find extension DRI_Mesa version 1
failed to bind extensions
did not find extension DRI_Mesa version 1
failed to bind extensions
did not find extension DRI_Mesa version 1
failed to bind extensions
qemu-system-x86_64: egl: gbm_create_device failed
qemu-system-x86_64: egl: render node init failed

And this is where they happen:

Thread 1 "qemu-system-x86" hit Breakpoint 1, 0x00007ffff77e6020 in
loader_bind_extensions () from
/home/alex/development/poky/build/tmp/work/x86_64-linux/qemu-helper-native/1.0-r1/recipe-sysroot-native/usr/bin/../lib/libgbm.so.1
(gdb) bt
#0  0x00007ffff77e6020 in loader_bind_extensions () from
/home/alex/development/poky/build/tmp/work/x86_64-linux/qemu-helper-native/1.0-r1/recipe-sysroot-native/usr/bin/../lib/libgbm.so.1
#1  0x00007ffff77e4fda in dri_screen_create_for_driver () from
/home/alex/development/poky/build/tmp/work/x86_64-linux/qemu-helper-native/1.0-r1/recipe-sysroot-native/usr/bin/../lib/libgbm.so.1
#2  0x00007ffff77e53a8 in dri_device_create () from
/home/alex/development/poky/build/tmp/work/x86_64-linux/qemu-helper-native/1.0-r1/recipe-sysroot-native/usr/bin/../lib/libgbm.so.1
#3  0x00007ffff77e376c in find_backend () from
/home/alex/development/poky/build/tmp/work/x86_64-linux/qemu-helper-native/1.0-r1/recipe-sysroot-native/usr/bin/../lib/libgbm.so.1
#4  0x00007ffff77e3891 in gbm_create_device () from
/home/alex/development/poky/build/tmp/work/x86_64-linux/qemu-helper-native/1.0-r1/recipe-sysroot-native/usr/bin/../lib/libgbm.so.1
#5  0x00005555559a00f8 in egl_rendernode_init (rendernode=<optimized
out>, mode=DISPLAYGL_MODE_ON) at ../qemu-7.2.0/ui/egl-helpers.c:177
#6  0x00005555559a04b1 in egl_headless_init (ds=<optimized out>,
opts=<optimized out>) at ../qemu-7.2.0/ui/egl-headless.c:203
#7  0x00005555559545f8 in qemu_init_displays () at
../qemu-7.2.0/softmmu/vl.c:2485
#8  qemu_init (argc=<optimized out>, argv=<optimized out>) at
../qemu-7.2.0/softmmu/vl.c:3603
#9  0x00005555557ec369 in main (argc=<optimized out>, argv=<optimized
out>) at ../qemu-7.2.0/softmmu/main.c:47

Alex
Böszörményi Zoltán March 7, 2023, 4:43 p.m. UTC | #5
2023. 03. 07. 16:40 keltezéssel, Alexander Kanavin írta:
> On Tue, 7 Mar 2023 at 12:39, Böszörményi Zoltán <zboszor@gmail.com> wrote:
>> The reasoning for the change is that glvnd is a thing.
>> Maybe the drivers you mention should just use that.
>> Recent distros enable glvnd in Mesa out of the box and
>> NVIDIA also supports that.
> qemu unfortunately doesn't work this way. It links directly with
> libgbm, and libgbm probes directly into the drivers. This are the
> errors:
>
> did not find extension DRI_Mesa version 1
> failed to bind extensions
> did not find extension DRI_Mesa version 1
> failed to bind extensions
> did not find extension DRI_Mesa version 1
> failed to bind extensions
> did not find extension DRI_Mesa version 1
> failed to bind extensions
> qemu-system-x86_64: egl: gbm_create_device failed
> qemu-system-x86_64: egl: render node init failed
>
> And this is where they happen:
>
> Thread 1 "qemu-system-x86" hit Breakpoint 1, 0x00007ffff77e6020 in
> loader_bind_extensions () from
> /home/alex/development/poky/build/tmp/work/x86_64-linux/qemu-helper-native/1.0-r1/recipe-sysroot-native/usr/bin/../lib/libgbm.so.1

This looks like it's coming from a mesa-native build
which should match the target build version.
The problem may be that despite of this, it tries to open
the host drivers from /usr instead of .../recipe-sysroot-native/usr.

> (gdb) bt
> #0  0x00007ffff77e6020 in loader_bind_extensions () from
> /home/alex/development/poky/build/tmp/work/x86_64-linux/qemu-helper-native/1.0-r1/recipe-sysroot-native/usr/bin/../lib/libgbm.so.1
> #1  0x00007ffff77e4fda in dri_screen_create_for_driver () from
> /home/alex/development/poky/build/tmp/work/x86_64-linux/qemu-helper-native/1.0-r1/recipe-sysroot-native/usr/bin/../lib/libgbm.so.1
> #2  0x00007ffff77e53a8 in dri_device_create () from
> /home/alex/development/poky/build/tmp/work/x86_64-linux/qemu-helper-native/1.0-r1/recipe-sysroot-native/usr/bin/../lib/libgbm.so.1
> #3  0x00007ffff77e376c in find_backend () from
> /home/alex/development/poky/build/tmp/work/x86_64-linux/qemu-helper-native/1.0-r1/recipe-sysroot-native/usr/bin/../lib/libgbm.so.1
> #4  0x00007ffff77e3891 in gbm_create_device () from
> /home/alex/development/poky/build/tmp/work/x86_64-linux/qemu-helper-native/1.0-r1/recipe-sysroot-native/usr/bin/../lib/libgbm.so.1
> #5  0x00005555559a00f8 in egl_rendernode_init (rendernode=<optimized
> out>, mode=DISPLAYGL_MODE_ON) at ../qemu-7.2.0/ui/egl-helpers.c:177
> #6  0x00005555559a04b1 in egl_headless_init (ds=<optimized out>,
> opts=<optimized out>) at ../qemu-7.2.0/ui/egl-headless.c:203
> #7  0x00005555559545f8 in qemu_init_displays () at
> ../qemu-7.2.0/softmmu/vl.c:2485
> #8  qemu_init (argc=<optimized out>, argv=<optimized out>) at
> ../qemu-7.2.0/softmmu/vl.c:3603
> #9  0x00005555557ec369 in main (argc=<optimized out>, argv=<optimized
> out>) at ../qemu-7.2.0/softmmu/main.c:47
>
> Alex
Alexander Kanavin March 7, 2023, 4:50 p.m. UTC | #6
On Tue, 7 Mar 2023 at 17:43, Böszörményi Zoltán <zboszor@gmail.com> wrote:

> This looks like it's coming from a mesa-native build
> which should match the target build version.
> The problem may be that despite of this, it tries to open
> the host drivers from /usr instead of .../recipe-sysroot-native/usr.

Yes, that's exactly what runqemu does, on purpose, by redirecting
native mesa to use the host drivers via LIBGL_DRIVERS_PATH environment
variable. We could easily make it use its own drivers from
recipe-sysroot-native, but that means we have to actually build them,
which is very heavy (e.g. llvm is required for llvmpipe, and some amd
drivers). Unfortunately mesa 23.0.0 more or less forces that with its
version matching.

Alex
Böszörményi Zoltán March 8, 2023, 5:28 a.m. UTC | #7
2023. 03. 07. 17:50 keltezéssel, Alexander Kanavin írta:
> On Tue, 7 Mar 2023 at 17:43, Böszörményi Zoltán <zboszor@gmail.com> wrote:
>
>> This looks like it's coming from a mesa-native build
>> which should match the target build version.
>> The problem may be that despite of this, it tries to open
>> the host drivers from /usr instead of .../recipe-sysroot-native/usr.
> Yes, that's exactly what runqemu does, on purpose, by redirecting
> native mesa to use the host drivers via LIBGL_DRIVERS_PATH environment
> variable. We could easily make it use its own drivers from
> recipe-sysroot-native, but that means we have to actually build them,
> which is very heavy (e.g. llvm is required for llvmpipe, and some amd
> drivers). Unfortunately mesa 23.0.0 more or less forces that with its
> version matching.

I think that was already brewing with 22.3.x, since that version
cut off the "classic" drivers, keeping only the gallium ones.
Like the kernel, Mesa's drivers were implicitly expected to work
with everything built from the same main version because
they were using internal structures that may be reworked
from one major version to another.

That's why glvnd exists. NVIDIA's libGL.so.1 only loaded its own
hardware driver (kernel or userspace), and Mesa too.
The situation that started with 22.3.x explicitly stated that
glvnd has to be used if someone wanted to use the
classic drivers from Mesa 22.2.x a.k.a. the "amber" branch.
Though it's true that the version enforcing was only added
to 23.0.0, but it only added emphasis to the already existing
state of affairs.
Alexander Kanavin March 8, 2023, 7:11 p.m. UTC | #8
On Wed, 8 Mar 2023 at 06:28, Böszörményi Zoltán <zboszor@gmail.com> wrote:
> I think that was already brewing with 22.3.x, since that version
> cut off the "classic" drivers, keeping only the gallium ones.
> Like the kernel, Mesa's drivers were implicitly expected to work
> with everything built from the same main version because
> they were using internal structures that may be reworked
> from one major version to another.

I just posted a RFC patchset that switches runqemu to use mesa-native
fully. Some form of that patchset has to go in before mesa can be
updated to 23.3 - we're in the middle of feature freeze now, so it'll
likely have to wait.

Alex
diff mbox series

Patch

diff --git a/meta/recipes-graphics/mesa/files/0001-gbm-backend-fix-gbm-compile-without-dri.patch b/meta/recipes-graphics/mesa/files/0001-gbm-backend-fix-gbm-compile-without-dri.patch
deleted file mode 100644
index 6541671b7a..0000000000
--- a/meta/recipes-graphics/mesa/files/0001-gbm-backend-fix-gbm-compile-without-dri.patch
+++ /dev/null
@@ -1,65 +0,0 @@ 
-From 25946100e21cf2095bea334e8d7096798561d0b7 Mon Sep 17 00:00:00 2001
-From: Vincent Davis Jr <vince@underview.tech>
-Date: Wed, 28 Dec 2022 16:28:01 -0600
-Subject: [PATCH] gbm/backend: fix gbm compile without dri
-
-Upstream-Status: Backport
-
-https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/20447
-https://gitlab.freedesktop.org/mesa/mesa/-/commit/842ca284650f066e58706741a7d22d67b5088e60
-
-At mesa version 22.2.3 patch wasn't introduced until after.
-
-Commit introduces a fix that allows for gbm to be built with an empty
-backend. There are situation especially in a Yocto/OE cross compilation
-environment where you want to build with an empty backend. The particular
-situation is as such:
-
-The mesa-gl recipe is the preferred provider for virtual/libgbm, virtual/libgl,
-virtual/mesa, etc... But the x11 DISTRO_FEATURE in't included this leads to build
-errors such as:
-
-| /../../../ld: src/gbm/libgbm.so.1.0.0.p/main_backend.c.o: in function `find_backend':
-| backend.c:(.text.find_backend+0xa4): undefined reference to `gbm_dri_backend'
-| /../../../ld: src/gbm/libgbm.so.1.0.0.p/main_backend.c.o:(.data.rel.ro.builtin_backends+0x4):
-                undefined reference to `gbm_dri_backend'
-| collect2: error: ld returned 1 exit status
-
-Issue should be replicable by setting -Ddri3=disabled and -Dgbm=enabled
-
-Add fix to bypasses compilation issue by excluding gbm dri backend. If
-HAVE_DRI || HAVE_DRIX not specified.
-
-Acked-by: David Heidelberg <david.heidelberg@collabora.com>
-Signed-off-by: Vincent Davis Jr <vince@underview.tech>
----
- src/gbm/main/backend.c | 4 ++++
- 1 file changed, 4 insertions(+)
-
-diff --git a/src/gbm/main/backend.c b/src/gbm/main/backend.c
-index 974d0a76a4e..feee0703495 100644
---- a/src/gbm/main/backend.c
-+++ b/src/gbm/main/backend.c
-@@ -42,7 +42,9 @@
- #define ARRAY_SIZE(a) (sizeof(a)/sizeof((a)[0]))
- #define VER_MIN(a, b) ((a) < (b) ? (a) : (b))
- 
-+#if defined(HAVE_DRI) || defined(HAVE_DRI2) || defined(HAVE_DRI3)
- extern const struct gbm_backend gbm_dri_backend;
-+#endif
- 
- struct gbm_backend_desc {
-    const char *name;
-@@ -51,7 +53,9 @@ struct gbm_backend_desc {
- };
- 
- static const struct gbm_backend_desc builtin_backends[] = {
-+#if defined(HAVE_DRI) || defined(HAVE_DRI2) || defined(HAVE_DRI3)
-    { "dri", &gbm_dri_backend },
-+#endif
- };
- 
- #define BACKEND_LIB_SUFFIX "_gbm"
--- 
-2.34.1
-
diff --git a/meta/recipes-graphics/mesa/files/0001-util-format-Check-for-NEON-before-using-it.patch b/meta/recipes-graphics/mesa/files/0001-util-format-Check-for-NEON-before-using-it.patch
index d22ff3c8a8..0bbd518047 100644
--- a/meta/recipes-graphics/mesa/files/0001-util-format-Check-for-NEON-before-using-it.patch
+++ b/meta/recipes-graphics/mesa/files/0001-util-format-Check-for-NEON-before-using-it.patch
@@ -23,12 +23,12 @@  diff --git a/src/util/format/u_format.c b/src/util/format/u_format.c
 index c071250..0880984 100644
 --- a/src/util/format/u_format.c
 +++ b/src/util/format/u_format.c
-@@ -1184,7 +1184,7 @@ static void
+@@ -1187,7 +1187,7 @@
  util_format_unpack_table_init(void)
  {
     for (enum pipe_format format = PIPE_FORMAT_NONE; format < PIPE_FORMAT_COUNT; format++) {
--#if (defined(PIPE_ARCH_AARCH64) || defined(PIPE_ARCH_ARM)) && !defined(NO_FORMAT_ASM) && !defined(__SOFTFP__)
-+#if (defined(PIPE_ARCH_AARCH64) || (defined(__ARM_NEON) && defined(PIPE_ARCH_ARM))) && !defined(NO_FORMAT_ASM)
+-#if (DETECT_ARCH_AARCH64 || DETECT_ARCH_ARM) && !defined(NO_FORMAT_ASM) && !defined(__SOFTFP__)
++#if (DETECT_ARCH_AARCH64 || (DETECT_ARCH_ARM && defined(__ARM_NEON))) && !defined(NO_FORMAT_ASM) && !defined(__SOFTFP__)
        const struct util_format_unpack_description *unpack = util_format_unpack_description_neon(format);
        if (unpack) {
           util_format_unpack_table[format] = unpack;
@@ -36,12 +36,12 @@  diff --git a/src/util/format/u_format_unpack_neon.c b/src/util/format/u_format_u
 index a4a5cb1..1e4f794 100644
 --- a/src/util/format/u_format_unpack_neon.c
 +++ b/src/util/format/u_format_unpack_neon.c
-@@ -23,7 +23,7 @@
+@@ -24,7 +24,7 @@
+ #include "util/detect_arch.h"
+ #include "util/format/u_format.h"
  
- #include <u_format.h>
- 
--#if (defined(PIPE_ARCH_AARCH64) || defined(PIPE_ARCH_ARM)) && !defined(NO_FORMAT_ASM) && !defined(__SOFTFP__)
-+#if (defined(PIPE_ARCH_AARCH64) || (defined(__ARM_NEON) && defined(PIPE_ARCH_ARM))) && !defined(NO_FORMAT_ASM)
+-#if (DETECT_ARCH_AARCH64 || DETECT_ARCH_ARM) && !defined(NO_FORMAT_ASM) && !defined(__SOFTFP__)
++#if (DETECT_ARCH_AARCH64 || (DETECT_ARCH_ARM && defined(__ARM_NEON))) && !defined(NO_FORMAT_ASM) && !defined(__SOFTFP__)
  
  /* armhf builds default to vfp, not neon, and refuses to compile neon intrinsics
   * unless you tell it "no really".
diff --git a/meta/recipes-graphics/mesa/mesa-gl_22.3.5.bb b/meta/recipes-graphics/mesa/mesa-gl_23.0.0.bb
similarity index 100%
rename from meta/recipes-graphics/mesa/mesa-gl_22.3.5.bb
rename to meta/recipes-graphics/mesa/mesa-gl_23.0.0.bb
diff --git a/meta/recipes-graphics/mesa/mesa.inc b/meta/recipes-graphics/mesa/mesa.inc
index 8a8a057c6b..bbe8ca7875 100644
--- a/meta/recipes-graphics/mesa/mesa.inc
+++ b/meta/recipes-graphics/mesa/mesa.inc
@@ -18,10 +18,9 @@  SRC_URI = "https://mesa.freedesktop.org/archive/mesa-${PV}.tar.xz \
            file://0001-meson.build-check-for-all-linux-host_os-combinations.patch \
            file://0001-meson-misdetects-64bit-atomics-on-mips-clang.patch \
            file://0001-util-format-Check-for-NEON-before-using-it.patch \
-           file://0001-gbm-backend-fix-gbm-compile-without-dri.patch \
            "
 
-SRC_URI[sha256sum] = "3eed2ecae2bc674494566faab9fcc9beb21cd804c7ba2b59a1694f3d7236e6a9"
+SRC_URI[sha256sum] = "01f3cff3763f09e0adabcb8011e4aebc6ad48f6a4dd4bae904fe918707d253e4"
 
 UPSTREAM_CHECK_GITTAGREGEX = "mesa-(?P<pver>\d+(\.\d+)+)"
 
diff --git a/meta/recipes-graphics/mesa/mesa_22.3.5.bb b/meta/recipes-graphics/mesa/mesa_23.0.0.bb
similarity index 100%
rename from meta/recipes-graphics/mesa/mesa_22.3.5.bb
rename to meta/recipes-graphics/mesa/mesa_23.0.0.bb