mirror of
https://github.com/MobileGL-Dev/MobileGL
synced 2026-09-12 06:08:30 +09:00
- every render pass declared colorAttachmentCount=8 (the full GL draw-buffer slot span) with trailing VK_ATTACHMENT_UNUSED references, and Adreno configures its per-pixel render-backend/export path from the DECLARED count - so every fragment of every pass paid an 8-render-target export cost; this was the bulk of the 1.5x per-pixel gap against MobileGlues+ANGLE on the same Qualcomm driver (their subpasses declare exactly the used span) - measured on Adreno 650 / MC 26.2 / 1440x3044: total GPU frame time 11.9 -> 7.5 ms (-37%, now below ANGLE's 7.87 ms), the single-quad swapchain blit pass alone 1.26 -> 0.40 ms, steady in-world FPS 82.8 -> 123 under the standard cooled-start protocol, matching the MobileGlues+ANGLE+system-Vulkan benchmark of 123.8 - trailing UNUSED references are popped before the subpass is built (the entry's colorAttachmentCount and every pipeline's colour-blend span follow it); interior GL_NONE holes keep their slots so fragment-output locations still line up - the pipeline-side fragmentOutputMask check downgrades from assert to a debug log: an output at a location past the trimmed span is discarded, which is GL's defined behaviour for a draw buffer set to GL_NONE