DirectX ターゲットのユーザーガイド

警告

免責事項: DirectX バックエンドは実験段階であり、活発に開発中です。まだ機能が完全ではなく、実験またはデモのコンテキスト以外で使用することはできません。

はじめに

DirectX ターゲットは、DirectX プログラマビリティインターフェイスを実装しています。これらのインターフェイスは、DirectX 仕様に記載されています。

当初、バックエンドは DirectX 12 のサポートを目的としており、DirectX 11 のサポートは後日予定されています。

DirectX バックエンドは現在実験段階であり、LLVM ツールのリリースビルドには含まれていません。DirectX バックエンドをローカルでビルドするには、CMake オプション LLVM_EXPERIMENTAL_TARGETS_TO_BUILDDirectX を追加します。LLVM のビルドの詳細については、CMake を使用した LLVM のビルド ドキュメントを参照してください。

ターゲットトリプル

現在、DirectX ターゲットは DirectX 中間言語のコードを生成する dxil アーキテクチャのみをサポートしています。

ターゲットアーキテクチャに加えて、DirectX バックエンドはターゲットランタイムバージョンとパイプラインステージを知る必要があります。これらは、OS と環境トリプルコンポーネントを使用して表現されます。

現在、DirectX バックエンドは shadermodel OS をターゲットにする必要があり、バージョン 6.0 以降をサポートしています(執筆時点では、発表されている最新バージョンは 6.7 です)。

表 108 DirectX 環境

環境

説明

pixel

ピクセルシェーダー

vertex

頂点シェーダー

geometry

ジオメトリシェーダー

hull

ハルシェーダー(テッセレーション)

domain

ドメインシェーダー(テッセレーション)

compute

コンピュートカーネル

library

リンク可能な dxil ライブラリ

raygeneration

レイ生成(レイトレーシング)

intersection

レイ交差(レイトレーシング)

anyhit

レイの任意の衝突(レイトレーシング)

closesthit

レイの最も近い衝突(レイトレーシング)

miss

レイミス(レイトレーシング)

callable

呼び出し可能シェーダー(レイトレーシング)

mesh

メッシュシェーダー

amplification

増幅シェーダー

出力バイナリ

DirectX ランタイム API は、DirectX 仕様に基づくファイル形式を読み取ります。異なるコードベースでは、ファイル形式は異なる名前で呼ばれます(具体的には DXBCDXILContainer)。この形式は DXBCDXIL の両方の出力を格納するために使用され、最終目標は LLVM でコード生成ターゲットとして両方をサポートすることであるため、LLVM コードベースではより中立的な名前である DXContainer を使用します。

DXContainer 形式は機能仕様ではまばらにしか文書化されていませんが、DirectXShaderCompiler にリファレンス実装が存在します。この形式は LLVM プロジェクトドキュメントにも dokumentiert されています(DirectX コンテナ を参照)。

LLVM で DXContainer ファイルを生成するためのサポートは、オブジェクトストリーマーとライターのための LLVM MC レイヤー、およびテストとオブジェクトファイルツールのための Object と ObjectYAML ライブラリに追加されています。

dxil ターゲットの場合、DXContainer ファイルへのビットコードの出力は、他のターゲットに対して clang でサポートされている -fembed-bitcode フラグと同様のモデルに従います。