ResultKeyMemo declared std::atomic<std::shared_ptr<...>>. libc++ has no
atomic<shared_ptr> specialization, so with Apple clang the recompiler
headers stop at std::atomic's trivially-copyable static assertion
(request_serializer_tests in the macOS relinker build). The memo now uses
AtomicSharedPtr from libc, which is that specialization where the library
provides it and a locked shared_ptr with the same load and store otherwise.
The header joins the shader disk cache key's sources, and
request_serializer_tests gets core/libs on its include path.
On Windows a thread_local destructor in a module runs after emulated TLS
has freed the object, and prx_thread_local_destructors refuses
libSceAgcDriver.prx for it. The draw pipeline of upstream PR 6946
(Raghav314, f8192a64b3) added such scratch objects:
DrawFinisher::Enqueue's and DrawPipeline::Enqueue's reclaim lists,
CachedFragmentOutputs' last key and outputs, DecodeVertexStageInfo's
attribute and buffer tables, and PrepareDrawBindings' pool size counts.
They now live in HostThreadLocal, as the driver's other per-thread
scratch does; on other hosts that is the same thread_local.
The second half of a pipelined draw (stage materialization, cache insert,
enqueue) runs on a finisher thread, overlapping the next draw's packet
work; draws whose stages could write memory are held back. Commits skip
work whose inputs did not change since the last commit, color metadata
passes are ordered through the pipeline, resource and storage-image proofs
are reused within one collect epoch until a write breaks them, and a shape
entry is refreshed in place at the second sight of the same read user words.
APS5_VERIFY_DRAW_PIPELINE checks reused proofs against a full check.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Root passes the faccessat check in shm_unlink, so the EACCES expectation
fails under root as the read-only cases of GuestTruncate would. Skip it
there with the same message GuestTruncate prints.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Build the bundled libopus with hidden visibility and an empty OPUS_EXPORT,
so its symbols stay internal without relying on --exclude-libs (which
Apple's linker lacks). Turn off OPUS_STACK_PROTECTOR and
OPUS_FORTIFY_SOURCE so MinGW builds do not import libssp-0.dll, as in
27c0acabe2 from #9764. Ship the notice through the licenses list as
libs/licenses/opus.txt, like vgmstream.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
A sampler voice with no setup used to enter the playing state and never finish, so a title that frees its sound slots by polling sceNgs2VoiceGetStateFlags ran out of slots. The PS4 firmware 11.00 library fails the event and keeps the voice idle.
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
HostImportFor walks the import map under the import mutex for every
in-place vertex input, index buffer and label it serves, most of them
for the same few buffers. It now first checks the last four imports a
lookup found, while the map is the one they came from: the imports epoch
moves with every retire and trim and the map's size with every insert.
Imports in the map never overlap, so the one that contains the range is
the map's answer. A hit counts its use as a map lookup does, so imports
age out of their eviction protection after as many lookups as before.
APS5_NO_RECENT_IMPORTS looks every import up in the map.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
RenamePath compares source and destination with fs::equivalent and
treats ENOENT from it as "not the same file". libc++ reports
errc::not_supported instead when either path does not resolve, so on
macOS renaming a file over a dangling symbolic link failed with EIO
(guest_filesystem). A path that does not resolve cannot be the same file
as the other, so not_supported is cleared the same way on macOS. The same
guard is part of #7201 and #8658.
Co-Authored-By: marion909 <[email protected]>
Co-Authored-By: iamthehimansh <[email protected]>
Co-Authored-By: Claude Opus 5.5 <[email protected]>