Direct3D もうひとつのユニファイド

従来相違があって不思議と互換性が無かった
頂点フォーマットとテクスチャフォーマットが D3D10 で統一されています。
これもシェーダーが統合されたおかげでしょうか。

Direct3D9 では例えば頂点だと

 FLOAT4   float×4
 FLOAT16_4  float(16bit)×4
 SHORT4N   short×4
 UBYTE4   byte×4 (a b g r)
 D3DCOLOR  byte×4 (a r g b)
 DEC3N    (10,10,10)
 
等の専用形式があり、テクスチャにも

 A32B32G32R32F
 A16B16G16R16F
 A16B16G16R16
 A8B8G8R8
 A8R8G8B8
 A2R10G10B10

があります。上にあげたものはほぼ似たようなフォーマットですが、
それ以外のものは互換性が無くアクセスのために専用のコードが必要でした。

Direct3D10 では VertexShader も PixelShader も同じ性能を持っているので、
アクセス可能な Buffer および ShadeResource のフォーマットが同じものになって
いるようです。
(2次元圧縮の BC(DXT) 形式は除く)

その代わり頂点フォーマットでも R G B A 表記になります。
よく見ると D3D9 の A B G R 表記と逆順です。
もちろん x y z w にあわせたためだと思われます。

xyzw と rgba の統合までの道のり

・D3D8 まで ARGB → D3D9 で ABGR 追加 → D3D10 で RGBA に変更