Repository navigation
feat(recompiler): bindless image tables up to the device's sampled-image limit - #1184
MichonGoddijn231849 wants to merge 5 commits into
Conversation
de5be91 to
1761a5d
Compare
|
Rebased onto main and onto the updated #293 (its own changes are now one commit). Adapting to what changed underneath:
@fisherjoey thanks for the Demon's Souls run. You read it right: the material-selected path ( |
|
Data from Demon's Souls (PPSA01341 v1.07, Linux, RTX 5070 Ti) on a stack with this PR, for the table paths it doesn't cover. Compute shader
With this PR and no The other failure we saw on this shader, Is the material-selected path meant to move to the device limit too, here or in #757? |
|
Parked as a draft: with #639 a bindless table expands statically into the runtime ABI's sampled heap, so binding tables larger than 16 slots needs a new design rather than a rebase. @fisherjoey thanks for the Demon's Souls data on the material-table path; I'll use it when I redo this on the runtime ABI. |
Implement the BitReverse32 prerequisite from Michon upstream boykopovar#1184, with owned constant and runtime-value regressions.
|
@MichonGoddijn231849 are you already redoing this on the runtime ABI? Onimusha: Way of the Sword (PPSA27836) needs it too: after #5620 and #5550 it stops at If you have not started, I would like to try the redesign and would build on this PR's approach, crediting you. If you have, I will test your branch on this title instead of writing a second version. Either way is fine. AI-assisted: yes (Claude Code). |
|
Closing: the author said on 2026-10-09 that after #639 a bindless table expands statically into the runtime ABI's sampled heap, so this needs a new design rather than a rebase. The branch has had no push since 2026-10-08, conflicts with The measurements here (Demon's Souls material-table counts from @fisherjoey, GTA V's 65536-entry heap, Onimusha's 32768-entry table in #5769) are useful input for the redesign. @simonbronk has offered to redo it on the runtime ABI; feel free to coordinate there or reopen if you push a version rebased on the runtime ABI. |
|
@simonbronk I haven't started the redesign, so please go ahead and build on this PR's approach. @adriadam10 closing this is fine. What I'd keep from it: the table sized from the device's sampled-image limit instead of a slot count. The data in this thread gives the sizes to design for: Demon's Souls' material-selected table needs 60-93 distinct keys in the tutorial level, GTA V binds a 65536-entry heap, and Onimusha reads a whole 32768-entry table with no material records. Since #639 the table expands statically into the runtime ABI's sampled heap, which is where |
What
A whole-table bindless image table binds its entries as one descriptor array, sized by the table (the next power of two, at least
APS5_BINDLESS_SLOTS) up to the device's per-stage sampled-image limit, at most 65536. Before, tables wider than 48 slots were refused. The key indexes the array directly. GTA V's fidelity mode reads a 65536-entry T# heap from a compute pass.(key * 32) & mask, with a contiguous mask keeping at least 16 key bits, matches likekey * 32.SetBindlessTableLimitis reviewed for the shader disk cache key (it reaches the key through the specialization's table slots). The disk cache format version is 8.tests/ShaderMemory.cppcovers the table planning cases.Tested
Windows 11 Pro, AMD Ryzen 5 7600, NVIDIA GeForce RTX 5080 (driver 32.0.16.1074), 32 GB, MinGW-w64 GCC 15.2.0.
gta-v/testingbranch (Performance mode, the prologue).ctestpasses. Not run here: the relinker's Python tests (my local Python does not find their helper modules) andguest_gameupdate.Checklist
main; no other open PR implements the same functionsNotImplemented_nid_no_patch); silent stubs are listed in TechnicalDebt.mdfiles or images added to the repository (attach them to this PR)🤖 Generated with Claude Code