DXGK_GPUMMUCAPS構造体 (d3dkmddi.h)
DXGK_GPUMMUCAPS 構造体は、仮想メモリ アドレス指定機能を表すためにカーネル モード ドライバーによって使用されます。
構文
typedef struct _DXGK_GPUMMUCAPS {
union {
struct {
UINT ReadOnlyMemorySupported : 1;
UINT NoExecuteMemorySupported : 1;
UINT ZeroInPteSupported : 1;
UINT ExplicitPageTableInvalidation : 1;
UINT CacheCoherentMemorySupported : 1;
UINT PageTableUpdateRequireAddressSpaceIdle : 1;
UINT LargePageSupported : 1;
UINT DualPteSupported : 1;
UINT AllowNonAlignedLargePageAddress : 1;
UINT SysMem64KBPageSupported : 1;
UINT InvalidTlbEntriesNotCached : 1;
UINT SysMemLargePageSupported : 1;
UINT CachedPageTables : 1;
#if ...
UINT Reserved : 19;
#elif
UINT Reserved : 20;
#elif
UINT Reserved : 21;
#elif
UINT Reserved : 22;
#else
UINT Reserved : 24;
#endif
};
UINT Value;
};
DXGK_PAGETABLEUPDATEMODE PageTableUpdateMode;
UINT VirtualAddressBitCount;
UINT LeafPageTableSizeFor64KPagesInBytes;
UINT PageTableLevelCount;
struct {
UINT SourcePageTableVaInTransfer : 1;
UINT Reserved : 31;
} LegacyBehaviors;
} DXGK_GPUMMUCAPS;
メンバーズ
ReadOnlyMemorySupported
1 に設定すると、ドライバーはメモリ ページの読み取り専用保護をサポートします。
NoExecuteMemorySupported
1 に設定すると、ドライバーはメモリ ページ 実行 保護をサポートしません。
ZeroInPteSupported
1 に設定すると、GPU は Zero DXGK_PTE フラグをサポートします。 これは、すべてのページ テーブル レベルに適用されます。
ExplicitPageTableInvalidation
解放する前に、UpdatePageTable を使用して、ページ テーブルまたはページ ディレクトリのすべてのエントリを無効な状態 明示的に設定する必要があることを示します。 既定では、ビデオ メモリ マネージャーは、これらのエントリが不要になった場合に、以前に有効なエントリを含むページ テーブルを解放できます (たとえば、大きな GPU 仮想アドレス範囲を解放すると、基になるページ テーブルが破棄されます)。
手記
通常、このフラグは、ページ テーブルをエミュレートする必要があり、ページ テーブルエントリごとに情報を追跡する必要があり、すべてのページ テーブルエントリの更新に対して明確な init/deinit ペアを必要とするソフトウェア ドライバーによって使用されます。
CacheCoherentMemorySupported
ドライバーがページ テーブル エントリ内の CacheCoherent ビットをサポートし、システム メモリへの I/O コヒーレント転送を実行できることを示します。
PageTableUpdateRequireAddressSpaceIdle
エンジンによって現在使用されているアドレス空間のページ テーブル エントリの更新または変換ルックアサイド バッファーの無効化を GPU がサポートしていないことを示します。 このフラグが設定されている場合、ビデオ メモリ マネージャーは、ページ テーブルのエントリが変更されたとき、および変換のルックアサイド バッファーが無効になったときに、アドレス空間を共有するすべてのコンテキストが中断されることを確認します。
LargePageSupported
1 に設定すると、リーフ 1 を除くすべてのレベルのページ テーブルで、大きなページ (DXGK_PTEで LargePageビット) がサポートされます。
DualPteSupported
1 に設定すると、GPU はレベル 1 のページ テーブル (4 KB のページ テーブルと 64 KB のページ テーブル) のページ テーブルへの 2 つのポインターをサポートします。
AllowNonAlignedLargePageAddress
1 に設定すると、大きなページ エントリの物理アドレスがリーフ ページ テーブルカバレッジにアラインされていない場合、オペレーティング システムは LargePage フラグを設定できます。 Windows 10 バージョン 1607 (WDDM 2.1) 以降で使用できます。
SysMem64KBPageSupported
ドライバーは、64 KB のメモリ セグメント管理を提供します。 Windows 10 バージョン 1607 (WDDM 2.1) 以降で使用できます。
InvalidTlbEntriesNotCached
このビットが設定されている場合、ドライバーは無効な状態から有効な状態に遷移している VA 範囲の FlushTlb 要求の DxgkDdiBuildPagingBufferへの呼び出しを受け取りません。 ハードウェアの TLB が無効な変換をキャッシュしないことが予想されます
Windows 10 バージョン 1903 (WDDM 2.6) 以降で使用できます。
SysMemLargePageSupported
ドライバーは、大きなページのサポートを提供します。 Windows Server 2022 (WDDM 2.9) 以降で使用できます。
CachedPageTables
キャッシュされたページ テーブルがサポートされています。 WDDM 3.1 以降で使用できます。
Reserved
システム用に予約されています。使用しないでください。
Value
和集合の構造体の値を整数で表します。
PageTableUpdateMode
DxgkDdiUpdatePageTable操作で使用されるアドレスの種類定義します。 DXGK_PAGETABLEUPDATE_GPU_VIRTUAL が設定されると、すべてのページング操作がシステム コンテキストの仮想アドレス空間で実行されます。 ページ ディレクトリがローカル GPU メモリ セグメントにある場合、更新モードを DXGK_PAGETABLEUPDATE_CPU_VIRTUALに設定することはできません。
VirtualAddressBitCount
GPU 仮想アドレス内のビット数。
LeafPageTableSizeFor64KPagesInBytes
64 KB ページが使用されている場合のリーフ ページ テーブルのサイズ。 サイズは、CPU ページ サイズ (4096) の倍数である必要があります。
PageTableLevelCount
サポートされているページ テーブル レベルの数。 最小値は 2 (DXGK_MIN_PAGE_TABLE_LEVEL_COUNTとして定義) です。 最大値は DXGK_MAX_PAGE_TABLE_LEVEL_COUNTです。
PageTableLevelCount が 2 の場合、ルート ページ テーブルは動的にサイズ変更でき、ページ テーブルのサイズは DxgkDdiGetRootPageTableSizeによって決定されます。 PageTableLevelCount が 2 より大きい場合、すべてのページ テーブル レベルのサイズは固定されます。このサイズは、DXGK_PAGE_TABLE_LEVEL_DESC::P ageTableSizeInBytesで記述されます。
LegacyBehaviors
LegacyBehaviors.SourcePageTableVaInTransfer
1 に設定すると、ビデオ メモリ マネージャー 割り当て削除中に TransferVirtual の SourcePageTable アドレスが設定されます。
LegacyBehaviors.Reserved
引っ込み思案;使用しないでください。
必要条件
要件 | 価値 |
---|---|
サポートされる最小クライアント | Windows 10 |
サポートされる最小サーバー | Windows Server 2016 |
ヘッダー | d3dkmddi.h (D3dkmddi.h を含む) |