diff --git a/arch/mesa-panvk-bifrost/0005-panvk-bifrost-fragment-stores-atomics.patch b/arch/mesa-panvk-bifrost/0005-panvk-bifrost-fragment-stores-atomics.patch new file mode 100644 index 000000000..8b061a482 --- /dev/null +++ b/arch/mesa-panvk-bifrost/0005-panvk-bifrost-fragment-stores-atomics.patch @@ -0,0 +1,50 @@ +From: marfrit-packages noether +Subject: [PATCH] panvk: report fragmentStoresAndAtomics = true on Bifrost + +Backports Mesa main's unconditional advertisement of +fragmentStoresAndAtomics for panvk (snapshot ref: src/panfrost/vulkan/ +panvk_vX_physical_device.c at commit-time 2026-05-06; the line reads +`.fragmentStoresAndAtomics = true,` on main with no PAN_ARCH gate). + +Motivation: Chromium Dawn's WebGPU initializer in +third_party/dawn/src/dawn/native/vulkan/PhysicalDeviceVk.cpp:250 +unconditionally rejects any Vulkan adapter that doesn't advertise this +feature, causing Dawn to fall back to the SwiftShader CPU adapter +on PineTab2 / RK3566 / Mali-G52 r1 MC1 (PAN_ARCH 7). With this patch the +device advertises true, satisfying Dawn's gate. Tracked at +https://git.reauktion.de/marfrit/panvk-bifrost/issues/2. + +The disjunction with `instance->force_enable_shader_atomics` is +preserved as a kill-switch: in compiler terms it's dead code +(`true || X == true`), but it leaves the DRI option +`pan_force_enable_shader_atomics` semantically wired so future +rebases or downstream debugging can see the link to the runtime knob. + +Caveat: the existing DRI option's description in src/util/driconf.h +still labels this as "may not work reliably and is for debug purposes +only". Mesa main's choice to ship it as default-on for all panvk +architectures (including Bifrost, which is non-conformant per the +PAN_I_WANT_A_BROKEN_VULKAN_DRIVER gate) reflects an upstream judgment +that the practical risk is acceptable. Verify-before-ship for this +package: dEQP-VK.glsl.atomic_operations.* + dEQP-VK.image.store.* +deltas vs the r4 baseline must show no new fails. Pass counts may rise +(tests that previously NotSupported now run); the load-bearing line is +the Failed column staying at zero. + +--- + src/panfrost/vulkan/panvk_vX_physical_device.c | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +diff --git a/src/panfrost/vulkan/panvk_vX_physical_device.c b/src/panfrost/vulkan/panvk_vX_physical_device.c +--- a/src/panfrost/vulkan/panvk_vX_physical_device.c ++++ b/src/panfrost/vulkan/panvk_vX_physical_device.c +@@ -280,8 +280,7 @@ + .vertexPipelineStoresAndAtomics = + (PAN_ARCH >= 13 && instance->enable_vertex_pipeline_stores_atomics) || + instance->force_enable_shader_atomics, +- .fragmentStoresAndAtomics = +- (PAN_ARCH >= 10) || instance->force_enable_shader_atomics, ++ .fragmentStoresAndAtomics = true || instance->force_enable_shader_atomics, + .shaderTessellationAndGeometryPointSize = false, + .shaderImageGatherExtended = true, + .shaderStorageImageExtendedFormats = true, diff --git a/arch/mesa-panvk-bifrost/PKGBUILD b/arch/mesa-panvk-bifrost/PKGBUILD index 4d79cf798..0db5b9059 100644 --- a/arch/mesa-panvk-bifrost/PKGBUILD +++ b/arch/mesa-panvk-bifrost/PKGBUILD @@ -30,7 +30,7 @@ pkgname=mesa-panvk-bifrost _mesaver=26.0.6 -pkgver=26.0.6.r4 +pkgver=26.0.6.r5 pkgrel=1 pkgdesc="Patched Mesa libvulkan_panfrost.so exposing Bifrost-gen Mali to Vulkan apps (panvk-bifrost campaign)" arch=('aarch64') @@ -81,6 +81,7 @@ source=( "0002-panvk-expose-vulkan-1.1-1.2-on-bifrost.patch" "0003-panvk-bifrost-vk-ext-transform-feedback.patch" "0004-panvk-bifrost-xfb-primitive-decomposition.patch" + "0005-panvk-bifrost-fragment-stores-atomics.patch" "brave-vulkan" "icd.json" ) @@ -92,6 +93,7 @@ sha256sums=( 'SKIP' 'SKIP' 'SKIP' + 'SKIP' ) prepare() { @@ -127,6 +129,17 @@ prepare() { # Phase-doc context: ~/src/panvk-bifrost/iter17/phase{0,1,2,4,5,6,8}_*.md. patch -p1 < "${srcdir}/0004-panvk-bifrost-xfb-primitive-decomposition.patch" + # r5 (2026-05-23): advertise .fragmentStoresAndAtomics = true on Bifrost + # to satisfy Chromium Dawn's WebGPU init gate + # (third_party/dawn/src/dawn/native/vulkan/PhysicalDeviceVk.cpp:250). + # Backports Mesa main's unconditional flip (same line as on main as of + # 2026-05-06). Disjunction with instance->force_enable_shader_atomics + # is preserved as a documented kill-switch even though the compiler + # folds it away. Closes marfrit/panvk-bifrost#2. + # Verify-before-ship: dEQP-VK.glsl.atomic_operations.* and + # dEQP-VK.image.store.* show no new Failed vs r4 baseline. + patch -p1 < "${srcdir}/0005-panvk-bifrost-fragment-stores-atomics.patch" + # Sanity-check the patches landed. grep -q "KHR_robustness2 = true," src/panfrost/vulkan/panvk_vX_physical_device.c grep -q "EXT_robustness2 = true," src/panfrost/vulkan/panvk_vX_physical_device.c @@ -138,6 +151,8 @@ prepare() { test -f src/panfrost/vulkan/jm/panvk_vX_cmd_xfb.c # iter17 sanity: pan_nir_lower_xfb call site has been replaced; new file present. grep -q "panvk_per_arch(nir_lower_xfb)" src/panfrost/vulkan/panvk_vX_shader.c + # r5 sanity: fragmentStoresAndAtomics = true patch landed + grep -q "fragmentStoresAndAtomics = true ||" src/panfrost/vulkan/panvk_vX_physical_device.c grep -q "xfb_topology" src/panfrost/vulkan/panvk_shader.h grep -q "panvk_xfb_topology" src/panfrost/vulkan/panvk_shader.h test -f src/panfrost/vulkan/panvk_vX_xfb_lower.c