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