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 缓冲区分页的内存段的标识符。
如果在调用驱动程序的 DxgkDdiCreateContext 函数时,通过将 DXGK_CONTEXTINFO 结构的 DmaBufferSegmentSet 成员设置为 0,则驱动程序指示不将 DMA 缓冲区映射到段,则标识符可以为零。 如果 DmaBufferSegmentId 为零,则 DMA 缓冲区分配为系统内存的连续块。
[in] DmaBufferPhysicalAddress
PHYSICAL_ADDRESS数据类型 (定义为指示 DMA 缓冲区分页的物理地址的LARGE_INTEGER) 。
如果 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 缓冲区专用数据的开头到与当前提交关联的私有数据部分的开头的偏移量(以字节为单位)。 对于非分页请求,DmaBufferPrivateDataSubmissionStartOffset 始终为零。
[in] DmaBufferPrivateDataSubmissionEndOffset
从 pDmaBufferPrivateData 指定的 DMA 缓冲区专用数据的开头到与当前提交关联的私有数据部分末尾的偏移量(以字节为单位)。
[in] pAllocationList
指向 DXGK_ALLOCATIONLIST 结构的数组的指针,该数组与 pDmaBuffer 指向的 DMA 缓冲区关联的分配列表。
对于分页操作, pAllocationList 为 NULL ,因为分页缓冲区不与分配列表关联。
[in] AllocationListSize
pAllocationList 指定的数组中的元素数。
请注意 ,AllocationListSize 表示分配列表的总大小;但是,与当前提交关联的分配列表部分可能较小。
请注意,对于分页操作 ,AllocationListSize 为零,因为分页缓冲区不与分配列表关联。
[in] pPatchLocationList
指向 D3DDDI_PATCHLOCATIONLIST 结构的数组的指针,该数组与 pDmaBuffer 指向的 DMA 缓冲区关联的修补程序位置列表。
请注意,数组可以以元素开头,该元素位于用于修补 DMA 缓冲区的范围之前。
对于分页操作, pPatchLocationList 为 NULL ,因为分页缓冲区不与修补程序位置列表关联。
[in] PatchLocationListSize
pPatchLocationList 指定的数组中的元素数。
请注意 ,PatchLocationListSize 表示修补程序位置列表的总大小;但是,驱动程序必须处理的范围通常较小。
对于分页操作, PatchLocationListSize 为零,因为分页缓冲区不与修补程序位置列表关联。
[in] PatchLocationListSubmissionStart
pPatchLocationList 指定必须处理的修补程序位置列表中的第一个元素的索引。
对于分页操作, PatchLocationListSubmissionStart 为零。
[in] PatchLocationListSubmissionLength
pPatchLocationList 指定必须处理的修补程序位置列表中的元素数。
对于分页操作, PatchLocationListSubmissionLength 为零。
[in] SubmissionFenceId
驱动程序可以写入 DMA 缓冲区末尾的 fence 命令的唯一标识符。 有关此类型标识符的详细信息,请参阅 提供围栏标识符。
[in] Flags
一个 DXGK_PATCHFLAGS 结构,用于标识有关需要修补的 DMA 缓冲区的信息。
[in] EngineOrdinal
保留供将来使用。
注解
显示微型端口驱动程序在将命令缓冲区转换为直接内存访问 ( DMA ) 缓冲区后,从其 DxgkDdiPresent 或 DxgkDdiRender 函数返回DXGKARG_PRESENT或DXGKARG_RENDER 结构的 pAllocationList 成员中的数组。 视频内存管理器将物理地址分配给数组中DXGK_ALLOCATIONLIST结构的 PhysicalAddress 成员,并将此数组传递给驱动程序的 DxgkDdiPatch 函数。 DxgkDdiPatch 修补程序使用这些物理地址放置在 DMA 缓冲区中。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows Vista |
标头 | d3dkmddi.h (包括 D3dkmddi.h) |