aboutsummaryrefslogtreecommitdiff
path: root/src/video_core/texture_cache/image_base.cpp
diff options
context:
space:
mode:
authorvibecodekun <328927837+vibecodekun@users.noreply.github.com>2026-10-31 00:08:49 -0400
committervibecodekun <328927837+vibecodekun@users.noreply.github.com>2026-10-31 00:08:49 -0400
commit38230873a4a59ad9c05651e95d2d76e0cc575228 (patch)
treea488def8aad5eed4de213e484b24cfe3895624c4 /src/video_core/texture_cache/image_base.cpp
parentb40ad217ab829226841cb71f6e4c5cb05977a225 (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/video_core/texture_cache/image_base.cpp')
0 files changed, 0 insertions, 0 deletions