ユーザ用ツール

サイト用ツール


d3d:d3d12

文書の過去の版を表示しています。


Direct3D 12 (DirectX 12) 詳細

GPU の対応

RADEON R3 8400 GeForce 750 ti HD 4600
GCN Maxwell (Haswell)
D3D12_FEATURE_LEVELS 12_0 11_0 11_0
DoublePrecisionFloatShaderOps true true true
OutputMergerLogicOp true true false
MinPrecisionSupport NONE NONE NONE
TiledResourcesTier Tier 2 Tier 1 0
ResourceBindingTier Tier 3 Tier 2 Tier 1
PSSpecifiedStencilRefSupported true false false
TypedUAVLoadAdditionalFormats true true true
ROVsSupported false false false
ConservativeRasterizationTier 0 0 0
MaxGPUVirtualAddressBitsPerResource 38 31 31
StandardSwizzle64KBSupported false false false
CrossNodeSharingTier 0 0 0
CrossAdapterRowMajorTextureSupported false false false
VPAndRTArrayIndexFromAnyShaderFeedingRaster.. false false true
ResourceHeapTier Tier 2 Tier 1 Tier 1

API

Descriptor

リソースの情報を格納した構造体。 GPU メモリに確保され、GPU がリソースを参照するために用いられます。

Descriptor を格納するメモリは DescriptorHeap から確保されます。 DescriptorHeap は連続領域で、GPU にテーブルとして渡します。

Descriptor が必要なリソースは下記の通り

  • ConstantBufferView
  • ShaderResourceView (Texture)
  • UnorderedAccessView
  • Sampler

ID3D12RootSignature

リソースとシェーダーの対応付けを行うためのテーブルを定義します。 C言語の struct のようなもので、レジスタとのバインド状態を指定します。 あくまで対応付けのテンプレートであり、実際のバインド状態そのものは CommandList に入ります。

RootSignature のサイズは固定で、最大 16エントリ (DWORD) のみ。

  • 1 DWORD : DescriptorTable
  • 4 DWORD : Descriptor 直接
  • 1 DWORD : Constant (int 32bit)

直接 Descriptor を格納すると 4個しか入らないので DescriptorTable と組み合わせて使う。

Descriptor/DescriptorTable で指定したリソースは任意のレジスタにバインドできます。

  • b0~ CBV ConstantBufferView
  • t0~ SRV ShaderResourceView
  • u0~ UAV UnorderedAccessView
  • s0~ Sampler

Texture の転送

Buffer, Texture の転送もアプリケーション側で管理する必要があります。

GPU 側の VRAM を直接 Map することはできません。 一旦 Map 可能な Buffer (Shared) に書き込み、GPU の Copy 命令 (DMA) で転送を行います。 本来 UMA 環境では Copy しなくても良いはずですが、Texture はメモリアクセス最適化のためにタイリング (swizzle) が必要なのでやはり Copy を行います。

  1. Texture (または GPU 側 Buffer) 作成 (COPY_DEST)
  2. Buffer 作成 (COPY_SRC)
  3. レイアウト取得 (GetCopyableFootprints())
  4. レイアウトにそって Buffer にデータを書き込み
  5. 転送用 CommandList を作成
  6. CommandBuffer で CopyTextureRegion() 等の Copy 命令作成
  7. 転送用 CommandQueue で CommandList を実行
  8. CommandQueue に転送完了 Sginal (Fence) を設定
  9. Fence で転送完了を確認したら不要な Buffer を Release
d3d/d3d12.1434803860.txt.gz · 最終更新: by oga

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki