DXGI1_2_DDI_BASE_FUNCTIONS 结构 (dxgiddi.h)

包含指向 Windows 显示驱动程序模型 (WDDM) 1.2 及更高版本用户模式显示驱动程序可以实现的函数的指针,这些函数可执行低级别任务,例如将呈现的帧呈现到输出、控制 gamma、获取有关共享和 Windows 图形设备接口的通知 (GDI) 可互操作的图面,以及管理全屏转换。

语法

typedef struct DXGI1_2_DDI_BASE_FUNCTIONS {
  HRESULT()(DXGI_DDI_ARG_PRESENT *) * pfnPresent;
  HRESULT()(DXGI_DDI_ARG_GET_GAMMA_CONTROL_CAPS *) * pfnGetGammaCaps;
  HRESULT()(DXGI_DDI_ARG_SETDISPLAYMODE *) * pfnSetDisplayMode;
  HRESULT()(DXGI_DDI_ARG_SETRESOURCEPRIORITY *) * pfnSetResourcePriority;
  HRESULT()(DXGI_DDI_ARG_QUERYRESOURCERESIDENCY *) * pfnQueryResourceResidency;
  HRESULT()(DXGI_DDI_ARG_ROTATE_RESOURCE_IDENTITIES *) * pfnRotateResourceIdentities;
  HRESULT()(DXGI_DDI_ARG_BLT *) * pfnBlt;
  HRESULT()(DXGI_DDI_ARG_RESOLVESHAREDRESOURCE *) * pfnResolveSharedResource;
  HRESULT()(DXGI_DDI_ARG_BLT1 *) * pfnBlt1;
  HRESULT()(DXGI_DDI_ARG_OFFERRESOURCES *) * pfnOfferResources;
  HRESULT()(DXGI_DDI_ARG_RECLAIMRESOURCES *) * pfnReclaimResources;
  HRESULT()(DXGI_DDI_ARG_GETMULTIPLANEOVERLAYCAPS *) * pfnGetMultiplaneOverlayCaps;
  HRESULT()(void *) * pfnGetMultiplaneOverlayFilterRange;
  HRESULT()(DXGI_DDI_ARG_CHECKMULTIPLANEOVERLAYSUPPORT *) * pfnCheckMultiplaneOverlaySupport;
  HRESULT()(DXGI_DDI_ARG_PRESENTMULTIPLANEOVERLAY *) * pfnPresentMultiplaneOverlay;
} DXGI1_2_DDI_BASE_FUNCTIONS;

成员

pfnPresent

指向驱动程序的 PresentDXGI 函数的指针。

pfnGetGammaCaps

指向驱动程序的 GetGammaCapsDXGI 函数的指针。

pfnSetDisplayMode

指向驱动程序的 SetDisplayModeDXGI 函数的指针。

pfnSetResourcePriority

指向驱动程序的 SetResourcePriorityDXGI 函数的指针。

pfnQueryResourceResidency

指向驱动程序的 QueryResourceResidencyDXGI 函数的指针。

pfnRotateResourceIdentities

指向驱动程序的 RotateResourceIdentitiesDXGI 函数的指针。

pfnBlt

指向驱动程序的 BltDXGI 函数的指针。

Direct3D 运行时可能会设置 pBltData 参数指向的 DXGI_DDI_ARG_BLT 结构的 Flags 成员,以便要求 Blt1DXGI 函数执行位块传输 (bitblt) 操作,该操作解析多采样资源、执行颜色格式转换以及同时执行拉伸或收缩。 但是,Direct3D 运行时永远不会将 DXGI_DDI_ARG_BLT1Flags 成员设置为零, (也就是说,没有) 设置任何标志以及DXGI_DDI_ARG_BLT1 (Rotate 成员中设置的DXGI_DDI_MODE_ROTATION_IDENTITY值,即指示没有旋转) 执行直接内存复制操作。 相反,除非这两个资源都是多采样的,否则 Direct3D 运行时调用驱动程序的 ResourceCopyResourceCopyRegion (D3D11_1) 函数来执行直接的内存复制操作。

用户模式显示驱动程序执行的拉伸或收缩质量必须与双线性筛选器执行的拉伸或收缩质量一样好。

Direct3D 运行时不经常调用驱动程序的 Blt1DXGI 函数。 也就是说,运行时应每帧调用 Blt1DXGI 不超过一次或两次,因为运行时主要使用 Blt1DXGI 来支持演示。

当运行时为演示文稿调用 Blt1DXGI 时,运行时会在 DXGI_DDI_ARG_BLT1Flags 成员中设置 Present 位字段标志。 运行时设置 Present 位字段标志以通知驱动程序 bitblt 有额外的要求,并且可能需要额外的同步 (例如,运行时可能需要在包含两个图形适配器的计算机配置中执行额外的同步,每个适配器处理显示) 的不同部分。 设置 Present 位字段标志后,驱动程序应执行从应用程序的后台缓冲区到 DWM 的共享图面的复制操作。 由于此类复制操作的同步不精确,因此撕裂项目应该是用户遇到的最差项目类型。 对于这种类型的复制操作,驱动程序不应使用多传递方法,方法是先解析到目标图面,然后就地对结果进行颜色转换,因为可能的项目会更糟。

如果驱动程序支持在创建主图面 (期间返回DXGI_DDI_ERR_UNSUPPORTED,则从调用CreateResource (D3D10) 函数返回DXGI_DDI_ERR_UNSUPPORTED,该函数在 D3D10DDIARG_CREATERESOURCE 的 BindFlags 成员中设置了 D3D10_DDI_BIND_PRESENT 标志以及 D3D10DDIARG_CREATERESOURCEpPrimaryDesc 成员设置为非 NULL) ,驱动程序还必须在复制操作期间支持旋转。 如果驱动程序从不从调用CreateResource (D3D10) CreateResource (D3D11) 函数返回DXGI_DDI_ERR_UNSUPPORTED,则运行时永远不会将DXGI_DDI_MODE_ROTATION_ROTATE90DXGI_DDI_MODE_ROTATION_ROTATE180DXGI_DDI_MODE_ROTATION_ROTATE270值传递给 DXGI_DDI_ARG_BLT1Rotate 成员。 因此,在这种情况下,不需要驱动程序的 Blt1DXGI 函数来支持旋转。

运行时在 DXGI_DDI_ARG_BLT1Rotate 成员中设置一个值,以指示在驱动程序将内容复制到目标之前,要逆时针旋转源内容的度数。 旋转以 90 度为增量指定。

注意

当驱动程序的 Blt1DXGI 函数将 sRGB 格式的内容从源图面复制到非 sRGB 目标图面时,驱动程序应将 sRGB 内容复制不变 (也就是说,驱动程序不应) 执行 sRGB 到线性转换。

源限制

Blt1DXGI 函数始终使用整个源子资源 (而不是某些子矩形区域) 来执行 bitblt 操作。 此外,源是在调用用户模式显示驱动程序CreateResource (D3D10) 或 CreateResource (D3D11 ) 函数中创建源时, (在 D3D10DDIARG_CREATERESOURCE 或 D3D11DDIARG_CREATERESOURCE 的 ResourceDimension 成员中指定的) D3D10DDIRESOURCE_TEXTURE2D表示形式。 当运行时在 DXGI_DDI_ARG_BLT1Flags 成员中设置 Resolve 位域时,源是多采样资源。 源资源限制为在 D3D10DDIARG_CREATERESOURCE 或 D3D11DDIARG_CREATERESOURCEBindFlags 成员中设置了 D3D10_DDI_BIND_PRESENT 标志 的资源。 D3D10DDIARG_CREATERESOURCE 或 D3D11DDIARG_CREATERESOURCE) 的 Format 成员中指定的源 ( 的格式限制为显示模式格式,由 DXGI_FORMAT 枚举中的以下值指定:

  • DXGI_FORMAT_B5G6R5_UNORM
  • DXGI_FORMAT_B5G5R5A1_UNORM
  • DXGI_FORMAT_B8G8R8A8_UNORM (请参阅下面的说明。)
  • DXGI_FORMAT_B8G8R8X8_UNORM
  • DXGI_FORMAT_R16G16B16A16_FLOAT
  • DXGI_FORMAT_R10G10B10A2_UNORM
  • DXGI_FORMAT_R8G8B8A8_UNORM
  • DXGI_FORMAT_R8G8B8A8_UNORM_SRGB

注意

如果驱动程序支持 源格式DXGI_FORMAT_B8G8R8A8_UNORM,则以下限制适用:

  • 当驱动程序执行从浮点格式到整数格式(如BGRA8888)的位运算时,它必须将 gamma 隐式编码到结果中。
  • 相反,当驱动程序执行从整数格式到浮点格式的 bitblt 运算时,它必须从结果中隐式删除伽玛编码。

目标限制

目标也是 D3D10DDIRESOURCE_TEXTURE2D 表示形式。 目标的格式也限制为显示模式格式。 目标资源限制为作为呈现目标绑定的资源, (D3D10_DDI_BIND_RENDER_TARGET在 D3D10DDIARG_CREATERESOURCE D3D11DDIARG_CREATERESOURCE) 的 BindFlags 成员中设置。

创建立体声后台缓冲区

从 Windows 8 开始,如果驱动程序必须创建立体声后台缓冲区,则应分别设置CreateResource (D3D10) 或 CreateResource (D3D11 ) 函数指向的 D3D10DDIARG_CREATERESOURCE 或 D3D11DDIARG_CREATERESOURCE 结构的成员,如下所示:

  1. ArraySize 成员设置为值 2。
  2. BindFlags 成员中设置D3D10_DDI_BIND_PRESENT标志值。

此外,为了支持立体呈现,BltDXGI 函数必须允许源和目标资源范围内的DXGI_DDI_ARG_BLT结构的 DstSubresourceSrcSubresource 成员的任何值。

pfnResolveSharedResource

指向驱动程序的 ResolveSharedResourceDXGI 函数的指针。

pfnBlt1

指向驱动程序 的 Blt1DXGI 函数的指针。

pfnOfferResources

指向驱动程序的 pfnOfferResources 函数的 指针。

pfnReclaimResources

由 DXGI 运行时调用,以回收用户模式显示驱动程序以前提供以供重复使用的视频内存资源。 由 WDDM 1.2 及更高版本的用户模式显示驱动程序实现。

pfnGetMultiplaneOverlayCaps

由 Microsoft DirectX 图形基础结构 (DXGI) 运行时调用,以请求用户模式显示驱动程序获取基本覆盖平面功能。 (可选)由 Windows 显示驱动程序模型 (WDDM) 1.3 及更高版本的用户模式显示驱动程序实现。 pfnGetMultiplaneOverlayCaps 的语法如下:

pfnGetMultiPlaneOverlayCaps GetMultiPlaneOverlayCaps;

HRESULT __stdcall* GetMultiPlaneOverlayCaps(
    DXGI_DDI_ARG_GETMULTIPLANEOVERLAYCAPS *pCaps
)
{ ... }

pCaps 参数是指向指定覆盖平面功能的DXGI_DDI_ARG_GETMULTIPLANEOVERLAYCAPS结构的指针。

pfnGetMultiplaneOverlayCaps 返回以下值之一:

  • S_OK:驱动程序已成功提供覆盖平面功能。
  • D3DDDIERR_DEVICEREMOVED:驱动程序检测到显示适配器已删除,因此驱动程序未完成操作。 如果驱动程序不知道适配器的移除,则驱动程序不需要返回此错误代码。

pfnGetMultiplaneOverlayFilterRange

此成员是保留成员,应设置为零。 从 Windows 8.1 开始支持。

pfnCheckMultiplaneOverlaySupport

由 Microsoft DirectX 图形基础结构 (DXGI) 运行时调用,以检查多平面覆盖的硬件支持的详细信息。 pfnCheckMultiplaneOverlaySupport 的语法为:

PFND3DDDI_CHECKMULTIPLANEOVERLAYSUPPORT pfnCheckMultiplaneOverlaySupport;

HRESULT __stdcall* pfnCheckMultiplaneOverlaySupport(
   D3DDDIARG_CHECKMULTIPLANEOVERLAYSUPPORT *pSupport
)
{ ... }

pSupport 参数是指向描述如何向目标图面显示DXGI_DDI_ARG_CHECKMULTIPLANEOVERLAYSUPPORT结构的指针。

如果 pfnCheckMultiplaneOverlaySupport 成功,则返回S_OK。 否则,将返回 HRESULT 错误代码。

pfnPresentMultiplaneOverlay

指向驱动程序的 pfnPresentMultiplaneOverlay (DXGI) 函数的 指针。 从 Windows 8.1 开始支持。

pSupport

指向描述如何向目标图面显示 DXGI_DDI_ARG_CHECKMULTIPLANEOVERLAYSUPPORT 结构的指针。

要求

要求
最低受支持的客户端 Windows 8,WDDM 1.2
最低受支持的服务器 Windows Server 2012
标头 dxgiddi.h (包括 D3d10umddi.h)

另请参阅

CreateDevice (D3D10)

D3D10DDIARG_CREATEDEVICE

DXGI1_3_DDI_BASE_FUNCTIONS

DXGI_DDI_BASE_ARGS

DXGI_DDI_BASE_FUNCTIONS