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 函数。

对于某些分页操作, 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 缓冲区关联的分配列表。

对于分页操作, pAllocationListNULL ,因为分页缓冲区不与分配列表关联。

[in] AllocationListSize

pAllocationList 指定的数组中的元素数。

请注意 ,AllocationListSize 表示分配列表的总大小;但是,与当前提交关联的分配列表部分可能较小。

请注意,对于分页操作 ,AllocationListSize 为零,因为分页缓冲区不与分配列表关联。

[in] pPatchLocationList

指向 D3DDDI_PATCHLOCATIONLIST 结构的数组的指针,该数组与 pDmaBuffer 指向的 DMA 缓冲区关联的修补程序位置列表。

请注意,数组可以以元素开头,该元素位于用于修补 DMA 缓冲区的范围之前。

对于分页操作, pPatchLocationListNULL ,因为分页缓冲区不与修补程序位置列表关联。

[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 ) 缓冲区后,从其 DxgkDdiPresentDxgkDdiRender 函数返回DXGKARG_PRESENT或DXGKARG_RENDER 结构的 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