ユーザ用ツール

サイト用ツール


d3d:d3d12:descriptor

差分

このページの2つのバージョン間の差分を表示します。

この比較画面にリンクする

両方とも前のリビジョン 前のリビジョン
次のリビジョン
前のリビジョン
d3d:d3d12:descriptor [2015/09/20 16:27]
oga [ID3D12RootSignature]
d3d:d3d12:descriptor [2015/09/22 17:19] (現在)
oga [Descriptor]
行 25: 行 25:
  
 ^ GPU                      ^ FeatureLevel  ^ CBV_SRV_UAV ^ SAMPLER ^ RTV  ^ DSV  ^ ^ GPU                      ^ FeatureLevel  ^ CBV_SRV_UAV ^ SAMPLER ^ RTV  ^ DSV  ^
 +| RADEON GCN 1.0           | 11_1          | 32          | 16      | 32   | 144  |
 | RADEON GCN 1.1           | 12_0          | 32          | 16      | 32   | 144  | | RADEON GCN 1.1           | 12_0          | 32          | 16      | 32   | 144  |
 +| GeForce Kepler           | 11_0          | 32          | 32      | 32   | 8    |
 +| GeForce Maxwell GM1      | 11_0          | 32          | 32      | 32   | 8    |
 | GeForce Maxwell GM2      | 12_1          | 32          | 32      | 32   | 8    | | GeForce Maxwell GM2      | 12_1          | 32          | 32      | 32   | 8    |
 +| Intel HD Graphics Gen7.5 | 11_1          | 32          | 16      | 32   | 96   |
 | Intel HD Graphcis Gen8   | 11_1          | 64          | 16      | 32   | 128  | | Intel HD Graphcis Gen8   | 11_1          | 64          | 16      | 32   | 128  |
  
  
 古い D3D11 世代の GPU では Descriptor Handle が仮想的な実装になっている可能性があります。 古い D3D11 世代の GPU では Descriptor Handle が仮想的な実装になっている可能性があります。
 +
 +
 +===== Descriptor Heap =====
 +
 +CBV, SRV, UAV の Descriptor Heap は共有されています。
 +
 +^ Descriptor HeapType                      ^ Descriptor   ^
 +| D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV   | ConstantBufferView, ShaderResourceView, UnorderedAccessView  |
 +| D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER       | Sampler    |
 +| D3D12_DESCRIPTOR_HEAP_TYPE_RTV           | RenderTargetView   |
 +| D3D12_DESCRIPTOR_HEAP_TYPE_DSV           | DepthStencilView   |
 +
 +つまり Shader に渡すパラメータ CBV, SRV, UAV は同じ Heap (Table) 上に並べてまとめて管理することができます。描画時に API に渡す場合一度に設定することができます。
 +一度の描画で参照できる DescriptorHeap は、HeapType 毎に 1 つだけなので注意が必要です。
 +
 +
  
  
行 65: 行 85:
 ===== RootSignature と API ===== ===== RootSignature と API =====
  
-Shader にパラメータを渡す方法のまとめ。+ 
 +Shader にパラメータを渡す方法は複数存在しています。 
 +下記はそのまとめです 
  
  
行 81: 行 104:
 | DSV      | DSV             | Descriptor Table  | CommandList::OMSetRenderTargets()                 | CPU Descriptor Handle        |     | 1         | -        |     | | DSV      | DSV             | Descriptor Table  | CommandList::OMSetRenderTargets()                 | CPU Descriptor Handle        |     | 1         | -        |     |
  
-  * CBV, SRV, UAV, Sampler いずれも Descriptor Table を使う方法、使わない方法両方用意されています。 + 
-    ただし SRV, UAV は Descriptor Table 以外機能制限があります。 +CBV, SRV, UAV, Sampler いずれも Descriptor Table を使う方法、使わない方法両方用意されています。 
-  CBV は、DescriptorTable を使う場合、直接 Root Descriptor に設定する場合、値を RootSignature に直接格納する場合の 3通りの方法があります。+ただし SRV, UAV は Root Descriptor の場合 Sampler を使うことができません。 
 +よって事実上 Texture Map として用いる場合は Descriptor Table を使う必要があります。 
 + 
 +CBV は上記のように、DescriptorTable を使う場合、直接 Root Descriptor に設定する場合、値を RootSignature (Root 32bit Constant) に直接格納する場合の 3通りの手段があります。どの方法を用いても構いません
  
  
行 93: 行 119:
 ===== API による速度の違い ===== ===== API による速度の違い =====
  
-度差調+RootSignature を使って Shader にパラメータを渡す方法は複数存在しています。 
 +実際に RootSignature の設計によってどの程パフォーマンスにが生じるか調べてみました。
  
  
行 111: 行 138:
 | Bundle cached      20.35 |     -- |   8.23 |   8.41 |    9.90 |      -- |  35.22 | | Bundle cached      20.35 |     -- |   8.23 |   8.41 |    9.90 |      -- |  35.22 |
 | Bundle2            21.26 |  28.28 |  15.36 |  15.28 |   15.50 |   90.24 |  66.38 | | Bundle2            21.26 |  28.28 |  15.36 |  15.28 |   15.50 |   90.24 |  66.38 |
 +
 +
  
  
  
d3d/d3d12/descriptor.1442734078.txt.gz · 最終更新: 2015/09/20 16:27 by oga