From owdev
Jump to: navigation, search

As of 1.10, contains single shader in a form of #DXBC file (DirectX Byte-Code). No compression applied.


 struct Header {
     u64 offsetDxbc;        // offset to DXBC data (or header size - DXBC comes always right after the header)
     u64 offsetUnk;         // offset to some UnkData after the header, 0 if UnkData is not present
     u32 unkFF;             // it's 0xffffffff in all files so far
     u32 countUnk;          // maybe a count of UnkData, 0 if UnkData is not present
     u32 unk;               // some unknown value or flag, likely related to UnkData, 0 if UnkData is not present
     u32 dataSize;          // size of DXBC data
     u64 shaderType;        // #Shader type bit-mask
 struct UnkData {
     u64 unk;               // the only example seen (see #Notes) was 8 bytes in size, maybe actually u16[4]

Shader type bit-mask

Value Description Notes
1 Vertex shader
2 Pixel shader
4 Geometry shader
16 Unknown Used only once with 4, forming value 20 - geometry shader which just repeated input point without modifications (see #Notes)
128 Unknown Used only with 1, forming value 129 - vertex shader, most examples have single per-vertex input and output
256 Compute shader



The shader code is a pretty normal DXBC file. Symbols information is stripped.

Also see an article about SlimShader for in-depth look into DXBC.

Shader type 20

C58B0E0025DB.087 - the only shader with type 20 and with UnkData present (so, offsetUnk, countUnk and unk have different values than every other shader present).

It's a geom shader, which just repeats an input point without changes?