日別アーカイブ: 2008年9月18日

Gamefest2008 と Direct3D 11

Gamefest 2008 のスライドが落とせるようになっているようです。

DirectX Developer Center から GDC 2008 Presentations Now Available
へ飛び、Microsoft XNA Developer Presentations の一番上にある
Gamefest 2008 Presentations をクリックします。

Gamefest 2008 Presentations

DirectX 11 関連のスライドも多数あって参考になります。
まだしっかり目を通してないですが、いくつか気になったところなど。

●書き込み

D3D11 の ShaderModel 5.0 では、新たに書き込み可能なリソースが追加
されるようです。RWTexture2D や RWBuffer など。

従来のシェーダーと違ってランダムな位置に書き込み可能なこの機能は、
最近の GPGPU 向け言語 (CUDA, AMD CAL 等) に設けられています。

Compute Shader だけかとおもったら、Pixel Shader でも使えるようです。

書き込みはオフセット付きで配列のように扱えます。

またテクスチャロードも配列形式の書式が使えるようになっています。
前はテクスチャオブジェクトに対するロード命令だったので、
ちょうど同等の機能が operator[] で定義されているものと思われます。

●HLSL

HLSL で class 定義できるようです。interface の宣言も可能。
ShaderModel 4.0 向け HLSL でも、Texture のロード命令や型宣言のみそれっぽい
書式でしたが、次は本当に class として扱えるようです。

double や long 型は、今度こそ本当に使えるようになります。
D3D10/DX10 シェーダーと64bit浮動少数

●コンパイラ

HLSL もいろいろ拡張されており、コンパイラも複雑になっていると考えられます。

D3D9 の FX (HLSL) コンパイラは D3DX9 に含まれており単なるライブラリでした。

D3D10 では core API に含まれましたが、SDK の途中から扱いが変わっています。
SDK 側で更新がはいったものの、core API 経由だと従来の 古いコンパイラ が
使われ、D3DX の API だと更新されたコンパイラが呼ばれます。

以前この辺の挙動を調べました
Direct3D 10 Shader4.0 APIによってコンパイラが違う
Direct3D 10 Shader4.0 シェーダーのコンパイル

core に含めてしまうとおいそれと更新できなくなるため失敗だったのでしょう。
D3D11 ではコンパイラの改良や修正ができるよう再び D3DX のライブラリ扱いに
戻っています。

●新しいテクスチャ形式

テクスチャ圧縮形式として新たに BC6、BC7 が追加されています。
具体的にどのような構造でどのようなアルゴリズムなのか詳細まではわかりませんが
これまでの DXT/BC の欠点を克服したものになりそうです。

ちなみに BC1~ は従来 DXT と呼ばれていたものです。

・D3D10
BC1 = DXT1
BC2 = DXT3
BC3 = DXT5
BC4 = 1チャンネルの圧縮
BC5 = ATI の法線圧縮形式 3Dc/ATI2

・D3D11
BC6
BC7

● Direct3D 11 SDK

かなり情報が多いので、D3D11 の登場は意外に早いのかもしれません。
以前 こちら で触れたように DXGI の扱いが微妙に変わっています。
DXGI は共通のコンポーネントなので、D3D10 と並列に D3D11 を持ってくることが
目的なのかもしれません。

関連エントリ
DirectX11 へ (D3D11)
Direct3D 10 Shader4.0 APIによってコンパイラが違う
Direct3D 10 Shader4.0 シェーダーのコンパイル
D3D10/DX10 シェーダーと64bit浮動少数