Difference between revisions of "SHBIN"
(→DVLE) |
m |
||
Line 87: | Line 87: | ||
| 0x24 | | 0x24 | ||
| 0x4 | | 0x4 | ||
− | | Number of entries in label table | + | | Number of entries in label table (each entry is 0x10-byte long) |
+ | |- | ||
+ | | 0x28 | ||
+ | | 0x4 | ||
+ | | Offset (relative to DVLE start) to unk table | ||
+ | |- | ||
+ | | 0x2C | ||
+ | | 0x4 | ||
+ | | Number of entries in unk table (each entry is 0x8-byte long) | ||
+ | |- | ||
+ | | 0x30 | ||
+ | | 0x4 | ||
+ | | Offset (relative to DVLE start) to variable (?) table | ||
+ | |- | ||
+ | | 0x34 | ||
+ | | 0x4 | ||
+ | | Number of entries in variable table (each entry is 0x8-byte long) | ||
|- | |- | ||
| 0x38 | | 0x38 |
Revision as of 12:30, 23 February 2014
Overview
The SHBIN (SHader BINary) file is used to contain compiled and linked shader programs. These can include vertex shaders (typically compiled from .vsh files) and geometry shaders (typically compiled from .gsh files, though .asm have been observed). In commercial games/apps, SHBIN files can be found as standalone files with the extension .shbin, or contained within .bcsdr files. BCSDR files use CGFX as a container, but the underlying DVLB/DVLP/DVLE structure remains unchanged.
A SHBIN's structure starts with a header, then a DVLP, then DVLE(s).
DVLB Header
Offset | Size | Description |
---|---|---|
0x0 | 0x4 | Magic "DVLB" |
0x4 | 0x4 | N = number of DVLEs in SHBIN |
0x8 | 0x4*N | DVLE offset table; each offset is a u32 relative to the start of the DVLB section |
The DVLP file comes directly after the header.
DVLP
Offset | Size | Description |
---|---|---|
0x0 | 0x4 | Magic "DVLP" |
0x4 | 0x4 | ? |
0x8 | 0x4 | Offset (relative to DVLP start) to shader program binary blob |
0xC | 0x4 | Size of shader program binary blob, in words |
0x10 | 0x4 | Offset (relative to DVLP start) to "shader table" (?) |
0x14 | 0x4 | Number of "shader table" entries (each entry is 8-byte long) |
0x18 | 0x4 | Offset (relative to DVLP start) to filename symbol table |
DVLE
Offset | Size | Description |
---|---|---|
0x0 | 0x4 | Magic "DVLE" |
0x20 | 0x4 | Offset (relative to DVLE start) to label table |
0x24 | 0x4 | Number of entries in label table (each entry is 0x10-byte long) |
0x28 | 0x4 | Offset (relative to DVLE start) to unk table |
0x2C | 0x4 | Number of entries in unk table (each entry is 0x8-byte long) |
0x30 | 0x4 | Offset (relative to DVLE start) to variable (?) table |
0x34 | 0x4 | Number of entries in variable table (each entry is 0x8-byte long) |
0x38 | 0x4 | Offset (relative to DVLE start) to symbol table |
0x3C | 0x4 | Size of symbol table (in bytes) |
Label table entry :
Offset | Size | Description |
---|---|---|
0x0 | 0x1 | Label ID |
0x4 | 0x4 | Offset (relative to shader program blob start) to label's location, in words |
0x8 | 0x4 | ? |
0xC | 0x4 | Offset (relative to DVLE symbol table start) to label's symbol |
Each DVLE is associated to an individual shader pipeline stage. Typically, the first DVLE is associated to the program's vertex shader and the second is associated to the program's geometry shader.