Map between D3D9 and D3D8 declarations

This table maps members of a D3DVERTEXELEMENT9 declaration to a Direct3D 8 declaration.

Direct3D 9 Usage Direct3D 9 Usage index Direct3D 8
D3DDECLUSAGE_POSITION 0 D3DVSDE_POSITION
D3DDECLUSAGE_POSITION 1 D3DVSDE_POSITION2
D3DDECLUSAGE_NORMAL 0 D3DVSDE_NORMAL
D3DDECLUSAGE_NORMAL 1 D3DVSDE_NORMAL2
D3DDECLUSAGE_BLENDWEIGHT 0 D3DVSDE_BLENDWEIGHT
D3DDECLUSAGE_BLENDINDICES 0 D3DVSDE_BLENDINDICES
D3DDECLUSAGE_PSIZE 0 D3DVSDE_PSIZE
D3DDECLUSAGE_COLOR 0 D3DVSDE_DIFFUSE
D3DDECLUSAGE_COLOR 1 D3DVSDE_SPECULAR
D3DDECLUSAGE_TEXCOORD n D3DVSDE_TEXCOORDn

 

When a declaration is used with hardware vertex processing on a Direct3D 7 driver, the Direct3D runtime converts it to a FVF with the following rules:

  • Only stream 0 should be used (evident from the MaxStreams cap).
  • The order of vertex elements should be the same as order of FVF bits.
  • Gaps in texture coordinates are not allowed.
  • Any vertex element not described the table cannot be converted into a valid FVF for all pre-DirectX 8 drivers and, hence, cannot be used on those drivers.
  • Only D3DDECLTYPE_FLOAT2 is allowed for vertex elements with D3DDECLUSAGE_TEXCOORD if device does not set either of the D3DPTEXTURECAPS_PROJECTED or D3DPTEXTURECAPS_CUBEMAP caps.

Vertex Declaration