DirectX ターゲットのユーザーガイド¶
警告
免責事項: DirectX バックエンドは実験段階であり、活発に開発中です。まだ機能が完全ではなく、実験またはデモのコンテキスト以外で使用することはできません。
はじめに¶
DirectX ターゲットは、DirectX プログラマビリティインターフェイスを実装しています。これらのインターフェイスは、DirectX 仕様に記載されています。
当初、バックエンドは DirectX 12 のサポートを目的としており、DirectX 11 のサポートは後日予定されています。
DirectX バックエンドは現在実験段階であり、LLVM ツールのリリースビルドには含まれていません。DirectX バックエンドをローカルでビルドするには、CMake オプション LLVM_EXPERIMENTAL_TARGETS_TO_BUILD
に DirectX
を追加します。LLVM のビルドの詳細については、CMake を使用した LLVM のビルド ドキュメントを参照してください。
ターゲットトリプル¶
現在、DirectX ターゲットは DirectX 中間言語のコードを生成する dxil
アーキテクチャのみをサポートしています。
ターゲットアーキテクチャに加えて、DirectX バックエンドはターゲットランタイムバージョンとパイプラインステージを知る必要があります。これらは、OS と環境トリプルコンポーネントを使用して表現されます。
現在、DirectX バックエンドは shadermodel
OS をターゲットにする必要があり、バージョン 6.0 以降をサポートしています(執筆時点では、発表されている最新バージョンは 6.7 です)。
環境 |
説明 |
---|---|
|
ピクセルシェーダー |
|
頂点シェーダー |
|
ジオメトリシェーダー |
|
ハルシェーダー(テッセレーション) |
|
ドメインシェーダー(テッセレーション) |
|
コンピュートカーネル |
|
リンク可能な |
|
レイ生成(レイトレーシング) |
|
レイ交差(レイトレーシング) |
|
レイの任意の衝突(レイトレーシング) |
|
レイの最も近い衝突(レイトレーシング) |
|
レイミス(レイトレーシング) |
|
呼び出し可能シェーダー(レイトレーシング) |
|
メッシュシェーダー |
|
増幅シェーダー |
出力バイナリ¶
DirectX ランタイム API は、DirectX 仕様に基づくファイル形式を読み取ります。異なるコードベースでは、ファイル形式は異なる名前で呼ばれます(具体的には DXBC
と DXILContainer
)。この形式は DXBC
と DXIL
の両方の出力を格納するために使用され、最終目標は LLVM でコード生成ターゲットとして両方をサポートすることであるため、LLVM コードベースではより中立的な名前である DXContainer
を使用します。
DXContainer
形式は機能仕様ではまばらにしか文書化されていませんが、DirectXShaderCompiler にリファレンス実装が存在します。この形式は LLVM プロジェクトドキュメントにも dokumentiert されています(DirectX コンテナ を参照)。
LLVM で DXContainer
ファイルを生成するためのサポートは、オブジェクトストリーマーとライターのための LLVM MC レイヤー、およびテストとオブジェクトファイルツールのための Object と ObjectYAML ライブラリに追加されています。
dxil
ターゲットの場合、DXContainer
ファイルへのビットコードの出力は、他のターゲットに対して clang でサポートされている -fembed-bitcode
フラグと同様のモデルに従います。