EVT_IDD_CX_MONITOR_ASSIGN_SWAPCHAIN回调函数 (iddcx.h)

EVT_IDD_CX_MONITOR_ASSIGN_SWAPCHAIN 由操作系统调用,以通知间接显示驱动程序 (IDD) 适配器上的监视器的模式更改。

语法

EVT_IDD_CX_MONITOR_ASSIGN_SWAPCHAIN EvtIddCxMonitorAssignSwapchain;

NTSTATUS EvtIddCxMonitorAssignSwapchain(
  [in] IDDCX_MONITOR MonitorObject,
  [in] const IDARG_IN_SETSWAPCHAIN *pInArgs
)
{...}

参数

[in] MonitorObject

操作系统使用驱动程序创建的不透明IDDCX_MONITOR句柄,用于标识受模式更改影响的监视器。

[in] pInArgs

指向 IDARG_IN_SETSWAPCHAIN 结构的指针,其中包含驱动程序用于设置间接交换链的信息。

返回值

(NTSTATUS) 如果操作成功,则回调函数必须返回STATUS_SUCCESS或NT_SUCCESS (状态) 等于 TRUE 的另一个状态值。 如果发生错误,IDD 应返回 STATUS_GRAPHICS_INDIRECT_DISPLAY_ABANDON_SWAPCHAIN 很有可能不再发生错误。 否则,它应返回相应的 NTSTATUS 错误代码。 请参阅“备注”。

注解

OS 调用 EvtIddCxMonitorAssignSwapChain ,以便 IDD 可以设置其帧处理机制。 例如,IDD 可能会创建一个新线程来初始化 D3D 设备,然后循环处理帧, () 查看 ID 驱动程序示例

如果 EvtIddCxMonitorAssignSwapChain 返回成功,则 IDD 将拥有 IDARG_IN_SETSWAPCHAIN.hSwapChain 对象,并负责在停止处理帧时调用 WdfObjectDelete 以释放交换链对象。 当调用 EvtIddCxMonitorUnassignSwapChain 时,或者在成功返回 EvtIddCxMonitorAssignSwapChain 后帧处理循环中发生错误时,交换链处理可以停止处理帧。 这适用于控制台和远程 ID 适配器以及所有 IddCx 版本。

从 Windows 10 版本 1903 开始,为了降低用户影响 (例如,等待 IddCx 检查驱动程序) 所花费的时间,如果 EvtIddCxMonitorAssignSwapChain 报告除 STATUS_GRAPHICS_INDIRECT_DISPLAY_ABANDON_SWAPCHAIN 以外的错误代码,IddCx 将立即检查驱动程序。

如果驱动程序返回STATUS_GRAPHICS_INDIRECT_DISPLAY_ABANDON_SWAPCHAIN,IddCx 将通知桌面合成器。 需要创建新的交换链,因此 OS 将再次调用 EvtIddCxMonitorAssignSwapChain。 仅当很有可能不再发生刚刚发生的错误时,ID 驱动程序才应使用此返回代码。 也就是说,ID 驱动程序不应使用户无法使用桌面,因为它返回了错误代码,但未执行任何操作以确保不会再次发生相同的故障。 例如,如果驱动程序在呈现适配器上创建 D3D 设备时遇到错误,它可以调用 IddCxAdapterSetRenderAdapter 更改为另一个适配器, (可能是另一个 GPU 或 WARP) ,然后返回 STATUS_GRAPHICS_INDIRECT_DISPLAY_ABANDON_SWAPCHAIN。 OS 将在新的呈现适配器上创建新的交换链,并希望避免此错误。 尽管此错误代码从 Windows 10 版本 1903 开始定义,但 ID 驱动程序可以在以前的 OS 版本中返回此错误代码,这不会造成任何影响。

交换链中图面的分辨率将始终与目标模式设置的分辨率相同。

图面的格式将是驱动程序支持的格式之一,但每个获取的缓冲区的格式可以在支持的格式之间因帧而异。 驱动程序应检查获取的每个缓冲区的格式。

要求

要求
最低受支持的客户端 Windows 10
最低受支持的服务器 Windows Server 2016
目标平台 Windows
标头 iddcx.h
IRQL requires_same

另请参阅

EvtIddCxMonitorUnassignSwapChain

IDARG_IN_SETSWAPCHAIN