DXGKDDI_SETVIDPNSOURCEADDRESS回调函数 (d3dkmddi.h)

DxgkDdiSetVidPnSourceAddress 函数设置与特定视频呈现源关联的主图面的地址。

语法

DXGKDDI_SETVIDPNSOURCEADDRESS DxgkddiSetvidpnsourceaddress;

NTSTATUS DxgkddiSetvidpnsourceaddress(
  IN_CONST_HANDLE hAdapter,
  IN_CONST_PDXGKARG_SETVIDPNSOURCEADDRESS pSetVidPnSourceAddress
)
{...}

参数

hAdapter

与显示适配器关联的上下文块的句柄。 显示微型端口驱动程序之前在 DxgkDdiAddDevice 函数的 MiniportDeviceContext 输出参数中为 DirectX 图形内核子系统提供了此句柄。

pSetVidPnSourceAddress

指向包含函数参数 的 DXGKARG_SETVIDPNSOURCEADDRESS 结构的指针。

返回值

如果成功,DxgkDdiSetVidPnSourceAddress 将返回STATUS_SUCCESS;否则,它将返回 Ntstatus.h 中定义的错误代码之一。

从 Windows 8 开始,当在 pSetVidPnSourceAddress-Flags> 中设置 SharedPrimaryTransition 成员时,显示微型端口驱动程序可能会失败对 DxgkDdiSetVidPnSourceAddress 的调用,并返回STATUS_INVALID_PARAMETER。 但是,除非用户模式驱动程序的 CheckDirectFlipSupport 函数实现或 DWM 中出现错误,否则不会发生此类故障。 如果发生此类故障,操作系统将无法无缝地故障回复到合成模式,并且呈现将不正确。

注解

DxgkDdiSetVidPnSourceAddress 仅对符合当前提交的视频呈现网络 (VidPN) 拓扑的主要对象进行调用。 例如,确定D3DDDIFMT_A8R8G8B8格式适合提交到D3DDDIFMT_X8R8G8B8格式的 VidPN,反之亦然。

DirectX 图形内核子系统调用 DxgkDdiSetVidPnSourceAddress 来切换显示模式并执行内存映射 I/O (MMIO) 基于的翻转操作。 pSetVidPnSourceAddress 参数指向的 DXGKARG_SETVIDPNSOURCEADDRESS 结构的 Flags 成员中的位字段标志指示要执行的显示操作的类型。 为了切换显示模式,图形内核子系统将 DXGKARG_SETVIDPNSOURCEADDRESS 的 ContextCount 成员设置为零。 在这种情况下,DXGKARG_SETVIDPNSOURCEADDRESS 的 Context 成员指定的数组内容未定义。 为了执行翻转操作,图形内核子系统将 ContextCount 设置为上下文数,将 Context 设置为参与翻转操作的上下文的驱动程序上下文句柄数组。

如果之前指示了显示微型端口驱动程序,则在调用其 DxgkDdiQueryAdapterInfo 函数时, 支持基于 MMIO 的翻转 (,方法是将 DXGK_DRIVERCAPS 结构的 FlipCaps 成员中的 FlipOnVSyncMmIo 位字段标志设置为 TRUE) ,随后在设备中断请求级别调用驱动程序的 DxgkDdiSetVidPnSourceAddress 函数, (DIRQL) 进行翻转。 驱动程序的 DxgkDdiSetVidPnSourceAddress 函数必须对 DAC 进行编程并开始在以下垂直同步处扫描出地址在 DXGKARG_SETVIDPNSOURCEADDRESS 的 PrimaryAddress 成员中指定的主图面。 驱动程序还必须在调用 DxgkCbNotifyInterrupt 函数时传递 InterruptType 参数中的DXGK_INTERRUPT_CRTC_VSYNC中断类型,以报告有效扫描地址。 驱动程序必须遵循对 DxgkCbNotifyInterrupt 的 调用,并调用 DxgkCbNotifyDpc 函数。

DxgkDdiSetVidPnSourceAddress 必须位于不可分页的内存中。 DxgkDdiSetVidPnSourceAddress 不得调用可分页内存中的任何代码,也不得操作可分页内存中的任何数据。

Clone-View 情况

在克隆视图情况下,显示微型端口驱动程序应按照本节中所述适当地处理翻转操作。

当 DWM 运行时,当发生垂直同步时,DirectX 图形内核子系统会翻转同步。 但是,仅当发生单个图形适配器输出信号的垂直同步时,DirectX 图形内核子系统才能同步。 DirectX 图形内核子系统必须立即翻转任何其他图形适配器输出信号,以避免撕裂。

GPU 计划程序将检测单个垂直同步,并将确定翻转图面在第一次监视器翻转发生后立即可用。 因此,显示微型端口驱动程序可能会呈现到第二台监视器仍在显示的表面。

例如,视频应用程序 (,Windows 媒体播放器) 不知道克隆视图的情况,并且预期具有可预测的垂直同步间隔。 如果 GPU 计划程序检测到两个监视器的垂直同步,垂直同步间隔 (,因此翻转) 将是不可预知的,并且会随时间而偏移,这将导致 DWM 和视频应用程序无法正常运行。

对于克隆视图的情况,显示微型端口驱动程序必须在主监视器上执行垂直同步翻转,在辅助监视器上执行基于 MMIO 的即时翻转。

显示微型端口驱动程序的 DxgkDdiSetVidPnSourceAddress 函数应在图形适配器对象中记录要翻转到的地址。

为了指示显示微型端口驱动程序不等待辅助监视器的下一个垂直回溯,DirectX 图形内核子系统在调用驱动程序的 DxgkDdiSetVidPnSourceAddress 函数时将 FlipImmediate 位字段标志设置为 TRUE

请参阅多平面覆盖 VidPN 演示文稿中有关使用多平面覆盖调用此函数的要求。

要求

要求
最低受支持的客户端 Windows Vista
标头 d3dkmddi.h
IRQL PASSIVE_LEVEL。 如果驱动程序支持基于 MMIO 的翻转,则调用 DIRQL。

另请参阅

DXGK_DRIVERCAPS

DXGKARG_SETVIDPNSOURCEADDRESS

DxgkCbNotifyDpc

DxgkCbNotifyInterrupt

DxgkDdiAddDevice

DxgkDdiSetVidPnSourceVisibility

DxgkDdiQueryAdapterInfo