Windows 8 には、開発者、エンド ユーザー、システム製造元に役立つ Microsoft DirectX 機能の機能強化が含まれています。
以下の領域で強化された機能を次に示します。
- ピクセル形式 (5551、565、4444):低電力ハードウェア構成での DirectX アプリケーションのパフォーマンスが向上します。
- 倍精度シェーダー機能: CPU を使用せずに GPU のパフォーマンスを向上させる、高レベルシェーダー モデルのパフォーマンスが向上しました。
- ターゲットに依存しないラスター化: Direct2D アプリケーションの高パフォーマンスのアンチエイリアシング パス。
- 上書きなしカード: モバイル プラットフォーム上の Microsoft Direct3D 11.1 アプリケーションと、タイルベースのレンダラーを使用する電源制約デバイスのパフォーマンスが向上します。
- すべてのステージの UAV: DirectX 11.1 ハードウェア上のすべてのシェーダー ステージでシェーダー デバッグを有効にする機能が追加されました。
- テクスチャ配列のクロスプロセス共有 (ステレオスコピック 3D をサポートするため): 立体 3-D を有効にする基礎を提供します。
- 複数サンプルのアンチエイリアス サンプル アクセスを使用した順序付けされていないアクセス ビュー: Direct3D 11 アプリケーションでは、多数のサンプルにメモリを割り当てる必要なく、高品質のレンダリング アルゴリズムを実装できます。
- ロジック操作: 遅延シェーディング手法の機能強化。
- 定数バッファーの制御の強化: ゲーム開発者向けの効率的なバッファー管理。
ピクセル形式 (5551, 565, 4444)
DirectX を使用した低電力構成でグラフィックスをより適切にサポートするには、 DXGI_FORMAT 列挙体の次の DirectX 9 ピクセル形式を Windows 8 用 Direct3D でサポートする必要があります。
- DXGI_FORMAT_B5G6R5_UNORM
- DXGI_FORMAT_B5G5R5A1_UNORM
- DXGI_FORMAT_B4G4R4A4_UNORM
これらの追加形式により、DirectX アプリケーションの低電力ハードウェアのパフォーマンスが向上します。 これらの形式は、現在までのすべての GPU でサポートされています。 次の表では、ハードウェアの機能レベルに応じて、これらの形式に必要なサポートについて説明します。
ハードウェアの機能レベルに応じて必要な形式のサポート
機能 | 機能レベル9_x | 機能レベル 10.0 | 機能レベル 10.1 | 機能レベル 11+ |
---|---|---|---|---|
型付きバッファ | いいえ | 必須 | パキスタン | 必須 |
入力アセンブラー頂点バッファー | いいえ | 省略可能 | オプション | 省略可能 |
Texture1D | いいえ | 必須 | パキスタン | 必須 |
Texture2D | 必須 | パキスタン | パキスタン | 必須 |
Texture3D | いいえ | 必須 | パキスタン | 必須 |
TextureCube | 必須 | パキスタン | パキスタン | 必須 |
シェーダー Id* | いいえ | 必須 | パキスタン | 必須 |
シェーダー サンプル* (フィルター処理あり) | 必須 | パキスタン | パキスタン | 必須 |
シェーダー収集 4 | いいえ | 番号 | いいえ | 必須 |
Mipmap | 必須 | パキスタン | パキスタン | 必須 |
Mipmap の自動生成 | 565 に必須、4444、5551 の場合は省略可能 | 565 に必須、4444、5551 の場合は省略可能 | 565 に必須、4444、5551 の場合は省略可能 | 565 に必須、4444、5551 の場合は省略可能 |
RenderTarget | 565 に必須、4444、5551 には必須 | 565 に必須、4444、5551 の場合は省略可能 | 565 に必須、4444、5551 の場合は省略可能 | 565 に必須、4444、5551 の場合は省略可能 |
Blendable RenderTarget | 565 に必須、4444、5551 には必須 | 565 に必須、4444、5551 の場合は省略可能 | 565 に必須、4444、5551 の場合は省略可能 | 565 に必須、4444、5551 の場合は省略可能 |
UAV 型指定ストア | いいえ | 番号 | × | 省略可能 |
CPU Lockable | 必須 | パキスタン | パキスタン | 必須 |
4x MSAA | 省略可能 | 省略可能 | 565 に必須、4444、5551 の場合は省略可能 | 565 に必須、4444、5551 の場合は省略可能 |
8倍速MSAA | 省略可能 | オプション | 省略可能 | 565 に必須、4444、5551 の場合は省略可能 |
その他の MSAA サンプル数 | 省略可能 | オプション | オプション | 省略可能 |
マルチサンプルの解決 | 565 の場合は必須 (MSAA がサポートされている場合)、4444 の場合は不要、5551 | 565 の場合は必須 (MSAA がサポートされている場合)、4444、5551 の場合は省略可能 | 565 に必須、4444、5551 の場合は省略可能 | 565 に必須、4444、5551 の場合は省略可能 |
マルチサンプルロード | いいえ | 565 の場合は必須 (MSAA がサポートされている場合)、4444、5551 の場合は省略可能 | 565 に必須、4444、5551 の場合は省略可能 | 565 に必須、4444、5551 の場合は省略可能 |
倍精度シェーダー機能
Windows 8 では、倍精度をサポートする Windows ディスプレイ ドライバー モデル (WDDM) 1.2 ドライバーでも、すべてのシェーダー ステージの高レベル シェーダー モデル 5 で追加の倍精度浮動小数点命令をサポートする必要があります。 その手順は以下のとおりです。
- 倍精度逆数
- 倍精度除算
- 倍精度融合乗算加算
ランタイムはこれらの命令をドライバーに直接渡すことができるため、実装ではパフォーマンスを最適化したり、ハードウェアで特殊な単一命令として実装したりできます。
注: これらの機能を使用するには、WDDM 1.2 以降のドライバーで倍精度サポート (D3D11_FEATURE_DOUBLES) を使用して、FEATURE_LEVEL_11以上で実行されていることを確認する必要があります。
絶対差の合計
画像処理は、最新のデバイスで重要なアプリケーションです。 一般的な操作は、パターン マッチングまたは検索です。 通常、ビデオ エンコード操作では、一致する正方形のタイル (通常は 8 x 8 または 16 x 16) が検索され、画像認識アルゴリズムでは、ビット マスクによって識別されるより一般的な図形が検索されます。 これらのシナリオのパフォーマンスを向上させるために、すべてのシェーダー ステージでシェーダー モデル 5.0 の Microsoft High Level Shader Language (HLSL) に新しい組み込みが追加されました。 この組み込み msad4() は、シェーダー IL の絶対差分 (MSAD) 命令のマスクされた合計のグループに対応し、生成されます。 すべての WDDM 1.2 以降のドライバーは、ハードウェアで直接、または他の命令のセット (エミュレート) として、この命令をサポートする必要があります。
注: MSAD 命令は、ラップ動作ではなく、オーバーフローが飽和状態になるように実装する必要があります。 オーバーフロー動作は未定義であることに注意してください。
開発者チェック、WDDM 1.2 以降のドライバーでFEATURE_LEVEL_11以上で実行されていることを確認して、この機能を使用する必要があります。 開発者は、オーバーフローする累積値 (つまり、65535 を超える値) に対して結果の精度に依存してはなりません。
ターゲットに依存しないラスター化 (TIR)
ターゲットに依存しないラスター化 (TIR) は、構造化グラフィックスの高品質なアンチエイリアシングを伴う Direct2D の使用シナリオに対して、高パフォーマンスのアンチエイリアシング パスを提供します。 TIR を使用すると、Direct2D は、Direct2D アンチエイリアシングセマンティクスと品質を維持しながら、ラスター化ステップを CPU から GPU に移動できます。 この機能を使用すると、ソフトウェア レイヤーはカバレッジのために多数のサブピクセル サンプル位置を評価できますが、少数のサンプルに必要なメモリのみを割り当てることができます。 これにより、GPU を使用してレンダリングするが、CPU でレンダリングされた実装の画質を維持するパフォーマンス上の利点が得られます。 これにより、1 つのサンプルを複数サンプルのアンチエイリアスレンダー ターゲットの複数のサンプルにブロードキャストできます。
SampleCount =1 (10、10.1 & 11 の制限された TIR)
Direct3D 10.0 - Direct3D 11.0 ハードウェア (および機能レベル 10_0 - 11_0) では、1 に設定された ForcedSampleCount (およびレンダー ターゲット ビューのサンプル数) と、説明されている制限 (深度/ステンシルなしなど) がサポートされています。
10_0、10_1、および 11_0 ハードウェアの場合、 D3D11_1_DDI_RASTERIZER_DESC。ForcedSampleCount が 1 に設定され、線レンダリングを 2 三角形 (四角形) ベースのモードに構成することはできません (つまり、 MultisampleEnable 状態を true に設定することはできません)。 この制限は、11_1 ハードウェアには存在しません。 MultisampleEnable 状態の名前付けは、マルチサンプリングの有効化とは関係がなくなったため誤解を招く点に注意してください。代わりに、線レンダリング モードを選択するための AntialiasedLineEnable と共にコントロールの 1 つになりました。
ForcedSampleCount = 1 を使用するこの限られた形式のターゲットに依存しないラスター化は、Direct3D 10.0 に存在していたモードと密接に一致しますが、API の変更により Direct3D 10.1 および Direct3D (および機能レベル 10_1 および 11_0) では使用できなくなりました。 Direct3D 10.0 では、 MultisampleEnable が false に設定されている場合に使用できるマルチ サンプル アンチ エイリアシング (MSAA) サーフェスでも、このモードは中央サンプリングレンダリングでした (MultisampleEnableを切り替えることで切り替えることができます)。 Direct3D 10.1 以降では、 MultisampleEnable は (名前に関わらず) マルチサンプリングに影響を与えなくなり、線のレンダリング動作のみを制御します。
上書きと破棄はありません
タイル ベースの遅延レンダリング (TB (テラバイト)DR) アーキテクチャでのコンテンツのレンダリング
Direct3D 11.1 のレンダー ターゲットで、新しいリソース API のセットを使用して 破棄動作をサポートできるようになりました。 開発者は、この機能に注意し、追加の Disカード() メソッドを呼び出して、TB (テラバイト)DR アーキテクチャでより効率的に実行する必要があります (従来のグラフィックス ハードウェアにペナルティはありません)。 これにより、タイルレンダラーを使用するモバイル プラットフォームやその他の電力制約付きデバイスのパフォーマンスが向上します。
TBDR アーキテクチャでのリソースの更新
TBDR アーキテクチャは同じコマンド バッファー経由で複数のパスを完了するため、前の描画呼び出し中にサブリソースの一部が変更されなかった場合にドライバーに通知するには、特別な注意を払う必要があります。 Direct3DUpdateSubResource 関数でNO_OVERWRITE使用すると、ドライバーは、テクスチャの領域に対して以前の描画呼び出しが行われなかったリソースを管理するのに役立ちます。 そのためには、既存のデータを削除するか、上書きから保護するかカードアプリケーションの意図をドライバーに通知する必要があります。 これにより、TBDR アーキテクチャでより効率的なレンダリングが可能になり、従来のデスクトップ ハードウェアで実行してもペナルティは発生しません。
Gpu サーフェスの一部を更新する Direct3D 11 UpdateSubresource() API と CopySubresourceRegions API の新しいバリアントでは、NO_OVERWRITEまたは DISCARD を指定できる追加フラグ フィールドが提供されます。
これらの API は、Direct3D 11.1 デバイス ドライバー インターフェイス (DDI) と Direct3D 9 DDI を駆動します。 ここで説明するフラグを追加して、改訂された BLT、BUFBLT、VOLBLT、および TEXBLT DDI をサポートするには、DirectX 9 以降のハードウェア用の新しいドライバーが必要です。
これらは、Direct3D 11.1 ドライバーを使用するすべての Direct3D 10 以降のハードウェアでもサポートされている必要があります。
各段階の UAV
Microsoft Direct3D 11 では、コンピュート シェーダーでは順序なしアクセス ビュー (UAV) の数が 8 に制限され、ピクセル シェーダーでは 8 つの結合 (レンダー ターゲット ビュー (RTV) + UAV) に制限されていました。 DirectX 11.1 では、バインドできる数が増えました。 DirectCompute の場合、制限は 64 になり、グラフィックスの場合、出力マージャーでの結合された合計バインドは 64 です (つまり、グラフィックスは 64 から RTV で使用される可能性がある最大 8 を引いた値を持つことができます)。
順序指定されていないアクセス ビューは任意のシェーダー ステージからアクセスできますが、グラフィックス パイプラインの合計から引き続き取得されます
すべてのシェーダー ステージで UAV を追加すると、デバッグ情報をパイプラインに追加できます。 この開発の容易さにより、Windows は GPU で高速化されたアプリケーションを記述するためのより望ましいプラットフォームになります。
これには、少なくとも DirectX 11.1 機能レベルが必要です。
テクスチャアレイのクロスプロセス共有(立体3-D対応)
ステレオスコピック 3-D はオプションの WDDM 1.2 システム機能ですが、立体 3-D システム機能をサポートしているかどうかに関係なく、すべての WDDM 1.2 デバイス ドライバーで実装する必要がある基盤となるインフラストラクチャがあります。
DirectX 10 (またはそれ以上) 対応のグラフィックス ハードウェアは、テクスチャ配列のクロスプロセス共有をサポートする必要があります。 この機能は、ステレオスコピック3-Dを可能にする基礎を提供します。 WDDM 1.2 Direct3D DDI では、ハードウェア機能レベルに依存しないレンダー ターゲットとして、配列バッファーのサポートが必要です。
この要件により、ステレオ アプリケーションでモノラル モードでエラーが発生しないようにします。 たとえば、システムでステレオが有効になっていない場合でも、アプリケーションはステレオ スワップ チェーンまたは配列バッファーをレンダー ターゲットとして作成し、 Present を呼び出すことができる必要があります。 この場合、左側のビューのみが表示されます (または、 右を優先 Microsoft DirectX グラフィック インフラストラクチャ (DXGI) の存在フラグが設定されている場合は、右側のビューのみが表示されます)。
そのため、WDDM 1.2 ドライバー (フル グラフィックス & レンダリング デバイス) は、テクスチャ配列のクロス プロセス共有のサポートを追加することによって Direct3D 11 API をサポートする必要があります。 以前のバージョンでは、クロスプロセス共有リソースは単一層サーフェスのみでした。 Windows 8 では、共有配列の最大サイズは 2 つの要素です (ステレオには十分です)。 この要件の詳細については、 Windows ハードウェア認定要件 の Device.Graphics ڂ Discrete3DArraySupport を参照してください。 関連するその他の Microsoft WindowsWindowsWindows HCK 要件は、 Device.Graphics ¦ ProcessingStereoscopicVideoContent と Device.Display.Monitor.Monitor3DModes です。
複数サンプルのアンチエイリアス サンプル アクセスを使用する UAV
Direct3D 11 を使用すると、レンダリング ターゲット ビュー (RTV)/DSV がバインドされていない順序指定されていないアクセス ビュー (UAV) にラスタライズできます。 UAV には任意のサイズを設定できますが、実装ではビューポート/シザー四角形のピクセル 寸法を使用してラスタライザーを操作できます。 DirectX 11 ハードウェアのサンプル パターンは、1 つのサンプルのみです。 DirectX 11.1 ハードウェア仕様が拡張され、複数のサンプルが可能になります。 これは、出力に UAV のみがバインドされる、ターゲットに依存しないラスター化のバリエーションです。
UAV のみのレンダリングとラスタライザーでのマルチサンプリングを組み合わせて、ForcedSampleCount 状態をキーオフできるようになりました。サンプル パターンは 0、1、4、および 8 に制限されています (TIR がサポートする 16 ではありません)。 (UAV 自体は、割り当ての観点からマルチサンプリングされません)。0 の設定は、1 - 単一サンプルラスタライズの設定と同じです。
シェーダーは、UAV のみのレンダリングを使用してピクセル周波数の呼び出しを要求できます。 ただし、サンプル頻度呼び出しの要求は無効です (未定義のシェーディング結果が生成されます)。 SampleMask ラスタライザーの状態は、ここでのラスター化動作にまったく影響しません。
この機能のサポートは DirectX 11.0 以降のハードウェアで利用できます。これには、RTV を使用したターゲットに依存しない完全な 11_1 レベルのラスター化をサポートしていないハードウェアが含まれます。 ドライバーは、UAV のみのマルチサンプルアンチエイリアス サンプル アクセス (MSAA) レンダリングをサポートしていることを報告できます (4 サンプルと 8 サンプルの両方がサポートされていることを意味します)。 すべての DirectX 11 以降のハードウェアは 1 をサポートしています。 RTV を使用して完全な 11_1 ターゲット非依存ラスター化をハードウェアで実行できる場合 (16 サンプルのサポートが必要)、UAV のみの MSAA ラスター化のサポートが必要です (つまり、UAV のみの場合は 4 サンプルと 8 サンプル)。
この機能により、アプリケーションは、多数のサンプルにメモリを割り当てる必要なく、分析アンチエイリアシングなどの高品質のレンダリング アルゴリズムを実装できます。
ロジック操作
出力マージャーでロジック操作を許可すると、現在不可能なイメージに対して一部の操作を実行できます。 たとえば、マスクをより効果的かつ簡単に計算し、3-D レンダリング用の最新の遅延シェーディング手法を実装することもできます。
この機能はほとんどの 3-D ハードウェアに存在しますが、現在のところ、カラー ブレンドほど一般的ではありません。 その結果、ロジック操作の構成は次のように制限されます。
- 最初の RT ブレンド desc でロジック演算を使用する場合は、IndependentBlendEnable を false に設定して、すべての RP に同じロジック演算を適用する必要があります。
- ロジック演算を使用する場合、バインドされているすべての RenderTargets には UINT または SINT 形式が必要です。それ以外の場合、レンダリングは未定義です。
定数バッファーの制御の強化
部分定数バッファーの更新
現在、定数バッファーでは、バッファー全体を構成する更新中に、ソースから宛先へのモノリシック コピーが必要です。 定数バッファーの一部のみを更新する場合は、書き込みのオフセットが理想的です。 定数バッファーへのランダム アクセス書き込み機能は、ゲーム開発者が要求し、定数バッファー管理をより自然かつ効率的にします。 これらの機能は、他のバッファーの種類で既にサポートされており、WDDM 1.2 ドライバーの定数バッファーに追加されています。
この機能は、Direct3D 11.1 ドライバーを使用するすべての Direct3D 10 以降のハードウェアでサポートされている必要があります。 開発者にとって、これは DirectX 9 ハードウェアでエミュレートされるため、すべての機能レベルで動作します。
注: NO_OVERWRITEまたは DISCARD フラグを指定する必要があります。
定数バッファー更新のオフセット
ハイ パフォーマンス ゲーム エンジンの一般的な要望は、個別 の Draw\* 呼び出しによって参照される定数の定数更新の大規模なバッチを収集することです。それぞれに独自の定数が一度に必要です。 これは、アプリケーションが大きなバッファーを作成し、その中の領域に個々のシェーダーをポイントできるようにすることで容易になります (ビューに似ていますが、ビューを記述するためにオブジェクト全体を作成する必要はありません)。
個々のシェーダーでアドレス指定できる最大定数バッファー サイズより大きいサイズの定数バッファーを作成できるようになりました (最大 4096 16 バイト要素 - 65kB、各要素は 1 つの 4 要素シェーダー定数)。 一定のバッファー リソース サイズは、システムが処理できるメモリ割り当てのサイズによってのみ制限されるようになりました。
VSSetShaderConstants などの *SetShaderConstantsAPI を使用して 4096 要素を超える定数バッファーをパイプラインにバインドすると、サイズが 4096 要素だけであるかのようにシェーダーに表示されます。
*SetShaderConstantsAPI、 *SetShaderConstants1 のバリアントを使用すると、バインドと共に "FirstConstant" と "ConstantCount" を指定できます。 シェーダーがこのようにバインドされた定数バッファーにアクセスすると、指定された "FirstConstant" オフセット (1 は 1 が 16 バイトを意味します) から始まり、ConstantCount (16 バイト定数の数) で定義されたサイズを持っているかのように見えます。 これは基本的に、より大きな定数バッファーの領域の軽量な "ビュー" です。 (FirstConstant と ConstantCount の両方が 16 の倍数である必要があります)。
この機能は、Direct3D 10 以降のすべてのハードウェア用 WDDM 1.2 ドライバーでサポートされている必要があります。 Direct3D 11 ランタイムは、機能レベル 9_xの適切な動作をエミュレートします。
Clearview
この機能により、実装はビデオ メモリ リソースに対して効率的なクリア操作を実行し、1 つの API/DDI 呼び出しで複数の rects をクリアできます。 API には、クリアするリソースのサブセットを定義する四角形のサポートが含まれています。 この機能は DirectX 9 DDI でサポートされており、Windows 8 ドライバー (WDDM 1.2) に必要です。 この方法により、イメージングや UI で使用される操作など、2-D 操作のパフォーマンスが向上します。
タイル可能なコピー フラグ
タイル可能なコピー操作を使用すると、アプリケーションは、イメージのソースとターゲットがピクセルアラインされ、後続のレンダリング パスでクロスピクセルの情報交換に参加しないことを実装に通知できます。 これにより、コピー操作中にイメージ データのサブセットをキャッシュすることでメリットを得られる一部の実装で、パフォーマンスが大幅に向上します。 この機能は DirectX 9 DDI でサポートされており、Windows 8 ドライバー以降 (WDDM 1.2) に必要です。
同一面 blits
スクロールなどの多くの UI 操作では、画像の一部から別の部分に画像データを転送する必要があります。 この機能により、コピー元の四角形とコピー先の四角形の両方が同じイメージまたはリソース内にあるコピー操作のサポートが追加されます。 ソースと宛先の四角形が重複する場合、状況は実装とドライバーによって正しく処理される必要があります。 これは DirectX 9 DDI で既に必要であり、WDDM 1.2 ではすべてのハードウェアに必要です。 このアプローチにより、主要な UI シナリオのパフォーマンスが大幅に向上します。
Direct3D 11.1 DDI
これらの関数と構造は、Windows 8 の新機能または更新されています。
- AssignDebugBinary
- CalcPrivateBlendStateSize(D3D11_1)
- ClearView
- DefaultConstantBufferUpdateSubresourceUP(D3D11_1)
- ResourceUpdateSubresourceUP(D3D11_1)
- VsSetConstantBuffers(D3D11_1)
- D3D11_1DDI_D3D11_OPTIONS_DATA
- D3DDDI_BLTFLAGS
- D3DDDI_COPY_FLAGS
- D3DDDIARG_BUFFERBLT1
- D3DDDIARG_DISCARD
- D3DDDIARG_TEXBLT1
- D3DDDIARG_VOLUMEBLT1
- D3DDDICAPS_ARCHITECTURE_INFO
- D3DDDICAPS_SHADER_MIN_PRECISION
- D3DDDICAPS_SHADER_MIN_PRECISION_SUPPORT
- D3DDDICAPS_TYPE