ANYPS5_VIDEO_OUT_TEST_DRIVER defaulted to SDL's offscreen driver on every
host. That driver has no Vulkan on Windows, so all thirteen flip tests that
open a display skipped there. Windows now defaults to the windows driver.
A machine without a Vulkan driver makes DisplayWindow report that Vulkan
lacks VK_KHR_surface, so the flip tests also skip on a DisplayWindow error
that names Vulkan, as they do on offscreen's message.
The controls check read exactly two events after subscribing to pre-vblank
and waiting for one vblank, and expected one of them to be PRE_VBLANK_START.
The VideoOut filter queues every vblank of the earlier VBLANK registration,
and the queue returns one registration's events before the next, so when a
second vblank lands between the earlier read and the wait (a real display's
cadence), both events read are VBLANK and the pre-vblank event is the third.
The check now reads up to eight events and requires a VBLANK for the vblank
registration and a PRE_VBLANK_START with its own user data among them.
A draw that hits through a relocation alias reuses its donor's stages
under a key the cache doesn't hold. It isn't inserted, since
cacheDrawStages skips hits, and lookupDraw moves an entry up the LRU
only when the entry it hit is the one cached under the draw's own key.
So a donor that serves a relocated draw every frame ages to the back of
the LRU like an unused entry, and the cache evicts it once other draws
insert. Since aliases name a key instead of holding the entry, that
eviction also ends the alias, and the next relocated draw misses,
compiles and is admitted again, only to age out the same way.
A relocated hit now moves its donor to the front of the LRU, with the
same rate limit as a direct hit (once per an eighth of the cache's
entries in hits).
agc_driver_draw_cache_relocation_kept (--kept, with
APS5_DRAW_CACHE_ENTRIES=2) teaches a relocation alias, then runs three
rounds: two draws of another vertex shader that insert an entry, then a
moved draw with the taught contents. Every moved draw has to hit.
Without the refresh, the second round's insert evicts the donor and its
moved draw misses.
Titles register and check NetCtl callbacks without importing
sceNetCtlInit: libSceNetCtl is an internal sysmodule the system has
started before the title runs. 007 First Light traps at start-up when
sceNetCtlRegisterCallback answers NOT_INITIALIZED.
NpTrophy reads the trophy count and icons from the title's trophy
package (names are encrypted and stay not implemented), PS4 v1 save data
calls wrap the native v2/v3 ones, and NpWebApi library contexts, handles
and push event filters work offline (service filters fail without a
signed-in user). libSceAjm is built from the libSceAjm.native sources
for PS4 titles. Limbo's (CUSA01664) remaining PS4 imports, including the
synchronous PS4 TUS calls and the Facebook dialog calls next to the
existing libraries, are exported as not implemented.
Add EvictedEntriesServeNoRelocation, run by a new ctest
agc_driver_draw_cache_relocation_evicted (--evicted) with
APS5_DRAW_CACHE_ENTRIES=2. It teaches a relocation alias as
MovedDataHitsTheCache does, checks that one moved draw hits, evicts both
taught entries with draws of another vertex shader, and requires that
the next moved draw with the same contents does not hit. Before the
alias named a key, the alias kept the evicted entry and served it.