次の方法で共有


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 関数に提供されます。

一部のページング操作では、 hDeviceNULL です (たとえば、電源管理中にフレーム バッファー全体のコンテンツを削除するページング操作)。 ページング操作は、Flags メンバーのページング ビット フィールド フラグによって示されます。

[in] hContext

ドライバーが複数エンジンに対応している場合 (つまり、ドライバーはコンテキストの作成をサポートしています)、送信要求の送信元のデバイス コンテキストへのハンドル。 コンテキスト ハンドルは、DXGKARG_PATCHに含まれる共用体のドライバーの DxgkDdiPatch 関数に提供されます。

一部のページング操作では、 hContextNULL です (たとえば、電源管理中にフレーム バッファー全体のコンテンツを削除するページング操作)。 ページング操作は、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構造体の配列へのポインター。

ページング操作の場合、ページング バッファーは割り当てリストに関連付けられていないため、 pAllocationListNULL です

[in] AllocationListSize

pAllocationList が指定する配列内の要素の数。

AllocationListSize は、割り当てリストの合計サイズを表します。ただし、現在の申請に関連付けられている割り当てリストの部分が小さくなることがあります。

ページング 操作では 、ページング バッファーが割り当 てリストに関連付けられていないため、AllocationListSize は 0 であることに注意してください。

[in] pPatchLocationList

pDmaBuffer が指 DMA バッファーに関連付けられているパッチの場所の一覧のD3DDDI_PATCHLOCATIONLIST構造体の配列へのポインター。

配列は、DMA バッファーにパッチを適用するために使用される範囲の前にある要素で始まる可能性があることに注意してください。

ページング操作の場合、ページング バッファーはパッチ位置リストに関連付けられていないため、 pPatchLocationListNULL です

[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 を含む)

こちらもご覧ください

D3DDDI_PATCHLOCATIONLIST

DXGKARG_PRESENT

DXGKARG_RENDER

DXGK_ALLOCATIONLIST

DXGK_CONTEXTINFO

DXGK_PATCHFLAGS

DxgkDdiBuildPagingBuffer

DxgkDdiCreateContext

DxgkDdiPatch

DxgkDdiPresent

DxgkDdiRender