Direct3D 12 Core 1.0 機能レベル
Core 1.0 機能レベルは、完全な Direct3D 12 機能セットのサブセットです。 Core 1.0 機能レベルは、 コンピューティング専用デバイスと呼ばれるデバイスのカテゴリによって公開できます。 コンピューティング専用デバイスの全体的なドライバー モデルは、Microsoft Compute Driver Model (MCDM) です。 MCDM は、より広い範囲をカバーする Windows デバイス ドライバー モデル (WDDM) の縮小版です。
コア機能レベル内の機能 のみ をサポートするデバイスは、 コア デバイス と呼ばれます。
Note
コンピューティング専用デバイス、 MCDM デバイス、 コア機能レベル デバイス、および コア デバイス はすべて同じ意味です。 シンプルにするために、 コアデバイス を使用します。
コアデバイスの作成
通常、Direct3D 12 デバイスを作成するには、 D3D12CreateDevice 関数を呼び出して、最小機能レベルを指定します。
機能レベル 9 ~ 12 を指定した場合、返されるデバイスは、従来の GPU (Core デバイスの機能のスーパーセットをサポートする) などの機能が豊富なデバイスになります。 その範囲の機能レベルに対して、Core デバイスが返されることはありません。
一方、Core 機能レベル (たとえば、 D3D_FEATURE_LEVEL::D3D_FEATURE_LEVEL_1_0_CORE) を指定すると、返されるデバイスは機能が豊富なデバイスになるか、Core デバイスになる可能性があります。
// d3dcommon.h
D3D_FEATURE_LEVEL_1_0_CORE = 0x1000
_CORE
機能レベルを指定すると、ランタイム/デバッグ レイヤーは、アプリケーションが使用する機能がその _CORE
機能レベルで許可されているかどうかを検証します。 その機能セットについては、このトピックの後半で定義します。
Coreデバイス用シェーダーモデル
Core デバイスは Shader Model 5.0 以降をサポートします。
ランタイムは、5.x 非 DXIL シェーダー モデルを 6.0 DXIL に変換します。 したがって、ドライバーは 6.x のみをサポートする必要があります。
コアデバイスのリソース管理モデル
- サポートされているリソース ディメンション: 生のバッファーと構造化バッファーのみ (型付きバッファー、texture1d/2D などはありません)
- 予約済み(タイル)リソースはサポートされていません
- カスタムヒープはサポートされていません
- 以下のヒープ フラグはいずれもサポートされていません。
- D3D12_HEAP_FLAG_HARDWARE_PROTECTED
- D3D12_HEAP_FLAG_ALLOW_WRITE_WATCH
- D3D12_HEAP_FLAG_ALLOW_DISPLAY
- D3D12_HEAP_FLAG_ALLOW_SHADER_ATOMICS (シェーダ アトミックが必要であることに注意してください。このフラグは別の機能、クロス アダプタ アトミック用です)
コアデバイスのリソースバインディングモデル
- リソースバインディング層 1 のみのサポート
- 例外:
- テクスチャサンプラーはサポートされていません
- 機能レベル 11.1+ のような 64 台の UAV をサポート (8 台のみではなく)
- 実装では、記述子を介したリソースへのシェーダー アクセスに対して境界チェックを実装する必要はありません。境界外のアクセスは未定義の動作を生成します。
- 副産物として、ルート署名の記述子範囲フラグ D3D12_DESCRIPTOR_RANGE_FLAG_DESCRIPTORS_STATIC_KEEPING_BUFFER_BOUNDS_CHECKS はサポートされません。
- UAV/CBV 記述子は、デフォルトのヒープ (アップロード/リードバック ヒープではない) のリソースに対してのみ作成できます。 これにより、アプリケーションは CPU<->GPU 間でデータを取得するためにコピーを実行するようになります。
- 最も低いバインディング機能層であるにもかかわらず、この層でも注目すべき機能がいくつかあります。
- コマンド リストが記録された後に記述子ヒープを更新できます (リソース バインディング仕様の D3D12_DESCRIPTOR_RANGE_FLAG_DESCRIPTORS_VOLATILE を参照)
- ルートディスクリプタは基本的にGPUVAポインタである
- MMU / VA のサポートはありませんが、ルート記述子で使用されるバッファ VA は、アドレス パッチを実行することで実装によってエミュレートできます。
構造化バッファ制限
構造化バッファのベース アドレスは 4 バイト境界に揃える必要があり、ストライドは 2 または 4 の倍数である必要があります。 ストライドが 2 の場合、特に D3D_FEATURE_LEVEL_1_0_CORE では型付きバッファーがサポートされていないため、16 ビット データを使用するアプリの場合に該当します。
記述子で指定されたストライドは、HLSL で指定されたストライドと一致する必要があります。
Core デバイスのコマンド キュー サポート
計算およびコピーキューのみ (3D、ビデオなどのキューはありません)。
Core デバイスのシェーダー サポート
コンピューティング シェーダーのみ。グラフィック シェーダー (頂点シェーダー、ピクセル シェーダーなど) や、レンダリング ターゲット、スワップ チェーン、入力アセンブラーなどの関連機能は含まれません。
算術精度
コア デバイスは、16 ビット浮動小数点演算の非正規化をサポートする必要はありません。
コアデバイスでサポートされているAPI
以下のリストは、完全なアプリケーション プログラミング インターフェイスのサポートされているサブセットを表しています (Core 1.0 機能レベルで サポートされていない API は リストに含まれていません)。
ID3D12Device メソッド
- ID3D12Device::CheckFeatureSupport
- ID3D12Device::CopyDescriptors
- ID3D12Device::CopyDescriptorsSimple
- ID3D12Device::CreateCommandAllocator
- ID3D12Device::CreateCommandList
- ID3D12Device::CreateCommandQueue
- ID3D12Device::CreateCommandSignature
- ID3D12Device::CreateCommittedResource
- ID3D12Device::CreateComputePipelineState
- ID3D12Device::CreateConstantBufferView
- ID3D12Device::CreateDescriptorHeap
- ID3D12Device::CreateFence
- ID3D12Device::CreateHeap
- ID3D12Device::CreatePlacedResource
- ID3D12Device::CreateQueryHeap
- ID3D12Device::CreateRootSignature
- ID3D12Device::CreateShaderResourceView
- ID3D12Device::CreateSharedHandle
- ID3D12Device::CreateUnorderedAccessView
- ID3D12Device::Evict
- ID3D12Device::GetAdapterLuid
- ID3D12Device::GetCopyableFootprints
- ID3D12Device::GetCustomHeapProperties
- ID3D12Device::GetDescriptorHandleIncrementSize
- ID3D12Device::GetDeviceRemovedReason
- ID3D12Device::GetNodeCount
- ID3D12Device::GetResourceAllocationInfo
- ID3D12Device::MakeResident
- ID3D12Device::OpenSharedHandle
- ID3D12Device::OpenSharedHandleByName
- ID3D12Device::SetStablePowerState
ID3D12Device1 メソッド
- ID3D12Device1::CreatePipelineLibrary
- ID3D12Device1::SetEventOnMultipleFenceCompletion
- ID3D12Device1::SetResidencySetEventOnMultipleFenceCompletionPriority
ID3D12Device2 メソッド
ID3D12Device3 メソッド
- ID3D12Device3::OpenExistingHeapFromAddress
- ID3D12Device3::OpenExistingHeapFromFileMapping
- ID3D12Device3::EnqueueMakeResident
ID3D12Device4 メソッド
ID3D12Device5 メソッド
- ID3D12Device5::CreateMetaCommand
- ID3D12Device5::CreateStateObject
- ID3D12Device5::EnumerateMetaCommandParameters
- ID3D12Device5::EnumerateMetaCommands
- ID3D12Device5::RemoveDevice
ID3D12CommandQueue メソッド
- ID3D12CommandQueue::BeginEvent
- ID3D12CommandQueue::EndEvent
- ID3D12CommandQueue::ExecuteCommandLists
- ID3D12CommandQueue::GetClockCalibration
- ID3D12CommandQueue::GetDesc
- ID3D12CommandQueue::GetTimestampFrequency
- ID3D12CommandQueue::SetMarker
- ID3D12CommandQueue::Signal
- ID3D12CommandQueue::Wait
ID3D12CommandList メソッド
ID3D12GraphicsCommandList メソッド
- ID3D12GraphicsCommandList::BeginEvent
- ID3D12GraphicsCommandList::BeginQuery
- ID3D12GraphicsCommandList::ClearState
- ID3D12GraphicsCommandList::ClearUnorderedAccessViewFloat
- ID3D12GraphicsCommandList::ClearUnorderedAccessViewUint
- ID3D12GraphicsCommandList::Close
- ID3D12GraphicsCommandList::CopyBufferRegion
- ID3D12GraphicsCommandList::CopyResource
- ID3D12GraphicsCommandList::CopyTextureRegion
- ID3D12GraphicsCommandList::Dispatch
- ID3D12GraphicsCommandList::EndEvent
- ID3D12GraphicsCommandList::EndQuery
- ID3D12GraphicsCommandList::Reset
- ID3D12GraphicsCommandList::ResolveQueryData
- ID3D12GraphicsCommandList::ResourceBarrier
- ID3D12GraphicsCommandList::SetComputeRoot32BitConstant
- ID3D12GraphicsCommandList::SetComputeRoot32BitConstants
- ID3D12GraphicsCommandList::SetComputeRootConstantBufferView
- ID3D12GraphicsCommandList::SetComputeRootDescriptorTable
- ID3D12GraphicsCommandList::SetComputeRootShaderResourceView
- ID3D12GraphicsCommandList::SetComputeRootSignature
- ID3D12GraphicsCommandList::SetComputeRootUnorderedAccessView
- ID3D12GraphicsCommandList::SetDescriptorHeaps
- ID3D12GraphicsCommandList::SetMarker
- ID3D12GraphicsCommandList::SetPipelineState
- ID3D12GraphicsCommandList::SetPredication