Skip to content

KytyPlus Version 3.8

KytyPlus v3.8, a standalone PS5 emulator for Windows, macOS, and Linux, has been released. Key improvements include iGPU optimization and build stability, with major enhancements for Crash Bandicoot 4, now successfully playing its cutscenes. Bug fixes address streaming issues and improve queue management, preventing hangs. New diagnostics tools enable better monitoring of hang issues. The emulator’s FSR upscaling is no longer auto-enabled for integrated GPUs due to driver faults. Overall, this release significantly enhances rendering correctness and performance, requiring user testing for compatibility with current titles. Users can download the latest version from the official source.

KytyPlus v3.8 has been released. KytyPlus is a KytyPS5-based emulator for PlayStation 5, available for Windows, macOS, and Linux. This repository is a standalone project derived from KytyPS5 (which is based on Kyty), with a focus on iGPU optimization, build stability, and a unified dispatch for PS4/PS5 (iGPU behavior is still unverified; see iGPU status).

KytyPlus Changelog:
Overview
This release features improvements from two previous updates on a single title: Crash Bandicoot 4 now successfully plays its cutscenes. The intro video plays completely, rather than stopping at the fourth bumper, and the issue of a black window appearing after the logo has been resolved.
For all other titles, this update includes numerous correctness fixes, such as a fence wait that could not be re-evaluated, geometry draws being skipped, three atomics incorrectly classified as plain reads, and a depth-stencil aspect that was demoted while still in use—along with the resolution of a crash-prone default and hang diagnostics that will appear in your log for any title.
Crash Bandicoot 4: the cutscene sequence now completes.
The v3.7 retest log revealed a genuine deadlock in video 4 (BumperUnreal): the demuxer reached EOF and both decoders finished, but Active() remained true for 116 seconds because decoded frames were still in the queue. The game stops polling GetVideoData near the end of a video, leading to unprocessed frames and the state machine never reaching the branch that triggers STATE_STOP. Videos 1-3 made it through only because the game consumed their queues before halting the polling.
End-of-stream is now defined as “demuxer at EOF and both decoders finished”—queued leftovers no longer keep a player active. The moment a drained video’s workers finish, the natural-EOF gate triggers STATE_STOP exactly once, regardless of whether the game continues to consume. This is what resolves the fourth bumper issue, allowing the full sequence (Intro_delay → BumperAtviNextGen → BumperTfbNextGen → BumperUnreal) to run to completion.
The black screen following the logo has been addressed as well.
Two separate bugs have been fixed.
A fence wait that could never be re-evaluated
CB4 was stuck on a black screen while the present loop was cycling empty frames at ~3 fps, with no draws reaching the GPU. The UE4 RHI continually issued a release_mem + wait_reg_mem fence on the compute queue. A submission blocked on wait_reg_mem remained at the front of its queue, with the GPU thread only clearing blocked flags when every queue was idle—so the graphics queue was never re-polled while the compute queue continued generating work.
The wait was evaluated once, failed once, and was never retried.
Blocked queue fronts can now be re-polled every 10 ms, even while other queues have tasks, ensuring that blocked waits are properly re-evaluated.
A new per-address stalled-wait watchdog monitors for 10 consecutive seconds of unmet polls, after which the wait is released and the awaited value is written, keeping guest bookkeeping consistent and allowing for self-healing instead of getting stuck indefinitely. Ten seconds is comfortably longer than an iGPU shader-compile burst; normal waits resolve in microseconds and won’t trigger this.
write32/write64 and CpOpReleaseMem now protect against null destinations—previously, an unpatched release_mem label could lead to a memcpy to nullptr.
This single change allowed CB4 to surpass the splash screen—further than previously documented results for this title (upstream v0.0.5.5 crashes after splash, #88).
FSR upscaling on integrated GPUs
The 0xc0 fault—an access violation within the AMD driver at CB4’s first menu presence, occurring when the display-mode switch triggers resize churn—required four commits to accurately address, ending in a decision to “not do this by default”:
A surface rebuild swaps the Vulkan device handle, causing FSR pipelines and descriptor sets built on the old handle to be dispatched to a non-functional one. Dispatch now binds to the creating device handle and withstands context rebuilds.
Destroy() never previously acquired the mutex outlined in its own header for serializing Dispatch against Destroy, so a resize could free pipelines and UBOs while a recording thread was active. It is now secured.
The initial set of guards was incorrect in a revealing way: it required resources to be present at Dispatch() entry, but those are created lazily within Dispatch(). Thus, the guard could never succeed—FSR became unusable, every present defaulted to blit, and reset() churned the upscaler multiple times per run. The guard now only checks what Create() actually provides.
This correction exposed the real problem: FSR 1.0 consistently fails in the current AMD driver, regardless of our lifetime handling. The plain blit path successfully displays content without the compute pass (verified: the splash renders through blit on the same machine), so the iGPU performance floor is now influenced solely by texture LOD bias. FSR remains available for explicit opt-in from the launcher; it is no longer enabled by default on integrated GPUs.
If you’ve been using FSR on an AMD iGPU and encountering a driver reset, this release removes that option from your defaults.
Presentation fixes on integrated GPUs
Present mode is now set to FIFO on iGPUs. The default for the launcher is Immediate, and Immediate on the Radeon 840M results in no output whatsoever—the only difference found in the logs was this (presentMode=Fifo for the successful run, Immediate for every unsuccessful attempt). The floor is applied in both the configuration defaults and the swapchain, ensuring that a configuration still requesting Immediate or Mailbox cannot reintroduce black output.
Zero-extent swapchains are now rejected. The window could self-minimize during a session; SDL reported a 0Ɨ0 surface, the swapchain was rebuilt at 0Ɨ0, and it remained broken for an extended period before a successful resize corrected it. A zero extent now retains the last known size and reverts to the configured screen size.
The launcher no longer wraps the emulator in cmd /K with CREATE_NEW_CONSOLE. Instead, it launches the emulator directly, preventing the exit code from being suppressed.
Rendering correctness fixes
Three bugs that caused work to be dropped or corrupted have been identified while addressing the above:
Geometry-stage draws were being overlooked. CB4 transitions from ES+GS to NGG primgen passthrough without clearing the prior GS address—inactive stages maintain their base registers.
The skip test previously rejected any draw that had a non-zero GS address along with a non-zero ES address, which is exactly the sequence emitted by CB4, resulting in its vertex draws being classified as Skipping unsupported GE shader draw. This is now gated by the GS stage-enable bit, which accurately determines if a shader address corresponds to an active shader.
IsAtomic() dropped three atomics. It enumerated AtomicUMin..Or and subsequently fell into default: return false, leading to AtomicXorU32, AtomicFMinF32, and AtomicFMaxF32 being misclassified as plain reads, preventing the IR from marking those image resources as atomic. Consequently, the compute watchdog had to bluntly compensate, dropping every storage image that lacked STORAGE_IMAGE_ATOMIC—silent discards of CB4’s color clears on RGBA8_UNORM and similar formats. With the flag corrected, the guard can now ask the appropriate question.
Depth aspect demotion. Sampling a depth image obtained in read-only-stencil inadvertently demoted both aspects to read-only, affecting the writable stencil attachment. The transition now adds shader-read access to the existing state instead of re-selecting a read-only layout for the entire image.
Movie playback
file:// URIs are stripped prior to the path reaching the filesystem. UE movies utilize the URI format while startup movies use standard paths, and the URI form silently failed to open—the only log line mentioned the path without indicating it was the issue. All instances of early-return failures (open, find_stream_info, codec init) now log their reasons.
Hang diagnostics
Both diagnostics appear in the log and function for any title, not just CB4:
Infinite KernelWaitEventFlag/KernalWaitSema waits (timeout == nullptr) now log the object pointer, bit pattern/need count, and wait mode.
Any single PthreadCondWait exceeding 10 seconds will report the cond/mutex/thread pointers, logging once per second per stuck wait.
These diagnostics were added because CB4’s hang resulted in a silent block—shaders compiled, then no activity in the log, with two threads stuck and a black screen. They transform “it hung” into a named object in the log.
Compatibility table
Crash Bandicoot 4: It’s About Time (PPSA02433)—the Native (PS5) row still shows “Boots / logos only” at v3.6, which this release supersedes. The newly verified depth confirms the full intro cutscene chain plays to completion. This row updates through the normal process.
For testers—please retest
The FSR removal represents a behavior change for integrated GPUs, and the GPU command-path updates (watchdog, anti-starvation re-poll) affect every title. If possible, run a build from this release on your usual title and report any changes—a log via Share Log is ideal. The stalls that previously appeared as “it hangs” should now be named in the log, so if you still encounter a hang, this log entry will indicate exactly which object to investigate.

Download:KytyPlus v3.8
Source:Here

Tags

About

David (Dadmin) B. is a writer with a passion for retro gaming, Christianity, disaster preparedness, America’s military and law enforcement, and the occasional dose of slapstick absurdity masquerading as satire. He enjoys digging into forgotten stories, preserving various elements of history, and creating content that is informative, entertaining, and full of personality.

Check Also

KytyPS5 Release Date: September 25, 2026

KytyPS5 (2026/09/25) has been released, serving as a compatibility layer for PlayStation 5. The project …

Leave a Reply

Your email address will not be published. Required fields are marked *