window显示驱动开发—为头装载和专用监视器生成自定义合成器应用(一)

Windows.Devices.Display.Core API 是适用于第三方组合器以及内部 Windows 组件的低级别Windows 运行时 (WinRT) API,位于所有其他公共 API 下面,用于枚举、配置和驱动 Windows 中的显示适配器和显示目标。 其思路是将显示控制器视为单独的引擎,类似于 GPU 上的 3D 引擎和媒体引擎。 此 API 负责:

  • 回答有关显示硬件的查询(如功能和可能的显示模式)
  • 回答有关当前配置的查询
  • 在显示硬件上设置属性(如显示模式)
  • 配置显示硬件(连接的监视器分辨率、其线路格式等)
  • 分配和扫描称为主节点的特殊 GPU 图面
  • 允许在 Direct3D 与 Windows.Devices.Display.Core API 之间实现互操作(例如共享图面、围栏)

值得指出的是,Windows.Devices.Display.Core 不是:

  • 它不是游戏或应用用于在窗口中显示内容的 API。 应用仍使用 DXGI、 XAML、 合成 API、 GDI 等。
  • 它不是游戏或应用用于显示内容全屏的 API。 应用仍使用 DXGI、Win32 应用仍使用 HWND,UWP 应用始终在 CoreWindow 中显示内容。

此 API 仅适用于驱动专用硬件的 compositor 应用。

用于生成自定义合成器的方案

Windows.Devices.Display.Core API 适用于以下方案:

  • 虚拟和增强现实显示器,需要专有组合器来直接驱动显示控制器,并接收与 Windows 桌面分开的计时和模式配置的精细控制。
  • 专用显示硬件方案,需要对商业设置中的显示器进行专用控制。 例如,如果 Windows 桌面由于硬件扭曲、灰度显示器等而无法在此类显示器上正确呈现。
  • 专用的"设备"方案,其中监视器可能完全专用于应用,而不会长时间受到 Windows 桌面体验的任何干扰(例如专用视频监视器)。

API 通过以下方式实现此目的:

  • 提供对完整显示模式信息的精细控制,包括线路格式、HDR 等。
  • 使用围栏来同步演示文稿,可让合成器跨进程或子组件链接演示文稿,且性能开销几乎为零。
  • 提高查询和配置基础视频演示网络(VidPN)的能力,以允许系统组件和低级别组合组件以不太容易出错且更可扩展的方式执行更复杂的操作。

请注意,此 API 仅适用于 具有专用硬件的第三方用例集 。 它的使用高度仅限于声明自己需要此 API 功能的硬件。 因此,开发人员应熟悉硬件概念,合作伙伴应直接与Microsoft联系,以帮助解决问题。

硬件和软件要求

第三方自定义合成器只能获取已预先指定为头载显示器(HMD)或"专用"显示器的显示器。 必须以以下两种方式之一提供此指定:

EDID 扩展 - 用于永久用作 HMD、X 射线监视器、视频墙或其他专用方案的自定义显示设备应实现 用于头部装载和专用显示器的 Microsoft EDID 扩展。

用户替代 - 对于使用现成监视器的自定义硬件安装,Windows 提供了一个 UI 开关,用于将监视器指定为"专用"。

通过覆盖软件中的 EDID,显示器可能 未 指定为 HMD 或专用显示器。

备注

专用显示器仅在 Windows 10 版本 2004 中可用,需要Windows 10 企业版、Windows 10 专业工作站版或Windows 10 IoT 企业版。

实现自定义合成器路线图

实现自定义合成器可以分为几个阶段:

  • 枚举和发现关联的 HMD 或专用显示
  • 获取所选显示器的所有权
  • 为所有选定的显示配置模式
  • 创建用于显示帧的资源
  • 呈现内容和计划框架演示文稿
相关推荐
2601_949695591 小时前
笔记本电脑怎么连接无线网WiFi?【2026最新完整版教程】
驱动开发·电脑
somi71 小时前
ARM-驱动-03 Linux 字符设备驱动开发
linux·arm开发·驱动开发·自用
不怕犯错,就怕不做18 小时前
rk3562 buildrooot编译更新的lib库push后无效问题分析
linux·驱动开发·嵌入式硬件
疯狂成瘾者18 小时前
YAML驱动开发(YAML-driven)
驱动开发
Andrew-Feng19 小时前
AI时代的规范驱动开发——OpenSpec
人工智能·驱动开发
路溪非溪2 天前
Linux驱动开发中的常用接口总结(一)
linux·运维·驱动开发
Freak嵌入式2 天前
LVGL基础知识和概念:视觉样式与资源系统
ide·驱动开发·嵌入式·lvgl·micropython·upypi
独小乐2 天前
009.中断实践之实现按键测试|千篇笔记实现嵌入式全栈/裸机篇
linux·c语言·驱动开发·笔记·嵌入式硬件·arm
路溪非溪2 天前
Linux中Netlink简介和使用总结
linux·网络·arm开发·驱动开发
爱分享的阿Q2 天前
RISC-V驱动开发合规解析
驱动开发·risc-v