Recovering verifiable behaviour from a binary with no source and no documentation
Engineering research · Apr 2026 – present
shadPS4 emulationNative PC
The before/after: the same cutscene under emulation (hair blocked, no alpha) and through the native rehost with the alpha-to-coverage fix.
Mesh regionDrawn in-frame
The hair mesh (event 3013): its region in magenta, and its draw within the lit frame.
Mayu regionsDrawn in-frame
The mayu meshes: dedicated eyebrow, sideburn and goatee detail geometry (event 3022), and hair plus mayu drawn together.
The in-process diagnostic overlay running on the native rehost, frame 153502: frame-time budget, the live camera block read out of memory, player-position candidate scanning, and every render pass listed by its fragment shaderFrame 50941 with passes switched off one at a time. 147 passes seen in the run; HUD elements, motion blur and a character-halo pass are marked confirmed once switching them off changed what was drawnFrame 47819 with most full-screen work skipped, leaving the draws that still compose the scene. Draw counts and indices per draw are listed for each passFrame 118777: the recovered view basis, projection matrix and combined view-projection alongside the live pass list, with the free camera driving the main viewThe hair fix up close: hair, mayu and eyelashes all alpha-tested. RenderDoc backbuffer, frame 1377RenderDoc: event browser, vertex buffers, mesh viewerLua test stage loading c_am_dummy, a real model from the gameNative PC in an early bring-up state, frames from my own rendererRendered natively through my Vulkan rendererPass 24 boundary, shader group 11 landing: the street renders with real materials from my own pipelineLive run 235, shader group 145 under a single-channel debug view, checking geometry and coverageFragcoord passthrough for group 147: isolating a pass to prove the plumbing before the real shader landsShader group 144 during bring-upGroup 17, event 9696, slot-0 output during shader-group bring-upGroup 58, event 10478, slot-0 outputGroup 183, event 12686, slot-0 output
The problem
The binary assumes console-specific memory, GPU commands, shader formats, synchronization and operating-system services that do not exist on a desktop host.
Approach
Recover observable contracts from the binary and runtime evidence instead of guessing undocumented behaviour.
Translate required graphics work into desktop APIs behind narrow, versioned gates.
Separate source acceptance, build acceptance, rendered evidence and playability so partial progress is never presented as final compatibility.
Outcome
Accepted source milestones cover runtime, memory, shader and presentation work; the current state does not establish complete playability, visual correctness or general compatibility.