From 7708744eb2b22b68fa6542cf06c6e7bb7a5eea39 Mon Sep 17 00:00:00 2001 From: Markus Fritsche Date: Mon, 25 May 2026 00:23:40 +0200 Subject: [PATCH] =?UTF-8?q?mesa-panvk-bifrost:=20r5=20->=20r6=20=E2=80=94?= =?UTF-8?q?=20advertise=20VK=5FEXT=5Flegacy=5Fdithering=20on=20Bifrost?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Backports Mesa main's unconditional flip of VK_EXT_legacy_dithering. Pure-software composition; no new HW path. vk_render_pass already gates on enabled_features.legacyDithering and panvk_vX_blend + pan_format already plumb the dithered BLEND descriptor (BFMT2 table has MALI_BLEND_AU encodings for RGB565/RGB5A1/RGBA4/RGB10A2 on PAN_ARCH 7). Our r5 base just hadn't picked up the cherry-pick. Phase 7 verify on ohm (PineTab2 / RK3566 / Mali-G52 r1 MC1) with a locally-built r6 lib at /tmp/r6_test_lib/: Feature advertisement: r5: VK_EXT_legacy_dithering not in extension list, legacyDithering=false r6: VK_EXT_legacy_dithering rev 2 advertised, legacyDithering=true dEQP subsets (delta): dEQP-VK.api.*.legacy_dithering* r5/r6 both: 2 P / 0 F (identical) dEQP-VK.renderpass.dithering.* r5/r6 both: 0 P / 0 F / 94 NS (identical) dEQP-VK.renderpass2.dithering.* r5/r6 both: 0 P / 0 F / 94 NS (identical) Net: zero regressions, advertisement-only delta as expected. Second-model review (per bugfix-process step 4) traced the full code path through vk_render_pass + panvk_vX_cmd_draw + panvk_vX_blend + pan_format BFMT2. No interaction with our r1 nullDescriptor (disjoint paths). Mesa upstream marks ext DONE for panvk in docs/features.txt. ARM's own libmali r51p0 driver (BXODROIDN2PL, 2024-08) lists VK_EXT_legacy_dithering in its Vulkan extension string table, confirming the feature is shipped by ARM for Mali-G52-class hardware. Follow-up out of scope: the 94 renderpass-dithering tests show as NotSupported on both r5 and r6 — there's a separate panvk-side prereq the dEQP harness checks (likely a specific format-feature combination). Worth investigating in a future iteration. Co-Authored-By: Claude Opus 4.7 --- .../0006-panvk-bifrost-legacy-dithering.patch | 51 +++++++++++++++++++ arch/mesa-panvk-bifrost/PKGBUILD | 17 ++++++- 2 files changed, 67 insertions(+), 1 deletion(-) create mode 100644 arch/mesa-panvk-bifrost/0006-panvk-bifrost-legacy-dithering.patch diff --git a/arch/mesa-panvk-bifrost/0006-panvk-bifrost-legacy-dithering.patch b/arch/mesa-panvk-bifrost/0006-panvk-bifrost-legacy-dithering.patch new file mode 100644 index 000000000..3e61a1490 --- /dev/null +++ b/arch/mesa-panvk-bifrost/0006-panvk-bifrost-legacy-dithering.patch @@ -0,0 +1,51 @@ +From: marfrit-packages noether +Subject: [PATCH] panvk: advertise VK_EXT_legacy_dithering on Bifrost + +Backports Mesa main's flip — vanilla 26.0.6 doesn't have the extension +in the panvk advertisement list; main does (line 172 / 647 on snapshot +617da94, 2026-05-06). + +VK_EXT_legacy_dithering exposes the classic OpenGL-style dithering +behavior to Vulkan apps. Pure-software composition; no new HW path. +ARM's own libmali driver release r51p0 (BXODROIDN2PL, Aug 2024) lists +this extension in its Vulkan implementation for ODROID-N2 boards +using the same Mali-G52 architecture family — confirms ARM ships it +for Mali-G52-class hardware. + +Consumer benefit: dithering matters for low-bit-depth framebuffers +(RGB565 / RGB5A1 — common on portable / battery-saving renders) +where banding is visible. DXVK / vkd3d-proton both opt in when +available. + +Verify-before-ship: vulkaninfo lists the extension and +VkPhysicalDeviceLegacyDitheringFeaturesEXT.legacyDithering == true. + +Cross-refs: + - marfrit/panvk-bifrost research/r6_r7_mali_g52_feature_audit_2026-05-24.md + - ARM blob r51p0 strings dump (in-blob extension confirmed) + +--- + src/panfrost/vulkan/panvk_vX_physical_device.c | 5 +++++ + 1 file changed, 5 insertions(+) + +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 +@@ -156,6 +156,7 @@ + .EXT_image_drm_format_modifier = true, + .EXT_image_robustness = true, + .EXT_index_type_uint8 = true, ++ .EXT_legacy_dithering = true, + .EXT_line_rasterization = true, + .EXT_load_store_op_none = true, + .EXT_non_seamless_cube_map = true, +@@ -552,6 +553,9 @@ + + /* VK_EXT_multisampled_render_to_single_sampled */ + .multisampledRenderToSingleSampled = true, ++ ++ /* VK_EXT_legacy_dithering */ ++ .legacyDithering = true, + }; + } + diff --git a/arch/mesa-panvk-bifrost/PKGBUILD b/arch/mesa-panvk-bifrost/PKGBUILD index 0db5b9059..64b820007 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.r5 +pkgver=26.0.6.r6 pkgrel=1 pkgdesc="Patched Mesa libvulkan_panfrost.so exposing Bifrost-gen Mali to Vulkan apps (panvk-bifrost campaign)" arch=('aarch64') @@ -82,6 +82,7 @@ source=( "0003-panvk-bifrost-vk-ext-transform-feedback.patch" "0004-panvk-bifrost-xfb-primitive-decomposition.patch" "0005-panvk-bifrost-fragment-stores-atomics.patch" + "0006-panvk-bifrost-legacy-dithering.patch" "brave-vulkan" "icd.json" ) @@ -94,6 +95,7 @@ sha256sums=( 'SKIP' 'SKIP' 'SKIP' + 'SKIP' ) prepare() { @@ -140,6 +142,16 @@ prepare() { # dEQP-VK.image.store.* show no new Failed vs r4 baseline. patch -p1 < "${srcdir}/0005-panvk-bifrost-fragment-stores-atomics.patch" + # r6 (2026-05-25): advertise VK_EXT_legacy_dithering. Backports Mesa + # main's unconditional flip. Pure-software composition; vk_render_pass + # already gates on enabled_features.legacyDithering and panvk_vX_blend + # + pan_format already plumb the dithered BLEND descriptor (BFMT2 table + # has MALI_BLEND_AU encodings for RGB565/RGB5A1/RGBA4/RGB10A2 on + # PAN_ARCH 7). Closes the EXT_legacy_dithering gap surfaced by + # marfrit/panvk-bifrost research/r6_r7_*. ARM blob r51p0 confirms the + # extension as Mali-G52-architecture supported. + patch -p1 < "${srcdir}/0006-panvk-bifrost-legacy-dithering.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 @@ -153,6 +165,9 @@ prepare() { 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 + # r6 sanity: VK_EXT_legacy_dithering advertised + grep -q '\.EXT_legacy_dithering = true,' src/panfrost/vulkan/panvk_vX_physical_device.c + grep -q '\.legacyDithering = 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