当前位置: 首页 > news >正文

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 确保在启动模式更改或关闭监视器之前,硬件翻转队列中已排队的翻转已完成或取消。


http://www.mrgr.cn/news/95064.html

相关文章:

  • 876.链表的中间节点
  • 图莫斯TOOMOSS上位机TCANLINPro使用CAN UDS功能时 编写、加载27服务dll解锁算法文件
  • 霍尔传感器与电流互感器的区别
  • 别让时光溜走!Kairos App 帮你抓住每一刻
  • SpringBoot3+Vue3实战(Vue3快速开发登录注册页面并对接后端接口)(4)
  • Lombok常用注解
  • 男女搭配(数学思维)
  • YOLO魔改之频率分割模块(FDM)
  • stm32第七天震动传感器
  • 【模拟】从 0 到 1:模拟算法的深度剖析与实战指南
  • python实现接口自动化
  • 【MySQL数据库】多表查询(笛卡尔积现象,联合查询、内连接、左外连接、右外连接、子查询)-通过练习快速掌握法
  • 4.好事多磨 1
  • C++项目:高并发内存池_上
  • 【深度学习与大模型基础】第6章-对角矩阵,对称矩阵,正交矩阵
  • 20250315-OpenAI-AgentSDK实验
  • 计算机网络面试篇
  • Linux:(socket套接字——TCP协议,守护进程)
  • 博客图床 VsCode + PicGo + 阿里云OSS
  • 网络华为HCIA+HCIP VLAN间通信