diff options
| author | vibecodekun <328927837+vibecodekun@users.noreply.github.com> | 2026-10-31 00:08:49 -0400 |
|---|---|---|
| committer | vibecodekun <328927837+vibecodekun@users.noreply.github.com> | 2026-10-31 00:08:49 -0400 |
| commit | 38230873a4a59ad9c05651e95d2d76e0cc575228 (patch) | |
| tree | a488def8aad5eed4de213e484b24cfe3895624c4 /src/common/memory_detect.cpp | |
| parent | b40ad217ab829226841cb71f6e4c5cb05977a225 (diff) | |
shader_recompiler: fold max(x, -x) of merged predicate masks
Selecting the Special Cup in Mario Kart World lost the Vulkan device on
NVIDIA (RTX 3060, driver 621.01). One of its particle vertex shaders
takes the abs of a predicate mask as max(x, -x), where the mask was
merged from predicated moves: Phi(1 - s, -s) with s = Select(c, 0, 1).
FoldSMax32 only folded selects of two constants, so this max reached
the driver, and the draw faulted on an invalid instruction pointer.
Track the values a mask can take through selects, negations, +/-1 and
phis, and fold max(x, -x) to x & 1 when they are only -1, 0 and 1.
Assisted-by: Claude Opus 5.5 (debugging, implementation, message draft)
Diffstat (limited to 'src/common/memory_detect.cpp')
0 files changed, 0 insertions, 0 deletions
