mirror of
https://github.com/boykopovar/AnyPS5.git
synced 2026-10-22 16:43:05 -05:00
A pixel, vertex or tessellation stage whose wave is wider than the host subgroup runs one guest lane per invocation, so lanes at or above the subgroup size have no invocation. v_readlane_b32 still shuffled from them, which Vulkan leaves undefined; a wave64 pixel minimum loop that reads lanes 31 and 63 can then wait for a value no live lane holds and hang the GPU. At one lane per invocation outside compute, a v_readlane_b32 of a constant lane at or above the host subgroup size, and v_permlanex16_b32 on a subgroup of 16 lanes or fewer, now fail SPIR-V emission. Lanes in registers still build, so s_ff1_i32_b64 waterfalls are unaffected, and neither check applies to compute or to two lanes per invocation. v_permlane16_b32 and v_permlanex16_b32 take the source lane's EXEC from a ballot, as DPP does, instead of a shuffle from a possibly inactive invocation.