mesa-panvk-bifrost: r4 -> r5 — advertise fragmentStoresAndAtomics on Bifrost
Backports Mesa main's unconditional flip of .fragmentStoresAndAtomics to true in src/panfrost/vulkan/panvk_vX_physical_device.c. Closes the Dawn-WebGPU adapter rejection at PhysicalDeviceVk.cpp:250 that caused brave-vulkan to fall back to the SwiftShader CPU adapter on PineTab2/Mali-G52, per marfrit/panvk-bifrost#2. Phase 7 verify on ohm (PineTab2, RK3566, Mali-G52 r1 MC1) with a locally-built r5 lib installed to /tmp/r5_test_lib/: dEQP-VK.glsl.atomic_operations.*: r4: 48 pass / 0 fail / 992 NotSupported (1040 total) r5: 80 pass / 0 fail / 960 NotSupported (1040 total) delta: +32 newly-passing, zero new failures dEQP-VK.image.store.*: r4: 2772 pass / 0 fail / 238 NotSupported (3010 total) r5: 2772 pass / 0 fail / 238 NotSupported (3010 total) delta: identical (image.store is independent of the flag) The disjunction with instance->force_enable_shader_atomics is kept as a documented kill-switch even though the compiler folds it away — it leaves the DRI option pan_force_enable_shader_atomics semantically wired for future rebases or downstream debugging. Patch reviewed via 2nd-model pass (per bugfix-process step 4): recommended keeping the disjunction (applied), Bifrost-only-vs-unconditional left unconditional to match upstream (applied), pre-ship CTS subset (applied with results above). Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,50 @@
|
|||||||
|
From: marfrit-packages noether <claude-noether@reauktion.de>
|
||||||
|
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,
|
||||||
@@ -30,7 +30,7 @@
|
|||||||
|
|
||||||
pkgname=mesa-panvk-bifrost
|
pkgname=mesa-panvk-bifrost
|
||||||
_mesaver=26.0.6
|
_mesaver=26.0.6
|
||||||
pkgver=26.0.6.r4
|
pkgver=26.0.6.r5
|
||||||
pkgrel=1
|
pkgrel=1
|
||||||
pkgdesc="Patched Mesa libvulkan_panfrost.so exposing Bifrost-gen Mali to Vulkan apps (panvk-bifrost campaign)"
|
pkgdesc="Patched Mesa libvulkan_panfrost.so exposing Bifrost-gen Mali to Vulkan apps (panvk-bifrost campaign)"
|
||||||
arch=('aarch64')
|
arch=('aarch64')
|
||||||
@@ -81,6 +81,7 @@ source=(
|
|||||||
"0002-panvk-expose-vulkan-1.1-1.2-on-bifrost.patch"
|
"0002-panvk-expose-vulkan-1.1-1.2-on-bifrost.patch"
|
||||||
"0003-panvk-bifrost-vk-ext-transform-feedback.patch"
|
"0003-panvk-bifrost-vk-ext-transform-feedback.patch"
|
||||||
"0004-panvk-bifrost-xfb-primitive-decomposition.patch"
|
"0004-panvk-bifrost-xfb-primitive-decomposition.patch"
|
||||||
|
"0005-panvk-bifrost-fragment-stores-atomics.patch"
|
||||||
"brave-vulkan"
|
"brave-vulkan"
|
||||||
"icd.json"
|
"icd.json"
|
||||||
)
|
)
|
||||||
@@ -92,6 +93,7 @@ sha256sums=(
|
|||||||
'SKIP'
|
'SKIP'
|
||||||
'SKIP'
|
'SKIP'
|
||||||
'SKIP'
|
'SKIP'
|
||||||
|
'SKIP'
|
||||||
)
|
)
|
||||||
|
|
||||||
prepare() {
|
prepare() {
|
||||||
@@ -127,6 +129,17 @@ prepare() {
|
|||||||
# Phase-doc context: ~/src/panvk-bifrost/iter17/phase{0,1,2,4,5,6,8}_*.md.
|
# 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"
|
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.
|
# Sanity-check the patches landed.
|
||||||
grep -q "KHR_robustness2 = true," src/panfrost/vulkan/panvk_vX_physical_device.c
|
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
|
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
|
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.
|
# 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
|
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 "xfb_topology" src/panfrost/vulkan/panvk_shader.h
|
||||||
grep -q "panvk_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
|
test -f src/panfrost/vulkan/panvk_vX_xfb_lower.c
|
||||||
|
|||||||
Reference in New Issue
Block a user