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] 元素 (即元素 2) 的 hDeviceSpecificAllocation 成员访问目标分配句柄。

在分配列表的元素中指定的句柄是驱动程序的 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数据类型 (定义为LARGE_INTEGER) ,指示 DMA 缓冲区分页的物理地址。 如果物理地址为零,则 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

矩形