DXGKARG_PATCH 構造体 (d3dkmddi.h)
DXGKARG_PATCH構造体は、修正プログラムの適用を必要とするダイレクト メモリ アクセス (DMA) バッファーを記述します (つまり、物理アドレスの割り当てが必要です)。
構文
typedef struct _DXGKARG_PATCH {
union {
[in] HANDLE hDevice;
[in] HANDLE hContext;
};
[in] UINT DmaBufferSegmentId;
[in] PHYSICAL_ADDRESS DmaBufferPhysicalAddress;
[in] VOID *pDmaBuffer;
[in] UINT DmaBufferSize;
[in] UINT DmaBufferSubmissionStartOffset;
[in] UINT DmaBufferSubmissionEndOffset;
[in] VOID *pDmaBufferPrivateData;
[in] UINT DmaBufferPrivateDataSize;
[in] UINT DmaBufferPrivateDataSubmissionStartOffset;
[in] UINT DmaBufferPrivateDataSubmissionEndOffset;
[in] const DXGK_ALLOCATIONLIST *pAllocationList;
[in] UINT AllocationListSize;
[in] const D3DDDI_PATCHLOCATIONLIST *pPatchLocationList;
[in] UINT PatchLocationListSize;
[in] UINT PatchLocationListSubmissionStart;
[in] UINT PatchLocationListSubmissionLength;
[in] UINT SubmissionFenceId;
[in] DXGK_PATCHFLAGS Flags;
[in] UINT EngineOrdinal;
} DXGKARG_PATCH;
メンバー
[in] hDevice
ドライバーが複数エンジンに対応していない場合 (つまり、ドライバーはコンテキストの作成をサポートしていません)、送信要求の送信元であるディスプレイ デバイス (グラフィックス コンテキスト) へのハンドル。 デバイス ハンドルは、DXGKARG_PATCHに含まれる共用体のドライバーの DxgkDdiPatch 関数に提供されます。
一部のページング操作では、 hDevice は NULL です (たとえば、電源管理中にフレーム バッファー全体のコンテンツを削除するページング操作)。 ページング操作は、Flags メンバーのページング ビット フィールド フラグによって示されます。
[in] hContext
ドライバーが複数エンジンに対応している場合 (つまり、ドライバーはコンテキストの作成をサポートしています)、送信要求の送信元のデバイス コンテキストへのハンドル。 コンテキスト ハンドルは、DXGKARG_PATCHに含まれる共用体のドライバーの DxgkDdiPatch 関数に提供されます。
一部のページング操作では、 hContext は NULL です (たとえば、電源管理中にフレーム バッファー全体のコンテンツを削除するページング操作)。 ページング操作は、Flags メンバーのページング ビット フィールド フラグによって示されます。
[in] DmaBufferSegmentId
DMA バッファーがページングされたメモリ セグメントの識別子。
ドライバーの DxgkDdiCreateContext 関数の呼び出しで、DXGK_CONTEXTINFO構造体の DmaBufferSegmentSet メンバーを 0 に設定することで、ドライバーが DMA バッファーをセグメントにマップしないことを示した場合、識別子は 0 になります。 DmaBufferSegmentId が 0 の場合、DMA バッファーはシステム メモリの連続したブロックとして割り当てられます。
[in] DmaBufferPhysicalAddress
DMA バッファーがページングされた物理アドレスを示すPHYSICAL_ADDRESSデータ型 (LARGE_INTEGERとして定義)。
DmaBufferSegmentId が 0 の場合、DmaBufferPhysicalAddress は DMA バッファーが配置されているシステム メモリ内の物理アドレスです。
DmaBufferSegmentId が 0 以外の場合、DmaBufferPhysicalAddress は DMA バッファーのセグメント物理アドレスです (つまり、DXGK_SEGMENTDESCRIPTOR。BaseAddress + DmaBuffer.SegmentOffset)。
DmaBufferPhysicalAddress は常に DMA バッファーの先頭を参照します。ただし、DMA バッファーの先頭を含まない DMA バッファーのセクションをドライバーが修正プログラムを適用または送信する必要がある場合があります (つまり、DmaBufferSubmissionStartOffset メンバーが 0 以外の場合)。
[in] pDmaBuffer
DMA バッファーの先頭 (つまり、DMA バッファーの先頭の仮想アドレス) へのポインター。
[in] DmaBufferSize
pDmaBuffer が指す DMA バッファーのサイズ (バイト単位)。
DmaBufferSize は DMA バッファーの長さ全体を表します。ただし、修正プログラムの適用または送信の要求は、DMA バッファーの一部のみを参照する場合があります。
[in] DmaBufferSubmissionStartOffset
pDmaBuffer が指定する DMA バッファーの先頭から、修正プログラムの適用または送信を必要とする DMA バッファーの部分の先頭までのオフセット (バイト単位)。 パッチ時に受信されるオフセットは、送信時に受信されたオフセットと一致します。
[in] DmaBufferSubmissionEndOffset
pDmaBuffer が指定する DMA バッファーの先頭から、修正プログラムの適用または送信を必要とする DMA バッファーの部分の末尾までのオフセット (バイト単位)。 パッチ時に受信されるオフセットは、送信時に受信されたオフセットと一致します。
[in] pDmaBufferPrivateData
pDmaBuffer が指す DMA バッファーに関連付けられているドライバー常駐のプライベート データへのポインター。
ページング操作では、1 つのページング バッファーが複数の独立した送信に使用されます。 そのシナリオでは、ドライバーは、 DxgkDdiBuildPagingBuffer 関数の呼び出しで適切なプライベート ドライバー データ ポインターを返すことによって、すべての申請に対してドライバーのプライベート データ範囲を 1 つ、または送信ごとに 1 つ持っていることを示すことができます。
[in] DmaBufferPrivateDataSize
pDmaBufferPrivateData のプライベート ドライバー データのサイズ (バイト単位)。
DmaBufferPrivateDataSize はプライベート ドライバー データ バッファーの全長を表します。ただし、現在の申請に関連付けられている部分は小さくなることがあります。
[in] DmaBufferPrivateDataSubmissionStartOffset
pDmaBufferPrivateData が指定する DMA バッファー プライベート データの先頭から、現在の送信に関連付けられているプライベート データの部分の先頭までのオフセット (バイト単位)。 DmaBufferPrivateDataSubmissionStartOffset は、非paging要求の場合、常に 0 です。
[in] DmaBufferPrivateDataSubmissionEndOffset
pDmaBufferPrivateData が指定する DMA バッファー プライベート データの先頭から、現在の送信に関連付けられているプライベート データの部分の末尾までのオフセット (バイト単位)。
[in] pAllocationList
pDmaBuffer が指す DMA バッファーに関連付けられている割り当ての一覧のDXGK_ALLOCATIONLIST構造体の配列へのポインター。
ページング操作の場合、ページング バッファーは割り当てリストに関連付けられていないため、 pAllocationList は NULL です 。
[in] AllocationListSize
pAllocationList が指定する配列内の要素の数。
AllocationListSize は、割り当てリストの合計サイズを表します。ただし、現在の申請に関連付けられている割り当てリストの部分が小さくなることがあります。
ページング 操作では 、ページング バッファーが割り当 てリストに関連付けられていないため、AllocationListSize は 0 であることに注意してください。
[in] pPatchLocationList
pDmaBuffer が指す DMA バッファーに関連付けられているパッチの場所の一覧のD3DDDI_PATCHLOCATIONLIST構造体の配列へのポインター。
配列は、DMA バッファーにパッチを適用するために使用される範囲の前にある要素で始まる可能性があることに注意してください。
ページング操作の場合、ページング バッファーはパッチ位置リストに関連付けられていないため、 pPatchLocationList は NULL です 。
[in] PatchLocationListSize
pPatchLocationList が指定する配列内の要素の数。
PatchLocationListSize は patch-location リストの合計サイズを表します。ただし、ドライバーが処理する必要がある範囲は、通常は小さくなります。
ページング操作の場合、ページング バッファーは patch-location リストに関連付けられていないため、 PatchLocationListSize は 0 です。
[in] PatchLocationListSubmissionStart
pPatchLocationList が処理する必要があることを指定する patch-location リスト内の最初の要素のインデックス。
ページング操作の場合、 PatchLocationListSubmissionStart は 0 です。
[in] PatchLocationListSubmissionLength
処理する必要がある pPatchLocationList が指定する patch-location リスト内の要素の数。
ページング操作の場合、 PatchLocationListSubmissionLength は 0 です。
[in] SubmissionFenceId
ドライバーが DMA バッファーの末尾にあるフェンス コマンドに書き込むことができる一意識別子。 この種類の識別子の詳細については、「 フェンス識別子の指定」を参照してください。
[in] Flags
修正プログラムを適用する必要がある DMA バッファーに関する情報を識別する DXGK_PATCHFLAGS 構造体。
[in] EngineOrdinal
将来利用するために予約されています。
注釈
ディスプレイ ミニポート ドライバーは、コマンド バッファーをダイレクト メモリ アクセス (DMA) バッファーに変換した後、その DxgkDdiPresent 関数または DxgkDdiRender 関数から、DXGKARG_PRESENTまたはDXGKARG_RENDER構造体の pAllocationList メンバー内の配列を返します。 ビデオ メモリ マネージャーは、配列内のDXGK_ALLOCATIONLIST構造体の PhysicalAddress メンバーに物理アドレスを割り当て、この配列をドライバーの DxgkDdiPatch 関数に渡します。 DxgkDdiPatch パッチは、これらの物理アドレスを使用して DMA バッファーに配置します。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows Vista |
Header | d3dkmddi.h (D3dkmddi.h を含む) |