Validate the Vulkan backend against a real game (Sphere Spectacle)
Adds coop_vk_validate, a harness that drives the Vulkan capture path end-to-end against a shipping title (default Sphere Spectacle, a pure-Vulkan game) and asserts frames reach the shared texture and advance, the captured resolution/colors are sane, saves a BMP screenshot for visual confirmation, and reports the present rate. Findings: - Layer method WORKS: coop_vk_layer mirrors the game correctly at 1920x1080 -- right colors/brightness, no BGRA/RGBA swizzle, no sRGB darkening (screenshot confirmed). The layer captures every present (no drops). - Suspended-inject "Auto-attach" is NOT applicable to a Steam title that must launch through Steam: its exe renders nothing when launched directly, so there's no Vulkan present to catch. The layer is the method for Steam Vulkan games (the early-inject mechanism itself is covered by mock_game_test's suspended-launch path). - The layer does video, but the game needs coop_hook.dll co-injected for focus-spoof or an unfocused, event-driven game throttles itself to a few fps (looks like a capture slowdown but isn't). A present-rate number alone can't prove "no FPS impact" -- it's the game's own cadence; capture stays off the critical path (every present copied, read-back on its own queue + present-semaphore re-chain). Also adds SharedTextureSource::read_frame (bulk RGBA readback) for the screenshot. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -138,6 +138,7 @@ if(COOP_BUILD_HOOK)
|
||||
add_subdirectory(tools/audio_probe) # coop_audio_probe: inject + diagnose the render-hook
|
||||
add_subdirectory(tools/audio_validate) # coop_audio_validate: quantify capture fidelity (pitch/SNR/clicks)
|
||||
add_subdirectory(tools/input_probe) # coop_input_probe: inject + forward synthetic input
|
||||
add_subdirectory(tools/vk_validate) # coop_vk_validate: validate the Vulkan backend vs a real game
|
||||
add_subdirectory(tests)
|
||||
endif()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user