diff --git a/tools/linuxfs/overlay/usr/local/bin/droiddeck-steam-taskset b/tools/linuxfs/overlay/usr/local/bin/droiddeck-steam-taskset index 068f7f12c..db423a2e5 100755 --- a/tools/linuxfs/overlay/usr/local/bin/droiddeck-steam-taskset +++ b/tools/linuxfs/overlay/usr/local/bin/droiddeck-steam-taskset @@ -10,6 +10,8 @@ if [ "$#" -ge 2 ] && [[ "$1" =~ ^(0[xX])?[0-9a-fA-F]+$ ]] && export SDL_FRAMEBUFFER_ACCELERATION=0 # Valve's helper disables Kopper; Zink needs it to reach the managed X11 WSI layer. unset LIBGL_KOPPER_DISABLE + # Forced lazy descriptors corrupt CEF render targets on Qualcomm v891.7. + export ZINK_DESCRIPTORS=auto fi exec -- "$@" fi diff --git a/tools/qualcomm/README.md b/tools/qualcomm/README.md index ec80b8ba3..b473cd137 100644 --- a/tools/qualcomm/README.md +++ b/tools/qualcomm/README.md @@ -38,6 +38,14 @@ Verification on RedMagic 11 Pro/Adreno 840 with the imported v891.7 driver: Evidence is retained under ignored `build/research/qualcomm/adreno840`. The earlier Adreno 740 corruption requires retesting with this patch; this result does not validate every Adreno model, driver version or game. +### Browser descriptor selection + +Opening a game's details and gear menu exposed another Adreno 840/v891.7 failure after startup was fixed: controls were displaced and the menu's backdrop covered only part of the window. Chromium's offscreen screenshot was correct, but the X11 pixmap and displayed frame were corrupt. Apitrace captured both correct and corrupt frames. Disabling GL threading, partial swaps, pipeline optimization or renderpass tracking did not fix it. + +The controlled descriptor-mode test reproduced corruption with `ZINK_DESCRIPTORS=lazy` and rendered the same page and menu correctly with `ZINK_DESCRIPTORS=auto` alone (session `2026-10-24-57-steam`). The Qualcomm webhelper branch in `droiddeck-steam-taskset` now selects `auto`. Zink chooses descriptor buffers when its capability checks permit them and otherwise retains its supported fallback. This applies to system and imported Qualcomm sessions without a GPU-model list. It does not establish that drivers which fall back to lazy descriptors are fixed. + +The packaged APK was installed and checked without agent environment overrides or tracing preloads in session `2026-10-24-59-steam`. The game page, gear menu and Properties page rendered correctly. The browser's actual process environment contained `ZINK_DESCRIPTORS=auto`; its maps contained the imported v891.7 HAL and private Zink. Chromium reported GPU compositing and rasterization enabled on Adreno 840. Evidence is under `build/research/qualcomm/adreno840`, including `descriptors-auto*`, `nogeneral*` (a failing control), and `packaged-*`. Adreno 740 requires retesting; the underlying lazy-descriptor failure has not been reduced to a standalone Mesa test. + `runtime.json` pins the downloaded bridge and WSI archives, the locally built private Gamescope binary and corresponding source archive, and every private Mesa runtime file. `fetch_runtime.py` checks these pins before Gradle stages them. Missing local build outputs fail the build. Qualcomm's proprietary device libraries are loaded from the phone and are not included in these archives. The bridge archive includes its licenses, source snapshot and patches. The same lock pins a vendor-neutral X11 WSI layer and upstream Gamescope shader source. `build_shaders.py` applies `constant-yuv-samplers.patch` and builds six replacement SPIR-V modules with the configured NDK's `glslc`. It builds a small ARM64 glibc Vulkan layer using the NDK compiler without Android runtime linkage. The layer matches the six original Gamescope module fingerprints before substituting a shader; ordinary applications use the WSI/compatibility layers instead. Source archives, patches and licenses are packaged with the runtime. The patch can also be applied during a full Gamescope source build.