The draw key now has a shape: the key without the user words the stages read.
A draw whose key misses but whose shape has an entry copies that entry's decode,
re-reads only the user words (and merged-stage pointers), and reuses each
compiled stage whose captured reads still hold, compiling the rest.
APS5_NO_DRAW_DATA_HITS=1 disables it; APS5_VERIFY_DRAW_DATA_HITS=1 also decodes
and compiles in full and throws when the results differ.
A shape keeps its previous entries and only points at its newest key, so
draws of one shape that alternate between stable user words keep their own
key hits. The shape is passed only when data hits are on, so
APS5_NO_DRAW_DATA_HITS=1 keeps the previous behaviour exactly.
Rebased onto main a8b032b2 by CouchRiv (the conflicts with #639 resolved; built and tested on Linux with an RTX 4070 Ti and RADV, and on Windows with an RTX 5080), and onto main 6ac63bf0c by gjonn (main's free-function decoder with its static-ABI mode, its incremental register key as the shape key).
Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
Co-authored-by: CouchRiv <[email protected]>
Co-Authored-By: Gjon Gojcevic <[email protected]>
ds_add_f32 and ds_add_rtn_f32 now follow the measured hardware: both
operands are flushed to a signed zero when bit 0 of the f32 denormal field
is clear and the result when bit 1 is clear, the sum is rounded to nearest
even, a NaN data operand is stored quieted, else a NaN old value is stored
quieted, and +inf + -inf stores 0xffc00000. Measured on gfx1010 and, in
#5492, on gfx1031.
The new MemoryInfo field is stored in the shader disk cache (field count
31, minimum record 79 bytes, FormatVersion 34). The parts that depend only
on the data operand are computed once, before the CAS loop.
Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
The POSIX watch registration passed UnalignedBlockBytes (2*65536+2048), whose
2048 remainder is rejected by UFFDIO_REGISTER with EINVAL, so the test failed at
the not-write-watched Require on Linux. Register and unregister ArenaBytes
(3*65536), which is page-aligned; the Watched Require and Mutation().Add keep
UnalignedBlockBytes so the Windows host-import refusal that preserves the
write-watch is unchanged.
The driver keeps the replaced headless VulkanDevice alive next to the
windowed one, so a process holds two Graphics::PipelineCache objects for
the same vk-pipelines-*.bin. Each saved its own VkPipelineCache over the
whole file, periodically and at teardown, so the last writer dropped the
other object's pipelines and those of earlier runs.
A save now reads the file under a per-path mutex, validates it as the load
does, creates a temporary cache from it and merges this object's cache into
that temporary one, then writes the result atomically. Merging into the
temporary cache keeps the live cache free of the external synchronisation
vkMergePipelineCaches requires of its destination. A merge that adds
nothing leaves the file as it is, an unreadable file is not written over,
and a result smaller than the file on disk or the data loaded at start is
not written; an invalid file or one the driver refuses is replaced.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
The Windows error for a refused FindFirstChangeNotification was one string shared
by WatchParent and WatchContents, so the log could not tell which handle or path
was denied. Build it from the watcher, the path the API was given and
GetLastError instead.
Still throws: the EVFILT_VNODE attach path is vfs_kqfilter, which returns only
EINVAL, ENOMEM or 0, with EBADF from fget before it, and consults no directory
permission, so no FreeBSD errno stands for a host that refuses to notify.
This reverts commit 1a2d01ab0. It registered agc_driver_recorder in ctest,
which requires /dev/udmabuf access; the self-hosted Linux runners lack it,
so main has been red on Linux since a1b6be7ef.
Co-Authored-By: Claude <[email protected]>
The test calls sceUserServiceGetEvent without sceUserServiceInitialize, which
returns NOT_INITIALIZED since #5233, so guest_user_service aborts on main.
#5233's GuestUserServiceLifecycle covers the login event after Initialize.
Co-Authored-By: Claude <[email protected]>
The README no longer embeds history.svg; it links history.html, which the progress page also links.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
The overlay's SHADERS count for compute pipelines sat in VulkanDevice::dispatch, inside a block that another open change moves. CreateComputePipeline now counts each pipeline it creates, so the count follows the creation wherever it runs. The capture replay path, which creates the same title pipelines, is counted too.
Main's flatVolumeLineCompatible change also took format 34 with another layout, so entries of either would load as the other.
Co-Authored-By: Claude <[email protected]>
Check sampled image-table entries with the existing stencil replay depth-feedback refusal. Keep the cache regression tied to current upstream format 33 while stencil artifacts use format 34.
Co-Authored-By: Codex <[email protected]>
Move bounded vertex folding and empty-image feedback into separate topics. Keep the replay coverage proof, stage contracts, finite-reference tests and mapped cache regressions; version the stencil layout separately as format 34.
Co-Authored-By: Codex <[email protected]>
Advance stencil artifacts to format 33 after main's format 32 change. Keep explicit rejection of upstream format 32 while preserving the existing stencil fields and runtime image metadata.
Co-Authored-By: Codex <[email protected]>
Advance the stencil artifact schema past current main format 31 and retain explicit rejection of that format. Update Linux artifact size guards for main runtime image resource metadata.
Co-Authored-By: Codex <[email protected]>