Measured program behaviour
The following observations describe specific stock compiled programs. Shared instructions or similar bindings do not establish the same meaning for every shader family. Observed
G-buffer channel pairing
Section titled “G-buffer channel pairing”Static producer/consumer pairing across globals and dingolevel_root finds T0.xy = 0.4995*v + 0.4995 in
7,516 of 7,557 G-buffer pixel programs. A set of 195 screen-addressed consumer textures decodes these values
as 2*x-1. The role of the pair is unresolved; the inspected model does not establish a normal unfolding or
normalization step. Observed
The sampled large lighting compute programs read their t4–t8 lanes directly. The hashed binding names do not identify the semantic role of those textures. Observed
Instanced vertex programs
Section titled “Instanced vertex programs”Instanced vertex programs find an instance’s world transform in two structured buffers. An instance table holds records of one to three words, one of which names a header element of a matrix table. The matrix table has a 16-byte stride: a header element followed by three matrix rows; when the header is zero, the rows follow it directly. Observed · programs executed with every buffer read logged
The instance number is added to a constant word before it indexes the instance table: setting that word to 3 moves the first record read by three records. Observed · programs executed with every buffer read logged
The word at byte 4252 of the pass constant buffer at b4, the w beside the camera position in words 1060–1062,
is read by none of the inspected programs. A text scan of the programs’ lifted code reports it read, because the
DXIL loads whole four-word registers; only a trace of which words reach an output tells the two apart.
Observed
Character hat vertex tables
Section titled “Character hat vertex tables”Measured hat vertex programs read instance data at t0 and a headered float4 matrix table at t67. For an instance
header element H, bit zero enables an offset encoded in bits 1–16 of header word zero. Let that enabled offset
be offset (zero when disabled), and X = H + 1 + offset. The element at X
contains translation added after the weighted joint sum; its w component is unused in these measured outputs.
Observed
Joint j uses three rows starting at X + 3 + bit18 + 3*j. Header bit 18 shifts those rows by one element
without shifting X. The elements X+1 and X+2 are not read in the measured paths. Four of five distinct hat
vertex programs, covering twelve of thirteen stages, follow this arrangement. Observed
The fifth program also accesses a second block at the unshifted H+1 and H+4–6 offsets. Giving those inputs distinct values does not move the three inspected outputs, but this does not prove the block dead for every output or execution path. Observed
Thirty inspected hat input layouts store blend indices as four u16 integers and weights as four normalized bytes. Their sections’ 386-entry bone palettes are identity mappings. The animation rig and render skeleton are documented separately under rigs and ECLP. Observed
The measured encodings and accesses establish operations and dependencies, but not those inputs’ complete engine meaning. Unknown