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包含。
針對某些分頁作業, hDevice 是 NULL (,例如,在電源管理) 期間收回整個畫面緩衝區內容的分頁作業。 分頁作業是由 Flags 成員中的分頁位欄位字段旗標來表示。
[in] hContext
如果驅動程式是多引擎感知 (,則驅動程式支援建立內容) ,這是提交要求源自的裝置內容的句柄。 內容句柄會提供給DXGKARG_PATCH的等位中的驅動程式 DxgkDdiPatch 函式。
對於某些分頁作業, hContext 是 NULL (,例如,在電源管理) 期間收回整個畫面緩衝區內容的分頁作業。 分頁作業是由 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結構數位指標。
對於分頁作業, pAllocationList 是 NULL ,因為分頁緩衝區與配置列表無關。
[in] AllocationListSize
pAllocationList 指定之陣列中的元素數目。
請注意 ,AllocationListSize 代表配置清單的總大小;不過,與目前提交相關聯的配置清單部分可能較小。
請注意,對於分頁作業 AllocationListSize 而言是零,因為分頁緩衝區與配置列表無關。
[in] pPatchLocationList
與 pDmaBuffer 指向之 DMA 緩衝區相關聯之修補程式位置清單的D3DDDI_PATCHLOCATIONLIST結構陣列指標。
請注意,陣列的開頭可以是在用來修補 DMA 緩衝區的範圍之前的專案。
對於分頁作業, pPatchLocationList 是 NULL ,因為分頁緩衝區與修補程式位置列表無關。
[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 或 DxgkDdiPresent 或 DxgkDdiRender 函式的 pAllocationListDXGKARG_PRESENT 成員中傳回數組。 視訊記憶體管理員會將實體位址指派給陣列中DXGK_ALLOCATIONLIST結構的 PhysicalAddress 成員,並將此數位傳遞至驅動程式的 DxgkDdiPatch 函式。 DxgkDdiPatch 修補程式會使用這些實體位址在 DMA 緩衝區中。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows Vista |
標頭 | d3dkmddi.h (include D3dkmddi.h) |