D3D12リソースバリア、強化された障壁がすぐにD3D12にやってくることで、Enhance Previewが入手可能であるため、障壁が強化されています。強化されたバリアは、GPUの作業同期、テクスチャレイアウトの遷移、およびキャッシュフラッシュ(「リソースメモリアクセス」)を開発者に独立した制御を提供するD3D12 APIの新しいセットです。強化された障壁は、リソース状態の障壁をより表現的なバリア型に置き換えます。強化された障壁は待ち時間が少なく、同時の読み取りおよび書き込み(同じリソースコピーを含む)、多様なエイリアシングトポロジ、およびより優れた同時性をサポートします。

強化された障壁は、レガシーリソースバリアよりも「単純な」という意味ではありませんが、それらは曖昧ではなく、開発者が理解して理解するのが実際には簡単です。元のリソースバリアデザインは、「リソース状態」の概念を使用して、キャッシュフラッシュ、ハザードトラッキング、およびテクスチャレイアウトの周りのニュアンスを抽象化することを目的としていました。しかしながら、この過剰な単純化は多くの点で良好な害を及ぼします。 1つのために、開発者はしばしば高価な(または偶数)障壁を許可されるべきであるときに高価な障壁を使用することを余儀なくされる。別の場合、リソースバリアは、単一のリソース上の同時読み取りおよび書き込みなどのハードウェアサポートシナリオを完全に表現すること、またはエイリアシング遷移中にリソース状態を示すことができることが多い。そして最後に、開発者は、障壁を効果的に使用するために、州の推進と減衰規則などの資源状態の背後にある内部の複雑さを理解する必要があります。

強調障壁には、バッファ、テクスチャ、およびグローバルには3つのタイプがあります。すべての障壁は、障壁の前後のGPUの作業同期と読み取りまたは書き込みアクセスタイプを制御します。さらに、テクスチャバリアはテクスチャサブレートソースのレイアウトを管理します。好都合には、サブリソース選択は、従来のリソースバリアによって使用されるおなじみの1つまたは複数のオプションに加えて、MIP、アレイ、およびプレーンスライスの範囲として表すことができます。バッファバリアとグローバルバリアは、同期とリソースアクセスのみを制御し、リソースレイアウトに影響を与えない(バッファはレイアウトを持っていません)。グローバルな障壁はすべてのキャッシュメモリに影響を与えます。幸いなことに、強化された障壁はそのような暗黙的な状態遷移を含まない。コマンドリストの実行の開始時に、すべてのリソースは最初に「一般的な」アクセス権を持ち、アクセスタイプが現在のレイアウトと作成時間の制約と互換性がある限り、任意のリソースにアクセスできるようになります(例:D3D12_Resource_FLAG_ALLOW_RENDER_TARGETなど)。 。バッファにレイアウトがないので、再びCreate-Timeの制約の制限内には、任意のバッファアクセスタイプが許可されています。リソースの唯一のステートフル属性はテクスチャレイアウトです。テクスチャサブリソースは一度に1つのレイアウトにしかありません。また、レイアウトの遷移は常にバリアを必要とします。

すべての書き込み操作は、同じExecuteCommandlistsスコープ内で後続の依存アクセスの前にバリアを使用して終了し、フラッシュされなければなりません。これは、同期スコープの前後と後/ after / Afth Access Type、およびAccess Typeの前後に、およびバリア内のアクセスタイプの前後、および必要に応じてテクスチャレイアウトが変更された前後に行われます。別の領域から同じバッファ/サブリソースを読みます。残念なことに、レガシーリソースバリアルールは、リソースを同時に読み取り状態と書き込み状態の両方で配置できません。これは、ハードウェア制約ではなく、状態モデルによって課される必要のない制限です。幸いなことに、強化されたバリアは、同じリソースコピーを含む、同じサブレースソースへの同時読み書きアクセスを許可します。

従来のD3D12の障壁を使用してエイリアスリソースを管理することは、効率的に処理することが困難または不可能です。多くの(ほとんどの?)ケースでは、開発者は単にNULL / NULLエイリアシングバリア(Sync-And-Flush-Ancrement Barrier)を使用しています。その場合でも、影響を受けるリソースの状態は曖昧であり得、既知の状態を確立するために追加の障壁を必要とする(それ自体がリソースデータが「ゴミ」であってもよい)。さらに、エイリアステクスチャをレンダリングターゲットまたは深さステンシルリソースとして使用する場合は、クリア、破棄、またはコピー操作が必要です。拡張された障壁を持つリソースエイリアシングははるかに直接的です。たとえば、リソースを「無効にする」リソースの作業を終了しフラッシュし、バリアの一部として全テクスチャ破棄を実行するオプションを使用して、「アクティブ化」テクスチャのレイアウトを宣言します。データ共有要件またはエイリアスリソースのアライメントかによって、エイリアシング遷移を実行するためのさまざまな方法があります。何があっても、ハードウェアでサポートされているエイリアシングシナリオについて効率的に達成するための障壁のセットがあります。

アプリは、レガシーリソースバリアと強化されたバリアの両方を同時に使用できます。これらの間のリソース切り替えは、最初にRESOURCE_STATE_COMMONまたはBARRIER_LAYOUT_COMMON / BARRIER_ACCESS_COMMONに配置されます。ほとんどの場合、デバッグ層は、LEACY状態を最後に割り当てたすべてのリソースに対してレガシーリソース状態を検証し続けます。ただし、GPUベースの検証(GBV)は、レガシー状態と強化されたバリア状態の両方を合理的に検証できないため、基礎となるハードウェアが拡張された障壁をサポートしている場合は常に拡張されたバリア検証を実行し、レガシーバリア状態を使用してリソースのための同等の強化障壁状態を報告します。つまり、いくつかのGBVエラーは、レガシー状態を使用して移行されたリソースに対してレイアウトまたはアクセスビットエラーを報告することができることを意味します。理想的ではありませんが、時間が経つにつれて、開発者が強化された障壁に切り替わるにつれて問題に少なくなると予想されます。そして、はい、GBVに従来の状態検証を使用するように強制するためのオプションがあります。注意、GBVは初期の強化された障壁のプレビューでは出荷準備ができていません。これは開発者プレビューなので、このSDKを使用するには、ターゲットマシンは開発者モードになっている必要があります。拡張された障壁のサポートを持つドライバは現在開発中であり、これらのドライバが準備ができたら、より多くの情報を共有します。その間、Windows 11の最新の開発者インサイダービルドは、Microsoft Basic Display Adapter(A.K.A.Warp)内の拡張された障壁をサポートしています。 Developer Insiderのビルドの詳細については、を参照してください。

出典: https://devblogs.microsoft.com/direc… <riers-preview/

By admin

Leave a Reply

Your email address will not be published.