The conflict in core/libs/prx/libSceAgcDriver/CMakeLists.txt from #12862's split is resolved with tools/agc_test_split.py resolve, which moves this PR's test registrations into tests/cmake/.
The conflict in core/libs/prx/libSceAgcDriver/CMakeLists.txt from #12862's split is resolved with tools/agc_test_split.py resolve, which moves this PR's test registrations into tests/cmake/.
A record-count user word was made relocatable after only the push,
specialization and captured-word checks. When the same word also builds
a second descriptor, the relocated stage patched the first descriptor's
count and kept the second one's earlier count. A count word is now
relocatable only when it appears in exactly one binding word, like the
base word.
agc_driver_draw_relocate_user_values gains the tagging case with two
read-only bindings sharing a count, and a draw that builds two descriptors
from one count SGPR, grows that count after the relocation is learned and
checks the second descriptor's newly covered dword; a control with a count
SGPR per descriptor still relocates and draws the grown range.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Main comes in through #9533's main merge 071ca5b609, which keeps
#9533's resolution; this branch carries #9533 but not #9742.
Beyond keeping both sides:
- CMakeLists.txt:3150-3154: agc_driver_native_depth_buffer_clear joins
the branch's set_tests_properties lists, which also carry
agc_driver_native_depth_stencil_view.
Beyond keeping both sides:
- CMakeLists.txt:3149-3153: agc_driver_native_depth_buffer_clear joins
the branch's set_tests_properties lists for the native depth tests
(and the WIN32 list) instead of main's own line that re-lists clears
and clear_refusals; the properties are the same.
- NativeMultisampleDepth.cpp:1153-1170: main's two
completionCandidate && fault == ClearFault::None blocks sit around
ArmHtileDepthClear inside the branch's ClearSource::HtileDispatch path,
where the branch moved that code; the fill paths make no HTILE clear
candidate.
- NativeMultisampleDepth.cpp:2556: main's --buffer-clear call passes
ClearSource::HtileDispatch, the parameter the branch added to
CheckDepthTarget.
Record an HTILE clear's mask/value with its pending note and recorder ID.
When that write covers the HTILE and determines its ZMask/SMem bits,
expand the metadata on the GPU without a readback. Retire mask proofs
with their recorder or depth device, preserving other owners and the
bounded cache's conservative overlap invalidation.
Recognize the structured-buffer variant and carry its completion range
through preparation, upload and binding. Admit only that range while
its native owner has a pending clear, retaining color guards and
excluding these resources from dispatch and recipe caches.
Cover store-back, PM4 buffer clears, guard refusals, recorder recreation,
live owner isolation and scoped cleanup with GPU byte/wait assertions.
AI-assisted: yes
On Windows, std::tmpfile() returns NULL with errno 22 when %TEMP%
contains a character outside the ANSI code page. Thirteen more test
files still called it: the AGC async log, frame dump, PM4 replay and
recorder tests, eight AGC execution tests and the SceNet test. They
now use TemporaryFile::Open(), as #13104 did for the libc tests.
Part of #13083
Co-Authored-By: Claude Opus 5.5 <[email protected]>
The whole-window retile check bound slabPieces[part.pieces].copies[part.copy]
before testing part.slab. A piece stored into the import records pieces = 0,
and when no piece of the write-back went to a slab slabPieces is empty, so
the lookup binds a reference through a null pointer (UBSan: reference
binding to null pointer, Texture.cpp:3514).
A sampled texture made from a surface whose DCC keys hold a fast-clear
code was filled on the CPU with the clear texel (FillDccClear over the
whole surface), copied into a staging buffer, copied to a tiled device
buffer, detiled and copied into the image. A target cleared every
frame and sampled while cleared repeats all of it each time.
When the texture's format is the one the clear texel is encoded in and
the texel has an exact clear value (ClearColorForTexel), the image is
now cleared with vkCmdClearColorImage instead, in the same recorder
batch the upload used. Comparison, sRGB-expand, repacked, block
compressed and register-clear surfaces keep the upload. A clear-code
cache hit never compares bytes, so such an entry keeps no snapshot.
The [textures] profile line counts these as cleared on the GPU, and
SampledTexturesCleared() reports them for the new execution test.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Queue 0's idle store wrote every pending storage image back to guest memory
in one pass once the queues had been idle for 50 ms. In a title's movies
that is about 15 upscaled 3840x2176 targets (~0.5 GB) per pass, and the
title's next flip waited ~0.6 s behind it, about every 3 s.
The idle store now writes back 4 MiB at a time, in the block units the
images already track, and stops as soon as queue 0 has queued work or
another queue is running; the rest stays pending for the next idle period.
The quiet period is unchanged.
The test returned 77 without a word on a device without VK_EXT_mesh_shader,
so tools/check_skips.py could not tell an expected skip from lost
coverage. Split the gate as the other mesh tests do and print the device
reason.
Co-Authored-By: Claude Opus 5.5 <[email protected]>