diff --git a/extra/mesa/.SRCINFO b/extra/mesa/.SRCINFO index 1e4aea6c3..3fdd5e2e6 100644 --- a/extra/mesa/.SRCINFO +++ b/extra/mesa/.SRCINFO @@ -1,6 +1,6 @@ pkgbase = mesa pkgdesc = An open-source implementation of the OpenGL specification - pkgver = 24.0.1 + pkgver = 24.0.2 pkgrel = 1 epoch = 1 url = https://www.mesa3d.org/ @@ -44,8 +44,10 @@ pkgbase = mesa makedepends = valgrind makedepends = directx-headers makedepends = libomxil-bellagio - source = https://mesa.freedesktop.org/archive/mesa-24.0.1.tar.xz - source = https://mesa.freedesktop.org/archive/mesa-24.0.1.tar.xz.sig + source = https://mesa.freedesktop.org/archive/mesa-24.0.2.tar.xz + source = https://mesa.freedesktop.org/archive/mesa-24.0.2.tar.xz.sig + source = radeon_bo_can_reclaim_slab.diff + source = vulkan-dispatch-table-add-an-uncompacted-version.patch source = LICENSE validpgpkeys = 8703B6700E7EE06D7A39B8D6EDAE37B02CEB490D validpgpkeys = 946D09B5E4C9845E63075FF1D961C596A7203456 @@ -53,11 +55,15 @@ pkgbase = mesa validpgpkeys = A5CC9FEC93F2F837CB044912336909B6B25FADFA validpgpkeys = 71C4B75620BC75708B4BDB254C95FAAB3EB073EC validpgpkeys = 57551DE15B968F6341C248F68D8E31AFC32428A6 - sha256sums = f387192b08c471c545590dd12230a2a343244804b5fe866fec6aea02eab57613 + sha256sums = 94e28a8edad06d8ed2b83eb53f253b9eb5aa62c3080f939702e1b3039b56c9e8 sha256sums = SKIP + sha256sums = 3fd1ad8cd29319502a6f80ecb96bb9a059e5de83a8b6e39f23de8d93921fd922 + sha256sums = 1733ec76f735788837833e7571b641fc64b56ec3176b93e9234fc0b5428ee6d8 sha256sums = 7052ba73bb07ea78873a2431ee4e828f4e72bda7d176d07f770fa48373dec537 - b2sums = 05eb98f2fec0d15e63e8da2ca2e563d0b6fb7e29d639e66fc69074b7550939160e6f29121b80f2c64083625f2b13aa728221443b1f5adf2dd0fd92056ed9dc40 + b2sums = f69e0b3edb7b8611f528a2e04104fe14b2fe8c799921be2d112dba744133813a19f90aa11d39f3f87a282e518003c7cc7966143d25e845f1f4489c461b22f661 b2sums = SKIP + b2sums = e7c3451a342cc648149375ce58697ae24273d47060e74ca2948d45ea8fe29b104f1daae4c91968fb6f37d41963d176987abf9ee21acfba0172a9b5d30300a72e + b2sums = e057a085bf7a9faceaa90b29555626d79e8c818e84a9424ade53dd21c512b2ea37dabb1d8ecccdf0f8fa69a4c6e7b66a6fe970b65baf1d368d6b9cc94ba532c7 b2sums = 1ecf007b82260710a7bf5048f47dd5d600c168824c02c595af654632326536a6527fbe0738670ee7b921dd85a70425108e0f471ba85a8e1ca47d294ad74b4adb pkgname = vulkan-mesa-layers diff --git a/extra/mesa/PKGBUILD b/extra/mesa/PKGBUILD index 2dfabe8e2..0e68e036a 100644 --- a/extra/mesa/PKGBUILD +++ b/extra/mesa/PKGBUILD @@ -25,7 +25,7 @@ pkgname=( 'mesa-vdpau' 'mesa' ) -pkgver=24.0.1 +pkgver=24.0.2 pkgrel=1 epoch=1 pkgdesc="An open-source implementation of the OpenGL specification" @@ -82,13 +82,19 @@ makedepends=( ) source=( https://mesa.freedesktop.org/archive/mesa-${pkgver}.tar.xz{,.sig} + radeon_bo_can_reclaim_slab.diff + vulkan-dispatch-table-add-an-uncompacted-version.patch LICENSE ) -sha256sums=('f387192b08c471c545590dd12230a2a343244804b5fe866fec6aea02eab57613' +sha256sums=('94e28a8edad06d8ed2b83eb53f253b9eb5aa62c3080f939702e1b3039b56c9e8' 'SKIP' + '3fd1ad8cd29319502a6f80ecb96bb9a059e5de83a8b6e39f23de8d93921fd922' + '1733ec76f735788837833e7571b641fc64b56ec3176b93e9234fc0b5428ee6d8' '7052ba73bb07ea78873a2431ee4e828f4e72bda7d176d07f770fa48373dec537') -b2sums=('05eb98f2fec0d15e63e8da2ca2e563d0b6fb7e29d639e66fc69074b7550939160e6f29121b80f2c64083625f2b13aa728221443b1f5adf2dd0fd92056ed9dc40' +b2sums=('f69e0b3edb7b8611f528a2e04104fe14b2fe8c799921be2d112dba744133813a19f90aa11d39f3f87a282e518003c7cc7966143d25e845f1f4489c461b22f661' 'SKIP' + 'e7c3451a342cc648149375ce58697ae24273d47060e74ca2948d45ea8fe29b104f1daae4c91968fb6f37d41963d176987abf9ee21acfba0172a9b5d30300a72e' + 'e057a085bf7a9faceaa90b29555626d79e8c818e84a9424ade53dd21c512b2ea37dabb1d8ecccdf0f8fa69a4c6e7b66a6fe970b65baf1d368d6b9cc94ba532c7' '1ecf007b82260710a7bf5048f47dd5d600c168824c02c595af654632326536a6527fbe0738670ee7b921dd85a70425108e0f471ba85a8e1ca47d294ad74b4adb') validpgpkeys=('8703B6700E7EE06D7A39B8D6EDAE37B02CEB490D' # Emil Velikov '946D09B5E4C9845E63075FF1D961C596A7203456' # Andres Gomez @@ -100,6 +106,12 @@ validpgpkeys=('8703B6700E7EE06D7A39B8D6EDAE37B02CEB490D' # Emil Velikov base); ++ return radeon_bo_can_reclaim(priv, &bo->base); + } + + static void radeon_bo_slab_destroy(void *winsys, struct pb_buffer_lean *_buf) diff --git a/extra/mesa/vulkan-dispatch-table-add-an-uncompacted-version.patch b/extra/mesa/vulkan-dispatch-table-add-an-uncompacted-version.patch new file mode 100644 index 000000000..04f102ba1 --- /dev/null +++ b/extra/mesa/vulkan-dispatch-table-add-an-uncompacted-version.patch @@ -0,0 +1,230 @@ +From 5d91db9666ea61be549b2edc28d5ad4c34b34aab Mon Sep 17 00:00:00 2001 +From: Mike Blumenkrantz +Date: Tue, 27 Feb 2024 14:41:28 -0500 +Subject: [PATCH 1/2] vulkan/dispatch_table: add an uncompacted version of the + table + +this is a bandaid fix that allows users (zink) to actually call the +functions intended to be called. the real fix would be to figure out +which extensions are enabled on the device and then only GPA the +functions associated with those extensions + +that's too hard though so I'm slapping some flex tape on it + +cc: mesa-stable + +Acked-by: Dave Airlie +Part-of: +--- + src/vulkan/util/vk_dispatch_table_gen.py | 109 +++++++++++++++++++++++ + 1 file changed, 109 insertions(+) + +diff --git a/src/vulkan/util/vk_dispatch_table_gen.py b/src/vulkan/util/vk_dispatch_table_gen.py +index 2db977b25deff..7a3b459b37155 100644 +--- a/src/vulkan/util/vk_dispatch_table_gen.py ++++ b/src/vulkan/util/vk_dispatch_table_gen.py +@@ -152,6 +152,62 @@ ${entrypoint_table('instance', instance_entrypoints)} + ${entrypoint_table('physical_device', physical_device_entrypoints)} + ${entrypoint_table('device', device_entrypoints)} + ++<%def name="uncompacted_dispatch_table(entrypoints)"> ++% for e in entrypoints: ++ % if e.alias: ++ <% continue %> ++ % endif ++ % if e.guard is not None: ++#ifdef ${e.guard} ++ % endif ++ PFN_vk${e.name} ${e.name}; ++ % if e.aliases: ++ % for a in e.aliases: ++ PFN_vk${a.name} ${a.name}; ++ % endfor ++ % endif ++ % if e.guard is not None: ++#else ++ PFN_vkVoidFunction ${e.name}; ++ % if e.aliases: ++ % for a in e.aliases: ++ PFN_vkVoidFunction ${a.name}; ++ % endfor ++ % endif ++#endif ++ % endif ++% endfor ++ ++ ++ ++struct vk_instance_uncompacted_dispatch_table { ++ ${uncompacted_dispatch_table(instance_entrypoints)} ++}; ++ ++struct vk_physical_device_uncompacted_dispatch_table { ++ ${uncompacted_dispatch_table(physical_device_entrypoints)} ++}; ++ ++struct vk_device_uncompacted_dispatch_table { ++ ${uncompacted_dispatch_table(device_entrypoints)} ++}; ++ ++struct vk_uncompacted_dispatch_table { ++ union { ++ struct { ++ struct vk_instance_uncompacted_dispatch_table instance; ++ struct vk_physical_device_uncompacted_dispatch_table physical_device; ++ struct vk_device_uncompacted_dispatch_table device; ++ }; ++ ++ struct { ++ ${uncompacted_dispatch_table(instance_entrypoints)} ++ ${uncompacted_dispatch_table(physical_device_entrypoints)} ++ ${uncompacted_dispatch_table(device_entrypoints)} ++ }; ++ }; ++}; ++ + void + vk_instance_dispatch_table_load(struct vk_instance_dispatch_table *table, + PFN_vkGetInstanceProcAddr gpa, +@@ -165,6 +221,19 @@ vk_device_dispatch_table_load(struct vk_device_dispatch_table *table, + PFN_vkGetDeviceProcAddr gpa, + VkDevice device); + ++void ++vk_instance_uncompacted_dispatch_table_load(struct vk_instance_uncompacted_dispatch_table *table, ++ PFN_vkGetInstanceProcAddr gpa, ++ VkInstance instance); ++void ++vk_physical_device_uncompacted_dispatch_table_load(struct vk_physical_device_uncompacted_dispatch_table *table, ++ PFN_vkGetInstanceProcAddr gpa, ++ VkInstance instance); ++void ++vk_device_uncompacted_dispatch_table_load(struct vk_device_uncompacted_dispatch_table *table, ++ PFN_vkGetDeviceProcAddr gpa, ++ VkDevice device); ++ + void vk_instance_dispatch_table_from_entrypoints( + struct vk_instance_dispatch_table *dispatch_table, + const struct vk_instance_entrypoint_table *entrypoint_table, +@@ -267,6 +336,46 @@ ${load_dispatch_table('physical_device', 'VkInstance', 'GetInstanceProcAddr', + ${load_dispatch_table('device', 'VkDevice', 'GetDeviceProcAddr', + device_entrypoints)} + ++<%def name="load_uncompacted_dispatch_table(type, VkType, ProcAddr, entrypoints)"> ++void ++vk_${type}_uncompacted_dispatch_table_load(struct vk_${type}_uncompacted_dispatch_table *table, ++ PFN_vk${ProcAddr} gpa, ++ ${VkType} obj) ++{ ++% if type != 'physical_device': ++ table->${ProcAddr} = gpa; ++% endif ++% for e in entrypoints: ++ % if e.alias or e.name == '${ProcAddr}': ++ <% continue %> ++ % endif ++ % if e.guard is not None: ++#ifdef ${e.guard} ++ % endif ++ table->${e.name} = (PFN_vk${e.name}) gpa(obj, "vk${e.name}"); ++ % for a in e.aliases: ++ table->${a.name} = (PFN_vk${a.name}) gpa(obj, "vk${a.name}"); ++ if (table->${e.name} && !table->${a.name}) ++ table->${a.name} = (PFN_vk${a.name}) table->${e.name}; ++ if (!table->${e.name}) ++ table->${e.name} = (PFN_vk${e.name}) table->${a.name}; ++ % endfor ++ % if e.guard is not None: ++#endif ++ % endif ++% endfor ++} ++ ++ ++${load_uncompacted_dispatch_table('instance', 'VkInstance', 'GetInstanceProcAddr', ++ instance_entrypoints)} ++ ++${load_uncompacted_dispatch_table('physical_device', 'VkInstance', 'GetInstanceProcAddr', ++ physical_device_entrypoints)} ++ ++${load_uncompacted_dispatch_table('device', 'VkDevice', 'GetDeviceProcAddr', ++ device_entrypoints)} ++ + + struct string_map_entry { + uint32_t name; +-- +GitLab + + +From d4f3770ea232e015e445b9d1fcab699119417fac Mon Sep 17 00:00:00 2001 +From: Mike Blumenkrantz +Date: Tue, 27 Feb 2024 16:20:48 -0500 +Subject: [PATCH 2/2] zink: use uncompacted vk_dispatch_table + +the dispatch table doesn't know which extensions zink wants to use, +so let zink use the extensions it wants to use + +fixes #10513 + +cc: mesa-stable + +Acked-by: Dave Airlie +Part-of: +--- + src/gallium/drivers/zink/zink_screen.c | 18 +++++++++--------- + src/gallium/drivers/zink/zink_types.h | 2 +- + 2 files changed, 10 insertions(+), 10 deletions(-) + +diff --git a/src/gallium/drivers/zink/zink_screen.c b/src/gallium/drivers/zink/zink_screen.c +index 11e54a0054a09..035e742c98af7 100644 +--- a/src/gallium/drivers/zink/zink_screen.c ++++ b/src/gallium/drivers/zink/zink_screen.c +@@ -3288,12 +3288,12 @@ zink_internal_create_screen(const struct pipe_screen_config *config, int64_t dev + } + } + +- vk_instance_dispatch_table_load(&screen->vk.instance, +- screen->vk_GetInstanceProcAddr, +- screen->instance); +- vk_physical_device_dispatch_table_load(&screen->vk.physical_device, +- screen->vk_GetInstanceProcAddr, +- screen->instance); ++ vk_instance_uncompacted_dispatch_table_load(&screen->vk.instance, ++ screen->vk_GetInstanceProcAddr, ++ screen->instance); ++ vk_physical_device_uncompacted_dispatch_table_load(&screen->vk.physical_device, ++ screen->vk_GetInstanceProcAddr, ++ screen->instance); + + zink_verify_instance_extensions(screen); + +@@ -3390,9 +3390,9 @@ zink_internal_create_screen(const struct pipe_screen_config *config, int64_t dev + if (!screen->dev) + goto fail; + +- vk_device_dispatch_table_load(&screen->vk.device, +- screen->vk_GetDeviceProcAddr, +- screen->dev); ++ vk_device_uncompacted_dispatch_table_load(&screen->vk.device, ++ screen->vk_GetDeviceProcAddr, ++ screen->dev); + + init_queue(screen); + +diff --git a/src/gallium/drivers/zink/zink_types.h b/src/gallium/drivers/zink/zink_types.h +index bc668b60d8e64..ddfb2532c8432 100644 +--- a/src/gallium/drivers/zink/zink_types.h ++++ b/src/gallium/drivers/zink/zink_types.h +@@ -1523,7 +1523,7 @@ struct zink_screen { + bool renderdoc_capture_all; + #endif + +- struct vk_dispatch_table vk; ++ struct vk_uncompacted_dispatch_table vk; + + void (*buffer_barrier)(struct zink_context *ctx, struct zink_resource *res, VkAccessFlags flags, VkPipelineStageFlags pipeline); + void (*image_barrier)(struct zink_context *ctx, struct zink_resource *res, VkImageLayout new_layout, VkAccessFlags flags, VkPipelineStageFlags pipeline); +-- +GitLab +