6896853544
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>
51 lines
2.6 KiB
Diff
51 lines
2.6 KiB
Diff
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,
|