Enumerating Child Devices of a Display Adapter(MSDN翻译)

Enumerating Child Devices of a Display Adapter

下列流程描述了端口驱动,小端口驱动和VidPN管理器在初始化时如何协作完成显卡子设备的枚举。

  1. 端口驱动调用KMD的DxgkDdiStartDevice函数, DxgkDdiStartDevice返回显卡子设备的数量(在NumberOfChildren参数中)。DxgkDdiStartDevice也会返回显卡所支持的Present source的数量(NumberOfVideoPresentSources参数)。这些Present Source随后会被编号从0到N-1。

  2. 显示端口驱动调用KMD的DxgkDdiQueryChildRelations函数,其中会枚举显卡中的子设备。DxgkDdiQueryChildRelations会填充DXGK_CHILD_DESCRIPTOR结构的数组,每一个项代表一个子设备。所有子设备都是显卡板卡上的设备,即显示器和其他连接到显卡上的外界设备都不被当作是显卡的子设备。更多的信息参见 Child Devices of the Display Adapter一章。DxgkDdiQueryChildRelations必须枚举所有子设备,包括在初始化时就已经存在的和初始化之后可能出现的。例如,将笔记本连接到docking之后就会出现新的Video output,DxgkDdiQueryChildRelations必须在初始化时就枚举到整个Video output而不管此时是否连接到了docking。

  3. 对于之前被枚举到的每个子设备都有一个HPD awareness值,为HpdAwarenessInterruptible 或 HpdAwarenessPolled。显示端口驱动调用KMD的DxgkDdiQueryChildStatus方法来确定子设备是否有一个外界设备与之相连。

  4. 显示端口驱动会为满足下列条件的子设备创建PDO:

    • 子设备的HPD awareness值为HpdAwarenessAlwaysConnected
    • 子设备的HPD awareness 值为HpdAwarenessPolled or HpdAwarenessInterruptible,并且OS从之前的请求或通知中一已知该子设备已经有一个外界设备与之相连。
  5. 显示端口驱动会为满足以下条件的子设备调用KMD的DxgkDdiQueryDeviceDescriptor函数:

    • 已知该子设备有一个外设相连。
    • 系统假设整个子设备连接有一个外设。
    • 这个子设备的类型为TypeOther

    如果该子设备相连的monitor或者其他显示设备支持EDID描述符, 则DxgkDdiQueryDeviceDescriptor返回该设备的EDID块。

    Note: 在初始化时,显示端口驱动调用DxgkDdiQueryDeviceDescriptor来获得每个显示器的头128个字节的EDID块。其中包含有初始化时显示端口驱动需要的信息:PnP硬件ID,实例ID,兼容IDs,以及设备字符串。随后monitor类功能驱动(Monitor.sys)会调用为每个monitor调用KMD的DxgkDdiQueryDeviceDescriptor来获得第一块128字节的EDID块以及附加的128字节的扩展EDID块。这表示KMD需要被分别为每个Monitor调用两次DxgkDdiQueryDeviceDescriptor来获得第一块128字节的EDID块。

  6. VidPN管理器会获得显卡所支持的所有Present source和Present target的标识。Present source通过从0到N-1的数字来表示,N为source的数量,其值通过KMD的DxgkDdiStartDevice返回。Present Target拥有一个唯一的整型标识,该值在之前KMD的DxgkDdiQueryChildRelations时被创建。每个类型为TypeVideoOutput 的子设备都关联着一个Present target,子设备的CXGK_CHILD_DESCRIPTOR结构的ChildUid成员被用来标识Present target。

  7. VidPN管理器使用下列过程来建立初始VidPN

    • 如果在注册表中记录着最后使用良好的VidPN,则会使用该VidPN作为初始VidPN。

    • 否则调用KMD的DxgkDdiRecommendFunctionalVidPn来获得初始VidPN。

    • 如果DxgkDdiRecommendFunctionalVidPn返回失败,则VidPN管理器会创建一个简单的VidPN,其中包含一条Present Path;只有一对source和target。VidPN管理器会调用KMD的DxgkDdiIsSupportedVidPn函数来验证这个提议的VidPN会正常工作。如果DxgkDdiIsSupportedVidPn返回显示该VidPN不能正常工作,则VidPN管理器会尝试其他Present Path直到该VidPN能够被支持。

    • 调用KMD的DxgkDdiEnumVidPnCofuncModality函数确定source modes 和target modes是否对于该VidPN可用。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值