Skip to main content

Crate dxbc_reader

Crate dxbc_reader 

Source
Expand description

A reader of Shader Model 4 and 5 programs as Direct3D stores them in a DXBC container: the token stream of any stage (decode), the reflection and signature chunks as the records the file holds (reflection), and the compiler’s own counters ([statistics]).

It reads and checks bytes and never interprets them for an API: a register binding is the RDEF record’s own numbers, a signature element its stored name, index and masks. Mapping those into a graphics API’s vocabulary is the caller’s choice. Everything it can’t read (a truncated instruction, an out-of-range table, a cyclic type) is an Error naming the 32-bit word where it happened; it never panics on untrusted input.

let container = std::fs::read("shader.dxbc").expect("a compiled shader");
let code = dxbc_reader::code(&container)?;
let program = dxbc_reader::decode(&code)?;
println!("{} with {} instructions", program.target(), program.instructions.len());

Re-exports§

pub use decode::Declaration;
pub use decode::Declared;
pub use decode::Decoded;
pub use decode::Index;
pub use decode::Instruction;
pub use decode::Operand;
pub use decode::ProgramType;
pub use decode::Register;
pub use decode::Selection;
pub use decode::decode;
pub use decode::opcode_name;
pub use reflection::Rdef;
pub use reflection::RdefBinding;
pub use reflection::RdefBuffer;
pub use reflection::RdefMember;
pub use reflection::RdefType;
pub use reflection::RdefVariable;
pub use reflection::SignatureElement;
pub use reflection::patch_signature_elements;
pub use reflection::program_type;
pub use reflection::rdef;
pub use reflection::rdef_target;
pub use reflection::signature;
pub use reflection::signature_elements;
pub use statistics::Statistics;
pub use statistics::statistics;

Modules§

decode
The token-level decoder of Shader Model 4 and 5 programs: any stage’s version token, declarations as typed records, and instructions as an opcode, its control bits, its extended tokens and its operands. It decides nothing about which instructions a caller can use: they are all returned, and the caller refuses what it cannot handle. A token it cannot read at all (an operand register type it has no name for, a truncated instruction) is an error naming the word.
reflection
The reflection (RDEF) and signature (ISGN, OSGN, ISG1, OSG1, OSG5, PCSG, PSG1) parts of a Shader Model 4 or 5 container, as the records they store: resource bindings, constant buffers with their variables and type trees, and signature elements, each with D3D’s own numbers (D3D_SHADER_INPUT_TYPE, D3D_NAME, …) and the word it starts at. What the numbers mean for a graphics API is the caller’s to decide.
statistics
The STAT part of a Shader Model 4 or 5 container: the compiler’s counts of what the program does, as 32-bit words.

Structs§

Error
Something the reader can’t read: the 32-bit word of the container’s chunk or token stream where it is, and what.

Functions§

chunk
The container’s one part of kind tag: an error where it has none, or more than one.
code
The program’s token stream (its SHEX or SHDR part) as 32-bit little-endian words, for decode().
parts
The container’s parts (its DXBC directory).

Type Aliases§

Result
The reader’s result: an Error naming the word where reading failed.