From 0a498a9c760cabf16b6e2fa561bc7c015b82bf95 Mon Sep 17 00:00:00 2001 From: yangjw Date: Thu, 23 Jul 2026 15:53:14 +0800 Subject: [PATCH] fix(shaders): avoid unused swizzle helper on older Adreno Some older Adreno GLSL compilers silently miscompile non-atomic path shaders when they contain the unused unsigned shifts in swizzle_image_buffer_idx. Restrict the helper to storage-buffer PLS and clockwise-atomic variants. This preserves its WebGPU use and the previous atomic shader behavior while keeping it out of unrelated path shaders. --- renderer/src/shaders/draw_path_common.glsl | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/renderer/src/shaders/draw_path_common.glsl b/renderer/src/shaders/draw_path_common.glsl index 7d022032..c84e76a8 100644 --- a/renderer/src/shaders/draw_path_common.glsl +++ b/renderer/src/shaders/draw_path_common.glsl @@ -862,6 +862,11 @@ INLINE half incremental_clockwise_coverage(half c0, half c1, half paintAlpha) return (c1 - c0) / max(1. - c0 * paintAlpha, EPSILON_FP16_NON_DENORM); } +// Older Adreno GLSL compilers can miscompile non-atomic path shaders when they +// contain the unused unsigned shifts below. Keep this helper in storage-buffer +// PLS and clockwise-atomic variants, where it is used or was already present. +#if defined(@PLS_IMPL_STORAGE_BUFFER) || \ + defined(@RENDER_MODE_CLOCKWISE_ATOMIC) // Converts an x,y image coordinate into a buffer index, swizzling into // BUFFER_IMAGE_TILE_SIZE x BUFFER_IMAGE_TILE_SIZE tiles for better cache // performance. @@ -879,6 +884,7 @@ INLINE uint swizzle_image_buffer_idx(uint2 imageCoord, uint imageWidth) idx += ((imageCoord.y & 0x3u) << 2) + (imageCoord.x & 0x3u); return idx; } +#endif #ifdef @RENDER_MODE_CLOCKWISE_ATOMIC