shim: hide the device extensions and core versions whose commands do not resolve
Rule
The shim never advertises a device extension, or a core Vulkan version, whose commands it cannot resolve on that physical device. Once per GPU and process it creates a probe device with every driver-listed non-WSI extension, resolves every device-level command of every extension and of each core version 1.1 to 1.4 through the same gate the guest's vkGetDeviceProcAddr uses, and then: enumeration omits the extensions with an unresolvable command, device create masks them if a guest still names them, their feature structs read false, and the reported apiVersion is clamped to the highest core version whose commands all resolve (patch kept). One ungated proxy pd: line per GPU says what was hidden or clamped. GN_VKSHIM_NO_RESOLVE_PROBE=1 skips it. If the probe device cannot be created nothing is hidden. docs/22 has the reasoning.
Why
Honor GT (SD 8 Gen 3, MagicOS Android 16, Turnip 26.3-devel 1.4.359): on Xwayland's device every Vulkan 1.4 core command and every promoted alias (push descriptor, maintenance5/6, dynamic rendering local read, host image copy, line stipple, map_memory2, bind descriptor sets 2, push constants 2) resolves to NULL through the shim, while the driver advertises 1.4 and those extensions. Mesa zink enables them, calls one while creating its first dummy image, and its release stub aborts Xwayland: MESA: error: ZINK: a Vulkan function was called without being loaded, then Failed to initialize wlserver. On a Retroid Pocket 6 (Android 13) the same names resolve, with the same driver family. The user's workaround was LIBGL_ALWAYS_SOFTWARE=1 (glamor off). With this change that device sees a 1.3 driver without the promoted extensions, which is what it can actually serve.
Verification
- Host tests in docker rust:1.90: lib 111 passed (6 new in
resolve_probe: the Honor case, no change when all resolve, core clamp, aliases, WSI and command-less extensions never hidden, feature zeroing); shim_integration 13 passed. cargo build --release --target aarch64-linux-android -p adrenotools_gamescopeclean;tools/check-exports.shPASS;tools/check-icd-commands.shPASS; generator--checkup to date.- Not yet run on a device. Next: RP6 no-change check (probe line says all resolve, Xwayland still enables 46 extensions), then a test payload to the reporter.