ルート署名Root Signatures

ルート署名は、グラフィックス パイプラインにバインドされるリソースの種類を定義します。The root signature defines what types of resources are bound to the graphics pipeline.

このセクションの内容In this section

トピックTopic 説明Description
ルート署名の概要Root Signatures Overview
ルート署名はアプリによって構成され、シェーダーで必要なリソースにコマンド一覧をリンクします。A root signature is configured by the app and links command lists to the resources the shaders require. グラフィックス コマンド リストには、グラフィックスと計算ルート署名の両方があります。The graphics command list has both a graphics and compute root signature. 計算コマンド リストには、計算ルート署名が 1 つだけあります。A compute command list will simply have one compute root signature. これらのルート署名は、互いに独立しています。These root signatures are independent of each other.
ルート署名の使用Using a Root Signature
ルート署名は、記述子テーブル (そのレイアウトを含む)、ルート定数、ルート記述子の任意に整理されたコレクションの定義です。The root signature is the definition of an arbitrarily arranged collection of descriptor tables (including their layout), root constants and root descriptors. 各エントリのコストには上限があるため、アプリケーションでは、ルート署名に含めるエントリの各種類の数との間でバランスを取ることができます。Each entry has a cost towards a maximum limit, so the application can trade off the balance between how many of each type of entry the root signature will contain.
ルート署名の作成Creating a Root Signature
ルート署名は、入れ子になった構造を含む複雑なデータ構造です。Root signatures are a complex data structure containing nested structures. これらは、下のデータ構造の定義を使用してプログラムによって定義できます (メンバーの初期化に役立つメソッドを含む)。These can be defined programmatically using the data structure definition below (which includes methods to help initialize members). または、上位レベル シェーダー言語 (HLSL) で作成できます。これには、コンパイラーによって、レイアウトとシェーダーとの互換性が早期に検証されるという利点があります。Alternatively, they can be authored in High Level Shading Language (HLSL) giving the advantage that the compiler will validate early that the layout is compatible with the shader.
ルート署名の制限Root Signature Limits
ルート署名は、主要な不動産であり、厳密な制限と考慮するコストがあります。The root signature is prime real estate, and there are strict limits and costs to consider.
ルート署名で定数を直接使用するUsing Constants Directly in the Root Signature
アプリケーションでは、それぞれ 32 ビット値のセットとして、ルート署名でルート定数を定義できます。Applications can define root constants in the root signature, each as a set of 32-bit values. これらは High Level Shading Language (HLSL) で定数バッファーとして扱われます。They appear in High Level Shading Language (HLSL) as a constant buffer. 履歴の理由上、定数バッファーは 4x32 ビット値のセットとして表示されていることに注意してください。Note that constant buffers for historical reasons are viewed as sets of 4x32-bit values.
ルート署名で記述子を直接使用するUsing Descriptors Directly in the Root Signature
記述子ヒープを実行しないで済むように、アプリケーションでは記述子をルート署名に直接置くことができます。Applications can put descriptors directly in the root signature to avoid having to go through a descriptor heap. これらの記述子はルート署名で多くの領域を占めるため (ルートの署名の制限のセクションを参照)、アプリケーションではこれらを慎重に使用する必要があります。These descriptors take a lot of space in the root signature (see the root signature limits section), so applications have to use them sparingly.
ルート署名の例Example Root Signatures
次のセクションでは、空の状態から完全なフルまで、さまざまな複雑さのルートの署名を示します。The following section shows root signatures varying in complexity from empty to completely full.
HLSL でのルート署名の指定Specifying Root Signatures in HLSL
C++ コードでの指定の代替方法として、HLSL Shader Model 5.1 でルート署名を指定できます。Specifying root signatures in HLSL Shader Model 5.1 is an alternative to specifying them in C++ code.
ルート署名バージョン 1.1Root Signature Version 1.1
ルート署名バージョン 1.1 の目的は、記述子ヒープ内の記述子が変わらない場合またはデータ記述子のポイント先が変わらない場合、ドライバーを示すようにアプリケーションを有効にすることです。The purpose of Root Signature version 1.1 is to enable applications to indicate to drivers when descriptors in a descriptor heap won t change or the data descriptors point to won t change. これにより、ドライバーのオプションを最適化して、ドライバーがポイントする記述子またはメモリが一定の時間静的であることを認識できる場合があります。This allows the option for drivers to make optimizations that might be possible knowing that a descriptor or the memory it points to is static for some period of time.

ID3D12RootSignatureID3D12RootSignature

ID3D12RootSignatureDeserializerID3D12RootSignatureDeserializer

リソース バインディングResource Binding