GPU page tracker
The opt-in page tracker watches 16 KiB guest pages. The first native CPU store faults, advances a generation, and invalidates the GPU copy so unchanged pages do not get hashed and uploaded every frame.
Repository notes through October 10, 2026
The problem it addresses
A render target or a vertex buffer that lives in guest memory has to reach the GPU. Uploading the whole allocation every frame is correct and expensive. Hashing the whole allocation to discover that it did not change is also expensive. The page tracker instead marks a tracked writable page read-only and lets the CPU fault on the first store.
The fault handler records the page, restores the guest's real protection, and advances that page's generation. A later draw compares generations. An unchanged page stays on the device. A page whose generation moved is uploaded. PS5_GPU_PAGE_TRACKER=1 enables the mechanism. It is off unless that variable, or the experimental bundle, is set.
What the fault is
The fault is an invalidation, not a guest bug. The page was read-only only so the host could observe the write. The guest store is then allowed to complete under the protection the title asked for. Pages that are not tracked keep the ordinary upload path.
Direct-memory mappings that are recreated with the same address, size, physical offset and CPU permissions keep their host views. That reuse is what makes a generation meaningful across frames. A change of backing or of permissions takes the normal replacement path and the tracker observes the new mapping.
What it does not do
The tracker does not make a title's internal resolution smaller, and it does not compile shaders. It only removes repeated transfers of pages the CPU did not store to. A title that rewrites a buffer every frame still pays for that buffer.
Font atlas writes and other HLE stores invalidate the watches before they modify guest memory, so a firmware write is not invisible to the GPU. The tracker is part of the experimental GPU set described in the architecture overview.
What is implemented
- Per-page generations for 16 KiB guest pages when PS5_GPU_PAGE_TRACKER=1.
- A first-store fault that restores guest protection and invalidates the resident copy.
- Reuse of identical direct-memory views so generations survive across frames.
- Invalidation when HLE itself writes a watched page.
What is still missing
- The tracker is opt-in. The default compatibility path does not depend on it.
- Pages the CPU rewrites every frame are still uploaded.
- It does not cover GPU-to-GPU coherency inside a compressed metadata surface.
Related mechanisms
What these pages are