diff options
| author | Takoroka <137927095+Takoroka@users.noreply.github.com> | 2026-10-31 16:03:16 -0400 |
|---|---|---|
| committer | Takoroka <137927095+Takoroka@users.noreply.github.com> | 2026-10-31 16:03:16 -0400 |
| commit | 561f87abec2f76b3ca40c59277752ed4d3b6bf16 (patch) | |
| tree | f64d85c11e42b225f0b7d62a87391f8dff22f4a8 /src/core/device_memory.cpp | |
| parent | 77ea16e2f26edb443341a12e8169018fc1fa648e (diff) | |
shader: compute texture handles read from storage buffers for each draw
Switch 2 shaders can read a texture handle from a storage buffer (Switch
Sports' scenery: a per-object entry of a table whose pointer is in the driver
constant buffer). The bindless handle search looked through the load into its
address and returned the table pointer's constant buffer word as the handle,
which named an arbitrary descriptor; the game repoints that one at transient
render targets every few seconds, so the island and menu lighting flipped
between correct, dark and red.
The search no longer looks into memory loads. A handle it cannot trace is now
built into a small program over constant buffer words, storage buffer words and
integer operations (Shader::Info::handle_programs), which the pipelines evaluate
when they bind the texture. Handles a single evaluation cannot give (one that
changes in a loop) keep the previous search.
Diffstat (limited to 'src/core/device_memory.cpp')
0 files changed, 0 insertions, 0 deletions
