diff options
| author | Duck912 <350528965+Duck912@users.noreply.github.com> | 2026-11-01 16:18:10 -0500 |
|---|---|---|
| committer | Duck912 <350528965+Duck912@users.noreply.github.com> | 2026-11-01 21:54:48 -0500 |
| commit | 18b0671e1b640fc3cbca565c39f5a69a287ede9b (patch) | |
| tree | 8ff328cfb15e5800e0cb9b642dc1400191fbaa18 /src/video_core/gpu_thread.cpp | |
| parent | e7973dae7e2ea44665ff4ec83d7214a5d2daa366 (diff) | |
shader: read extra texture descriptor buffers bindless
Maxwell's bound texture instructions read every descriptor from one
constant buffer per program, but Fire Emblem: Fortune's Weave's shaders
sample from more than one (bindings 4-7, 14 and 15 next to an earlier one). The
lowering rejected the second binding, so most of its graphics programs
failed and 3D scenes stayed black.
A binding that conflicts with the program's buffer is now read bindless:
the handle is loaded from its buffer with an unpredicated MOV and passed
as the first meta register of TEX.B, TLD.B or SUST.B. The TEXS fast path
and the array depth form check the buffer instead of setting it to 2.
Also lowered: TEX with the handle in a register (0x361, packed or not) or
a uniform register (0xf60), TXQ on any binding and the mip count query,
TXQ.B (0x370), TXD with any channel mask and .NODEP, and SUST.STRONG.GPU
fenced with MEMBAR.GL on both sides.
Assisted-by: Claude Opus 5.5 (debugging, implementation and drafting)
Signed-off-by: duck912 <350528965+Duck912@users.noreply.github.com>
Signed-off-by: Duck912 <350528965+Duck912@users.noreply.github.com>
Diffstat (limited to 'src/video_core/gpu_thread.cpp')
0 files changed, 0 insertions, 0 deletions
