KytyPlus v5.1
Two changes aimed at the same class of failure: running out of graphics memory, and a shader
that a Mac driver simply refuses to build.
Making room for a large texture (issue #17)
- A cached texture is now evicted to fit a new one, instead of the allocation being refused.
The periodic collector was gated on usage thresholds and freed at most 10, 20 or 40 images per
pass, so a title asking for one big allocation at a scene transition could be refused while
hundreds of stale textures sat in the cache. Inserting an image now checks what the device
reports as free, and evicts least-recently-used textures until the request fits with headroom. - The headroom is deliberate. The driver still needs memory for its own page tables and
staging, so the target is not the last byte of the heap; aiming at that trades this failure for
a worse one later in the same frame. - The previous release could only trim buffers from this point, because image creation happens
while the texture cache lock is held and calling the collector from there would have deadlocked.
The eviction now runs where the lock is already held, which is what makes it possible at all. - This is still containment. If nothing is reclaimable the run ends as before, and nothing here
explains why memory fills up. On an 8 GB card a title that genuinely needs more will now thrash
rather than abort, which gets further but is not a fix.
Apple Silicon: vertex shaders that use lane operations (issue #18)
- Metal cannot compile a subgroup operation into a vertex, tessellation or geometry function at
all - not a missing feature, a hard refusal - and a Unity title on an M1 was dying at pipeline
creation because the recompiler emittedgl_SubgroupInvocationIDand friends there. Those stages
now emit as a wave of one lane: the lane index is zero, a shuffle returns the value in hand, a
ballot reports only the invoking lane, and the subgroup barrier is dropped. - Pixel and compute shaders are unchanged, since Metal supports subgroups in both. Windows and
Linux are unaffected by construction - the fallback is compiled in only for Apple. - This is a degradation, not an emulation. A title that genuinely exchanges data between
vertex invocations will render incorrectly where it used to stop running. That is the only
option Metal leaves, and rendering something is the better failure.
Known issues
- Device-memory exhaustion is still the open problem. The
vkQueueSubmitvariant of it is not
addressed by this release, and the eviction here has not been run against Demon's Souls - no
copy of it is installed here, so the next report from that title is the real test. - The upscaler options in the launcher currently do nothing. FSR method, quality and render
scale are read from the configuration but have no call sites in the present path, so output is a
single blit at the window size. Claims about upscaled resolutions should not be made yet. - PS5 packages that are encrypted still cannot be installed, unchanged: retail package keys are
not available, so only packages carrying the plain or debug marker get through.