D960 - A computed image descriptor is found where it is read

Status: decided Date: 2026-10-25 known_by: assumed

A dispatch's image access whose descriptor registers were rewritten since an earlier access, by something no traced table load or user-data word names - an arithmetic rewrite, a load out of a buffer the user data names, paths that meet with different loads - is a texture of its own, keyed by the access: its byte offset and the descriptor's first register. Later accesses through the same registers with nothing written between share it. The host finds the descriptor for each dispatch by running the program before the access over the dispatch's user data and guest memory and reading the eight registers there, as a computed buffer's is found (D753). The group's ids are left unknown, so a descriptor that differs from group to group is refused rather than bound for one group. Pixel and primitive shaders still refuse (D690).

Why: register identity (D690) is safe but refuses any program that reuses registers for a second texture. Grand Theft Auto V's full-screen compute pass at 0x74005b809c00, 240 by 270 groups, reads two textures through s[0:7], and its scene went unrendered. Running the program before the access is exact wherever the descriptor depends only on user data and memory, which is what a full-screen pass's textures do.

Rejected:

Amended by D983: a descriptor whose registers hold a record the program selected from a table at run time is not run for. Every image the table names is bound in an array, and the module finds the one the registers hold as it runs, so a descriptor that varies by wave or by group is read exactly.