Difference between revisions of "SHBIN"

From 3dbrew
Jump to navigation Jump to search
Line 80: Line 80:
 
|  0x4
 
|  0x4
 
|  Magic "DVLE"
 
|  Magic "DVLE"
 +
|-
 +
|  0x18
 +
|  0x4
 +
|  Offset (relative to DVLE start) to unk1 table
 +
|-
 +
|  0x1C
 +
|  0x4
 +
|  Number of entries in unk1 table (each entry is 0x14-byte long)
 
|-
 
|-
 
|  0x20
 
|  0x20
Line 91: Line 99:
 
|  0x28
 
|  0x28
 
|  0x4
 
|  0x4
|  Offset (relative to DVLE start) to unk table
+
|  Offset (relative to DVLE start) to unk2 table
 
|-
 
|-
 
|  0x2C
 
|  0x2C
 
|  0x4
 
|  0x4
|  Number of entries in unk table (each entry is 0x8-byte long)
+
|  Number of entries in unk2 table (each entry is 0x8-byte long)
 
|-
 
|-
 
|  0x30
 
|  0x30

Revision as of 12:36, 25 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 instruction extension table
0x14 0x4 Number of shader instruction extension 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"
0x18 0x4 Offset (relative to DVLE start) to unk1 table
0x1C 0x4 Number of entries in unk1 table (each entry is 0x14-byte long)
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 unk2 table
0x2C 0x4 Number of entries in unk2 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

Variable table entry :

Offset Size Description
0x0 0x4 Offset (relative to DVLE symbol table start) to variable's symbol
0x4 0x2 ?
0x6 0x2 ?

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.