Introduction to Video Present Networks
VidPN管理器是Dxgk子系统(Dxgkrnl.sys)的一个组件,负责管理连接到显示适配器的监视器和其他显示设备的集合。下面是他的功能
- 响应显示器热插拔。
- 当连接的监视器集合发生更改时,维护和更新可用的显示模式集合。
- 管理显示适配器上的渲染Surface与视频输出之间的连接。例如,连接多显示器时进行克隆或扩展桌面。
- 当笔记本盖打开或关闭时,调整显示设备和显示模式的集合。
- 调整笔记本Dock或Undock时可用的显示设备和显示模式和集合。
显示适配器上负责扫描视频内存中呈现的内容并将其显示在视频输出中的硬件被称为显示适配器的显示子系统(Display adapter's presentational subsystem)。视频显示网络(VidPN)是显卡显示子系统的软件模型。
显卡显示子系统的关键元素是视图(Primary Surface链)和视频输出。在VidPN模型中,一个视图称为video present source,一个视频输出称为video present target。
video present path连接着video present source和video present target。VidPN通过维护一个video present path集合来对源和目标之间的关系建模。这个集合称为VidPN Topology。
video present target不是连接到显卡的显示器(或其他外部显示设备)。video present target是视频输出连接器本身。
下图演示了一个VidPN。
上图的VidPN中有三个Present Targets: DVI连接器, HD15连接器,S-Video连接器。 VidPN Topology表示为连接两个源和三个目标之间的直线。Topology制定了源1连接DVI目标,源2连接HD15和S-Video目标。源2上的内容作为克隆视图输出再HD15和S-Video连接器上。
每个video present source支持的surface格式集合称为source modes。为了维护不同present source支持的不同source mode,VidPN给每一个present source维护了一个source mode集合。对于特定的video present source,source mode set并不是固定的;它会随着topology改变而改变也会根据其他video present source选择不同的mode而改变。
video present target的工作原理与source类似。
The Role of the Display Miniport Driver
显卡有一个或多个Video Output Codecs(例如CRTC)能够从source中读取数据并转化成对应的视频信号发送给target。在给定的任意时间中一个codec只能从一个source中读取内容。但是codec能够支持将读取到的一个source输出成多个视频信号到不同的target。VidPN管理器关心自身和Source及target的联系,并不关心codec参与的角色。至于哪个codec从哪一个source读取内容完全由miniport驱动决定。例如,假设一个显卡有两个codec,VidPN请求miniport驱动实现如下的topology.
下图显示了miniport驱动可能给source指定的codec的一种对应方式。
注意上图中一个CRTC输出了两个clone视图信号(HD15, S-Video)。现在假设HD15输出连接到CRTC1不需要了。这时miniport驱动可以用下图的方式来实现clone视图。
使用两个codec实现clone视图有一些使用一个codec没有的优点,例如两个codec能够输出不同的分辨率以及刷新率信号。
VidPN并不知道任何关于codec怎样参与到source和target之间信号输出的。VidPN管理器只知道source和target之间的关系。而底层与codec的组合关系只有miniport驱动知道。