Loading an area on NVIDIA, a download of the buffer cache carried 178563
buffer copies (4.3 MB) into one deferred command. A command's data shares a
128 KiB recording chunk with it, so ReserveRecordData's check stopped the
game (exit 23). Buffer copies, guest chunk copies, buffer-to-image uploads
and image-to-buffer downloads are now recorded as one command per 64 KiB
of regions; UpdateBuffer already split its data. From the Linux fork.
When the collector frees a GPU-written image it writes it back into the
game's memory first. Write tracking does not see every change there: the
game's heap reusing the memory of an area left behind. The image still
looked clean, its write-back overwrote the heap's bookkeeping, and the game
crashed later in its allocator (0x208599f, 0x20859c7, 0x208596a) or stopped
with "memory block seems to be improper or freed already"; on the Steam
Deck at every second lamp travel (the Linux fork's #35). Keeping GPU-written
images longer (the previous change) makes their write-back older, and more
exposed to this.
The game's memory under an image is now hashed when the GPU first writes it
since its last upload (Image::NoteGpuBase, on every path that marks an image
GPU-written: draws, storage writes, copies, blits, resolves, clears and the
scene resolution's copies), and the write-back goes ahead only if it is
unchanged; otherwise the image is dropped. The pressure report counts them.
- Online module libbbnet20.so: shadPS4 v0.20 network/NP/shadNet code, BBSC ported to it,
The Hunter's Dream backend (droogie/bbhost) with Discord sign-in; launcher pool choice;
the shadp2p module stays as a fallback (BB_NET_GEN=19).
- Laurence's cinematic above 30 FPS: render-job slots given back; the render resource cache
gets 512 MiB of port direct memory past the game's pool (the game's heap unchanged).
- Single shifted/quarter frames: push constants recorded after the pass begins (the occlusion
results' compute dispatch overwrote them).
- Crashes: 0xa0020007 (#207, blur-kernel sample clamp), Bad PM4 at save load (FX init clear
race, command buffers copied at submit), null V# tables (139).
- Light shafts on NVIDIA (#204, PR #210), #205, texture GC on 8 GB, PR #206/#224/#214/#211,
FSR 4.1.1 reset after save change, SSAO forced back, SSR at start, present wait mask,
Polaris labels on the CPU (#203), AUR GE-Proton (#186), 21 game languages (#249).
- Live: F3 30 FPS limit, effects without a restart, keyboard stick/run/dodge/jump, cursor,
GPU choice in the launcher; more draw-preparation workers on 12+ thread CPUs.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
- Auto memory model = the new one on every GPU (layer memory module, no sparse binding);
the 0.3 model stays as a launcher option.
- Seamless co-op (BBSC) in the online module; Seamless Hunt servers by default; the shadNet
client reports its version and stays offline when a server refuses it.
- Any aspect ratio live through game hooks (camera, HUD anchoring, UI fills, markers);
frame rate through hooks instead of patches.
- Keyboard and mouse: native mouse camera, menu mouse pointer, Dark Souls III-like layout,
chord bindings, button prompts for the device in use (HUD atlas included).
- Real occlusion queries; own command processor, GCN definitions, shader translator,
renderer and caches instead of shadPS4 (byte-identical SPIR-V on the game's shaders).
- Fixes: NVIDIA start (#135#147#152), RIP=0 (#161#177#181), #149, #142, #162/#192,
#178, #144/#165/#166, #134, #172, #186, #136, #145, lamp-travel loading hang (PR #193),
FPS aging, write-trap race, exit crash, pipeline-cache stages, AppImage --play.
- Runtime tests follow the NID-only import rule.
Co-Authored-By: Claude Opus 5.5 <[email protected]>