README: roadmap note reflects the final persistent-hook fix (not destroy)

The hook-removal fix evolved from disable->drain->destroy to the persistent-hook
model (never free the trampoline during the session); update the roadmap summary
to match the Lessons-learned detail.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-06-23 11:24:19 +02:00
parent 0e58902438
commit 8a183902ad

View File

@@ -122,10 +122,13 @@ the game's sync mode** — it passes the swapchain's present mode through untouc
throttles the mirror (vsync paces it): Sphere Spectacle requests `FIFO` and holds a steady 144 Hz throttles the mirror (vsync paces it): Sphere Spectacle requests `FIFO` and holds a steady 144 Hz
with the layer attached. The **mock game now drives every backend uncapped** (DX9/10/11/12 + OpenGL + with the layer attached. The **mock game now drives every backend uncapped** (DX9/10/11/12 + OpenGL +
Vulkan, thousands of fps — the slow vsync'd cadence was masking bugs), `mock_game_test` asserts each Vulkan, thousands of fps — the slow vsync'd cadence was masking bugs), `mock_game_test` asserts each
keeps a healthy present rate while capturing, and that faster stress **exposed and fixed a keeps a healthy present rate while capturing, and (now also polling the input/focus/MKB APIs) that
hook-removal use-after-free** (the inline-hook removal now disables → drains → destroys, and the faster stress **exposed and fixed a family of hook install/remove races** — inline hooks are now
shared drain settles before concluding, so a backend presenting at thousands/s survives the *persistent* (created once, enable/disable, never freeing the trampoline during the session),
hook/unhook storm). DX12's higher capture cost was traced to the inherent D3D11On12 bridge (not installed via `install_inline` (populate the global before patching the bytes), drained with a
settle-before-zero-check, plus focus-specific ordering fixes — so spamming a subsystem on/off is
always safe (see **Lessons learned**). DX12's higher capture cost was traced to the inherent
D3D11On12 bridge (not
`CreateWrappedResource`) and documented; a native-D3D12 copy path is the remaining (deferred) `CreateWrappedResource`) and documented; a native-D3D12 copy path is the remaining (deferred)
improvement. See **Lessons learned** and the test suite for each. Open directions: per-game profiles, improvement. See **Lessons learned** and the test suite for each. Open directions: per-game profiles,
multi-guest virtual-pad mapping, continuous raw-mouse *movement* forwarding (the MKB event stream is multi-guest virtual-pad mapping, continuous raw-mouse *movement* forwarding (the MKB event stream is