DXGKARG_PRESENT 结构 (d3dkmddi.h)

DXGKARG_PRESENT 结构描述了源到主复制操作。

语法

typedef struct _DXGKARG_PRESENT {
  [out]    VOID                     *pDmaBuffer;
  [in]     UINT                     DmaSize;
  [in]     VOID                     *pDmaBufferPrivateData;
  [in]     UINT                     DmaBufferPrivateDataSize;
  union {
    [in]     DXGK_ALLOCATIONLIST               *pAllocationList;
    [in]     DXGK_PRESENTALLOCATIONINFO        *pAllocationInfo;
    [in]     DXGK_PRESENTMULTIPLANEOVERLAYINFO *pPresentMultiPlaneOverlayInfo;
  };
#if ...
  [in/out] D3DDDI_PATCHLOCATIONLIST *pPatchLocationListOut;
#if ...
  [in]     UINT                     PatchLocationListOutSize;
  [in]     DXGK_ALLOCATIONLIST      *pAllocationList;
#else
  [in/out] D3DDDI_PATCHLOCATIONLIST *pPatchLocationListOut;
#endif
#else
  [in]     UINT                     PatchLocationListOutSize;
#endif
  [in/out] UINT                     MultipassOffset;
  [in]     UINT                     Color;
  [in]     RECT                     DstRect;
  [in]     RECT                     SrcRect;
  [in]     UINT                     SubRectCnt;
  [in]     const RECT               *pDstSubRects;
  [in]     D3DDDI_FLIPINTERVAL_TYPE FlipInterval;
  [in]     DXGK_PRESENTFLAGS        Flags;
  [in]     UINT                     DmaBufferSegmentId;
  [in]     PHYSICAL_ADDRESS         DmaBufferPhysicalAddress;
  [in]     UINT                     Reserved;
           D3DGPU_VIRTUAL_ADDRESS   DmaBufferGpuVirtualAddress;
           UINT                     NumSrcAllocations;
           UINT                     NumDstAllocations;
           UINT                     PrivateDriverDataSize;
           PVOID                    pPrivateDriverData;
} DXGKARG_PRESENT;

成员

[out] pDmaBuffer

指向 DMA 缓冲区开头的指针,该缓冲区以 4 KB 对齐。 可以通过 DMA 将此缓冲区发送到图形硬件。 在显示微型端口驱动程序从 DxgkDdiPresent 函数返回之前,驱动程序应将 pDmaBuffer 设置为驱动程序写入的最后一个字节之后的下一个空字节,或者驱动程序应指向超出缓冲区空间 (一个字节的位置) 如果没有更多可用空间。 如果缓冲区足够大,则此位置是正确的。

[in] DmaSize

pDmaBuffer 指向的 DMA 缓冲区的大小(以字节为单位)。

[in] pDmaBufferPrivateData

指向与 pDmaBuffer 指向的 DMA 缓冲区关联的驻留驱动程序专用数据结构的指针。

[in] DmaBufferPrivateDataSize

pDmaBufferPrivateData 为当前操作指向的专用数据结构中保留的字节数。

[in] pAllocationList

描述复制操作的源和/或目标 DXGK_ALLOCATIONLIST 结构的数组。 驱动程序通过 pAllocationList[DXGK_PRESENT_SOURCE_INDEX] 元素的 hDeviceSpecificAllocation 成员 (访问源分配句柄,即元素 1) 。 驱动程序通过 pAllocationList[DXGK_PRESENT_DESTINATION_INDEX] 元素的 hDeviceSpecificAllocation 成员(即元素 2) ) (访问目标分配句柄。

在分配列表的元素中指定的句柄是驱动程序的 DxgkDdiOpenAllocation 函数在打开分配时返回的特定于设备的句柄。 如果操作不存在源或目标,则相应元素的 hDeviceSpecificAllocation 成员为 NULL。 此成员从 Windows 7 开始可用。

注意

分配列表中第一个元素的 hDeviceSpecificAllocation 成员 (元素 0) 始终为 NULL

[in] pAllocationInfo

预留给系统使用。 显示微型端口驱动程序应忽略此成员。 此成员从 Windows 7 开始可用。

[in] pPresentMultiPlaneOverlayInfo

指向 DXGK_PRESENTMULTIPLANEOVERLAYINFO 类型的结构的指针,该结构指定要显示的 VidPN 输入和覆盖平面上的信息。

从 Windows 8 开始受支持。

[in/out] pPatchLocationListOut

显示微型端口驱动程序填充的修补程序位置列表的 D3DDDI_PATCHLOCATIONLIST 结构的数组。 在驱动程序从对其 DxgkDdiPresent 函数的调用返回之前,驱动程序必须将 pPatchLocationListOut 设置为驱动程序更新的最后一个D3DDDI_PATCHLOCATIONLIST元素之后的下一个 D3DDDI_PATCHLOCATIONLIST 元素。

[in] PatchLocationListOutSize

pPatchLocationListOut 指定的修补程序位置列表中的元素数。 显示微型端口驱动程序不需要填充整个列表中的所有元素;驱动程序必须仅使用描述 DMA 缓冲区内修补程序位置所需的元素。

[in/out] MultipassOffset

如果显示微型端口驱动程序的 DxgkDdiPresent 函数必须返回STATUS_GRAPHICS_INSUFFICIENT_DMA_BUFFER以获取新的 DMA 缓冲区,则指定复制操作的进度的 UINT 值。 首次使用新的 RECT 列表调用驱动程序的 DxgkDdiPresent 函数时,MultipassOffset 初始化为零。 在驱动程序从 DxgkDdiPresent 调用返回之前,驱动程序将 MultipassOffset 设置为显示具有相同命令缓冲区的后续 DxgkDdiPresent 调用的复制进度。 Microsoft DirectX 图形内核子系统不会进一步更改该值。

[in] Color

颜色填充操作中的 A8R8G8B8 颜色(由 Flags 成员中设置的 ColorFill 位字段标志指定)或颜色键操作(由 SrcColorKeyDstColorKey 位字段标志指定)。 请注意,在任何时候仅设置 ColorFillSrcColorKeyDstColorKey 位字段标志之一。

如果主要格式为淡化 RGB, 则 Color 包含调色板索引,而不是 D3DDDIFORMAT 枚举类型的D3DDDIFMT_A8R8G8B8值。

[in] DstRect

用于计算拉伸因子的目标矩形的 RECT 结构。

[in] SrcRect

用于计算拉伸因子的源矩形的 RECT 结构。

[in] SubRectCnt

pDstSubRects 指定的数组中的目标子矩形数。

[in] pDstSubRects

DxgkDdiPresent 函数复制到的目标子矩形列表的 RECT 结构数组。

[in] FlipInterval

一个D3DDDI_FLIPINTERVAL_TYPE类型的值,指示翻转间隔 (即,如果在零、一、二、三或四个垂直同步之后发生翻转,则) 。

[in] Flags

一个DXGK_PRESENTFLAGS结构,在位字段标志中标识要执行的当前操作的类型。 请注意, Flags 中的 ColorFillSrcColorKeyDstColorKey 位字段标志是互斥

[in] DmaBufferSegmentId

DMA 缓冲区分页的内存段的标识符。 如果标识符为零,则 DMA 缓冲区未正确分页。

[in] DmaBufferPhysicalAddress

PHYSICAL_ADDRESS数据类型 (定义为指示 DMA 缓冲区分页的物理地址LARGE_INTEGER) 。 如果物理地址为零,则 DMA 缓冲区未正确分页。

[in] Reserved

预留给系统使用。 驱动程序应忽略此成员。

DmaBufferGpuVirtualAddress

D3DGPU_VIRTUAL_ADDRESS数据类型,指示 DMA 缓冲区所在的虚拟地址。 如果物理地址为零,则 DMA 缓冲区未正确分页。

NumSrcAllocations

源中的上下文分配数。

NumDstAllocations

目标中的上下文分配数。

PrivateDriverDataSize

pPrivateDriverData 的大小。

pPrivateDriverData

指向包含可选专用驱动程序数据的缓冲区的指针。

注解

SrcRectDstRect 成员指定的源和目标矩形区域的比率用于计算拉伸因子。 驱动程序在执行复制操作时,可以考虑拉伸因子计算。

无需驱动程序即可执行任何剪辑。 Microsoft DirectX 图形内核子系统将 pDstSubRects 成员指定的目标子矩形列表预剪辑到 DstRect 成员指定的目标矩形的坐标,以及屏幕 (主) 。 请注意,如果在 pDstSubRects 中提供了目标子矩形的列表,则驱动程序应仅使用 SrcRectDstRect 来计算拉伸因子,并应使用目标子矩形的坐标进行实际复制操作。

要求

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

另请参阅

D3DDDI_FLIPINTERVAL_TYPE

D3DDDI_PATCHLOCATIONLIST

DXGK_ALLOCATIONLIST

DXGK_PRESENTFLAGS

DXGK_PRESENTMULTIPLANEOVERLAYINFO

DxgkDdiPresent

矩形