D690 - A module samples only the one bound texture

Status: assumed Date: 2026-09-15

Every image sample in a translated module reads the one sampled image the pipeline bound. A sample naming a different descriptor register range from the first, or following a write into a recorded range, is refused at translation.

Why: mapping every sample onto whatever is bound renders a frame that looks right and is not. Resolving a descriptor properly needs a decoder, a surface cache, a format table and an upload path, a subsystem rather than a prerequisite for one instruction. Register identity with write invalidation is the strongest claim available without decoding, and its false refusals err on the safe side.

Rejected:

A pixel shader may sample thirty-two textures, at bindings 2, 4, then 7 to 36, each slot found where its descriptor came from: PPSA02664's pixel shader samples three, PPSA03416's more than four, Grand Theft Auto V's shadow shaders more than sixteen. Sixteen is the least one stage may reach on every Vulkan device (the required minimum of maxPerStageDescriptorSampledImages and maxPerStageDescriptorSamplers); the desktop devices orbistoun runs on allow far more. One image read through two samplers takes two slots, each with its own sampler. A thirty-third is refused, as is a second or later texture when any descriptor came from neither the table nor the user data. A primitive shader's images take the last eight slots, 24 to 31, so they never share one with the pixel shader drawn beside it: Grand Theft Auto V's vertex programs fetch and sample at a named level there. Only a pixel shader samples at the level derivatives choose.