DXGK_ALLOCATIONINFOFLAGS構造体 (d3dkmddi.h)
DXGK_ALLOCATIONINFOFLAGS構造体は、割り当てのプロパティを識別します。
構文
typedef struct _DXGK_ALLOCATIONINFOFLAGS {
union {
struct {
UINT CpuVisible : 1;
UINT PermanentSysMem : 1;
UINT Cached : 1;
UINT Protected : 1;
UINT ExistingSysMem : 1;
UINT ExistingKernelSysMem : 1;
UINT FromEndOfSegment : 1;
UINT Swizzled : 1;
UINT Overlay : 1;
UINT Capture : 1;
UINT UseAlternateVA : 1;
UINT SynchronousPaging : 1;
UINT LinkMirrored : 1;
UINT LinkInstanced : 1;
UINT HistoryBuffer : 1;
UINT AccessedPhysically : 1;
UINT ExplicitResidencyNotification : 1;
UINT HardwareProtected : 1;
UINT CpuVisibleOnDemand : 1;
UINT Reserved : 4;
UINT DXGK_ALLOC_RESERVED16 : 1;
UINT DXGK_ALLOC_RESERVED15 : 1;
UINT DXGK_ALLOC_RESERVED14 : 1;
UINT DXGK_ALLOC_RESERVED13 : 1;
UINT DXGK_ALLOC_RESERVED12 : 1;
UINT DXGK_ALLOC_RESERVED11 : 1;
UINT DXGK_ALLOC_RESERVED10 : 1;
UINT DXGK_ALLOC_RESERVED9 : 1;
UINT DXGK_ALLOC_RESERVED4 : 1;
UINT DXGK_ALLOC_RESERVED3 : 1;
UINT DXGK_ALLOC_RESERVED2 : 1;
UINT DXGK_ALLOC_RESERVED1 : 1;
UINT DXGK_ALLOC_RESERVED0 : 1;
};
UINT Value;
};
} DXGK_ALLOCATIONINFOFLAGS;
メンバー
CpuVisible
[out]割り当てが CPU から直接アクセスできるかどうかを指定する UINT 値。 ディスプレイ ミニポート ドライバーは、割り当て時に pfnLockCb 関数を正常に呼び出すために、ユーザー モードディスプレイ ドライバーのこのフラグを設定する必要があります。 このフラグが割り当てに設定されていない場合、 pfnLockCb はエラーを返します。
共有割り当てを作成したプロセスのみが、その割り当てをロックできることに注意してください。
このメンバーの設定は、32 ビット 値 メンバー (0x00000001) の最初のビットを設定することと同じです。
PermanentSysMem
[out]コンテンツがメモリ セグメント内にある場合でも、割り当てのコピーをシステム メモリに保持するかどうかを指定する UINT 値。 既定では、メモリ セグメントに割り当てを転送すると、サーフェス システムのメモリ バッキング ストアは失われます。 PermanentSysMem フラグが指定され、割り当てがメモリ セグメントから削除されると、割り当ての内容は破棄され、割り当てがダーティされていない場合はページングされません (つまり、割り当ては、ページインされてから書き込み操作のターゲットではなかった)。
割り当て時に pfnLockCb を呼び出すと、割り当てのシステム メモリ バッキング ストアが常に返されます。 ユーザー モード ディスプレイ ドライバーが pfnUnlockCb を呼び出すときに割り当てがメモリ セグメント内にある場合、割り当てのメモリ セグメント リソースは新しいコンテンツで更新されます。 この更新プログラムは、 DxgkDdiBuildPagingBuffer 関数を介した通常のページング操作として、ディスプレイ ミニポート ドライバーに表示されます。 ディスプレイ ミニポート ドライバーがページング操作の最小領域サイズまたは配置を必要とする場合は、この要件がロックされているリージョンに反映される必要があります。 ドライバーが PermanentSysMem を設定する場合、ドライバーは CpuVisible メンバーも設定する必要があります。 ドライバーは、プライマリ サーフェイスに PermanentSysMem を設定しないでください。
このメンバーの設定は、32 ビット Value メンバー (0x00000002) の 2 番目のビットを設定することと同じです。
Cached
[out]割り当てバッキング ストアをキャッシュ メモリとして割り当てるかどうかを指定する UINT 値。既定では、割り当てバッキング ストアは書き込み結合メモリとして格納されます。 キャッシュに一貫性のないセグメント (メモリ セグメントや AGP セグメントなど) でキャッシュメモリ割り当てが使用されている場合、ビデオ メモリ マネージャーは、適切なタイミングでプロセッサのキャッシュからフラッシュすることで、割り当ての内容の一貫性を確保します。
ドライバーが Cached を設定し、 ExistingSysMem または ExistingKernelSysMem メンバーも設定すると、ドライバーは、既存のメモリがキャッシュ可能にマップされたことをビデオ メモリ マネージャーに示します。 既存のメモリがキャッシュ可能にマップされていても、ドライバーが キャッシュされた メンバーの設定に失敗した場合、ビデオ メモリ マネージャーはデータの一貫性を確保できず、破損が発生します。 ドライバーは、アプリケーションまたはユーザー モードのディスプレイ ドライバーによって読み取られる割り当ての キャッシュ されたメンバーを設定する必要があります。 ドライバーは、書き込み専用の割り当てに対して キャッシュされた メンバーを設定しないでください。
ドライバーがこのメンバーを設定する場合、ドライバーは CpuVisible メンバーも設定する必要があります。 ドライバーは、プライマリ サーフェスに キャッシュを 設定しないでください。
このメンバーの設定は、32 ビット Value メンバー (0x00000004) の 3 番目のビットを設定することと同じです。
Protected
[out]アプリケーションによる潜在的な直接 CPU アクセスから割り当てを保護するために、ユーザー アドレス空間ではなく、割り当てバッキング ストアをカーネル メモリに割り当てるかどうかを指定する UINT 値。 ドライバーは、PermanentSysMem、ExistingSysMem、または ExistingKernelSysMem メンバーと組み合わせてこのメンバーを設定できません。 ドライバーは、プライマリ サーフェスで Protected を設定しないでください。
このメンバーの設定は、32 ビット Value メンバー (0x00000008) の 4 番目のビットを設定することと同じです。
ExistingSysMem
[out]ビデオ メモリ マネージャーが割り当てのバッキング ストアとして既存のシステム メモリ範囲を使用するかどうかを指定する UINT 値。 システム メモリ範囲は、割り当てのサイズに対する現在のプロセスの有効なユーザー モード アドレスである必要があります。 システム メモリの範囲もページアラインされ、サイズが複数のページである必要があります。
システム メモリの範囲がキャッシュ可能な仮想アドレスの場合、ドライバーは、割り当てに対するキャッシュの一貫性を確保するためにビデオ メモリ マネージャーに通知するように Cached メンバーを設定する必要があります。 Cached メンバーが指定されていない場合、ビデオ メモリ マネージャーは、システム メモリの範囲がキャッシュ不可能、書き込み結合、またはキャッシュ可能であると判断します。ただし、この状況では、ドライバーはキャッシュの一貫性を確保するか、キャッシュの一貫性が指定された使用の問題ではないことを判断します。
この種類の割り当ては、 PermanentSysMem メンバーが設定されている割り当てと同じロック セマンティクスを暗黙的に持つ点に注意してください。
ドライバーは、PermanentSysMem、Protected、または ExistingKernelSysMem メンバーと組み合わせて ExistingSysMem を設定できません。 ドライバーは、プライマリ サーフェイスに ExistingSysMem を設定しないでください。
このメンバーの設定は、32 ビット Value メンバー (0x00000010) の 5 番目のビットを設定することと同じです。
ExistingKernelSysMem
[out]ビデオ メモリ マネージャーが割り当てのバッキング ストアとして既存のシステム メモリ範囲を使用するかどうかを指定する UINT 値。 システム メモリの範囲は、ページ上に配置され、サイズが複数のページに配置された有効なカーネル モード アドレスである必要があります。
システム メモリの範囲がキャッシュ可能な仮想アドレスの場合、ドライバーは、割り当てに対するキャッシュの一貫性を確保するためにビデオ メモリ マネージャーに通知するように Cached メンバーを設定する必要があります。 Cached メンバーが指定されていない場合、ビデオ メモリ マネージャーは、システム メモリの範囲がキャッシュ不可能、書き込み結合、またはキャッシュ可能であると判断します。ただし、この状況では、ドライバーはキャッシュの一貫性を確保するか、キャッシュの一貫性が指定された使用の問題ではないことを判断します。
この種類の割り当ては、 PermanentSysMem メンバーが設定されている割り当てと同じロック セマンティクスを暗黙的に持つ点に注意してください。
ドライバーは、PermanentSysMem、Protected、または ExistingSysMem メンバーと組み合わせて ExistingKernelSysMem を設定できません。 ドライバーは、プライマリ サーフェイスに ExistingKernelSysMem を設定しないでください。
このメンバーの設定は、32 ビット Value メンバー (0x00000020) の 6 番目のビットを設定することと同じです。
FromEndOfSegment
[out]ページング中にセグメントの末尾から割り当てるかどうかを指定する UINT 値。 ビデオ メモリ マネージャーは、セグメントのアドレス空間をスキャンし、セグメントの先頭からスキャンするのではなく、セグメントの末尾からの割り当ての領域を探します (これが既定の動作です)。 ただし、ヒントと優先されるセグメント情報は、このフラグよりも優先されます。
このメンバーの設定は、32 ビット Value メンバー (0x00000040) の 7 番目のビットを設定することと同じです。
Swizzled
[out]割り当てがスウィズルされるかどうかを指定する UINT 値。割り当てをロックするには、ビデオ メモリ マネージャーによる特別なサポートが必要です。 スウィズルされた割り当ての詳細については、「 スウィズルされた割り当てのロック」を参照してください。
このメンバーの設定は、32 ビット Value メンバー (0x00000080) の 8 番目のビットを設定することと同じです。
Overlay
[out]割り当てがオーバーレイ操作用かどうかを指定する UINT 値。 オーバーレイ割り当てはメモリに固定されており、タイムアウト検出と回復 (TDR) プロセス、プラグ アンド プレイ (PnP) の停止、またはレベル 3 の同期が発生しない限り、ビデオ メモリ マネージャーはそれらを削除できません。 レベル 3 の同期が発生する前に、オーバーレイは通常破棄されることに注意してください。 既定では、オーバーレイ割り当ては制限されており、セグメントの最後の 20% を超えることはできません。 オーバーレイ割り当てが絞りセグメントに割り当てられている場合、ディスプレイ ミニポート ドライバーは、そのアパーチャ セグメントを削除セグメントとして使用する他の割り当てのサイズをセグメント サイズの 80% に制限する必要があります。 ディスプレイ ミニポート ドライバーは、割り当てにDXGK_ALLOCATIONINFO構造体のEvictionSegmentSet メンバー内のセグメントの適切なビットを指定することによって、割り当てで削除にセグメントを使用できることを示します。 ディスプレイ ミニポート ドライバーが別の割り当てのサイズを制限しない場合、固定された割り当て (つまり、オーバーレイの割り当て) が削除に必要な領域を占有するため、ビデオ メモリ マネージャーはセグメントを介してその割り当てを削除できません。 この場合、削除される他の割り当ての内容が失われ、失われた割り当てを所有するアプリケーションは、その割り当てでレンダリングできなくなります。
このメンバーの設定は、32 ビット Value メンバー (0x00000100) の 9 番目のビットを設定することと同じです。
Capture
[out]割り当てがキャプチャ操作に使用されるかどうかを示す UINT 値。 キャプチャ割り当ては、オーバーレイ割り当てと同様にメモリに固定されます。 そのため、オーバーレイ割り当てに適用される問題は、割り当てのキャプチャにも適用されます。 これらの問題の詳細については、 オーバーレイ フラグの説明を参照してください。 レベル 3 の同期が発生する前に、キャプチャは通常停止されることに注意してください。
このメンバーの設定は、32 ビット Value メンバー (0x00000200) の 10 ビットを設定することと同じです。
UseAlternateVA
[out]1 次割り振りをロックできるかどうかを指定する UINT 値。 UseAlternateVA は、プライマリ割り当てに対してのみ有効です。 他の割り当てに UseAlternateVA を指定した場合、割り当ては作成されません。 UseAlternateVA を使用してプライマリ割り当てが作成されると、割り当ての作成時にプライマリ割り当ての範囲が設定されます。
このメンバーの設定は、32 ビット Value メンバー (0x00000400) の 11 ビットを設定することと同じです。
SynchronousPaging
[out]割り当てを同期的にページングするかどうかを指定する UINT 値。 ディスプレイ ミニポート ドライバーがこのビットを割り当てに設定すると、ビデオ メモリ マネージャーは、割り当てがビジー状態でなくなるまで待機します (つまり、ビデオ メモリ マネージャーは、グラフィックス処理装置 (GPU) が割り当てを参照するすべてのフェンスを報告するまで待機します)。ビデオ メモリ マネージャーは、割り当てを参照するページング バッファーを送信します。
同様に、ビデオ メモリ マネージャーは、ビデオ メモリ マネージャーが非ページング ダイレクト メモリ アクセス (DMA) バッファーを送信する前に、同期割り当てのページング操作が完了するまで待機します。
このメンバーの設定は、32 ビット Value メンバー (0x00000800) の 12 ビットを設定することと同じです。
LinkMirrored
[out]論理アダプター内のすべての物理アダプター (つまり、リンク) に割り当ての 1 つのインスタンスをレプリケートするかどうかを指定する UINT 値。 ビデオ メモリ マネージャーは、ドライバーを呼び出してページインし、システム メモリ内の 1 つの共有バッキング ストアを持つすべての物理アダプターの割り当てを削除します。
このメンバーの設定は、32 ビット Value メンバー (0x00001000) の 13 番目のビットを設定することと同じです。
LinkInstanced
[out]割り当ての異なるインスタンスを、論理アダプター内のすべての物理アダプター (つまりリンク) にページングして削除するかどうかを指定する UINT 値。 論理アダプター内の物理アダプターごとに 1 つのシステム メモリ バッキング ストアが存在します。
このメンバーの設定は、32 ビット Value メンバー (0x00002000) の 14 ビットを設定することと同じです。
HistoryBuffer
[out]ユーザー モード表示ドライバーが履歴バッファーを割り当てるかどうかを指定する UINT 値。 ディスプレイ ミニポート ドライバーは、ユーザー モード ドライバーが履歴バッファーの作成と破棄を管理できることを示すために、このフラグを設定する必要があります。
ディスプレイ ミニポート ドライバーが HistoryBuffer を設定する場合は、 CpuVisible フラグも設定する必要があります。 ドライバーがキャッシュコヒーレント絞りセグメントをサポートしている場合は、 Cached も設定し、他のすべてのメンバーを 0 に設定する必要があります。
このメンバーの設定は、32 ビット Value メンバー (0x00004000) の 15 ビットを設定することと同じです。
Windows 8.1 以降でサポートされます。
AccessedPhysically
カーネル モード ドライバーは、物理アドレスによってアクセスされる割り当てにフラグを設定します。 このような割り当ては、GPU メモリ セグメントから連続して割り当てられます。 システム メモリから割り当てられた場合、割り当ては連続しません。
このメンバーの設定は、32 ビット Value メンバー (0x00008000) の 16 番目のビットを設定することと同じです。
Windows 10 以降でサポートされています。
ExplicitResidencyNotification
このフラグを指定すると、ドライバーは割り当て場所が変更されたときに NotifyResidency ページング バッファー操作を受け取ります (削除、コミット)。 フラグは、 AccessedPhysically フラグが設定されている場合にのみ設定できます。
このメンバーの設定は、32 ビット Value メンバー (0x00010000) の 17 番目のビットを設定することと同じです。
Windows 10 以降でサポートされています。
HardwareProtected
このメンバーを設定すると、割り当てには、ハードウェア デジタル著作権管理 (DRM) に使用されるコンテンツが保持されます。
CpuVisibleOnDemand
このメンバーを設定すると、ビデオ メモリ マネージャーは、割り当て時に割り当てに仮想アドレスを割り当てようとします。 これにより、割り当てに永続的な仮想アドレスが割り当てられないため、使用される仮想アドレス空間の量が減ります。 CPU によって直接アクセス可能な割り当てであるという点で、 CpuVisible フラグと同様に動作しますが、永続的に割り当てられるのではなく、"オンデマンド" の仮想アドレスを取得するだけです。
Reserved
システムで使用するために予約されています。 Windows 10 以降で使用できます。
DXGK_ALLOC_RESERVED16
[入力]このメンバーは予約されており、0 に設定する必要があります。 Windows 8 以降でサポートされています。
DXGK_ALLOC_RESERVED15
[入力]このメンバーは予約されており、0 に設定する必要があります。 Windows 8 以降でサポートされています。
DXGK_ALLOC_RESERVED14
[入力]このメンバーは予約されており、0 に設定する必要があります。 Windows 8 以降でサポートされています。
DXGK_ALLOC_RESERVED13
[入力]このメンバーは予約されており、0 に設定する必要があります。 Windows 8 以降でサポートされています。
DXGK_ALLOC_RESERVED12
[入力]このメンバーは予約されており、0 に設定する必要があります。 Windows 8 以降でサポートされています。
DXGK_ALLOC_RESERVED11
[入力]このメンバーは予約されており、0 に設定する必要があります。 Windows 8 以降でサポートされています。
DXGK_ALLOC_RESERVED10
[入力]このメンバーは予約されており、0 に設定する必要があります。 Windows 8 以降でサポートされています。
DXGK_ALLOC_RESERVED9
[入力]このメンバーは予約されており、0 に設定する必要があります。 Windows 8 以降でサポートされています。
DXGK_ALLOC_RESERVED4
[入力]このメンバーは予約されており、0 に設定する必要があります。 Windows 8 以降でサポートされています。
DXGK_ALLOC_RESERVED3
[入力]このメンバーは予約されており、0 に設定する必要があります。 Windows 8 以降でサポートされています。
DXGK_ALLOC_RESERVED2
[入力]このメンバーは予約されており、0 に設定する必要があります。 Windows 8 以降でサポートされています。
DXGK_ALLOC_RESERVED1
[入力]このメンバーは予約されており、0 に設定する必要があります。 Windows 8 以降でサポートされています。
DXGK_ALLOC_RESERVED0
[入力]このメンバーは予約されており、0 に設定する必要があります。 Windows 8 以降でサポートされています。
Value
[out]割り当てのプロパティを識別する 32 ビット値を保持できる、 DXGK_ALLOCATIONINFOFLAGS に含まれる共用体内のメンバー。
注釈
WDDM 2.0 より前の WDDM バージョンを対象とするディスプレイ ミニポート ドライバーは、この構造体を使用して、ビデオ メモリ マネージャーにこれらのフラグを指定します。 WDDM バージョン = WDDM 2.0 を >対象とするドライバーでは 、DXGK_ALLOCATIONINFOFLAGS_WDDM2_0を使用する必要があります。
割り当てのプロパティを指定するには、32 ビット の Value メンバーにビットを設定するか、 DXGK_ALLOCATIONINFOFLAGS 構造体に含まれる共用体の構造体の個々のメンバーを設定します。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows Vista |
Header | d3dkmddi.h (D3dkmddi.h を含む) |