commit e1955eec72638e5c9cbb78f4f9cca18f86649450
Author: Leigh Scott <leigh123linux(a)gmail.com>
Date: Mon Jul 1 16:46:39 2024 +0100
Add the fedora backports
...adeonsi-remove-has_syncobj-has_fence_to_h.patch | 153 +++++++++++++++++++++
...it-eglQueryDmaBufModifiersEXT-num_modifie.patch | 41 ++++++
mesa-freeworld.spec | 9 +-
3 files changed, 202 insertions(+), 1 deletion(-)
---
diff --git a/0001-Revert-ac-radeonsi-remove-has_syncobj-has_fence_to_h.patch
b/0001-Revert-ac-radeonsi-remove-has_syncobj-has_fence_to_h.patch
new file mode 100644
index 0000000..2460001
--- /dev/null
+++ b/0001-Revert-ac-radeonsi-remove-has_syncobj-has_fence_to_h.patch
@@ -0,0 +1,153 @@
+From fddf49504e1bebb7efc52c1a0516300c0f217f18 Mon Sep 17 00:00:00 2001
+From: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer(a)amd.com>
+Date: Wed, 26 Jun 2024 12:11:48 +0200
+Subject: [PATCH] Revert "ac, radeonsi: remove has_syncobj,
+ has_fence_to_handle"
+
+This reverts commit 02fe3c32cdfc3cf48cd691d6321978b8d4c3e61b.
+
+Closes:
https://gitlab.freedesktop.org/mesa/mesa/-/issues/11352
+---
+ src/amd/common/ac_gpu_info.c | 12 ++++++++++++
+ src/amd/common/ac_gpu_info.h | 2 ++
+ src/gallium/drivers/r600/r600_pipe_common.c | 1 +
+ src/gallium/drivers/radeonsi/si_fence.c | 10 ++++++++++
+ src/gallium/drivers/radeonsi/si_get.c | 8 ++++++--
+ 5 files changed, 31 insertions(+), 2 deletions(-)
+
+diff --git a/src/amd/common/ac_gpu_info.c b/src/amd/common/ac_gpu_info.c
+index 78febf796b4..3f711bd45ec 100644
+--- a/src/amd/common/ac_gpu_info.c
++++ b/src/amd/common/ac_gpu_info.c
+@@ -355,6 +355,14 @@ static intptr_t readlink(const char *path, char *buf, size_t
bufsiz)
+
+ #define CIK_TILE_MODE_COLOR_2D 14
+
++static bool has_syncobj(int fd)
++{
++ uint64_t value;
++ if (drmGetCap(fd, DRM_CAP_SYNCOBJ, &value))
++ return false;
++ return value ? true : false;
++}
++
+ static bool has_timeline_syncobj(int fd)
+ {
+ uint64_t value;
+@@ -1068,7 +1076,9 @@ bool ac_query_gpu_info(int fd, void *dev_p, struct radeon_info
*info,
+ info->memory_freq_mhz_effective *= ac_memory_ops_per_clock(info->vram_type);
+
+ info->has_userptr = true;
++ info->has_syncobj = has_syncobj(fd);
+ info->has_timeline_syncobj = has_timeline_syncobj(fd);
++ info->has_fence_to_handle = info->has_syncobj;
+ info->has_local_buffers = true;
+ info->has_bo_metadata = true;
+ info->has_eqaa_surface_allocator = info->gfx_level < GFX11;
+@@ -1974,7 +1984,9 @@ void ac_print_gpu_info(const struct radeon_info *info, FILE *f)
+ fprintf(f, "Kernel & winsys capabilities:\n");
+ fprintf(f, " drm = %i.%i.%i\n", info->drm_major, info->drm_minor,
info->drm_patchlevel);
+ fprintf(f, " has_userptr = %i\n", info->has_userptr);
++ fprintf(f, " has_syncobj = %u\n", info->has_syncobj);
+ fprintf(f, " has_timeline_syncobj = %u\n",
info->has_timeline_syncobj);
++ fprintf(f, " has_fence_to_handle = %u\n",
info->has_fence_to_handle);
+ fprintf(f, " has_local_buffers = %u\n", info->has_local_buffers);
+ fprintf(f, " has_bo_metadata = %u\n", info->has_bo_metadata);
+ fprintf(f, " has_eqaa_surface_allocator = %u\n",
info->has_eqaa_surface_allocator);
+diff --git a/src/amd/common/ac_gpu_info.h b/src/amd/common/ac_gpu_info.h
+index 68fbe909a97..40670d87770 100644
+--- a/src/amd/common/ac_gpu_info.h
++++ b/src/amd/common/ac_gpu_info.h
+@@ -218,7 +218,9 @@ struct radeon_info {
+ uint32_t max_submitted_ibs[AMD_NUM_IP_TYPES];
+ bool is_amdgpu;
+ bool has_userptr;
++ bool has_syncobj;
+ bool has_timeline_syncobj;
++ bool has_fence_to_handle;
+ bool has_local_buffers;
+ bool has_bo_metadata;
+ bool has_eqaa_surface_allocator;
+diff --git a/src/gallium/drivers/r600/r600_pipe_common.c
b/src/gallium/drivers/r600/r600_pipe_common.c
+index aaa171a07ed..5a10aad5907 100644
+--- a/src/gallium/drivers/r600/r600_pipe_common.c
++++ b/src/gallium/drivers/r600/r600_pipe_common.c
+@@ -1338,6 +1338,7 @@ bool r600_common_screen_init(struct r600_common_screen *rscreen,
+ printf("drm = %i.%i.%i\n", rscreen->info.drm_major,
+ rscreen->info.drm_minor, rscreen->info.drm_patchlevel);
+ printf("has_userptr = %i\n", rscreen->info.has_userptr);
++ printf("has_syncobj = %u\n", rscreen->info.has_syncobj);
+
+ printf("r600_max_quad_pipes = %i\n", rscreen->info.r600_max_quad_pipes);
+ printf("max_gpu_freq_mhz = %i\n", rscreen->info.max_gpu_freq_mhz);
+diff --git a/src/gallium/drivers/radeonsi/si_fence.c
b/src/gallium/drivers/radeonsi/si_fence.c
+index a1ae9125e00..1d2406df9fd 100644
+--- a/src/gallium/drivers/radeonsi/si_fence.c
++++ b/src/gallium/drivers/radeonsi/si_fence.c
+@@ -374,10 +374,16 @@ static void si_create_fence_fd(struct pipe_context *ctx, struct
pipe_fence_handl
+
+ switch (type) {
+ case PIPE_FD_TYPE_NATIVE_SYNC:
++ if (!sscreen->info.has_fence_to_handle)
++ goto finish;
++
+ sfence->gfx = ws->fence_import_sync_file(ws, fd);
+ break;
+
+ case PIPE_FD_TYPE_SYNCOBJ:
++ if (!sscreen->info.has_syncobj)
++ goto finish;
++
+ sfence->gfx = ws->fence_import_syncobj(ws, fd);
+ break;
+
+@@ -385,6 +391,7 @@ static void si_create_fence_fd(struct pipe_context *ctx, struct
pipe_fence_handl
+ unreachable("bad fence fd type when importing");
+ }
+
++finish:
+ if (!sfence->gfx) {
+ FREE(sfence);
+ return;
+@@ -400,6 +407,9 @@ static int si_fence_get_fd(struct pipe_screen *screen, struct
pipe_fence_handle
+ struct si_fence *sfence = (struct si_fence *)fence;
+ int gfx_fd = -1;
+
++ if (!sscreen->info.has_fence_to_handle)
++ return -1;
++
+ util_queue_fence_wait(&sfence->ready);
+
+ /* Deferred fences aren't supported. */
+diff --git a/src/gallium/drivers/radeonsi/si_get.c
b/src/gallium/drivers/radeonsi/si_get.c
+index a9ac90dca52..3c8a75e9583 100644
+--- a/src/gallium/drivers/radeonsi/si_get.c
++++ b/src/gallium/drivers/radeonsi/si_get.c
+@@ -168,8 +168,6 @@ static int si_get_param(struct pipe_screen *pscreen, enum pipe_cap
param)
+ case PIPE_CAP_ALLOW_GLTHREAD_BUFFER_SUBDATA_OPT: /* TODO: remove if it's slow */
+ case PIPE_CAP_NULL_TEXTURES:
+ case PIPE_CAP_HAS_CONST_BW:
+- case PIPE_CAP_FENCE_SIGNAL:
+- case PIPE_CAP_NATIVE_FENCE_FD:
+ case PIPE_CAP_CL_GL_SHARING:
+ return 1;
+
+@@ -287,9 +285,15 @@ static int si_get_param(struct pipe_screen *pscreen, enum pipe_cap
param)
+ PIPE_CONTEXT_PRIORITY_MEDIUM |
+ PIPE_CONTEXT_PRIORITY_HIGH;
+
++ case PIPE_CAP_FENCE_SIGNAL:
++ return sscreen->info.has_syncobj;
++
+ case PIPE_CAP_CONSTBUF0_FLAGS:
+ return SI_RESOURCE_FLAG_32BIT;
+
++ case PIPE_CAP_NATIVE_FENCE_FD:
++ return sscreen->info.has_fence_to_handle;
++
+ case PIPE_CAP_DRAW_PARAMETERS:
+ case PIPE_CAP_MULTI_DRAW_INDIRECT:
+ case PIPE_CAP_MULTI_DRAW_INDIRECT_PARAMS:
+--
+2.45.2
+
diff --git a/0001-llvmpipe-Init-eglQueryDmaBufModifiersEXT-num_modifie.patch
b/0001-llvmpipe-Init-eglQueryDmaBufModifiersEXT-num_modifie.patch
new file mode 100644
index 0000000..ba224c2
--- /dev/null
+++ b/0001-llvmpipe-Init-eglQueryDmaBufModifiersEXT-num_modifie.patch
@@ -0,0 +1,41 @@
+From 1f3ea20998329788f6a14166d8ba9b3948b7e864 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= <jexposit(a)redhat.com>
+Date: Thu, 27 Jun 2024 13:07:11 +0200
+Subject: [PATCH] llvmpipe: Init eglQueryDmaBufModifiersEXT num_modifiers
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Initialize the number of modifiers when `max` is 0 as documented [1]:
+
+ If <max_formats> is 0, no formats are returned, but the total number
+ of formats is returned in <num_formats>, and no error is generated.
+
+[1]
https://registry.khronos.org/EGL/extensions/EXT/EGL_EXT_image_dma_buf_imp...
+Fixes: d74ea2c117fe ("llvmpipe: Implement dmabuf handling")
+Signed-off-by: José Expósito <jexposit(a)redhat.com>
+---
+ src/gallium/drivers/llvmpipe/lp_texture.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/src/gallium/drivers/llvmpipe/lp_texture.c
b/src/gallium/drivers/llvmpipe/lp_texture.c
+index 0044e689aab..30d5057cf9f 100644
+--- a/src/gallium/drivers/llvmpipe/lp_texture.c
++++ b/src/gallium/drivers/llvmpipe/lp_texture.c
+@@ -1724,10 +1724,10 @@ llvmpipe_resource_get_param(struct pipe_screen *screen,
+ static void
+ llvmpipe_query_dmabuf_modifiers(struct pipe_screen *pscreen, enum pipe_format format,
int max, uint64_t *modifiers, unsigned int *external_only, int *count)
+ {
+- if (max) {
+- *count = 1;
++ *count = 1;
++
++ if (max)
+ *modifiers = DRM_FORMAT_MOD_LINEAR;
+- }
+ }
+
+ static bool
+--
+2.45.2
+
diff --git a/mesa-freeworld.spec b/mesa-freeworld.spec
index 9faa56b..83cd083 100644
--- a/mesa-freeworld.spec
+++ b/mesa-freeworld.spec
@@ -71,7 +71,7 @@ Name: %{srcname}-freeworld
Summary: Mesa graphics libraries
%global ver 24.1.2
Version: %{lua:ver = string.gsub(rpm.expand("%{ver}"), "-",
"~"); print(ver)}
-Release: 1%{?dist}
+Release: 2%{?dist}
License: MIT AND BSD-3-Clause AND SGI-B-2.0
URL:
http://www.mesa3d.org
@@ -83,6 +83,9 @@ Source1: Mesa-MLAA-License-Clarification-Email.txt
Source2: org.mesa3d.vaapi.freeworld.metainfo.xml
Source3: org.mesa3d.vdpau.freeworld.metainfo.xml
+Patch: 0001-llvmpipe-Init-eglQueryDmaBufModifiersEXT-num_modifie.patch
+Patch: 0001-Revert-ac-radeonsi-remove-has_syncobj-has_fence_to_h.patch
+
BuildRequires: meson >= 1.3.0
BuildRequires: gcc
BuildRequires: gcc-c++
@@ -341,6 +344,10 @@ rm -fr %{buildroot}%{_libdir}/libVkLayer_MESA_device_select.so
%endif
%changelog
+* Mon Jul 01 2024 Leigh Scott <leigh123linux(a)gmail.com> - 24.1.2-2
+- Fix mutter crash when calling eglQueryDmaBufModifiersEXT
+- Fix GNOME and KDE crash with some AMD GPUs
+
* Thu Jun 20 2024 Thorsten Leemhuis <fedora(a)leemhuis.info> - 24.1.1-2
- Update to 24.1.2