Direct3D 10

Direct3D 10はどうなるんだろうと大雑把に眺めてみました。ヘルプの1ページをぞんざいな訳で引用します。

APIの機能 (ぞんざいな訳・信用しないように)

Direct3D 10グラフィックスパイプラインは基礎アーキテクチャの変更を示していて、ゲームと3Dマルチメディアアプリケーションの次世代を支えるハードウェアとソフトウェアを徹底的に再構成しました。Windows Vista Display Driver Model (WDDM)インフラストラクチャ上に構築され、新たなパフォーマンスと振る舞いの拡張と、GPUメモリの完全な仮想化の保障を可能にします。
Direct3Dに馴染んでいる開発者は、Direct3D 10に下記のことを含む、一連の機能的な拡張とパフォーマンスの改善に気づくでしょう。

  • 新しい幾何シェーダステージにて、完全なプリミティブ(隣接を含んで)を処理したり、増幅や減幅したりできます。
  • ストリーム出力ステージを用いて、メモリへパイプライン生成された頂点データを出力することができます。
  • 新しいオブジェクトとパラダイムは、ランタイムやドライバでの検証や処理におけるCPUオーバーヘッド消費を最小化することを提供します。
    • 5つの不変ステージオブジェクトへパイプラインステージの編成、パイプラインの高速コンフィギュレーションができます。
    • 定数バッファへシェーダ定数変数の編成、シェーダ定数データへ供給するための帯域オーバーヘッドを最小化しています。
    • 幾何シェーダを用いて、プリミティブ毎のマテリアルの入れ替えとセットアップを行うことができます。
  • 新しいリソースタイプ(シェーダ・インデックス可能なテクスチャの配列を含む)と、リソース形式。
  • メモリ内のリソースの増進された一般化とリソースアクセスの普遍性{ubiquity} - リソースビューは異なるタイプや表現としてのメモリ内のリソースの解釈ができます。
  • 必須の機能性のフルセット:レガシーハードウェア能力ビット(caps)は保障された機能性のリッチなセットの支持を取り除きました。これとほかのデザイン改善を可能にするため、Direct3D 10 APIDirect3D 10クラスハードウェア以降だけを対象とします。
  • レイヤー化ランタイム - Direct3D 10 APIはレイヤーで構成されて、中核において基礎の機能性に始まり、外側のレイヤーでオプションや開発者支援の機能性(デバッグなど)を構築しています。
  • フルHLSL統合 - 全てのDirect3D 10シェーダはHLSLで書かれ、シェーダ共通コアで実装されます。
  • レンダーターゲット、テクスチャ、サンプラーの数を増加。シェーダ長無制限もあります。
  • 以下のフルサポート:
    • 整数とビット単位のシェーダ操作
    • シェーダ内での深度・ステンシルとマルチサンプルされたリソースの読み戻し
    • マルチサンプルのアルファから被覆率

Direct3D 9 開発者もまた注意すべき追加の振る舞いの違いがあります。さらなる完全なリストは、Direct3D 9 to Direct3D 10 Considerationsを参照してください。


サンプルブラウザとドキュメントを眺めて

 すぐさまデモが試せればよいのですが、今すぐにはそうもいかず、踏み込みづらいところではあります。仕方がないので、SDKにあるレンダリングされたムービーを見てみることにします。
 PipesGSが幾何シェーダ(Geometry Shader)を使っていて興味深いですね。幾何シェーダの仕組みについては、ParticlesGSもあわせて見た方がいいようです。

  • ID3D10Device::DrawInstanced
  • ID3D10Device::DrawIndexedInstanced
  • ID3D10Device::DrawAuto

 このあたりがなんとも新鮮です。