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

如果驅動程式不是多個引擎感知 (也就是說,驅動程式不支援建立內容) ,則顯示裝置的句柄 (圖形內容) 來自提交要求的圖形內容。 裝置句柄會提供給驅動程式的 DxgkDdiPatch 函式,該函式DXGKARG_PATCH包含。

針對某些分頁作業, hDeviceNULL (,例如,在電源管理) 期間收回整個畫面緩衝區內容的分頁作業。 分頁作業是由 Flags 成員中的分頁位欄位字段旗標來表示。

[in] hContext

如果驅動程式是多引擎感知 (,則驅動程式支援建立內容) ,這是提交要求源自的裝置內容的句柄。 內容句柄會提供給DXGKARG_PATCH的等位中的驅動程式 DxgkDdiPatch 函式。

對於某些分頁作業, hContextNULL (,例如,在電源管理) 期間收回整個畫面緩衝區內容的分頁作業。 分頁作業是由 Flags 成員中的分頁位欄位字段旗標來表示。

[in] DmaBufferSegmentId

DMA 緩衝區分頁所在的記憶體區段標識碼。

如果驅動程式指出不要將 DMA 緩衝區對應至區段,則標識碼可以是零,方法是將DXGK_CONTEXTINFO結構的 DmaBufferSegmentSet 成員設定為 0,以呼叫驅動程式的 DxgkDdiCreateContext 函式。 如果 DmaBufferSegmentId 為零,則會將 DMA 緩衝區配置為連續的系統記憶體區塊。

[in] DmaBufferPhysicalAddress

PHYSICAL_ADDRESS數據類型 (定義為LARGE_INTEGER) ,表示 DMA 緩衝區分頁所在的實體位址。

如果 DmaBufferSegmentId 為零, DmaBufferPhysicalAddress 是 DMA 緩衝區所在系統記憶體中的實體位址。

如果 DmaBufferSegmentId 不是零, DmaBufferPhysicalAddress 是 DMA 緩衝區 (的區段實體位址,也就是DXGK_SEGMENTDESCRIPTOR。BaseAddress + DmaBuffer.SegmentOffset) 。

請注意, DmaBufferPhysicalAddress 一律參考 DMA 緩衝區的開頭,即使驅動程式可能需要修補或提交不包含 DMA 緩衝區開頭的 DMA 緩衝區區段, (亦即,如果 DmaBufferSubmissionStartOffset 成員為非零) 。

[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 緩衝區相關聯的驅動程式駐留私人數據的指標。

對於分頁作業,單一分頁緩衝區會用於多個獨立提交。 在該案例中,驅動程式可以在呼叫 其 DxgkDdiBuildPagingBuffer 函式時傳回適當的私人驅動程式數據指標,讓所有提交的單一驅動程式私人數據範圍,或針對每個提交傳回一個。

[in] DmaBufferPrivateDataSize

pDmaBufferPrivateData 的私人驅動程序數據大小,以位元組為單位。

請注意 ,DmaBufferPrivateDataSize 代表私人驅動程序數據緩衝區的整個長度;不過,與目前提交相關聯的部分可能較小。

[in] DmaBufferPrivateDataSubmissionStartOffset

pDmaBufferPrivateData 從 DMA 緩衝區私用數據的開頭開始,以位元組為單位,指定為與目前提交相關聯的私人數據部分的開頭。 非paging 要求的 DmaBufferPrivateDataSubmissionStartOffset 一律為零。

[in] DmaBufferPrivateDataSubmissionEndOffset

pDmaBufferPrivateData 指定之 DMA 緩衝區私用數據的開頭到與目前提交相關聯的私人數據部分結尾的位移,以位元組為單位。

[in] pAllocationList

pDmaBuffer 指向之 DMA 緩衝區相關聯之配置清單的DXGK_ALLOCATIONLIST結構數位指標。

對於分頁作業, pAllocationListNULL ,因為分頁緩衝區與配置列表無關。

[in] AllocationListSize

pAllocationList 指定之陣列中的元素數目。

請注意 ,AllocationListSize 代表配置清單的總大小;不過,與目前提交相關聯的配置清單部分可能較小。

請注意,對於分頁作業 AllocationListSize 而言是零,因為分頁緩衝區與配置列表無關。

[in] pPatchLocationList

pDmaBuffer 指向之 DMA 緩衝區相關聯之修補程式位置清單的D3DDDI_PATCHLOCATIONLIST結構陣列指標。

請注意,陣列的開頭可以是在用來修補 DMA 緩衝區的範圍之前的專案。

對於分頁作業, pPatchLocationListNULL ,因為分頁緩衝區與修補程式位置列表無關。

[in] PatchLocationListSize

pPatchLocationList 所指定陣列中的元素數目。

請注意 ,PatchLocationListSize 代表修補程式位置清單的總大小;不過,驅動程式必須處理的範圍通常較小。

對於分頁作業, PatchLocationListSize 是零,因為分頁緩衝區與修補程式位置清單沒有關聯。

[in] PatchLocationListSubmissionStart

pPatchLocationList 指定必須處理的修補程式位置清單中第一個專案的索引。

對於分頁作業, PatchLocationListSubmissionStart 為零。

[in] PatchLocationListSubmissionLength

pPatchLocationList 指定必須處理的修補程式位置清單中的元素數目。

針對分頁作業, PatchLocationListSubmissionLength 為零。

[in] SubmissionFenceId

驅動程式可以在 DMA 緩衝區結尾寫入柵欄命令的唯一標識碼。 如需此類型標識碼的詳細資訊,請參閱 提供柵欄標識碼

[in] Flags

DXGK_PATCHFLAGS 結構,可識別需要修補之 DMA 緩衝區的相關信息。

[in] EngineOrdinal

保留供未來使用。

備註

顯示迷你埠驅動程式會在將命令緩衝區轉譯為直接記憶體存取 (DMA) 緩衝區之後,從DxgkDdiPresent DXGKARG_RENDER 或 DxgkDdiPresentDxgkDdiRender 函式的 pAllocationListDXGKARG_PRESENT 成員中傳回數組。 視訊記憶體管理員會將實體位址指派給陣列中DXGK_ALLOCATIONLIST結構的 PhysicalAddress 成員,並將此數位傳遞至驅動程式的 DxgkDdiPatch 函式。 DxgkDdiPatch 修補程式會使用這些實體位址在 DMA 緩衝區中。

規格需求

需求
最低支援的用戶端 Windows Vista
標頭 d3dkmddi.h (include D3dkmddi.h)

另請參閱

D3DDDI_PATCHLOCATIONLIST

DXGKARG_PRESENT

DXGKARG_RENDER

DXGK_ALLOCATIONLIST

DXGK_CONTEXTINFO

DXGK_PATCHFLAGS

DxgkDdiBuildPagingBuffer

DxgkDdiCreateContext

DxgkDdiPatch

DxgkDdiPresent

DxgkDdiRender