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(例如,在电源管理期间逐出整个帧缓冲区内容的分页作)。 分页作由 标志 成员中的 分页 位字段标志指示。

[in] hContext

如果驱动程序具有多引擎感知(即驱动程序支持创建上下文),则为提交请求源自的设备上下文的句柄。 上下文句柄提供给驱动程序的 DxgkDdiPatch 函数,该函数DXGKARG_PATCH包含。

对于某些分页作,hContextNULL(例如,在电源管理期间逐出整个帧缓冲区内容的分页作)。 分页作由 标志 成员中的 分页 位字段标志指示。

[in] DmaBufferSegmentId

分页 DMA 缓冲区的内存段的标识符。

如果驱动程序指示不通过将 DXGK_CONTEXTINFO 结构的 DmaBufferSegmentSet 成员设置为 0,则驱动程序指示不将 DMA 缓冲区映射到段,则可以为零。 如果 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 缓冲区专用数据的开头指定到与当前提交关联的专用数据部分的开头的偏移量(以字节为单位)。 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

保留以供将来使用。

言论

显示微型端口驱动程序从 DXGKARG_PRESENTDxgkDdiPresentDXGKARG_RENDERDxgkDdiRender 函数将命令缓冲区转换为直接内存访问(DMA)缓冲区后,pAllocationList 成员返回数组。 视频内存管理器将物理地址分配给数组中 DXGK_ALLOCATIONLIST 结构的 PhysicalAddress 成员,并将此数组传递给驱动程序的 DxgkDdiPatch 函数。 DxgkDdiPatch DMA 缓冲区中使用这些物理地址的修补程序。

要求

要求 价值
最低支持的客户端 Windows Vista
标头 d3dkmddi.h (包括 D3dkmddi.h)

另请参阅

D3DDDI_PATCHLOCATIONLIST

DXGKARG_PRESENT

DXGKARG_RENDER

DXGK_ALLOCATIONLIST

DXGK_CONTEXTINFO

DXGK_PATCHFLAGS

DxgkDdiBuildPagingBuffer

DxgkDdiCreateContext

DxgkDdiPatch

DxgkDdiPresent

DxgkDdiRender