Welcome back to another shadPS4 release . It is over one month since our previous release and guess what we are back again with a lot more fixes and a lot more playable games . Rapid work has been done in different areas of the emu, but i guess the glory goes to the huge amount of GPU fixes that improved so many games, some of them are really playable now . I won't steal the fun of discovering these, so here is a brief list of changes.
Core
- Rewrote signal emulation again
- Fixed incorrect error return on attempting to create a file in a nonexistent folder in a writable mount
- Fix reserved region coalescing in POSIX address space code
- Support loading entitlements from RIF licenses
- Optimized logger by replacing hash map with table lookup and hide implementation details
- Support loading DLC as ZAR
- Reworked slot vector
- Fixed sceKernelReserveVirtualRange alignment and add ClearName
Libraries
- Use present scheduler for blank frame prepare
- np_auth : Change default GetAuthorizationCode returns to be valid
- np_trophy: Fixed displaying of trophy name
- http2 : Fixes and cleanups
- np_tss : Added TSS support
- camera : Use a system mapping for camera frame data
- np_utility: Initial impelmentation
- vdec2: support for h265/hevc
- ajm mp3: rely on ffmpeg parser for packet boundaries
- Kernel.Pthread: Remove RunThread stack logging
- np_web_api : Added pTo and pFrom to OrbisNpPeerAddressA support
- Very basic HLE Keyboard library
- scePthreadRwlockTimedrdlock / scePthreadRwlockTimedwrlock take a relative timeout in microseconds
- Implemented sceKernelGetProcessType
- Implemented sceKernelReleaseFlexibleMemory and POSIX mlock/munlock aliases
Video Core
- Improve tsharp robustness
- Use stb_image_write for screenshots
- Emulate scaled min/max blending
- Do not auto-select a software rendering device
- Decode sRGB for A2R10G10B10Srgb display buffers
- Handle QuadStrip as a triangle strip
- Add R8G8Srgb fallback to R8G8Unorm
- buffer_cache: Refactor buffer manager with sparse arenas
- Commit the emulated-LDS allocation taken from the stream buffer
- Only enable sampler comparison for comparison fetches
- Respect SPI_BARYC_CNTL front-face encoding
- Invalidate cached images after raw buffer writes
- Fixed locking behaviour for signals delivered to GPUComm thread
- buffer_cache: Rework memory tracker and implement batched uploads
- Moved on_submit callback before EndSession
- Fixed compute shader floating-point mode
- page_manager: Keep the fault probe within the faulting page
- Bind a default sampler for S# with undefined fields
- Fix sparse backing offsets, barriers, and memory budgeting
- texture_cache: Avoid associating color images with stencil
- Fixed mip layout and detiling of tiled textures
Shader recompiler
- Properly handle BaryCoord attributes on non-AMD GPUs
- Compute GDS offset dynamically instead of as compile-time constant
- Storage buffer related clean-up
- Neo: MIMG instructions
- Improve ssa rewrite pass correctness and readability
- Add support for virtual registers
- Add ssa destruction pass
- Decorate written storage buffers as Coherent
- Structurize later in the pipeline and cleanup
- Enhance shared memory barrier handling and add divergent loop detection
- Split resource tracking and flatten load from buffer for sharp source
- Reimplemented B64 SALU opcodes with U64 masks
- Implemented S_MEMTIME
- Implement S_BITSET0_B64 and S_BITSET1_B64
- Skip lowering for null buffer sharps
- Implemented some V_CMPX_U64 ops
- Lower wave64 constructs for wave32
- Refactor runtime info as two tagged unions
- resource_patching_pass: Accept ds_append/consume without users
- Implement support for base vertex/instance in indirect draws
- Recognize sharp sources broadcast via V_READFIRSTLANE_B32
- Properly check for immediate args in GetRealValue
- Refactored parser to enable vertex count calculation for position only copy shaders
- Implemented fragment sample coverage input
- Added pull-model barycentric support
- Test S_BITCMP_B64 against the full 64-bit src
- Fixed geometry invocation count comparison
- Lower ballot and MBCNT as a pair
- Define SampleId for BaryCoordSmoothSample on the KHR path
- Eliminate readlanes before the tessellation and ring passes
- Read user data from the flat buffer
- Fix gradient and offset for 1D images
- Lower PackedAncillary from attribute loads
- resource_patching: Patch thread id add instead of id itself
- Allow InverseBallot folding to fail on unhandled immediate arguments
- Fix OpImageTexelPointer coords for 1D
- V_CVT_PK_U8_F32 fixup
- V_ALIGNBIT_B32 / V_ALIGNBYTE_B32 fixup
ShadNet
- Online trophy support