{"id":137528,"date":"2026-10-04T11:45:40","date_gmt":"2026-10-04T09:45:40","guid":{"rendered":"https:\/\/www.emu-france.com\/?p=137528"},"modified":"2026-10-04T12:54:40","modified_gmt":"2026-10-04T10:54:40","slug":"consoles-de-salon-prosper-v0-2-3","status":"publish","type":"post","link":"https:\/\/www.emu-france.com\/?p=137528","title":{"rendered":"[Consoles de salon] Prosper v0.2.3"},"content":{"rendered":"<p>Prosper (ps5ys) est une couche de compatibilit\u00e9 open-source permettant de faire tourner des logiciels et des jeux PS5 sous Linux et Windows.<\/p>\n<p>&nbsp;<\/p>\n<p>Ce n&rsquo;est pas un \u00e9mulateur: la PS5 et les PC partageant la m\u00eame architecture processeur (x86-64), le code des jeux tourne nativement sur le processeur du PC. Prosper agit comme Wine ou Proton en traduisant les appels syst\u00e8me, les biblioth\u00e8ques internes et l&rsquo;API graphique (AGC vers Vulkan) de l&rsquo;OS de la PS5 pour les rendre lisibles par votre ordinateur.<br \/>\n&nbsp;<\/p>\n<p><a href=\"https:\/\/www.emu-france.com\/wp-content\/uploads\/2026\/09\/prosper.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter  wp-image-136514\" src=\"https:\/\/www.emu-france.com\/wp-content\/uploads\/2026\/09\/prosper.png\" alt=\"\" width=\"413\" height=\"464\" srcset=\"https:\/\/www.emu-france.com\/wp-content\/uploads\/2026\/09\/prosper.png 1920w, https:\/\/www.emu-france.com\/wp-content\/uploads\/2026\/09\/prosper-267x300.png 267w, https:\/\/www.emu-france.com\/wp-content\/uploads\/2026\/09\/prosper-910x1024.png 910w, https:\/\/www.emu-france.com\/wp-content\/uploads\/2026\/09\/prosper-768x864.png 768w, https:\/\/www.emu-france.com\/wp-content\/uploads\/2026\/09\/prosper-1365x1536.png 1365w, https:\/\/www.emu-france.com\/wp-content\/uploads\/2026\/09\/prosper-1820x2048.png 1820w\" sizes=\"auto, (max-width: 413px) 100vw, 413px\" \/><\/a><br \/>\n&nbsp;<\/p>\n<p>Les changements sont les suivants:<br \/>\n&nbsp;<\/p>\n<div style=\"\n    max-height: 390px;\n    overflow-y: auto;\n    border: 1px solid #ccc;\n    padding: 8px;\n    font-family: Verdana, sans-serif;\n    font-style: italic;\">&#8211; tests: pin the CFG-dispatcher re-arm in the entry-M0 token containment (#3203) by @mattias800 in #3230<br \/>\n&#8211; shader_conformance: replace scan.py&rsquo;s ported MIMG length rules with the real decoder by @mattias800 in #3232<br \/>\n&#8211; agc: sceAgcAcbDispatchIndirect carries an ADDRESS, not an offset \u2014 the async-compute ring has no base register by @mattias800 in #3233<br \/>\n&#8211; worktree hygiene: refs\/stash is shared by every worktree &#8212; park work per-worktree instead (#3174) by @mattias800 in #3234<br \/>\n&#8211; recompiler: IMAGE_LOAD_MIP reads its NSA address encoding, and tail-packed mip chains materialize by @mattias800 in #3237<br \/>\n&#8211; wt_stash: fix the hook installer on Windows\/MSYS and make it prove git honours the hook by @mattias800 in #3238<br \/>\n&#8211; recompiler: a CFG region whose entry block defines VCC before reading it has a dead entry value (#3231) by @mattias800 in #3236<br \/>\n&#8211; sync: scePthreadCondTimedwait spends its relative timeout on the condvar&rsquo;s OWN clock, and the Windows tick attribution in #3056 is wrong by @mattias800 in #3235<br \/>\n&#8211; render backend: the persistent-resource caches are one domain with one owner (#2953) by @mattias800 in #3241<br \/>\n&#8211; kernel: select()\/pselect() stop sleeping on the Windows tick, and their guest timeout stops passing through a 32-bit long by @mattias800 in #3244<br \/>\n&#8211; windows: the import trampoline places floats from the handler&rsquo;s own signature (#2955) by @mattias800 in #3242<br \/>\n&#8211; zerowatch: a one-window verdict was published as a claim about the range &#8212; profile it, and follow the content (#3142) by @mattias800 in #3243<br \/>\n&#8211; render backend: a readback needs an availability operation, not just a fence (#2944) by @mattias800 in #3250<br \/>\n&#8211; ci: the macOS\/Rosetta sem_timedwait red was a 12 ms ceiling, and a green run must carry its margin by @mattias800 in #3247<br \/>\n&#8211; zerowatch: the tail of #3243&rsquo;s review that the merge missed &#8212; including a silent 239-byte overread by @mattias800 in #3252<br \/>\n&#8211; test_game_compute hosts write-watch promotion, and the promotion decision is now counted where it is taken (#3156, #3155) by @mattias800 in #3251<br \/>\n&#8211; live compute: a dispatch result the host maps needs an availability op, not just a fence (#3249) by @mattias800 in #3254<br \/>\n&#8211; render backend: order the mip-assembly clear against its copies, and stop two diagnostics answering wrongly (#3248) by @mattias800 in #3256<br \/>\n&#8211; docs: record the falsified Stray RTT-authority hypothesis in Ruled out (#3140) by @mattias800 in #3258<br \/>\n&#8211; tools\/ci: a merge gate that reads check buckets and verifies the head (#3259) by @mattias800 in #3260<br \/>\n&#8211; env: the write-watch knobs refuse a typo instead of quietly picking another setting (#3253) by @mattias800 in #3268<br \/>\n&#8211; APR read builders: refuse what cannot be derived, and stop reporting an undelivered segment as delivered by @mattias800 in #3262<br \/>\n&#8211; windows: a variadic HLE handler gets the guest&rsquo;s own frame, not a signature (#3246) by @mattias800 in #3266<br \/>\n&#8211; #2945 re-measured: 3,875 replays give one hash per arm \u2014 and a campaign tool that answers UNDECIDED instead of \u00ab\u00a0fixed\u00a0\u00bb by @mattias800 in #3270<br \/>\n&#8211; APR measure-size: retire the compatibility read per container once a submit re-delivers it by @mattias800 in #3263<br \/>\n&#8211; docs: update GTA5_STATUS.md with gameplay framerate optimization findings by @mattias800 in #3274<br \/>\n&#8211; perf: optimize GTA V gameplay framerate to 21+ FPS by @mattias800 in #3275<br \/>\n&#8211; fix(gta5): address #3276 follow-ups (env parsing &#038; readback buffer sizing) by @mattias800 in #3277<br \/>\n&#8211; DO NOT MERGE \u2014 HTILE invalidation: breaks GTA V characters\/lighting (#3264) by @mattias800 in #3278<br \/>\n&#8211; fix(render): preserve in-flight frame depth under byte-preserving HTILE writebacks by @mattias800 in #3281<br \/>\n&#8211; perf(render): evict older targets in copy_persistent_color_target when over capacity by @mattias800 in #3280<br \/>\n&#8211; perf(compute, render): expand direct compute-to-graphics image import aliasing for Float16 (#3282) by @mattias800 in #3286<br \/>\n&#8211; perf(render): memoize mid-submit re-decoded textures to prevent repeated CPU de-tiling (#3283) by @mattias800 in #3287<br \/>\n&#8211; perf(texture): vectorize tile_surface (sw64kb_copy) to accelerate compute writeback (#3284) by @mattias800 in #3288<br \/>\n&#8211; perf(compute): skip redundant seed and writeback for untouched storage images by @mattias800 in #3289<br \/>\n&#8211; perf(compute): fast-decline unmaterializable compute image binding shapes (#3290) by @mattias800 in #3292<br \/>\n&#8211; fix(scripts): fast-route and pure performance graphics mode for GTA V benchmark (#3301) by @mattias800 in #3302<br \/>\n&#8211; hle: close the CALL side of the guest-ABI boundary (#3272, #3273) by @mattias800 in #3293<br \/>\n&#8211; env: refuse a malformed value on the 23 PROSPER_* knobs where 0 is a setting, not \u00ab\u00a0off\u00a0\u00bb (#3267) by @mattias800 in #3294<br \/>\n&#8211; perf(compute): cache sub-1MB and multi-level sampled textures in persistent compute image cache (#3291) by @mattias800 in #3305<br \/>\n&#8211; hle: answer sceHttpUriBuild and sceHttpTerm honestly, and validate the HTTP context id (#2930) by @mattias800 in #3295<br \/>\n&#8211; tests: test_trap_linux asserted The Messenger&rsquo;s import count, not its own subject (#2997) by @mattias800 in #3296<br \/>\n&#8211; tests: stop deliberate-death children from writing core dumps \u2014 ulimit -c 0 does not (#3269) by @mattias800 in #3306<br \/>\n&#8211; gpu: resolve an image op&rsquo;s descriptor by class, not by first match at the key (#3126) by @mattias800 in #3313<br \/>\n&#8211; perf(renderer): the frontend texture materializer&rsquo;s time is the allocator, not the decode by @mattias800 in #3309<br \/>\n&#8211; recompiler: the CFG dispatcher must not stamp the entry-M0 token at the entry block by @mattias800 in #3312<br \/>\n&#8211; gpu: say whether the SGPR route was CONSULTED, and give the mapping arms teeth (#3126) by @mattias800 in #3315<br \/>\n&#8211; docs: instrument trap 257 \u2014 a running-total census read before the run reached the state by @mattias800 in #3323<br \/>\n&#8211; perf(compute): partition why the compute->graphics image borrow declines (#3307) by @mattias800 in #3320<br \/>\n&#8211; diag: aim RenderDoc headlessly by frame ordinal or elapsed time (#3321) by @mattias800 in #3322<br \/>\n&#8211; diag: let a RenderDoc capture span several guest presents (#3321) by @mattias800 in #3326<br \/>\n&#8211; perf(compute): pool the per-dispatch full-surface intermediates, and name what layout_ms\/watch_ms really are by @mattias800 in #3317<br \/>\n&#8211; docs(stray): record five falsified explanations for the black title screen by @mattias800 in #3330<br \/>\n&#8211; diag: census guest VA->physical across all colour slots; prosper renders INTO Stray&rsquo;s scanout buffers (#2932) by @mattias800 in #3332<br \/>\n&#8211; screenshot: the picture is not the provenance \u2014 fix the stale comment that misled two readers, and record trap 258 by @mattias800 in #3334<br \/>\n&#8211; diag: let the compute census speak for small populations; the skipped-dispatch hypothesis is falsified on Stray&rsquo;s title screen (#2932) by @mattias800 in #3335<br \/>\n&#8211; chore: point every operational reference at main; master is deleted and archived (#3333) by @mattias800 in #3336<br \/>\n&#8211; perf(gpu,compute): multi-layer writeback, near-full coverage bypass, and bulk maps caching by @mattias800 in #3328<br \/>\n&#8211; perf(renderer): route sampled Float32 narrowing through the vectorised packer (#1811) by @mattias800 in #3339<br \/>\n&#8211; fault reports: label a guest rip by its own module, not as an unbounded eboot offset by @mattias800 in #3341<br \/>\n&#8211; COMPATIBILITY: #2908 is not shared with Khazan \u2014 Sifu does not import libScePsml by @mattias800 in #3351<br \/>\n&#8211; docs: instrument trap 260 \u2014 a filter that silently changes the population before the check by @mattias800 in #3352<br \/>\n&#8211; libScePsml: report NOT IMPLEMENTED instead of SCE_OK \u2014 Khazan stops aborting 8.6 s into every boot by @mattias800 in #3347<br \/>\n&#8211; charter: a green CI GPU-execution job cannot clear a RADV failure \u2014 CI has no GPU by @mattias800 in #3356<br \/>\n&#8211; traps: a pgrep -f self-match can disable a wait loop&rsquo;s own abort guard (trap 135) by @mattias800 in #3357<br \/>\n&#8211; orchestration: refresh the checkpoint and record the 2026-09-05 objective by @mattias800 in #3359<br \/>\n&#8211; docs(syberia): the per-dispatch re-upload loop, and a stale Ruled-out row corrected by @mattias800 in #3361<br \/>\n&#8211; traps: grep -c&rsquo;s zero-match exit corrupts || guards too, and only when the answer is zero (row 40) by @mattias800 in #3362<br \/>\n&#8211; sceAvPlayerJumpToTime: publish the seek-completion notification the guest waits for by @mattias800 in #3348<br \/>\n&#8211; Little Nightmares III: name the flooding draws, fix two instruments that were reporting nothing by @mattias800 in #3363<br \/>\n&#8211; gpu_replay: let &#8211;inspect-only print the whole index list, not just 16 by @mattias800 in #3367<br \/>\n&#8211; render: PROSPER_BUFVERIFY re-reads uploaded buffers from device memory by @mattias800 in #3370<br \/>\n&#8211; Record the four-title Unity shear as a cross-implementation split, and add PROSPER_INDEX_ECHO by @mattias800 in #3375<br \/>\n&#8211; Settle #3374&rsquo;s fork: RADV drops indexed draws, and module UB cannot be the mechanism by @mattias800 in #3377<br \/>\n&#8211; Withdraw #3374: the Unity shear does not reproduce from a clean build by @mattias800 in #3380<br \/>\n&#8211; Add restricted autonomous scheduler profiling access by @mattias800 in #3383<br \/>\n&#8211; gpu: hash finalized shader compile keys once by @mattias800 in #3385<br \/>\n&#8211; gpu: retain export watch registrations across full writebacks by @mattias800 in #3386<br \/>\n&#8211; gpu: avoid redundant snapshots for exact write-only image aliases by @mattias800 in #3389<br \/>\n&#8211; gpu: make storage-image seed proofs alias-group aware by @mattias800 in #3392<br \/>\n&#8211; memory: reconcile shared write-watch alias protections by @mattias800 in #3394<br \/>\n&#8211; gpu: stream per-draw shader property scans by @mattias800 in #3395<br \/>\n&#8211; gpu: remove per-pass texture-cache statistics traversal by @mattias800 in #3396<br \/>\n&#8211; Add verified debugging and profiling workflows by @mattias800 in #3382<br \/>\n&#8211; pixel_history: answer \u00ab\u00a0why is this pixel this colour\u00a0\u00bb in one call by @mattias800 in #3402<br \/>\n&#8211; render: keep texture staging buffers mapped between frames (Sonic Frontiers +6.3%) by @mattias800 in #3406<br \/>\n&#8211; compute: parallelise the sampled texel-conversion arms (Sonic Frontiers +18.7%) by @mattias800 in #3408<br \/>\n&#8211; docs: record the ten falsified Sonic Frontiers performance hypotheses by @mattias800 in #3409<br \/>\n&#8211; docs: instrument trap 270 (nid_census &#8211;registered), and the BLOG entry #3408 owed by @mattias800 in #3412<br \/>\n&#8211; docs: trap 271 \u2014 the trap-41 deletion check false-positives on a moved base by @mattias800 in #3413<br \/>\n&#8211; Restore Sonic audio, retain render targets on GPU, and adopt Vulkan 1.4 by @mattias800 in #3418<br \/>\n&#8211; Reuse graphics pipelines and keep RGBA8 integer copies on the GPU by @mattias800 in #3420<br \/>\n&#8211; Remove unused color-readback waits and detect stale session instructions by @mattias800 in #3421<br \/>\n&#8211; Persist graphics pipeline caches across app launches by @mattias800 in #3424<br \/>\n&#8211; Keep guest clocks advancing during graphics stalls by @mattias800 in #3427<br \/>\n&#8211; Quantize layered FP16 texture channels directly to UNORM8 by @mattias800 in #3428<br \/>\n&#8211; Honor HTILE broadcast clears during Blue Prince FMV composition by @mattias800 in #3430<br \/>\n&#8211; Detile sampled FP16 cubes within graphics submissions by @mattias800 in #3431<br \/>\n&#8211; Measure SDL consumption demand separately from input queue gaps by @mattias800 in #3433<br \/>\n&#8211; Reuse mapped GPU detile input buffers after submission completion by @mattias800 in #3434<br \/>\n&#8211; Convert packed sampled render targets on the GPU by @mattias800 in #3437<br \/>\n&#8211; Retain mapped detile inputs under staging budget pressure by @mattias800 in #3438<br \/>\n&#8211; Retile exact compute image results on the GPU by @mattias800 in #3439<br \/>\n&#8211; Preserve primary compute buffers under result-cache pressure by @mattias800 in #3440<br \/>\n&#8211; Derive the session-start worktree root relatively instead of from git path output by @mattias800 in #3444<br \/>\n&#8211; Record Grand Theft Auto V at rung 3 \u2014 the world has rendered since #2996 by @mattias800 in #3445<br \/>\n&#8211; perf(render,compute): descriptor set layout cache, storage pack parallelization, and parallel buffer upload by @mattias800 in #3442<br \/>\n&#8211; Fix selected-mip array cache snapshots after storage writeback by @mattias800 in #3457<br \/>\n&#8211; perf(renderer): avoid per-upload CPU topology probes by @mattias800 in #3459<br \/>\n&#8211; fix(capture): move owned bundle writing off the guest flip path by @mattias800 in #3460<br \/>\n&#8211; Print every compute timer the capture carries, with the remainder named by @mattias800 in #3451<br \/>\n&#8211; Timestamp the GpuFlip event so flip pacing can read a real run by @mattias800 in #3453<br \/>\n&#8211; fix(gpu): preserve guest authority across retained storage writes by @mattias800 in #3463<br \/>\n&#8211; perf(gpu): retile standard 3D storage images on the device by @mattias800 in #3465<br \/>\n&#8211; perf(memory): reduce write-watch publication overhead by @mattias800 in #3469<br \/>\n&#8211; tools(shader_inspect): add &#8211;wave-reasons, an offline fragment wave-width census (#3464) by @mattias800 in #3466<br \/>\n&#8211; fix(gpu): isolate storage seed proofs by executable and launch by @mattias800 in #3472<br \/>\n&#8211; tools(shader_inspect): skip_survey.py \u2014 31 refused shaders across 5 of 9 titles, all wave-any (#3464 W7) by @mattias800 in #3473<br \/>\n&#8211; Preserve dynamic storage inputs and GPU-seed renderer targets by @mattias800 in #3475<br \/>\n&#8211; tools(shader_inspect): baseline guard for refused fragment shaders (#3464 W6) by @mattias800 in #3474<br \/>\n&#8211; perf(gpu): retain completed renderer-seeded storage results by @mattias800 in #3477<br \/>\n&#8211; perf(gpu): omit proven read-only storage image writeback by @mattias800 in #3478<br \/>\n&#8211; fix(gpu): preserve authority across overlapping output writebacks by @mattias800 in #3481<br \/>\n&#8211; perf(capture): stream bundle files with checked atomic replacement by @mattias800 in #3483<br \/>\n&#8211; fix(gpu): validate DCC metadata before borrowing retained images by @mattias800 in #3484<br \/>\n&#8211; feat(audio): trace output retirement and final consumption demand by @mattias800 in #3485<br \/>\n&#8211; perf(rtt): remove per-pixel division from exact nearest-neighbor scaling by @mattias800 in #3487<br \/>\n&#8211; perf(gpu): retile native 16-bit storage arrays in the compute submission by @mattias800 in #3488<br \/>\n&#8211; fix(capture): break the exit deadlock between the owned writer and the CRT onexit table by @mattias800 in #3492<br \/>\n&#8211; fix(capture): retry a bundle install past Windows&rsquo; transient replace window by @mattias800 in #3495<br \/>\n&#8211; fix(audio): &#8211;volume is an amplifier after the guest&rsquo;s mixer, not a rival writer of it by @mattias800 in #3490<br \/>\n&#8211; fix(gpu): admit fragment programs at native wave32 when the module is provably width-independent (#3464 W5) by @mattias800 in #3480<br \/>\n&#8211; libkernel: register the memory-pool and configured-flexible-memory calls \u2014 fixes NINJA GAIDEN 4&rsquo;s null deref (#3502) by @mattias800 in #3505<br \/>\n&#8211; loader: link a title&rsquo;s own middleware from the dump root, and skip only duplicate BUILDS \u2014 Darksiders II reaches its title screen (#3497) by @mattias800 in #3508<br \/>\n&#8211; diag: a guest-state dump that cannot run must say so, not print success (#3509) by @mattias800 in #3510<br \/>\n&#8211; gpu: derive a RectList&rsquo;s fourth corner from the geometry, not from a fixed index (#3507) by @mattias800 in #3511<br \/>\n&#8211; docs: reframe the README around the experiment; move build steps to BUILDING.md by @mattias800 in #3513<br \/>\n&#8211; fs+libkernel: map guest \/download0 and register sceKernelCancelEventFlag \u2014 BlazBlue Entropy Effect X reaches its title screen by @mattias800 in #3512<br \/>\n&#8211; tools\/refactor: survey which refactoring tool can act on each large file by @mattias800 in #3514<br \/>\n&#8211; tools\/refactor: promote_internal wrote headers that cannot compile, three ways by @mattias800 in #3519<br \/>\n&#8211; tools\/refactor: a split needs a visible declaration, which linkage does not provide by @mattias800 in #3524<br \/>\n&#8211; tools\/refactor: a name in a comment is not a public symbol by @mattias800 in #3525<br \/>\n&#8211; tools\/refactor: merge into an existing header instead of replacing it by @mattias800 in #3526<br \/>\n&#8211; gpu: split gpu_capture.cpp and rdna2_to_spirv.cpp into eleven files, none over 1,624 lines by @mattias800 in #3522<br \/>\n&#8211; docs(gta5): the world runs at 7-8 FPS, not 21 \u2014 the 21 was a phase with no world in it by @mattias800 in #3528<br \/>\n&#8211; hle: sceKernelMprotect must round rather than refuse, plus the two missing APR\/memory-pool NIDs (#3498, #3506) by @mattias800 in #3530<br \/>\n&#8211; worktree_reclaim: removal status must not land on the &#8211;json stdout (#3397) by @mattias800 in #3534<br \/>\n&#8211; agc: a mistyped render\/present cadence must not become a divide by zero by @mattias800 in #3537<br \/>\n&#8211; perf: sample the Windows working set and commit charge into the F8 capture by @mattias800 in #3535<br \/>\n&#8211; agc: register sceAgcDcbDrawIndirect and build its real packet (#2929) by @mattias800 in #3542<br \/>\n&#8211; ci: prove a PR body was published rather than trusting gh exit codes (#2918) by @mattias800 in #3536<br \/>\n&#8211; env: PROSPER_WAITCAP must not remove its own cap, and a typo must not pick the lever&rsquo;s OFF arm by @mattias800 in #3538<br \/>\n&#8211; fix(recompiler): OpAtomicLoad is not a memory write in the wave-width analysis by @mattias800 in #3547<br \/>\n&#8211; Enable image robustness on the compute backend&rsquo;s own Vulkan device (#3531) by @mattias800 in #3546<br \/>\n&#8211; Honour the V# DST_SEL channel routing on MUBUF format fetches by @mattias800 in #3552<br \/>\n&#8211; libSceHttp2: stop reporting a request nobody sent as SCE_OK (#2894) by @mattias800 in #3544<br \/>\n&#8211; libSceHttp: implement the request path instead of answering SCE_OK (#2930) by @mattias800 in #3551<br \/>\n&#8211; hle(savedata): persist the param block instead of answering SCE_OK and storing nothing by @mattias800 in #3553<br \/>\n&#8211; gpu_replay: say which shader dump writes SPIR-V and which writes guest RDNA2 by @mattias800 in #3539<br \/>\n&#8211; loader: unresolved DATA imports must not bind to a code stub, and AddAmprEvent must keep the guest&rsquo;s udata (#3529, #3500) by @mattias800 in #3541<br \/>\n&#8211; flip_pacing_report: state the chance baseline the tick-aligned share is read against by @mattias800 in #3543<br \/>\n&#8211; Record which Windows session-start failure is which (#3426 verified fixed by #3444) by @mattias800 in #3555<br \/>\n&#8211; Start the session-start hook with an interpreter that exists on this platform by @mattias800 in #3556<br \/>\n&#8211; docs: Evergate renders correctly on Windows\/NVIDIA, and two candidates for the shear are dead by @mattias800 in #3558<br \/>\n&#8211; Save the compute pipeline cache on the frontend&rsquo;s _Exit path by @mattias800 in #3557<br \/>\n&#8211; Pace guest flips at the rate the title asked for, not at the host refresh (#3379) by @mattias800 in #3559<br \/>\n&#8211; pixel_history: never read RenderDoc&rsquo;s no-information sentinel as a black pixel by @mattias800 in #3566<br \/>\n&#8211; Report the guest flip rate over the wall clock, not over a filtered mean by @mattias800 in #3562<br \/>\n&#8211; Tell a backwards emission from a run boundary by its magnitude by @mattias800 in #3563<br \/>\n&#8211; Anchor a pad-script press&rsquo;s start in flips and its hold in wall time (#3449) by @mattias800 in #3568<br \/>\n&#8211; pixel_history: a copy, blit or resolve is not a shader that wrote black by @mattias800 in #3570<br \/>\n&#8211; Count and report the device memory prosper holds on each heap by @mattias800 in #3565<br \/>\n&#8211; recompiler: declare SignedZeroInfNanPreserve so guest Inf\/NaN semantics survive the host driver by @mattias800 in #3561<br \/>\n&#8211; pixel_history: give the RenderDoc citations their provenance, and narrow one claim to what was measured by @mattias800 in #3584<br \/>\n&#8211; sweep(3573-3580): the eight correctness-sweep issues, one branch by @mattias800 in #3582<br \/>\n&#8211; tests: restore stderr, fix an inverted portability guard, and stop two comments over-claiming (#3598 #3600 #3602) by @mattias800 in #3604<br \/>\n&#8211; recompiler: a lane-local scalar must not satisfy the wave-uniformity proof (#3596) by @mattias800 in #3603<br \/>\n&#8211; perf(render): add opt-in validated buffer retention and cost diagnostics by @mattias800 in #3493<br \/>\n&#8211; perf(gpu): retile native packed 2D textures on the GPU by @mattias800 in #3613<br \/>\n&#8211; gpu: transfer bounded texture validation snapshots without a second copy by @mattias800 in #3614<br \/>\n&#8211; Reduce CPU work for shared mip-tail texture layouts by @mattias800 in #3617<br \/>\n&#8211; gpu: refuse a reserved DST_SEL encoding on an image descriptor by @mattias800 in #3605<br \/>\n&#8211; Batch: five correctness-sweep follow-ups (one commit per issue) by @mattias800 in #3618<br \/>\n&#8211; Preserve ordered writeback across private hosted outputs by @mattias800 in #3621<br \/>\n&#8211; Reclaim idle compute buffers for budgeted exact comparisons by @mattias800 in #3622<br \/>\n&#8211; perf(gpu): reduce key preparation and retain GPU result comparisons by @mattias800 in #3625<br \/>\n&#8211; hle(sync): resolve guest mutex ownership on the calling host thread TCB, and a trace that shows it by @mattias800 in #3624<br \/>\n&#8211; gpu: move FP16 2D texture and storage preparation to the GPU by @mattias800 in #3626<br \/>\n&#8211; hle(fiber): implement sceFiberRename instead of leaving it to the return-0 default by @mattias800 in #3628<br \/>\n&#8211; gpu: share overlapping graphics buffer uploads within a pass by @mattias800 in #3629<br \/>\n&#8211; gpu: replace a false comment about null descriptors, and justify the image DST_SEL screen by @mattias800 in #3627<br \/>\n&#8211; gpu: skip scalar-spill invalidation for registers with no spills by @mattias800 in #3631<br \/>\n&#8211; gpu: reuse validated complete fills and preserve clear semantics by @mattias800 in #3632<br \/>\n&#8211; hle: keep a fiber&rsquo;s guest thread pointer with the host thread that resumes it by @mattias800 in #3637<br \/>\n&#8211; docs: record the Uncharted fiber\/TLS investigation and instrument trap 281 by @mattias800 in #3641<br \/>\n&#8211; gpu: fuse exact integer image readback and retile by @mattias800 in #3640<br \/>\n&#8211; tools: detect import stubs overwritten in place, and record Uncharted&rsquo;s patched dump by @mattias800 in #3652<br \/>\n&#8211; gpu: reuse shader control analysis during resource folding by @mattias800 in #3663<br \/>\n&#8211; Pin flip_pacing_report&rsquo;s three unpinned #3562 behaviour claims by @mattias800 in #3664<br \/>\n&#8211; savedata: reject GetMountInfo for an invalid or inactive mount by @mattias800 in #3665<br \/>\n&#8211; savedata: name the bound that actually makes the mount-point read safe by @mattias800 in #3667<br \/>\n&#8211; gpu: reuse resource-fold instruction facts with exact-input replay by @mattias800 in #3670<br \/>\n&#8211; savedata: make both umount entry points read their mount-point argument by @mattias800 in #3672<br \/>\n&#8211; Uncharted: fold the guest&rsquo;s draws, stop zeroing its shaders, and recompile SRT-addressed resources by @mattias800 in #3673<br \/>\n&#8211; Avoid full Linux memory-map scans and completion-write starvation by @mattias800 in #3399<br \/>\n&#8211; Reuse render-target footprints across queued guest writes by @mattias800 in #3677<br \/>\n&#8211; Reduce buffer lookup allocation traffic and repeated shader analysis by @mattias800 in #3679<br \/>\n&#8211; Avoid repeated exact validation of stable small textures by @mattias800 in #3680<br \/>\n&#8211; perf(memory): answer write-watch queries from indexes instead of full scans by @mattias800 in #3682<br \/>\n&#8211; diag(compute): name why a retile declines, and split the memcpy out of layout_ms by @mattias800 in #3684<br \/>\n&#8211; perf(gpu): derive the result-compare ceiling from the memory topology by @mattias800 in #3685<br \/>\n&#8211; docs: rule out moving compute work off the GPU, which loses what moving it on gained by @mattias800 in #3688<br \/>\n&#8211; test(gpu): cover the result-compare shader, which decides whether a writeback is skipped by @mattias800 in #3689<br \/>\n&#8211; refactor(gpu): delete the dead compute-dispatch realizer, and count the writebacks it skips by @mattias800 in #3690<br \/>\n&#8211; docs(compute): measure the writeback skip fraction (82% on GTA V), and rule out the obvious control for the CPU-compare skip by @mattias800 in #3692<br \/>\n&#8211; docs(compute): correct two off-by-one citations in the census Ruled-out entry by @mattias800 in #3693<br \/>\n&#8211; docs(compute): the host result snapshot is never taken \u2014 measured, and #3687 is inverted by @mattias800 in #3694<br \/>\n&#8211; docs(charter): batch related work into one PR \u2014 a PR per commit costs everyone by @mattias800 in #3700<br \/>\n&#8211; perf(compute): upload only the bytes that differ \u2014 GTA V compute \u221220% by @mattias800 in #3697<br \/>\n&#8211; Fuse storage-image retile and exact result comparison by @mattias800 in #3698<br \/>\n&#8211; test(memory): negative control proving the write-watch index reduces work (#3681) by @mattias800 in #3702<br \/>\n&#8211; fix(perf): keep the F8 rate window and the detail population as distinct observations by @mattias800 in #3701<br \/>\n&#8211; perf(render): avoid superseded texture preparation by @mattias800 in #3703<br \/>\n&#8211; perf(render): avoid redundant encoded texture snapshots by @mattias800 in #3704<br \/>\n&#8211; perf(render): index the AGC shader registry and cache hot diagnostic gates by @mattias800 in #3705<br \/>\n&#8211; recompiler: a sampler&rsquo;s FORCE_UNNORMALIZED must not gate IMAGE_LOAD_MIP (#2818) by @mattias800 in #3706<br \/>\n&#8211; gpu(compute): materialize a mip chain for a one-layer 2D_ARRAY binding (#2818) by @mattias800 in #3709<br \/>\n&#8211; docs(frontiers): five falsified hypotheses from the 2026-09-17 rendering pass by @mattias800 in #3707<br \/>\n&#8211; docs(frontiers): falsify the scene-width-compute explanation of the black world by @mattias800 in #3710<br \/>\n&#8211; docs(frontiers): the Cyber Space world IS rendered \u2014 it never reaches the screen by @mattias800 in #3711<br \/>\n&#8211; Sample per-draw diagnostic switches once per submit (\u221248% getenv), and falsify the fold-snapshot cost by @mattias800 in #3712<br \/>\n&#8211; Emit the DS st64 pair and report scanout registrations from one place by @mattias800 in #3715<br \/>\n&#8211; Resolve the trip-bound selectors once per shader-cache operation (fixes a key\/module coherence hole, \u221221.4% getenv) by @mattias800 in #3716<br \/>\n&#8211; tools: memcpy_probe \u2014 attribute block copies by call site and cycles, because perf cannot by @mattias800 in #3718<br \/>\n&#8211; Prove scalar branches workgroup-uniform so their regions may hold barriers by @mattias800 in #3717<br \/>\n&#8211; Reuse the per-pass command pool and its buffer instead of recreating both by @mattias800 in #3720<br \/>\n&#8211; Reject extent-incompatible cached RTTs when sampling reused addresses (#3436) by @mattias800 in #3722<br \/>\n&#8211; gpu: seed renderer color targets from compute storage image writeback by @mattias800 in #3723<br \/>\n&#8211; gpu: lower v_cvt SDWA sub-dwords, CUBE resinfo, and s_bitreplicate_b64 (#2790) by @mattias800 in #3724<br \/>\n&#8211; gpu: resolve entry-prefix indirect SMEM descriptors and SCC branches for workgroup barriers by @mattias800 in #3726<br \/>\n&#8211; Acquire the draw pass&rsquo;s command pool first, so a failed acquisition can be reported by @mattias800 in #3725<br \/>\n&#8211; Publish non-mirrored compute pixels instead of re-validating a stale device image by @mattias800 in #3731<br \/>\n&#8211; A measured refactoring plan, and the two tool gaps found measuring it by @mattias800 in #3732<br \/>\n&#8211; hle: lift the shared service-call helpers into an internal header (step 1 of #3735) by @mattias800 in #3736<br \/>\n&#8211; refactor: split hle_service.cpp into per-library files by @mattias800 in #3737<br \/>\n&#8211; refactor: split the video decode and IME libraries out of hle_service.cpp by @mattias800 in #3738<br \/>\n&#8211; refactor: split libSceSaveData out of hle_service.cpp by @mattias800 in #3741<br \/>\n&#8211; refactor: split the NP \/ online family out of hle_service.cpp by @mattias800 in #3743<br \/>\n&#8211; compute: admit cube and query-only layered image bindings (and the frame does not change) by @mattias800 in #3740<br \/>\n&#8211; refactor(gpu): lift the shader-cache types out of gpu_executor.cpp by @mattias800 in #3744<br \/>\n&#8211; gpu: keep eligible compute publication and R11 seeds on the GPU by @mattias800 in #3746<br \/>\n&#8211; docs: Sonic&rsquo;s blow-out is banded and enters at one submit; bloom falsified (trap 285) by @mattias800 in #3748<br \/>\n&#8211; docs: Sonic&rsquo;s world renders \u2014 correct the charter, COMPATIBILITY and the replay README by @mattias800 in #3749<br \/>\n&#8211; gpu: publish same-image RGBA8 compute results after source seeding by @mattias800 in #3750<br \/>\n&#8211; refactor(gpu): give the SPIR-V emitter a folder that names what it emits by @mattias800 in #3747<br \/>\n&#8211; docs: three gpu_replay instruments that fail silently (trap 286) by @mattias800 in #3752<br \/>\n&#8211; perf(compute): publish packed R11 partial RTT results into their renderer image by @mattias800 in #3753<br \/>\n&#8211; perf(render): convert retained depth cubes from mapped readbacks by @mattias800 in #3754<br \/>\n&#8211; perf(present): account completed renderer producer delivery by @mattias800 in #3755<br \/>\n&#8211; perf(render): retain unchanged direct guest buffer ranges by @mattias800 in #3756<br \/>\n&#8211; renderer: bound retained range admission by @mattias800 in #3757<br \/>\n&#8211; perf(render): cache tracked buffer membership by @mattias800 in #3758<br \/>\n&#8211; perf: batch persistent resolve copies by @mattias800 in #3759<br \/>\n&#8211; perf(renderer): compact live buffer resource carriers by @mattias800 in #3761<br \/>\n&#8211; gpu_replay: refuse capture-only flags on a bundle instead of ignoring them by @mattias800 in #3762<br \/>\n&#8211; tools(evidence): colour-aware image likeness \u2014 every default metric here is achromatic by @mattias800 in #3760<br \/>\n&#8211; docs(sonic): withdraw the \u00ab\u00a0history buffer\u00a0\u00bb inference &#8212; it came from a replay flag, not the guest by @mattias800 in #3764<br \/>\n&#8211; render: batch shared buffer range uploads by @mattias800 in #3763<br \/>\n&#8211; gpu_replay: report small live targets in their native type by @mattias800 in #3766<br \/>\n&#8211; gpu: mirror completed RGBA16 compute targets by @mattias800 in #3768<br \/>\n&#8211; recompiler: name which representation a wave-mask operand is missing by @mattias800 in #3767<br \/>\n&#8211; gpu: share exact fragment analysis within each draw by @mattias800 in #3769<br \/>\n&#8211; gpu: borrow indexed draw words into backend by @mattias800 in #3770<br \/>\n&#8211; gpu: preserve lighting texture array layers and sampled mip chains by @mattias800 in #3771<br \/>\n&#8211; Admit Float32 array gathers with bounded retained depth snapshots by @mattias800 in #3790<br \/>\n&#8211; perf\/refactor tools: stop reporting what the tool could not see as a fact about the run by @mattias800 in #3772<br \/>\n&#8211; gpu_replay: RGBA8 conversion for every capture format, and &#8211;native-texel for chosen texels by @mattias800 in #3775<br \/>\n&#8211; hle\/net: define the libSceNet error encoding once (#3545) by @mattias800 in #3776<br \/>\n&#8211; live_compute: attribute an early-break dispatch&rsquo;s time to the phase it broke in by @mattias800 in #3778<br \/>\n&#8211; prosper-app: &#8211;volume attenuates the launcher music too (#3499) by @mattias800 in #3777<br \/>\n&#8211; host\/tls: make Linux guest_tls_activate_thread idempotent (#3635) by @mattias800 in #3774<br \/>\n&#8211; host\/memory: one fault-safe guest<->host copy policy; service, audio and gpu helpers forward to it (#3734) by @mattias800 in #3789<br \/>\n&#8211; Register sceAvPlayerStartEx so a movie started with it actually plays (#3781) by @mattias800 in #3788<br \/>\n&#8211; gpu: give CachedShader a move pair so shader-cache insertions move (#3745) by @mattias800 in #3773<br \/>\n&#8211; test_game_compute: per-mode expectations under PROSPER_NO_SKIP_SEED, and register the mode by @mattias800 in #3785<br \/>\n&#8211; Enumerate save directories on Windows so sceSaveDataDirNameSearch sees them (#2760) by @mattias800 in #3780<br \/>\n&#8211; savedata: retain the requested allocation and report used\/free capacity (#3654) by @mattias800 in #3783<br \/>\n&#8211; gpu: run Wave64 fragment programs as partially populated waves on narrow hosts (GTA V world on NVIDIA, #3464) by @mattias800 in #3794<br \/>\n&#8211; perf tools: review follow-ups on #3772, and #3461&rsquo;s banner wording by @mattias800 in #3793<br \/>\n&#8211; hle: carry the flipArg in bits 16+ of the VideoOut flip event (#3668) by @mattias800 in #3798<br \/>\n&#8211; tools: lanekill test compares worktree identity, not path spelling (#3730) by @mattias800 in #3799<br \/>\n&#8211; diagnostics: end-of-run reports that survive the _Exit\/_exit paths runs actually take by @mattias800 in #3782<br \/>\n&#8211; recompiler: compile barrier-phased complex compute kernels phase by phase (Metaphor 0x2281c74100) by @mattias800 in #3800<br \/>\n&#8211; docs(perf): hand off post-3770 roadmap evidence by @mattias800 in #3805<br \/>\n&#8211; Add opt-in Sonic depth-clear diagnostic controls by @mattias800 in #3803<br \/>\n&#8211; Record Outer Wilds live title-start checkpoint by @mattias800 in #3806<br \/>\n&#8211; Add opt-in publication and shader-fold cost probes by @mattias800 in #3808<br \/>\n&#8211; Identify depth surfaces and viewport ranges in prefix replay by @mattias800 in #3809<br \/>\n&#8211; Record all programmed MRT targets in provenance diagnostics by @mattias800 in #3810<br \/>\n&#8211; session_start test: pay the fresh runner&rsquo;s first hook launch outside the timed calls (#3583) by @mattias800 in #3792<br \/>\n&#8211; Windows: decode sceVideodec2 access units (VP9, H.264) through Media Foundation by @mattias800 in #3786<br \/>\n&#8211; Metaphor: ReFantazio reaches its title screen \u2014 libSceSigninDialog lifecycle and the glyph advance by @mattias800 in #3802<br \/>\n&#8211; Trace Kena image bindings and bound retained-target diagnostics by @mattias800 in #3813<br \/>\n&#8211; Recompiler: take s_bfm_b64&rsquo;s fragment lane from guest_lane_id(), not linear_localid (#3816) by @mattias800 in #3817<br \/>\n&#8211; Windows: let a fixed MAP_DIRECT replace pages prosper lazily committed (#3812) by @mattias800 in #3814<br \/>\n&#8211; docs: Kena: Bridge of Spirits status, route and compatibility row (rung 2) by @mattias800 in #3818<br \/>\n&#8211; Run the diff-span exactness test on every platform: lift the byte helpers out of live_compute.cpp (#3699) by @mattias800 in #3796<br \/>\n&#8211; perf: attribute allocation sites and bound per-draw resource growth by @mattias800 in #3821<br \/>\n&#8211; gpu: run the partial-wave fragment tier on every native-vote title, not only GTA V (#3797) by @mattias800 in #3822<br \/>\n&#8211; gpu: transfer eager draws in ordered submissions by @mattias800 in #3823<br \/>\n&#8211; gpu: avoid double-offsetting folded zero-stride vertex fetches by @mattias800 in #3825<br \/>\n&#8211; prosper-app: capture only frames that reached the window by @mattias800 in #3826<br \/>\n&#8211; Bind F9 BMP to the captured closing flip and producer submit by @mattias800 in #3827<br \/>\n&#8211; Keep F9 bundle open through the presented producer submit by @mattias800 in #3830<br \/>\n&#8211; Expose backend texture preparation and binding in F8 captures by @mattias800 in #3833<br \/>\n&#8211; diag: trace Kena&rsquo;s ordered title scene and compositor by @mattias800 in #3834<br \/>\n&#8211; capture: retain instance counts for failed graphics draws by @mattias800 in #3836<br \/>\n&#8211; Preserve 3D color target views through Kena draw captures by @mattias800 in #3837<br \/>\n&#8211; Prepare merged-NGG mesh workgroup rendering by @mattias800 in #3838<br \/>\n&#8211; Preserve failed-draw volume activity and vertex retry inputs by @mattias800 in #3839<br \/>\n&#8211; Probe Kena merged-NGG workgroup with captured inputs by @mattias800 in #3840<br \/>\n&#8211; Probe Kena merged-NGG launch inputs without admitting live draw by @mattias800 in #3841<br \/>\n&#8211; Retain bounded 3D color targets for direct volume sampling by @mattias800 in #3842<br \/>\n&#8211; Add guarded native Wave64 diagnostic for merged NGG captures by @mattias800 in #3843<br \/>\n&#8211; Resolve physical aliases across split guest mappings by @mattias800 in #3844<br \/>\n&#8211; Trace native NGG probe phases and fix bounded DPP reduction by @mattias800 in #3845<br \/>\n&#8211; Test 32-slice retained volume handoff through bounded views by @mattias800 in #3846<br \/>\n&#8211; Bound renderer guest reads by committed mapping prefix by @mattias800 in #3847<br \/>\n&#8211; Trace Kena NGG launch state and indexed export layers by @mattias800 in #3848<br \/>\n&#8211; Guard layered mesh PARAM interpolation into retained volumes by @mattias800 in #3850<br \/>\n&#8211; Expose failed draw raster state and input snapshots in gpu_replay by @mattias800 in #3851<br \/>\n&#8211; Capture live ABI for failed fragment retries by @mattias800 in #3853<br \/>\n&#8211; Seed fragment ancillary layer from rasterized primitive by @mattias800 in #3854<br \/>\n&#8211; Let pixel history inspect a capture-local image by @mattias800 in #3855<br \/>\n&#8211; Measure and relieve backend texture cache pressure by @mattias800 in #3856<br \/>\n&#8211; Use exact one-layer array storage for 2D compute outputs by @mattias800 in #3858<br \/>\n&#8211; Speed up retained depth-cube conversion on AVX2 CPUs by @mattias800 in #3859<br \/>\n&#8211; gpu\/recompiler: preserve packed RTZ conversion classes by @mattias800 in #3860<br \/>\n&#8211; perf: record F8 renderer submit wall spans by @mattias800 in #3861<br \/>\n&#8211; hle\/agc: preserve older interpolant identity mapping by @mattias800 in #3862<br \/>\n&#8211; Reuse released CPU RTT snapshots across resolution changes by @mattias800 in #3863<br \/>\n&#8211; Batch index arena uploads before draw command recording by @mattias800 in #3864<br \/>\n&#8211; gpu: bind use-proven raw two-word scalar data loads by @mattias800 in #3865<br \/>\n&#8211; Instrument why the render path drops and copies work, and fix the RTT snapshot pool by @mattias800 in #3869<br \/>\n&#8211; Outer Wilds frame-gap attribution: the AVX2 index-expansion kernel loses, and its switch goes with it by @mattias800 in #3866<br \/>\n&#8211; Offscreen prosper-app runs adopt GPU present (enable VK_EXT_headless_surface) by @mattias800 in #3874<br \/>\n&#8211; &#8211;fps: read the GPU-present content sample from cached host memory by @mattias800 in #3875<br \/>\n&#8211; Evict idle resident textures while an ordered batch is pending (Outer Wilds ~2x) by @mattias800 in #3876<br \/>\n&#8211; renderer: index volume RTT candidates instead of walking the RTT cache per texture reference (+18% GTA V fps) by @mattias800 in #3877<br \/>\n&#8211; docs: rule out per-pass object recycling and the index-scan early exit as frame-time levers by @mattias800 in #3878<br \/>\n&#8211; VideoOut: pace flips outside the handle lock by @mattias800 in #3879<br \/>\n&#8211; renderer: gather retained depth arrays on the GPU instead of reading them back (Sonic Frontiers +21-37% flips\/s) by @mattias800 in #3882<br \/>\n&#8211; renderer: upload guest BCn textures natively (4-8x smaller texture footprint; ~1.5x Outer Wilds at an 8 GB-card budget) by @mattias800 in #3883<br \/>\n&#8211; gpu: name every decline that sends a compute result through the CPU by @mattias800 in #3872<br \/>\n&#8211; gpu: memoize per-program compute dispatch facts (Sonic Frontiers +6% flips\/s) by @mattias800 in #3886<br \/>\n&#8211; renderer: size the texture cache from VK_EXT_memory_budget headroom (8 GB card: 7.3 -> 10.5 fps on Outer Wilds RGBA8) by @mattias800 in #3887<br \/>\n&#8211; Fix GTA V black menus and missing HUD: a volume claims guest authority only with a valid renderer image (#3842 regression) by @mattias800 in #3889<br \/>\n&#8211; Performance alarms: an always-on ledger and six [perf-alarm] rules that announce prosper&rsquo;s own performance problems (#3891 phases 1-2) by @mattias800 in #3894<br \/>\n&#8211; renderer: GPU-only images and buffers prefer a DEVICE_LOCAL memory type (#3888) by @mattias800 in #3896<br \/>\n&#8211; Performance alarms phases 3-4: per-site drop reasons, skipped-dispatches \/ host-copy-pressure \/ shader-compile rules, &#8211;fps marker (#3891) by @mattias800 in #3898<br \/>\n&#8211; Keep GTA V&rsquo;s UI under capture and diagnostic modes: a denied volume producer releases its claim (#3890) by @mattias800 in #3899<br \/>\n&#8211; renderer: retain guest decodes of an identity-only dim-5 RTT shell (Sonic Frontiers menus +8-23% flips\/s) by @mattias800 in #3900<br \/>\n&#8211; renderer: retry GPU-only allocations on another memory type when VRAM runs out; gpu-memory-off-device alarm (#3897) by @mattias800 in #3904<br \/>\n&#8211; renderer: read never-rendered depth-array layers from guest memory instead of dropping the draw (#3893) by @mattias800 in #3903<br \/>\n&#8211; Keep live GPU targets under PROSPER_GPU_CAPTURE; read back on demand for the captured submit (#3895) by @mattias800 in #3909<br \/>\n&#8211; Keep fully retained depth cubes on the GPU by @mattias800 in #3910<br \/>\n&#8211; renderer: release the transient pool before spilling; move spilled retained resources back to VRAM (#3902, #3905) by @mattias800 in #3911<br \/>\n&#8211; renderer: widest slice span per pass, padded depth identities, MSAA colour footprints for guest depth layers (#3906) by @mattias800 in #3912<br \/>\n&#8211; renderer: never bind null memory to a depth target or texture when every memory type fails (#3901) by @mattias800 in #3913<br \/>\n&#8211; Keep exact compute RTT results in renderer images by @mattias800 in #3914<br \/>\n&#8211; perf alarms: six rules from the #3891 queue by @mattias800 in #3916<br \/>\n&#8211; capture: a deferred capture seeds the targets its submit writes from their pre-submit pixels (#3908) by @mattias800 in #3917<br \/>\n&#8211; Count effective colour readback requests by @mattias800 in #3918<br \/>\n&#8211; live renderer: carve the submit callback into named pieces (#3892, part 1) by @mattias800 in #3920<br \/>\n&#8211; Keep exact compute RTT results when a read-only alias samples the source by @mattias800 in #3921<br \/>\n&#8211; live renderer: the pass loop, backend draws and backend timing leave live_renderer.cpp (#3892, part 2) by @mattias800 in #3923<br \/>\n&#8211; present: GPU-present compute-written display buffers, and name every GPU-present decline (#3915) by @mattias800 in #3924<br \/>\n&#8211; Capture deferred depth before execution and avoid false scanout oracles (#3908) by @mattias800 in #3925<br \/>\n&#8211; live renderer: resolve, prelude work and diagnostics leave the submit callback (#3892, part 3) by @mattias800 in #3926<br \/>\n&#8211; compute: retain RTT authority with folded sampled aliases (#3871) by @mattias800 in #3927<br \/>\n&#8211; perf-alarm: host-copy-per-flip, present-slot-trouble, and a guest-scanout transfer site (#3891) by @mattias800 in #3928<br \/>\n&#8211; compute: retain DCC export watch across forced image seed by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/3931<br \/>\n&#8211; compute: avoid forced-DCC source copy with writeback watch by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/3932<br \/>\n&#8211; live renderer: final-span present selection, the single-framebuffer path and the MRT census leave the callback (#3892, part 4) by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/3934<br \/>\n&#8211; compute: detile exact tiled storage seeds into upload staging by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/3935<br \/>\n&#8211; Avoid redundant GPU-write alias scans for single-VA watches by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/3936<br \/>\n&#8211; Bound physical write-watch invalidation to affected pages by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/3937<br \/>\n&#8211; perf: retain first compute-produced render targets on GPU by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/3938<br \/>\n&#8211; video: add libSceVdecsw unit test and fix decoder lifecycle leaks (#3669) by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/3930<br \/>\n&#8211; gpu: resolve exact split image descriptors across scalar loads by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/3939<br \/>\n&#8211; tools: promote_internal merge includes (#3922); check_diag_gates follows context members (#3919) by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/3940<br \/>\n&#8211; compute: mirror one-layer 2D_ARRAY storage results into the renderer image (#3929) by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/3941<br \/>\n&#8211; perf: reduce recurring compute guest writeback through bounded direct-memory alias by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/3942<br \/>\n&#8211; perf-alarm: rtt-destination-refused, color-target-count-ceiling, exact-result census (#3891) by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/3943<br \/>\n&#8211; docs: GTA V ruled out &#8212; declined LUT volume pass is not #3907&rsquo;s black world by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/3945<br \/>\n&#8211; recompiler: reject numeric reads of raw wide SMEM placeholders by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/3944<br \/>\n&#8211; refactor: move the pass loop&rsquo;s small inline diagnostics into pass_diagnostics (#3892) by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/3947<br \/>\n&#8211; gpu: observe indirect CPU argument reads in compute authority census by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/3946<br \/>\n&#8211; perf: let a compute full-overwrite destination evict at the colour-target bound (#3873) by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/3949<br \/>\n&#8211; tools: check_diag_gates follows a same-name context pass-through (#3892, #3919) by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/3954<br \/>\n&#8211; perf-alarm: executor GPU fence waits vs device time, gpu-sync-wait (#3948 stage 0) by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/3953<br \/>\n&#8211; gpu: back proven raw scalar data in Uncharted producer shaders by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/3956<br \/>\n&#8211; refactor: draw_resources&rsquo; buffer branch becomes materialize_buffer_resource (#3892) by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/3955<br \/>\n&#8211; gpu: honor Wave64 mask width in x16 descriptor proof by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/3958<br \/>\n&#8211; gpu: restore descriptor-only register-offset wide loads by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/3960<br \/>\n&#8211; gpu: scope raw-wide SMEM refusal to compute; count shader-recompile draw drops by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/3959<br \/>\n&#8211; perf-alarm: gpu-present-stalled rule; ceiling reports its refusal arm; split destination-allocation-failed by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/3962<br \/>\n&#8211; gpu: speed up 8-byte tiled detiling with paired AVX2 loads by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/3952<br \/>\n&#8211; gpu: reject unbacked nested wide scalar data by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/3961<br \/>\n&#8211; Keep high-dispatch F8 compute captures complete by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/3963<br \/>\n&#8211; perf-alarm: gpu-present-stalled stays quiet while the window cannot be presented (#3891) by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/3965<br \/>\n&#8211; gpu: defer the graphics batch wait before a compute dispatch (#3948 stage 2) by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/3964<br \/>\n&#8211; perf: rank measured compute storage detiles by elapsed time by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/3966<br \/>\n&#8211; gpu: guard one-hop nested scalar data with dispatch snapshots by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/3969<br \/>\n&#8211; gpu: a pass that writes no colour must not replace its target&rsquo;s CPU copy (#3907) by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/3967<br \/>\n&#8211; test: pin when the live renderer callback&rsquo;s prelude statics initialise (#3892) by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/3968<br \/>\n&#8211; test: distinguish skipped-callback decode-budget reads by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/3971<br \/>\n&#8211; diagnostics: flag incomplete GPU device-time coverage by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/3970<br \/>\n&#8211; docs: record GTA deferred-wait collapse controls by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/3975<br \/>\n&#8211; Back fold-proven register-offset raw wide scalar loads by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/3972<br \/>\n&#8211; tools: retain config provenance through cached reference getters by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/3976<br \/>\n&#8211; diagnostics: detect colourless CPU pass publications by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/3977<br \/>\n&#8211; refactor: separate live-renderer process prelude state by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/3974<br \/>\n&#8211; Back memory-fed scalar offsets for raw wide data loads by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/3979<br \/>\n&#8211; diagnostics: distinguish readback attempt volume from duration by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/3980<br \/>\n&#8211; diagnostics: qualify draw exit snapshots by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/3981<br \/>\n&#8211; refactor: keep renderer prelude in calling-thread state by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/3982<br \/>\n&#8211; diagnostics: retain graphics queue-call origins by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/3983<br \/>\n&#8211; tools: isolate declared test member facts in diagnostic scans by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/3985<br \/>\n&#8211; refactor(live): return image resource status before extraction by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/3986<br \/>\n&#8211; Clarify validation-prefix and target-cache alarm evidence by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/3988<br \/>\n&#8211; Preserve declared reference-output diagnostic associations by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/3989<br \/>\n&#8211; diagnostics: announce unsupported Wave64 shaders on every platform by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/3993<br \/>\n&#8211; refactor(live): extract image resource materialization by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/3991<br \/>\n&#8211; gpu: portable multi-wave Wave64 scalar mask reductions by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/3997<br \/>\n&#8211; gpu: portable Wave64 read-first-lane broadcast and probe barrier safety by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/3999<br \/>\n&#8211; Recheck submit visibility before each completion drain pop by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4004<br \/>\n&#8211; gpu: count numeric MBCNT source bits independently of fragment helpers by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4005<br \/>\n&#8211; diagnostics: observe direct WaitRegMem predicates by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4001<br \/>\n&#8211; gpu: implement numeric WQM nibble widening and exact SCC by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4006<br \/>\n&#8211; Observe direct texture comparison extents and outcomes by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4009<br \/>\n&#8211; gpu: preserve vote-derived addresses in fragment width proof by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4008<br \/>\n&#8211; gpu: lower proved fragment votes without game allowlists by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4010<br \/>\n&#8211; gpu: prove initialized logical-wave fragment vote traces by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4012<br \/>\n&#8211; gpu: prove width-independent masked fragment selections by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4014<br \/>\n&#8211; fix(recompiler): mask inactive vector compares without poison propagation by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4020<br \/>\n&#8211; Record first launches for Wolverine, 007, Onimusha, Hades II and Silent Hill 2 by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4026<br \/>\n&#8211; fix(replay): preserve requested fragment wave width by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4028<br \/>\n&#8211; hle: bound sceKernelSync to guest storage filesystems by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4029<br \/>\n&#8211; fix(frontend): build F9 capture matcher without Vulkan headers by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4037<br \/>\n&#8211; fix(kernel): return the available guest CPU mask by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4034<br \/>\n&#8211; fix(recompiler): lower normal-magnitude predicates with integer bits by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4052<br \/>\n&#8211; fix(playgo): enumerate validated manifest chunk identifiers by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4035<br \/>\n&#8211; memory: keep automatic mappings clear of fixed startup arenas by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4046<br \/>\n&#8211; fix(capture): retain realized guest fragment wave width by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4051<br \/>\n&#8211; loader: return errors for failed module sizing and seek by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4045<br \/>\n&#8211; kernel: return EBUSY when a semaphore poll cannot acquire by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4047<br \/>\n&#8211; docs: record title-wave handoff and Silent Hill setup captures by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4050<br \/>\n&#8211; loader: reject images without a PT_LOAD segment by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4055<br \/>\n&#8211; kernel: reject null thread joins before calling the host by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4057<br \/>\n&#8211; gpu: retain producing fragment FLOAT_MODE and exact zero comparisons by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4061<br \/>\n&#8211; loader: reject unresolved SELF load-segment backing by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4067<br \/>\n&#8211; diagnostics: announce unverified fragment F32 ADD\/MUL mode semantics by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4070<br \/>\n&#8211; hle(graphics): derive OutputStatus resolution from the advertised mode by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4058<br \/>\n&#8211; Place ordinary automatic maps above fixed startup arenas by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4069<br \/>\n&#8211; gpu: identify the first failed fragment Wave64 vote in diagnostics by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4080<br \/>\n&#8211; hle: implement missing C11 try-lock and timed waits by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4072<br \/>\n&#8211; fix(abi): preserve variadic AL across bare import tail jumps by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4085<br \/>\n&#8211; build(windows): opt-in native-Clang TLS profile and lifetime regression by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4081<br \/>\n&#8211; feat(gpu): record faithful fragment compiler cases for offline replay by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4073<br \/>\n&#8211; gpu: implement portable compute DS_BPERMUTE gather by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4091<br \/>\n&#8211; Back per-draw raw x4\/x8 scalar loads with owned snapshots by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/3987<br \/>\n&#8211; loader: reject IL2CPP symbols beyond the loaded image by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4088<br \/>\n&#8211; run-windows: use ccache when present, fail fast without a Vulkan SDK by @yuriolive in https:\/\/github.com\/mattias800\/prosper\/pull\/4074<br \/>\n&#8211; ci: add ccache to the build jobs by @yuriolive in https:\/\/github.com\/mattias800\/prosper\/pull\/4077<br \/>\n&#8211; loader: recover runtime stub append failures (#3554 item 2) by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4097<br \/>\n&#8211; gpu: resolve eligible indirect compute dispatches on the device (#3656) by @yuriolive in https:\/\/github.com\/mattias800\/prosper\/pull\/4083<br \/>\n&#8211; gpu: retain explicit F32 transport profile through compiler and replay by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4092<br \/>\n&#8211; gpu\/recompiler: execute owned Wave64 fragment packets and quad WQM by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4107<br \/>\n&#8211; tools\/env: use forward-slash repo paths on Windows by @yuriolive in https:\/\/github.com\/mattias800\/prosper\/pull\/4112<br \/>\n&#8211; ci: cancel superseded runs, main-only ccache saves, parallel ctest, timeouts, docs-only gate by @yuriolive in https:\/\/github.com\/mattias800\/prosper\/pull\/4116<br \/>\n&#8211; gpu\/capture: retain producing fragment launch context by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4113<br \/>\n&#8211; hle: preserve SDK inline APR read output slots by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4102<br \/>\n&#8211; docs: Assassin&rsquo;s Creed Black Flag Resynced status and compatibility row by @yuriolive in https:\/\/github.com\/mattias800\/prosper\/pull\/4132<br \/>\n&#8211; docs: refresh the five-game title investigation checkpoint by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4135<br \/>\n&#8211; gpu: execute MBCNT from owned logical64 fragment packets by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4114<br \/>\n&#8211; tools: report actual nid census input scope by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4105<br \/>\n&#8211; tools: document task skills and check their metadata paths by @yuriolive in https:\/\/github.com\/mattias800\/prosper\/pull\/4111<br \/>\n&#8211; macOS\/Rosetta: fix 6 of the core-job failures (#4043) by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4124<br \/>\n&#8211; tests: fix schedstat_probe_logic on Windows and run it serially by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4143<br \/>\n&#8211; gpu: collect bounded owned raster quads from real DrawItems by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4128<br \/>\n&#8211; app: diagnose missing Vulkan driver instead of terminating by @yuriolive in https:\/\/github.com\/mattias800\/prosper\/pull\/4144<br \/>\n&#8211; docs: retain the raster-quad scope evidence boundary by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4154<br \/>\n&#8211; fs: use 64-bit offsets for lseek, fseek and ftell on Windows by @yuriolive in https:\/\/github.com\/mattias800\/prosper\/pull\/4137<br \/>\n&#8211; sync ring: record the guest call site of every event (PROSPER_SYNC_RING_CALLERS) by @yuriolive in https:\/\/github.com\/mattias800\/prosper\/pull\/4149<br \/>\n&#8211; ampr: write the APR submit result slots as 32-bit values by @yuriolive in https:\/\/github.com\/mattias800\/prosper\/pull\/4146<br \/>\n&#8211; ci: uv\/ruff\/pytest python-quality ratchet on changed files by @yuriolive in https:\/\/github.com\/mattias800\/prosper\/pull\/4127<br \/>\n&#8211; hle\/kernel: timed ERRORCHECK self-relock waits out the deadline, then ETIMEDOUT (libthr) by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4150<br \/>\n&#8211; loader: reject runtime DATA imports without a Program base by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4152<br \/>\n&#8211; libkernel: implement GetOperationMode, the coredump handler pair and PRT apertures by @yuriolive in https:\/\/github.com\/mattias800\/prosper\/pull\/4153<br \/>\n&#8211; docs: add diagnostics roadmap by @yuriolive in https:\/\/github.com\/mattias800\/prosper\/pull\/4151<br \/>\n&#8211; docs: explain the Black Flag init-function fault and the stack-check failure by @yuriolive in https:\/\/github.com\/mattias800\/prosper\/pull\/4160<br \/>\n&#8211; diagnostics: distinguish early persistent-color readback refusals by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4108<br \/>\n&#8211; present: report frame-time tail (p90\/p95\/p99) and 1% low by @yuriolive in https:\/\/github.com\/mattias800\/prosper\/pull\/4156<br \/>\n&#8211; tools: apply safe ruff autofixes across prosper Python (stacked on #4127) by @yuriolive in https:\/\/github.com\/mattias800\/prosper\/pull\/4130<br \/>\n&#8211; gpu: back one-hop nested x4\/x8 loads in direct graphics stages by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4104<br \/>\n&#8211; AGC: submit multi-DCB arrays as one ordered batch by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4158<br \/>\n&#8211; tools: add module docstrings to Python files lacking one (stacked on #4130) by @yuriolive in https:\/\/github.com\/mattias800\/prosper\/pull\/4134<br \/>\n&#8211; gpu: report consumed SMEM words in targeted fold traces by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4118<br \/>\n&#8211; tools: fix ruff bugbear findings B904\/B023\/B007 (stacked on #4134) by @yuriolive in https:\/\/github.com\/mattias800\/prosper\/pull\/4136<br \/>\n&#8211; test(hle): cover AMPR userdata registration and completion by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4168<br \/>\n&#8211; kernel: give Windows guests a readable, validated ScePthread handle by @yuriolive in https:\/\/github.com\/mattias800\/prosper\/pull\/4129<br \/>\n&#8211; hle: register scePthreadAttrGetstack by @yuriolive in https:\/\/github.com\/mattias800\/prosper\/pull\/4166<br \/>\n&#8211; fix(vkval): resolve native Windows validation probes by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4163<br \/>\n&#8211; recompiler: lower numeric S_FF1_I32_B32 by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4063<br \/>\n&#8211; prosper-app: exit non-zero when the guest faulted; report worker-thread and host faults by @yuriolive in https:\/\/github.com\/mattias800\/prosper\/pull\/4145<br \/>\n&#8211; tools: record run conditions and refuse to compare mismatched runs by @yuriolive in https:\/\/github.com\/mattias800\/prosper\/pull\/4165<br \/>\n&#8211; gpu: retain keyless buffer consumer PCs beside matching vertex buffers by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4169<br \/>\n&#8211; gpu: prove scalar scratch initialization in owned fragment packets by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4164<br \/>\n&#8211; tests: measured 300 s TIMEOUT for the fragment-packet oracle tests by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4177<br \/>\n&#8211; tests: run c11_sync_bookkeeping on Windows too by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4178<br \/>\n&#8211; tests: construct the lock test&rsquo;s contention instead of relying on the scheduler by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4185<br \/>\n&#8211; tools: drop the fragment-compiler reader-policy hash gate by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4186<br \/>\n&#8211; ci: collect seven more unittest-style tests via pythonpath (stacked on #4170) by @yuriolive in https:\/\/github.com\/mattias800\/prosper\/pull\/4183<br \/>\n&#8211; ci: add gitleaks secret-scan workflow by @yuriolive in https:\/\/github.com\/mattias800\/prosper\/pull\/4182<br \/>\n&#8211; docs: record that the Black Flag guest now runs and why every draw is dropped by @yuriolive in https:\/\/github.com\/mattias800\/prosper\/pull\/4196<br \/>\n&#8211; gpu: PROSPER_GPU_BREADCRUMBS names where the GPU stopped on a device loss by @yuriolive in https:\/\/github.com\/mattias800\/prosper\/pull\/4173<br \/>\n&#8211; tests: resolve the vkval scan test&rsquo;s temp root (macOS \/var symlink) by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4205<br \/>\n&#8211; docs: refresh title-wave integration and validation checkpoint by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4171<br \/>\n&#8211; test: use relative SDK pointers in buffer-publication fixture by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4181<br \/>\n&#8211; gpu: retain producing fragment entry facts in shipping packet preparation by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4190<br \/>\n&#8211; prosper-app: keep the grab drain and expiry poll at the top of the app loop by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4206<br \/>\n&#8211; tests: adopt GoogleTest, migrate 213 test files, enforce it for new tests by @yuriolive in https:\/\/github.com\/mattias800\/prosper\/pull\/4155<br \/>\n&#8211; fix: reject unusable capture comparisons and preserve graphics identity by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4172<br \/>\n&#8211; tests: GoogleTest migration follow-ups (Linux build fix, vendored gtest, live guards) by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4207<br \/>\n&#8211; tools\/ci: architecture ratchet gate (#4198) by @yuriolive in https:\/\/github.com\/mattias800\/prosper\/pull\/4199<br \/>\n&#8211; Agent rules: architecture\/performance ratchets and steady-state perf invariants (#4193) by @yuriolive in https:\/\/github.com\/mattias800\/prosper\/pull\/4204<br \/>\n&#8211; hle: skip zero-length segments in sceAgcDriverSubmitMultiDcbs by @yuriolive in https:\/\/github.com\/mattias800\/prosper\/pull\/4194<br \/>\n&#8211; perf-alarm: print where the frame budget goes at exit (frame-breakdown) by @yuriolive in https:\/\/github.com\/mattias800\/prosper\/pull\/4188<br \/>\n&#8211; tools\/ci: structural ratchet rules, baseline path containment, platform seam and target tree docs (#4198) by @yuriolive in https:\/\/github.com\/mattias800\/prosper\/pull\/4215<br \/>\n&#8211; gpu: execute owned logical64 fragment resource chains transactionally by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4212<br \/>\n&#8211; ci: clang-format + clang-tidy, gated on changed lines only (#4210) by @yuriolive in https:\/\/github.com\/mattias800\/prosper\/pull\/4217<br \/>\n&#8211; gpu: prepare the producing PS USER_SGPR entry prefix by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4213<br \/>\n&#8211; ci: fix Windows App ctest syntax error in skip regex by @yuriolive in https:\/\/github.com\/mattias800\/prosper\/pull\/4226<br \/>\n&#8211; ci: fix main build breaks (gtest registration, Vulkan-gated diagnostics tests) by @yuriolive in https:\/\/github.com\/mattias800\/prosper\/pull\/4222<br \/>\n&#8211; hle: key APR completion delivery on a per-binding dialect (stacked on #4174) by @yuriolive in https:\/\/github.com\/mattias800\/prosper\/pull\/4200<br \/>\n&#8211; gpu\/recompiler: integer packet RCP SQRT and direct RSQ by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4232<br \/>\n&#8211; tests: expect EVFILT_AMPR (-25) in AMPR completion tests by @yuriolive in https:\/\/github.com\/mattias800\/prosper\/pull\/4237<br \/>\n&#8211; ci: register test_indirect_dispatch_device_route as a gtest on Linux by @yuriolive in https:\/\/github.com\/mattias800\/prosper\/pull\/4233<br \/>\n&#8211; host: Windows data write-watchpoint on every guest thread (PROSPER_HWWATCH_ABS) by @yuriolive in https:\/\/github.com\/mattias800\/prosper\/pull\/4227<br \/>\n&#8211; test: update raw_register_wide_data for capture v69 tail by @yuriolive in https:\/\/github.com\/mattias800\/prosper\/pull\/4238<br \/>\n&#8211; ci: fix arch_ratchet_gate and ratchet_hook on Windows MinGW (^{commit} mangled by MSYS git) by @yuriolive in https:\/\/github.com\/mattias800\/prosper\/pull\/4239<br \/>\n&#8211; gpu: separate packet VGPR scratch from per-lane entry values by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4236<br \/>\n&#8211; docs: organize prosper\/docs into topic folders by @yuriolive in https:\/\/github.com\/mattias800\/prosper\/pull\/4229<br \/>\n&#8211; docs: archive resolved docs, rewrite ROADMAP as current direction by @yuriolive in https:\/\/github.com\/mattias800\/prosper\/pull\/4231<br \/>\n&#8211; gpu: cache original fragment kernels with owned per-wave data by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4241<br \/>\n&#8211; gpu: admit a closed early-out block past the first s_endpgm in the split-T# proof (stacked on #4219) by @yuriolive in https:\/\/github.com\/mattias800\/prosper\/pull\/4234<br \/>\n&#8211; tests: migrate 62 more tests to GoogleTest (Linux\/macOS\/Vulkan-gated, CI-verified) by @yuriolive in https:\/\/github.com\/mattias800\/prosper\/pull\/4216<br \/>\n&#8211; Fix APR userdata lifetime across equeue handle reuse by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4175<br \/>\n&#8211; tests: exhaustive RDNA2 decode sweep; fix gather4 and D16 register-footprint under-counts by @yuriolive in https:\/\/github.com\/mattias800\/prosper\/pull\/4228<br \/>\n&#8211; gpu: preserve descriptor routing across read-only FLAT loads by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4252<br \/>\n&#8211; docs: allow concurrent compatibility and correctness checks by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4255<br \/>\n&#8211; fix(gpu): produce distinct perspective pull-model planes by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4245<br \/>\n&#8211; Fix APR result records and separate completed submit IDs by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4258<br \/>\n&#8211; fix(loader): validate initial Linux stubs before mapping by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4259<br \/>\n&#8211; Make fence build journal samples fault safe by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4261<br \/>\n&#8211; Materialize actual saved Wave64 mask words in owned packets by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4244<br \/>\n&#8211; loader: run unimported auto-linked PRX init at sceKernelLoadStartModule (#4139) by @yuriolive in https:\/\/github.com\/mattias800\/prosper\/pull\/4221<br \/>\n&#8211; fix(symbols): expose tied IL2CPP method candidates by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4264<br \/>\n&#8211; Fix owned nested x2 numeric VCC inputs for compute by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4263<br \/>\n&#8211; docs: add 007 First Light and Silksong progress entries by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4266<br \/>\n&#8211; gpu: execute owned per-wave raw x4\/x8 graphics loads by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4270<br \/>\n&#8211; gpu: demand only reaching initial packet EXEC VCC SCC by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4249<br \/>\n&#8211; fix(host): recover Windows guest faults with explicit native state by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4267<br \/>\n&#8211; fix(host): single-gate PROSPER_HWWATCH_MAX warning (unbreak Docs diag-gate job) by @yuriolive in https:\/\/github.com\/mattias800\/prosper\/pull\/4282<br \/>\n&#8211; Silksong: restore all menu text (storage-image DST_SEL), implement its 9 missing calls, keep refused shaders by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4290<br \/>\n&#8211; fix(host): define module initializer callback and descriptor ABI by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4286<br \/>\n&#8211; gpu: explicit architectural EXP observation and completion-safe owned packet events by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4256<br \/>\n&#8211; test(savedata): release icon readback handles before replacement by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4294<br \/>\n&#8211; hle(memory): query Darwin direct readable memory window via mach_vm_region by @yuriolive in https:\/\/github.com\/mattias800\/prosper\/pull\/4288<br \/>\n&#8211; docs: support varied tracker headings, unadorned rungs, and unrecorded oracle state by @yuriolive in https:\/\/github.com\/mattias800\/prosper\/pull\/4289<br \/>\n&#8211; Fix #4276 stale contract tests; hand compute BGRA render targets in guest order (#4291) by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4297<br \/>\n&#8211; fix(gpu): bound original refused-shader observations by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4298<br \/>\n&#8211; Lower unsigned compute DPP row maxima with guarded CFG sources by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4271<br \/>\n&#8211; gpu: migrate test_rdna2_decode to GTest; pin SOP1\/VOP3 predicate tables to LLVM by @yuriolive in https:\/\/github.com\/mattias800\/prosper\/pull\/4303<br \/>\n&#8211; gpu(recompiler): fix RDNA2 register-footprint counts for byte\/short stores and FLAT D16 loads by @yuriolive in https:\/\/github.com\/mattias800\/prosper\/pull\/4312<br \/>\n&#8211; test: use SDK-relative registers in compute producer fixtures by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4329<br \/>\n&#8211; gpu: connect original fragment Wave64 to device draw transactions by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4281<br \/>\n&#8211; test(host): guard guest FS swap stub frame layout by @yuriolive in https:\/\/github.com\/mattias800\/prosper\/pull\/4327<br \/>\n&#8211; test(apr): call the APR stub with the guest ABI and install it once per process by @yuriolive in https:\/\/github.com\/mattias800\/prosper\/pull\/4285<br \/>\n&#8211; gpu: finalize ordered rendering after actual snapshot splits by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4284<br \/>\n&#8211; test: add dump-independent NID golden vectors by @yuriolive in https:\/\/github.com\/mattias800\/prosper\/pull\/4333<br \/>\n&#8211; test(hle): pthread key teardown conformance through the scePthread HLE by @yuriolive in https:\/\/github.com\/mattias800\/prosper\/pull\/4307<br \/>\n&#8211; test(gpu): pin fail-visible refusals for six unlowered opcodes by @yuriolive in https:\/\/github.com\/mattias800\/prosper\/pull\/4316<br \/>\n&#8211; hle\/libc: call guest qsort\/bsearch comparators in the guest ABI; strlcpy\/qsort\/bsearch HLE tests by @yuriolive in https:\/\/github.com\/mattias800\/prosper\/pull\/4295<br \/>\n&#8211; test(hle): sscanf contract tests through the registered HLE handler by @yuriolive in https:\/\/github.com\/mattias800\/prosper\/pull\/4299<br \/>\n&#8211; gpu: retain original scalar-buffer read demands and descriptor origins by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4342<br \/>\n&#8211; test(hle): printf\/scanf\/strtod contract tests through the registered HLE handlers by @yuriolive in https:\/\/github.com\/mattias800\/prosper\/pull\/4310<br \/>\n&#8211; hle\/fs: parse guest fopen modes before the host CRT; fopen mode tests by @yuriolive in https:\/\/github.com\/mattias800\/prosper\/pull\/4313<br \/>\n&#8211; test: migrate messenger guard + compare_exec_masking to GTest by @yuriolive in https:\/\/github.com\/mattias800\/prosper\/pull\/4335<br \/>\n&#8211; test: cover direct-memory map failure rollback by @yuriolive in https:\/\/github.com\/mattias800\/prosper\/pull\/4336<br \/>\n&#8211; test(ci): sanitize SELF and ELF loader regressions by @yuriolive in https:\/\/github.com\/mattias800\/prosper\/pull\/4340<br \/>\n&#8211; test(hle): cover BatchMap partial failure prefix by @yuriolive in https:\/\/github.com\/mattias800\/prosper\/pull\/4343<br \/>\n&#8211; fix(loader): reject PT_LOAD filesz larger than memsz by @yuriolive in https:\/\/github.com\/mattias800\/prosper\/pull\/4347<br \/>\n&#8211; test(hle): cover MapDirectMemory2 failure state by @yuriolive in https:\/\/github.com\/mattias800\/prosper\/pull\/4346<br \/>\n&#8211; memory: prove fault safety of committed Windows direct-section ranges by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4350<br \/>\n&#8211; Add guarded floating DPP row rotation and exact native CFG routing by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4315<br \/>\n&#8211; docs: record bounded Sonic HUD fetch findings by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4353<br \/>\n&#8211; gpu: issue ordered read points for checked graphics RAW sources by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4332<br \/>\n&#8211; gpu: reassemble split quad scopes so llvmpipe can run owned fragment waves (#4277) by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4354<br \/>\n&#8211; docs(gpu): cite both guards behind the split-scope key&rsquo;s primitive identity by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4361<br \/>\n&#8211; diagnostics: expose bounded Windows native HLE wait provenance by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4337<br \/>\n&#8211; test(ci): sanitize synthetic loader and relocation tests by @yuriolive in https:\/\/github.com\/mattias800\/prosper\/pull\/4360<br \/>\n&#8211; docs: add the stub-platform-arm debt, open questions and an APR placement recommendation to the target tree by @yuriolive in https:\/\/github.com\/mattias800\/prosper\/pull\/4363<br \/>\n&#8211; ci: fix main&rsquo;s remaining Linux and Windows CI failures by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4368<br \/>\n&#8211; fix(gpu): recognise Silksong&rsquo;s DCC-decompress helper; its 1.0 export painted the boot screen white by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4359<br \/>\n&#8211; fix(macos): gpu_replay did not compile on macOS; build it in the macOS App job by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4364<br \/>\n&#8211; fix(hle): macOS GC stop-the-world burst overflowed the pending-exception table (Silksong scene-load hang) by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4351<br \/>\n&#8211; test(fixtures): retry scratch creation when a peer removes the shared root by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4371<br \/>\n&#8211; macOS: AvPlayer backend on AVFoundation + VideoToolbox; skip an FFmpeg that cannot link for the target arch by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4326<br \/>\n&#8211; ci(ratchet_hook): derive the checkout root from &#8211;show-cdup, not &#8211;show-toplevel by @mattias800 in https:\/\/github.com\/mattias800\/prosper\/pull\/4373\n<\/div>\n<p>&nbsp;<\/p>\n<p class=\"p_telecharger_icone_zip\"><a class=\"telecharger_icone_zip\" href=\"https:\/\/www.emu-france.com\/?wpfb_dl=8398\" title=\"Download Prosper\">T\u00e9l\u00e9charger Prosper v0.2.3 (85.4 Mo)<\/a><\/p>\n<p class=\"p_site_officiel\"><a class=\"site_officiel\" href=\"https:\/\/github.com\/mattias800\/prosper\" target=\"_blank\" rel=\"noopener\">Site Officiel<\/a><\/p>\n<p class=\"p_en_savoir_plus\"><a class=\"en_savoir_plus\" href=\"https:\/\/www.emu-france.com\/emulateurs\/5-consoles-de-salon\/476-sony-playstation-5\/\">En savoir plus&#8230;<\/a><\/p>\n<div class=\"fcbkbttn_buttons_block\" id=\"fcbkbttn_left\"><div class=\"fb-share-button  \" data-href=\"https:\/\/www.emu-france.com\/?p=137528\" data-type=\"button_count\" data-size=\"small\"><\/div><\/div>","protected":false},"excerpt":{"rendered":"<p>Prosper (ps5ys) est une couche de compatibilit\u00e9 open-source permettant de faire tourner des logiciels et des jeux PS5 sous Linux et Windows. &nbsp; Ce n&rsquo;est pas un \u00e9mulateur: la PS5 et les PC partageant la m\u00eame architecture processeur (x86-64), le &#8230;<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"jetpack_post_was_ever_published":false},"categories":[1],"tags":[],"class_list":["post-137528","post","type-post","status-publish","format-standard","hentry","category-par-defaut","uentry","postonpage-1","odd","post-author-Jets"],"jetpack_publicize_connections":[],"jetpack_shortlink":"https:\/\/wp.me\/pKi2R-zMc","jetpack_likes_enabled":false,"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/www.emu-france.com\/index.php?rest_route=\/wp\/v2\/posts\/137528","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.emu-france.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.emu-france.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.emu-france.com\/index.php?rest_route=\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/www.emu-france.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=137528"}],"version-history":[{"count":12,"href":"https:\/\/www.emu-france.com\/index.php?rest_route=\/wp\/v2\/posts\/137528\/revisions"}],"predecessor-version":[{"id":137570,"href":"https:\/\/www.emu-france.com\/index.php?rest_route=\/wp\/v2\/posts\/137528\/revisions\/137570"}],"wp:attachment":[{"href":"https:\/\/www.emu-france.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=137528"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.emu-france.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=137528"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.emu-france.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=137528"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}