Windows 图形显示驱动开发-WDDM 3.0功能- 硬件翻转队列(五)

翻转队列日志 DDI

添加了以下与翻转队列日志相关的回调和相关结构:

  • DXGKDDI_SETFLIPQUEUELOGBUFFER
  • DXGKARG_SETFLIPQUEUELOGBUFFER
  • DXGK_FLIPQUEUE_LOG_ENTRY
  • DXGKDDI_UPDATEFLIPQUEUELOG
  • DXGKARG_UPDATEFLIPQUEUELOG

KMD 提供了一个指向其在 DRIVER_INITIALIZATION_DATA 中的函数的指针。

VSync 中断结构更新

对 DXGKARGCB_NOTIFY_INTERRUPT_DATA 结构进行了以下更改,以实现硬件翻转队列模型的 VSync 中断:

  • DXGK_INTERRUPT_CRTC_VSYNC_WITH_MULTIPLANE_OVERLAY3 枚举值已添加为 InterruptType。
  • CrtcVSyncWithMultiPlaneOverlay3 结构已添加到联合中。 CrtcVSyncWithMultiPlaneOverlay3 的语义类似于现有的 CrtcVSyncWithMultiPlaneOverlay2 结构,不同之处在于,除了每个平面的最后一个完整 PresentId,CrtcVSyncWithMultiPlaneOverlay3.pMultiPlaneOverlayVSyncInfo 指向翻转队列日志中以前未报告的 PresentId 的范围。
  • 为 CrtcVSyncWithMultiPlaneOverlay3 的 pMultiPlaneOverlayVSyncInfo 成员添加了 DXGK_MULTIPLANE_OVERLAY_VSYNC_INFO3 结构。

再次使用基本硬件翻转队列示例图:

假设在提交翻转 N 时,FirstFreeFlipQueueLogEntryIndex 设置为 40,然后完成 N、N+1、N+2 演示。

在单个平面配置分别完成三个 PresentIds N、 N+1 和 N+2 后,v2、v3、v4、KMD 在其翻转队列日志缓冲区中写入了三个新条目,索引为 40、41 和 42。 KMD 报告 CrtcVSyncWithMultiPlaneOverlay3 结构中的 FirstFreeFlipQueueLogEntryIndex 值为 43。 OS 观察到 FirstFreeFlipQueueLogEntryIndex 从 40 更改为 43,从日志条目 40、41 和 42 读取。 KMD 需要设置以下翻转队列日志缓冲区值,如下所示:

  • VidPnTargetId:与 CrtcVSyncWithMultiPlaneOverlay2 中的含义相同
  • PhysicalAdapterMask:与 CrtcVSyncWithMultiPlaneOverlay2 的含义相同
  • MultiPlaneOverlayVSyncInfoCount = 1
  • pMultiPlaneOverlayVSyncInfo[0].LayerIndex = 0
  • pMultiPlaneOverlayVSyncInfo[0].FirstFreeFlipQueueLogEntryIndex = 43
  • LogBufferAddressForPlane0[40].PresentId = N
  • LogBufferAddressForPlane0[40].PresentTimestamp = v2
  • LogBufferAddressForPlane0[41].PresentId = N+1
  • LogBufferAddressForPlane0[41].PresentTimestamp = v3
  • LogBufferAddressForPlane0[42].PresentId = N+2
  • LogBufferAddressForPlane0[42].PresentTimestamp = v4

显式翻转队列日志更新请求

在某些情况下,OS 需要获取有关最后一批完成的翻转的信息,而不必等待 VSync 中断。 在这种情况下,OS 显式调用 DxgkDdiUpdateFlipQueueLog,以请求 KMD 从其专有显示硬件数据结构读取,并将过去的翻转信息写入翻转队列日志。 日志的语义与前面所述的语义相同;唯一的变化是 FirstFreeFlipQueueLogEntryIndex 返回到 VSync 中断之外的 OS。

DxgkDdiUpdateFlipQueueLog 在设备中断级别 (DIRQL) 调用,它与 DxgkDdiSetVidPnSourceAddressWithMultiPlaneOverlay3 DDI 位于同一同步类中。

在硬件翻转队列中存在排队翻转时显示模式更改和电源转换

Dxgkrnl 确保在启动模式更改或关闭监视器之前,硬件翻转队列中已排队的翻转已完成或取消。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值