Backport two patches from https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/43020 to use mesa-libclc, which makes Rusticl's OpenCL C more correct.
Signed-off-by: Zoltán Böszörményi <[email protected]> --- ...-optional-for-configs-not-needing-it.patch | 123 ++++++++++++++++++ ...lc-use-our-downstream-fork-of-libclc.patch | 43 ++++++ .../mesa/mesa-tools-native.bb | 2 +- meta/recipes-graphics/mesa/mesa.inc | 6 +- 4 files changed, 171 insertions(+), 3 deletions(-) create mode 100644 meta/recipes-graphics/mesa/files/0001-clc-make-libclc-optional-for-configs-not-needing-it.patch create mode 100644 meta/recipes-graphics/mesa/files/0002-clc-use-our-downstream-fork-of-libclc.patch diff --git a/meta/recipes-graphics/mesa/files/0001-clc-make-libclc-optional-for-configs-not-needing-it.patch b/meta/recipes-graphics/mesa/files/0001-clc-make-libclc-optional-for-configs-not-needing-it.patch new file mode 100644 index 0000000000..a52931dbf5 --- /dev/null +++ b/meta/recipes-graphics/mesa/files/0001-clc-make-libclc-optional-for-configs-not-needing-it.patch @@ -0,0 +1,123 @@ +From 5df2fb59c32fd6e3ad53bdaf98afccfddbdd14fc Mon Sep 17 00:00:00 2001 +From: Karol Herbst <[email protected]> +Date: Fri, 17 Jul 2026 17:45:45 +0200 +Subject: [PATCH 1/2] clc: make libclc optional for configs not needing it + +Upstream-Status: Submitted [https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/43020] +--- + meson.build | 2 +- + src/compiler/clc/meson.build | 73 +++++++++++++++++++----------------- + 2 files changed, 39 insertions(+), 36 deletions(-) + +diff --git a/meson.build b/meson.build +index 1eca91fc940..68bbb942b99 100644 +--- a/meson.build ++++ b/meson.build +@@ -949,7 +949,7 @@ with_poly = [ + ].contains(true) + + dep_clc = null_dep +-if with_clc ++if with_gallium_rusticl or with_microsoft_clc + dep_clc = dependency('libclc') + endif + +diff --git a/src/compiler/clc/meson.build b/src/compiler/clc/meson.build +index 9ff61440f0d..249fd31f478 100644 +--- a/src/compiler/clc/meson.build ++++ b/src/compiler/clc/meson.build +@@ -4,7 +4,6 @@ + files_libmesaclc = files( + 'clc.c', + 'clc_helpers.cpp', +- 'nir_load_libclc.c', + ) + + _libmesaclc_c_args = [] +@@ -41,45 +40,49 @@ if not _shared_llvm or \ + _libmesaclc_cpp_args += ['-DUSE_STATIC_OPENCL_C_H=1'] + endif + +-_basedir = dep_clc.get_variable(pkgconfig : 'libexecdir') ++if dep_clc.found() ++ files_libmesaclc += 'nir_load_libclc.c' + +-_static_libclc = get_option('static-libclc') +-if _static_libclc.length() > 0 +- if _static_libclc.contains('all') +- _static_libclc = ['spirv', 'spirv64'] +- endif +- prog_zstd = find_program('zstd', required : false, native : true) +- _zstd_static_libclc = dep_zstd.found() and prog_zstd.found() +- if _zstd_static_libclc +- _libmesaclc_c_args += '-DHAVE_STATIC_LIBCLC_ZSTD' +- endif +- foreach s : _static_libclc +- _libmesaclc_c_args += '-DHAVE_STATIC_LIBCLC_@0@'.format(s.to_upper()) +- f = '@[email protected]'.format(s) +- _libclc_file = _basedir / f ++ _basedir = dep_clc.get_variable(pkgconfig : 'libexecdir') ++ ++ _static_libclc = get_option('static-libclc') ++ if _static_libclc.length() > 0 ++ if _static_libclc.contains('all') ++ _static_libclc = ['spirv', 'spirv64'] ++ endif ++ prog_zstd = find_program('zstd', required : false, native : true) ++ _zstd_static_libclc = dep_zstd.found() and prog_zstd.found() + if _zstd_static_libclc +- _libclc_file = custom_target( +- '@[email protected]'.format(f), +- command : [prog_zstd, '-f', '@INPUT@', '-o', '@OUTPUT@'], ++ _libmesaclc_c_args += '-DHAVE_STATIC_LIBCLC_ZSTD' ++ endif ++ foreach s : _static_libclc ++ _libmesaclc_c_args += '-DHAVE_STATIC_LIBCLC_@0@'.format(s.to_upper()) ++ f = '@[email protected]'.format(s) ++ _libclc_file = _basedir / f ++ if _zstd_static_libclc ++ _libclc_file = custom_target( ++ '@[email protected]'.format(f), ++ command : [prog_zstd, '-f', '@INPUT@', '-o', '@OUTPUT@'], ++ input : [_libclc_file], ++ output : '@[email protected]'.format(f), ++ ) ++ endif ++ files_libmesaclc += custom_target( ++ '@[email protected]'.format(f), ++ command : [ ++ prog_python, files_xxd, '-b', '@INPUT@', '@OUTPUT@', ++ '-n', 'libclc_@0@_mesa3d_spv'.format(s), ++ ], + input : [_libclc_file], +- output : '@[email protected]'.format(f), ++ output : '@[email protected]'.format(f), ++ depend_files : files_xxd, + ) ++ endforeach ++ else ++ _libmesaclc_c_args += ['-DDYNAMIC_LIBCLC_PATH="@0@/"'.format(_basedir)] ++ if not cc.has_function('mmap') ++ error('mmap required for dynamic libCLC loading') + endif +- files_libmesaclc += custom_target( +- '@[email protected]'.format(f), +- command : [ +- prog_python, files_xxd, '-b', '@INPUT@', '@OUTPUT@', +- '-n', 'libclc_@0@_mesa3d_spv'.format(s), +- ], +- input : [_libclc_file], +- output : '@[email protected]'.format(f), +- depend_files : files_xxd, +- ) +- endforeach +-else +- _libmesaclc_c_args += ['-DDYNAMIC_LIBCLC_PATH="@0@/"'.format(_basedir)] +- if not cc.has_function('mmap') +- error('mmap required for dynamic libCLC loading') + endif + endif + +-- +2.55.0 + diff --git a/meta/recipes-graphics/mesa/files/0002-clc-use-our-downstream-fork-of-libclc.patch b/meta/recipes-graphics/mesa/files/0002-clc-use-our-downstream-fork-of-libclc.patch new file mode 100644 index 0000000000..39e120b036 --- /dev/null +++ b/meta/recipes-graphics/mesa/files/0002-clc-use-our-downstream-fork-of-libclc.patch @@ -0,0 +1,43 @@ +From 8bda7974958e5ba56b0eec25a7876c004b6b743b Mon Sep 17 00:00:00 2001 +From: Karol Herbst <[email protected]> +Date: Thu, 16 Jul 2026 21:20:52 +0200 +Subject: [PATCH 2/2] clc: use our downstream fork of libclc + +There are a couple of issues with the upstream versions and release +schedules and overall experience makes it dificult for us to rely on +users using a proper functional implementation. + +And we want to ship a conformant OpenCL implementation here and that's +difficult if users run untested libclc versions or libclc with known bugs +that aren't going to get fixed upstream because the release is already +EoL. + +Backport-to: * +Upstream-Status: Submitted [https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/43020] +--- + meson.build | 9 ++++++++- + 1 file changed, 8 insertions(+), 1 deletion(-) + +diff --git a/meson.build b/meson.build +index 68bbb942b99..6e2590cc2c6 100644 +--- a/meson.build ++++ b/meson.build +@@ -950,7 +950,14 @@ with_poly = [ + + dep_clc = null_dep + if with_gallium_rusticl or with_microsoft_clc +- dep_clc = dependency('libclc') ++ dep_clc = dependency('mesa-libclc', required : false, ++ not_found_message : ++ 'mesa-libclc not found. Build will fall back to upstream libclc, however ' + ++ 'certain versions are known to contain bugs that make OpenCL builtins ' + ++ 'return incorrect results.') ++ if not dep_clc.found() ++ dep_clc = dependency('libclc') ++ endif + endif + + gl_pkgconfig_c_flags = [] +-- +2.55.0 + diff --git a/meta/recipes-graphics/mesa/mesa-tools-native.bb b/meta/recipes-graphics/mesa/mesa-tools-native.bb index 20207450bf..c495d2e8a8 100644 --- a/meta/recipes-graphics/mesa/mesa-tools-native.bb +++ b/meta/recipes-graphics/mesa/mesa-tools-native.bb @@ -11,7 +11,7 @@ PACKAGECONFIG += "gallium-llvm" # to PACKAGECONFIG like in mesa.inc PACKAGECONFIG += "${@bb.utils.filter('DISTRO_FEATURES', 'x11 wayland', d)}" -DEPENDS += "libclc-native spirv-tools-native spirv-llvm-translator-native" +DEPENDS += "mesa-libclc-native spirv-tools-native spirv-llvm-translator-native" EXTRA_OEMESON += " \ -Dmesa-clc=enabled -Dinstall-mesa-clc=true -Dmesa-clc-bundle-headers=enabled \ diff --git a/meta/recipes-graphics/mesa/mesa.inc b/meta/recipes-graphics/mesa/mesa.inc index 15d56c804d..dea7a8295f 100644 --- a/meta/recipes-graphics/mesa/mesa.inc +++ b/meta/recipes-graphics/mesa/mesa.inc @@ -21,6 +21,8 @@ SRC_URI = "https://archive.mesa3d.org/mesa-${PV}.tar.xz \ file://0001-src-intel-compiler-jay-jay_ir.h-do-not-used-typed-en.patch \ file://0001-src-intel-compiler-jay-fix-GCC-10-case-label-declara.patch \ file://0001-src-util-u_math.c-do-not-use-arm-fpu-instructions-if.patch \ + file://0001-clc-make-libclc-optional-for-configs-not-needing-it.patch \ + file://0002-clc-use-our-downstream-fork-of-libclc.patch \ " SRC_URI[sha256sum] = "79e421c7ce18cd9e790b8375920325779f10798630bf30e0b22f1a21c8617122" @@ -110,7 +112,7 @@ PACKAGECONFIG[opengl] = "-Dopengl=true, -Dopengl=false" # "opencl" also requires libclc and gallium-llvm to be present in PACKAGECONFIG! # Be sure to enable them both for the target and for the native build. -PACKAGECONFIG[opencl] = "-Dgallium-rusticl=true -Dmesa-clc-bundle-headers=enabled, -Dgallium-rusticl=false, bindgen-cli-native clang libclc spirv-tools spirv-llvm-translator" +PACKAGECONFIG[opencl] = "-Dgallium-rusticl=true -Dmesa-clc-bundle-headers=enabled, -Dgallium-rusticl=false, bindgen-cli-native clang mesa-libclc spirv-tools spirv-llvm-translator" X11_DEPS = "xorgproto virtual/libx11 libxext libxxf86vm libxdamage libxfixes xrandr xorgproto libxshmfence" # "x11" requires "opengl" @@ -254,7 +256,7 @@ RPROVIDES:libopencl-mesa += "virtual-opencl-icd" RPROVIDES:libgles2-mesa += "libgles3-mesa" RPROVIDES:libgles2-mesa-dev += "libgles3-mesa-dev" -RDEPENDS:libopencl-mesa += "${@bb.utils.contains('PACKAGECONFIG', 'opencl', 'libclc', '', d)}" +RDEPENDS:libopencl-mesa += "${@bb.utils.contains('PACKAGECONFIG', 'opencl', 'mesa-libclc', '', d)}" PACKAGES =+ "libegl-mesa libegl-mesa-dev \ libgallium \ -- 2.55.0
-=-=-=-=-=-=-=-=-=-=-=- Links: You receive all messages sent to this group. View/Reply Online (#241278): https://lists.openembedded.org/g/openembedded-core/message/241278 Mute This Topic: https://lists.openembedded.org/mt/120341491/21656 Group Owner: [email protected] Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [[email protected]] -=-=-=-=-=-=-=-=-=-=-=-
