mirror of
https://github.com/boykopovar/AnyPS5.git
synced 2026-10-28 00:35:47 +00:00
A resource plan owns copies of the IR values its run-time evaluation reads: the descriptor sources, the SRT reads, the uniform fills, and the branch conditions that tell which images a dispatch can reach. Below a scalar load from memory, the copy took every value the load depends on, whether the evaluator can compute it or not. A condition that reads memory after vector work (a load predicated by a vector compare, an address computed from vector data) brought the program's whole vector graph into the plan: in a title's programs 2.4 million of 2.6 million retained values, about 500 MiB, belonged to twelve or so conditions per program. Below a condition, the copy now follows only what the evaluator reads: the arguments of values it can compute, and for a load from memory the words of its descriptor and its offset; a value the evaluator cannot compute is kept without its arguments, which is what evaluating it needs (it does not evaluate). Descriptor sources keep their whole closure, which the device image pre-pass walks. Tested with a new test (agc_driver_resource_plan_retention): the plan of a program whose branch condition reads a scalar load at an address taken from vector data now keeps the same number of values for vector chains of 1, 16 and 64 steps before the load (84, 114 and 210 before); the device table, written image, buffer descriptor, memory and SRT range and shader disk cache tests pass; in a title's corpus the plans of 314 programs hold 40 thousand values instead of 837 thousand; the corpus recompile with SPIR-V validation has no invalid module. Resolved onto main: the retention test runs on DeviceTableFixture.hpp, which main does not have, so the test and its CMake line are left out here; the next commits test this on main.