17
17

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

DirectXの新機能 - 機能レベル12_2

Last updated at Posted at 2020-09-03

Claire AndrewsさんのNew in DirectX— Feature Level 12_2を訳したのですが、ダメと言われてしまいました(見出しにしかない情報があるって?まぁいろいろありますよ)。

ただ、公式の仕様書(Feature Level 12_2)があって、こちらはオープンソースだから、こちらを使うのが良いよと、言われたので、こちらを訳してみました。

機能レベル 12_2 は、次の機能を含むかなり大きな機能追加で 個別の利用可能性を調べるのではなく、まとめて(いわばGPUの世代を)確認することができます。

  • DirectX レイトレーシング
  • メッシュシェーダ
  • 可変解像度シェーディング
  • サンプラーフィードバック

そして、DirectX 12 Ultimate の機能レベルでの呼び名です。

機能レベル 12_2 は、NVIDIA のRTX GPUや、AMDのRDNA 2のGPUが対応しています。Windows Insider Programのビルドバージョン20170以降のSDKですでに利用可能だそうです。


こちらの記事は、Feature Level 12_2 を訳したものです。
元仕様書は、microsoft が著作権を持っており、CC4.0で公開されています。

機能レベル12_2

目的

機能レベル12_2は、Windowsプラットフォーム上のグラフィカルなゲームやアプリケーションでの顧客体験を向上させるために、GPUエコシステム全体で一連の機能を標準化するための手段として存在しています。

クエリー と API

ランタイムは、他のフィーチャレベルのクエリーと同じ方法で、12_2機能レベルをグラフィックスドライバに問い合わせます。

備考

フィーチャーレベル12_2を、正しいCAPSセットが正しい値であることに基づいて推測することができますが、機能レベルの推測は既存の設計に反するため、ランタイムはこれを行いません。機能レベル12_2は、ドライバーによって明示的に報告されるものです。

12_2の列挙値は次のように表されます:

typedef
enum D3D_FEATURE_LEVEL
{
    // ...
	D3D_FEATURE_LEVEL_12_2 = 0xc200

} 	D3D_FEATURE_LEVEL;

機能レベル12_2は、他のフィーチャーレベルと同じように、例えばデバイスを作成するときに要求されます:

    ComPtr<ID3D12Device> device;
    D3D_FEATURE_LEVEL featureLevel = D3D_FEATURE_LEVEL_12_2;
    HRESULT hr = D3D12CreateDevice(nullptr, featureLevel, IID_PPV_ARGS(&m_spDevice));
    if (SUCCEEDED(hr))
    {
        // 機能レベルはディフォルトアダプターでサポートされている
    } 

機能

機能レベル12_2は、CheckFeatureSupportで直接問い合わせ可能な、機能と機能階層(tier)で表現されます。

デバイスが機能レベル12_2の場合、次のようになります。

機能 12_2 での最低限 公開仕様
要求ドライバーモデル WDDM 2.0
シェーダモデル 6.5 Link
レイトレーシング階層 Tier 1.1 Link
可変シェーディングレート Tier 2 Link
メッシュシェーダ階層 Tier 1 Link
サンプラーフィードバック Tier 0.9 Link
リソースバインディング階層 Tier 3 Link
タイルリソース Tier 3
保守的(Conservative)ラスタライズ Tier 3 Link
ルートシグネチャ階層 1.1 Link
深度境界テストサポート TRUE Link
即時書き込みバッファサポートフラグ Direct, Compute, Bundle
リソース単位のGPU仮想アドレスビット最大値(MaxGPUVirtualAddressBitsPerResource) 40
プロセス単位のGPU仮想アドレスビット最大値(MaxGPUVirtualAddressBitsPerProcess) 40

さらに、次のフラグが設定されています。

機能 12_2 での値 機能(英語)
ウェーブ単位の操作 TRUE WaveOps
出力合成でのロジック操作 TRUE OutputMergerLogicOp
任意のシェーダからのVPとRTの配列インデックス、GSエミュレーションなしでラスタライザをサポート TRUE VPAndRTArrayIndexFromAnyShaderFeedingRasterizerSupportWithoutGSEmulation
クエリーのタイムスタンプをコピーするクエリーのサポート TRUE CopyQueueTimestampQueriesSupported
完全に型指定された形式のキャストのサポート TRUE CastingFullyTypedFormatSupported
Int64シェーダ操作 TRUE Int64ShaderOps

備考

一部の仕様、特に2019年5月のアップデート以前の仕様はDirectX-Specsのリポジトリに移行されていません。

DDI

Direct3D 12 UMD DDI には、機能レベルを説明するための列挙型 D3D12DDI_3DPIPELINELEVEL があります。この列挙型には、機能レベル 12.2 の値があります。

typedef enum D3D12DDI_3DPIPELINELEVEL
{
    // ...
    D3D12DDI_3DPIPELINELEVEL_12_2 = 14,
} D3D12DDI_3DPIPELINELEVEL;

ドライバーがサポートしている機能レベルを見つけるために、ランタイムはPFND3D12DDI_GETCAPSを次の設定で呼び出します。

  • D3D12DDICAPS_TYPE_3DPIPELINESUPPORT, もしくは
  • D3D12DDICAPS_TYPE_3DPIPELINESUPPORT1

この2つのGetCapsの使い方の違いは以下の通りです。

セレクター データ解釈 有効な帰り値を与える機能レベル
3DPIPELINESUPPORT D3D12DDI_3DPIPELINELEVEL, 簡単な出力値 12.1 と、それ以前
3DPIPELINESUPPORT1 D3D12DDI_3DPIPELINESUPPORT1_DATA_0081, 入力・出力フィールドを含む構造体 すべて。12.2 と、それ以降を含む

D3D12DDI_3DPIPELINESUPPORT1_DATA_0081の定義は以下の通りです。

typedef struct D3D12DDI_3DPIPELINESUPPORT1_DATA_0081
{
    D3D12DDI_3DPIPELINELEVEL HighestRuntimeSupportedFeatureLevel; // 入力
    D3D12DDI_3DPIPELINELEVEL MaximumDriverSupportedFeatureLevel;  // 出力
} D3D12DDI_3DPIPELINESUPPORT1_DATA_0081;

3DPIPELINESUPPORT1の場合、ランタイムはHighestRuntimeSupportedFeatureLevelの値を設定します。
ドライバーは、HighestRuntimeSupportedFeatureLevelを超えないMaximumDriverSupportedFeatureLevelの値を返します。

備考

実際には:

  • Manganese (20H2)以前のOSに組み込まれたDirect3Dのバージョンでは、3DPIPELINESUPPORTを使用します。
  • Iron OS 以降に組み込まれたDirect3Dのバージョンでは、3DPIPELINESUPPORT1を使用し、失敗した場合は3DPIPELINESUPPORTに差し戻します。

APIレベルとDDIレベルのレポート機能の不一致

D3D12_COMMAND_LIST_SUPPORT_FLAG_BUNDLE機能のWriteBufferImmediateSupportFlagsは、DDIレベルでD3D12DDI_COMMAND_QUEUE_FLAG_3Dを報告するドライバーのAPIレベルでオンになります。

検証

機能レベル12_2で作成されたDirect3D 12デバイスが少なくとも本ドキュメントの「機能」セクションで説明されている機能を満たすことを検証するためのDirect3D 12適合性テストがあります。これは、ドライバーではなくランタイムの動作を実行するため、HLKテストではなく適合性テストです。機能レベル 12_2 の特定のテストとは別に、CheckFeatureSupport の機能がデバイスの動作と適切に一致していることを確認するためのテストも行われています。

17
17
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
17

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?