Skip to main content

Module reflection

Module reflection 

Source
Expand description

The entry point’s metadata, resource records, type annotations and signature parts of an SM6 container, as the records the file stores: the entry point and what its properties state (thread group, geometry, mesh, hull and domain state), its signature elements and their packing, the bound resource ranges of dx.resources with their tags, the field annotations of dx.typeAnnotations, and the rows of an ISG1/OSG1/PSG1 part, each with DXIL’s and D3D’s own numbers. What the numbers mean for a graphics API is the caller’s to decide.

Structs§

Element
One signature element of the entry point: its id (the sigId loadInput and storeOutput name), its first register and column, and its size.
FieldAnnotation
One field of a struct type, as its annotation in dx.typeAnnotations states it.
GeometryState
What a geometry program’s entry point states (the properties’ tag 1), as stored: the primitive it reads (input, a D3D_PRIMITIVE: 1 point, 2 line, 3 triangle, 6 line and 7 triangle with adjacency), how many vertices it emits at most, the streams it writes (a mask), the topology its stream makes (a D3D_PRIMITIVE_TOPOLOGY: 1 point list, 3 line strip, 5 triangle strip) and how many invocations run for a primitive.
HullState
What a hull program’s entry point states about its patch (the properties’ tag 3): the patch-constant function, the control-point counts, the tessellator’s domain, partitioning and output primitive and the largest factor.
MeshState
What a mesh program’s entry point states (the properties’ tag 9) after its thread group, as stored: the most vertices and primitives it writes, the topology of its primitives (1 line, 2 triangle) and the size in bytes of the payload it reads from a task program. A null field is zero.
Range
A bound resource range: class (0 SRV, 1 UAV, 2 constant buffer, 3 sampler), range id, first register, count.
SignatureElement
One element of an ISG1/OSG1/PSG1 part as stored.

Functions§

domain_state
A domain program’s patch state (tag 2): the tessellator domain and the input control point count.
elements
The entry point’s input and output elements, by id.
entry
The entry point’s function value.
fields
Fields of a struct type from dx.typeAnnotations (field tag 6 the name, 3 the constant-buffer offset, 7 the component type). Empty when the module has no annotation for it.
geometry_state
A geometry program’s state.
hull_state
A hull program’s patch state.
library_kind
The shader kind a library’s entry point states (properties tag 8): the numbers of a program’s kind (7 ray generation to 12 callable, 13 mesh).
mesh_state
A mesh program’s state.
num_threads
The entry point’s thread group size (numthreads): the value of the properties’ tag 4 (a mesh program’s, the first field of its state, tag 9). None when the entry point states none (every stage but compute).
patch_elements
A hull or domain program’s patch-constant elements, by id.
ranges
The bound resource ranges of dx.resources (SRVs, UAVs, constant buffers, samplers), each with its variable’s name and the type its variable points to (the resource’s handle type).
shader_flags
The entry point’s shader flags: the value of the properties’ tag 0, a 64-bit mask kept as stored. None when the entry point states none (the properties are null, or have no tag 0). The compiler writes the tag in nearly every entry point of the games read; this reader attaches no meaning to its bits.
signature
The elements of a signature part (ISG1, OSG1 or PSG1): a count and the offset of the first record, then records of 32 bytes (stream, name offset, semantic index, system value, component type, register, mask and read-write mask, minimum precision). A name ends within 256 bytes.
usage_masks
The usage mask of each signature element (tag 3 of the element’s trailing tag list: the components of the element the program reads or writes, bit 0 the element’s first component, so a scalar packed into component w states 1, not 8), in the order of elements’ inputs and outputs and patch_elements; None for an element whose trailing tag list is absent or has no tag 3. In the stock programs the only tag the lists hold is 3 (138,044 of 145,462 elements of skate.’s, 459,288 of 545,303 of Elden Ring’s); any other tag is ignored.