DXGKDDI_CREATEMEMORYBASIS コールバック関数 (d3dkmddi.h)
KMD の DxgkDdiCreateMemoryBasis 関数は、ビット追跡中に操作される割り当てを表すメモリ範囲のコレクションのハンドルダーティ作成します。
構文
DXGKDDI_CREATEMEMORYBASIS DxgkddiCreatememorybasis;
HANDLE DxgkddiCreatememorybasis(
IN_CONST_HANDLE hAdapter,
IN_CONST_PDXGKARG_CREATEMEMORYBASIS pArgs
)
{...}
パラメーター
hAdapter
[入力]ディスプレイ アダプターに関連付けられているコンテキスト ブロックへのハンドル。 KMD は以前、DxgiDdiAddDevice 関数の MiniportDeviceContext 出力パラメーターで Dxgkrnl にこのハンドルを提供しました。
pArgs
[入力]作成される基礎の情報を含む DXGKARG_CREATEMEMORYBASIS 構造体へのポインター。
戻り値
DxgkDdiCreateMemoryBasis は、範囲のコレクションを追跡するための KMD の参照に HANDLE を返します。 KMD は、 DxgkDdiDestroyMemoryBasis などの後続のコマンドで、この情報を基礎の情報に変換できる必要があります。
注釈
VRAM での変更操作の追跡は、連続してサポートされない可能性がある割り当てに対して行われます。 そのため、ダーティ ビットの追跡で表される物理アドレスは、操作対象の割り当てを表す範囲のコレクションで構成されます。 DxgkDdiCreateMemoryBasis は、これらの範囲を追跡するための KMD の参照へのハンドルを返します。
KMD は、次のインバリアントに依存できます。
Range の各範囲について、SegmentOffset と (SegmentOffset + SizeInBytes - 1) の両方が、SegmentId で参照されるセグメントの有効なアドレスを表します。
すべての 範囲 はペアごとの不整合です。つまり、2 つの範囲間の交差部分は常に null です。
また、SegmentOffset と SizeInBytes は、作成されたメモリベースが特定のダーティ追跡 DDI で使用される場合に、特定のページ配置を考慮することが一般的です。 これらの値は、これらの DDI の参照ページで説明されており、常に DXGK_DIRTY_BIT_TRACKING_SEGMENT_CAPS::P ageSize の倍数です。
それ以外の場合、Dxgkrnl は、Ranges または関連する保証のコレクション内のアドレスの順序を保証しません。
詳細については、「 ダーティ ビット追跡」を参照してください。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows 11バージョン 24H2 (WDDM 3.2) |
Header | d3dkmddi.h |
IRQL | PASSIVE_LEVEL |