Trim completed work from the roadmap
The Roadmap section had grown into a recap of finished tasks (Vulkan perf fix, inline-hook path, uncapped mock, hook-race family, etc.). Per the rule that done work leaves the roadmap, drop the completed narrative -- it already lives in Lessons learned and the test suite -- and keep only the open directions. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
35
README.md
35
README.md
@@ -108,31 +108,16 @@ default** and covers anything the hooked path doesn't.
|
|||||||
|
|
||||||
## Roadmap
|
## Roadmap
|
||||||
|
|
||||||
The near-term tracked tasks are complete: injection hardening (the cross-backend safe-unhook drain),
|
Open tasks (completed work lives in **Lessons learned** + the test suite, not here):
|
||||||
two-path audio-format correlation (rate + channels/bit-depth recovery), mouse + keyboard forwarding
|
|
||||||
for DirectInput and Raw Input games, real-game Vulkan validation (`coop_vk_validate` against Sphere
|
- **Per-game profiles** — persist each game's subsystem / capture-mode / audio choices and re-apply
|
||||||
Spectacle), the **Vulkan capture performance fix** — the read-back that dropped a 144 FPS game to ~3
|
them on attach.
|
||||||
FPS now runs off the present thread (shared `coop::hook::VkCapture`), so the game keeps its frame
|
- **Multi-guest virtual-pad mapping** — map multiple Remote Play guests onto distinct synthesized
|
||||||
rate while mirroring (guarded by `vk_capture_perf_test`; every GPU backend's hook test also asserts a
|
pads in the XInput hook.
|
||||||
present-thread overhead bound) — and the **inline-hook (suspended-inject) Vulkan path**, which now
|
- **Continuous raw-mouse *movement* forwarding** — the MKB event stream is position-based today; also
|
||||||
captures Sphere Spectacle correctly once the harness launches the exe with the right working
|
forward relative motion for games that read raw deltas.
|
||||||
directory and `vk_hook` intercepts present/swapchain resolved via `vkGetInstanceProcAddr` (not just
|
- **Native-D3D12 capture path** — DX12's higher capture cost is the inherent D3D11On12 bridge
|
||||||
`vkGetDeviceProcAddr`). Both Vulkan paths are verified on the real game. The capture also **preserves
|
(documented in **Lessons learned**); a native D3D12 copy would avoid it.
|
||||||
the game's sync mode** — it passes the swapchain's present mode through untouched and no longer
|
|
||||||
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 +
|
|
||||||
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 (now also polling the input/focus/MKB APIs) that
|
|
||||||
faster stress **exposed and fixed a family of hook install/remove races** — inline hooks are now
|
|
||||||
*persistent* (created once, enable/disable, never freeing the trampoline during the session),
|
|
||||||
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)
|
|
||||||
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
|
|
||||||
position-based today), and the native-D3D12 capture path.
|
|
||||||
|
|
||||||
## Building
|
## Building
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user