Skip to main content

Vertex Buffer Formats

Observed vertex buffer formats in Far Cry (Dunia engine). The format field is a bitset indicating which elements are present.

Format 138​

138 <0000000010001010>: 16 bytes
Unknown layout

Format 3018​

3018 <0000101111001010>: 32 bytes
D3DVERTEXELEMENT9[] =
{
{0, 0x00, D3DDECLTYPE_SHORT4, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITION, 0},
{0, 0x08, D3DDECLTYPE_SHORT2, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TEXCOORD, 0},
{0, 0x0C, D3DDECLTYPE_SHORT2, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TEXCOORD, 1},
{0, 0x10, D3DDECLTYPE_D3DCOLOR, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_NORMAL, 0},
{0, 0x14, D3DDECLTYPE_D3DCOLOR, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_COLOR, 0},
{0, 0x18, D3DDECLTYPE_D3DCOLOR, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_FOG, 0},
{0, 0x1C, D3DDECLTYPE_D3DCOLOR, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_PSIZE, 0},
};

Format 3034​

3034 <0000101111011010>: 40 bytes
D3DVERTEXELEMENT9[] =
{
{0, 0x00, D3DDECLTYPE_SHORT4, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITION, 0},
{0, 0x08, D3DDECLTYPE_SHORT2, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TEXCOORD, 0},
{0, 0x0C, D3DDECLTYPE_SHORT2, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TEXCOORD, 1},
{0, 0x10, D3DDECLTYPE_D3DCOLOR, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_BLENDWEIGHT, 0},
{0, 0x14, D3DDECLTYPE_UBYTE4, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_BLENDINDICES, 0},
{0, 0x18, D3DDECLTYPE_D3DCOLOR, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_NORMAL, 0},
{0, 0x1C, D3DDECLTYPE_D3DCOLOR, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_COLOR, 0},
{0, 0x20, D3DDECLTYPE_D3DCOLOR, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_FOG, 0},
{0, 0x24, D3DDECLTYPE_D3DCOLOR, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_PSIZE, 0},
};

Source​

Gibbed's Dunia Tools


FC6 Vertex Element Types (from FC6 engine binary string dump)​

FC6 uses DX12-style vertex element descriptions with named types and semantics.

Format types:

TypeSizeDescription
UInt14BUnsigned integer
Float1–Float44–16BFloat vectors
UByte4 / UByte4N4BUnsigned bytes (raw / normalized [0,1])
Short2 / Short44–8BSigned 16-bit integers
Short2N / Short4N4–8BSigned 16-bit, normalized [-1,1]
UShort2N / UShort4N4–8BUnsigned 16-bit, normalized [0,1]
Float_16_2 / Float_16_44–8BHalf-float
UNorm_10_10_10_24BR10G10B10A2 unsigned normalized

Semantic names (CS_ prefix in binary, S_ prefix in shadersobj.dat XML): CS_Position, CS_Normal, CS_Tangent, CS_Binormal, CS_TangentSign, CS_TexCoord, CS_Color, CS_BlendWeights, CS_BlendIndices

Vertex element structure (from shadersobj.dat): S_Position Float3 Index 0 Stream 0 InstanceStepRate

The FC6 S_ names in shadersobj.dat correspond to CS_ names in the binary — both are DX12-style vertex input layout descriptions.