枚举协同工作的 VidPN 源和目标模式

本主题介绍视频呈现网络 (VidPN) 管理器和显示微型端口驱动程序如何协作以枚举视频呈现源和目标上可用的模式。 在阅读此材料之前,应熟悉以下主题中的材料:

VidPN 管理器不时要求显示微型端口驱动程序枚举显示适配器的视频显示源和目标上可用的模式。 通常,请求具有以下模式:

  1. VidPN 管理器创建或获取一个 VidPN,该 VidPN 在其源和目标的某些(但不是全部)上固定了模式。

  2. VidPN 管理器调用 DxgkDdiIsSupportedVidPn 以确定是否可以扩展 VidPN 以形成显示适配器上支持的功能性 VidPN。 也就是说,它询问是否可以在不更改现有固定模式的情况下将模式固定到剩余源和目标上。

  3. VidPN 管理器调用 DxgkDdiEnumVidPnCofuncModality 来获取尚未固定模式的源和目标上可用的模式。

传递给 DxgkDdiEnumVidPnCofuncModality 的参数之一是称为约束 VidPN 的 VidPN 对象的句柄。

DxgkDdiEnumVidPnCofuncModality 必须执行以下操作:

  • 检查约束 VidPN。

  • 对于每个没有固定模式的源和目标,请调整模式集,使其成为与约束共同功能的最大可能模式集。

  • 对于没有固定缩放转换的每个路径,请调整缩放支持标志,使其与约束协同工作。

  • 对于没有固定旋转转换的每个路径,请调整旋转支持标志,使其与约束协同工作。

  • 对于每个具有固定模式的源,报告可用于该源的多重采样方法。

以下段落详细介绍了如何执行上一项目符号列表中的每个任务。

检查约束 VidPN

约束 VidPN 的以下属性是 DxgkDdiEnumVidPnCofuncModality 必须遵循的约束。

  • 拓扑 (源和目标之间的关联集)

  • 固定模式

  • 每个路径的缩放、缩放支持、旋转和旋转支持

  • 每个路径的目标颜色基础

  • 每个路径的目标颜色系数动态范围

  • 内容类型 (每个路径的图形或视频)

  • 每个路径的伽玛斜坡

若要从约束 VidPN 中提取约束,请执行以下步骤:

调整模式集

检查约束 VidPN 拓扑中与源和目标关联的模式集时,请注意哪些模式集具有固定模式。 如果模式集没有固定模式,请确定是否需要调整它。 如果模式集包含与约束不共函数的模式,或者缺少与约束共函数的可用模式,则必须对其进行调整。

对于具有连接监视器的视频呈现目标,还必须考虑监视器支持的模式集。 即使显示适配器上的视频目标支持特定模式 (给定约束) ,如果连接的监视器也支持该模式,则仅应在目标模式集中列出该模式。 若要确定连接的监视器支持的模式,请执行以下步骤:

调整缩放支持标志

对于约束 VidPN 拓扑中的每个路径,确定路径是否具有固定缩放转换。 若要做出此决定,请检查 vpnPathContentTransformation.Scaling,其中 vpnPath 是表示路径 的D3DKMDT_VIDPN_PRESENT_PATH 结构。 如果 vpnPathContentTransformation.Scaling 设置为 D3DKMDT_VPPS_IDENTITYD3DKMDT_VPPS_CENTEREDD3DKMDT_VPPS_STRETCHED,然后固定路径的缩放转换。 否则,缩放转换不会固定。

如果路径没有固定的缩放转换,请确定是否需要调整路径的缩放支持标志。 如果支持标志显示对与约束不共函数的缩放类型的支持,或者它们未能显示对与约束共函数的缩放类型的支持,则必须调整支持标志。 若要更改缩放支持标志,请设置包含标志 的 D3DKMDT_VIDPN_PRESENT_PATH_SCALING_SUPPORT 结构的成员。

调整旋转支持标志

调整路径的旋转支持标志类似于调整路径的缩放支持标志。 假设 vpnPath 是一个D3DKMDT_VIDPN_PRESENT_PATH结构。 如果 vpnPathContentTransformation.Rotation 设置为 D3DKMDT_VPPR_IDENTITYD3DKMDT_VPPR_ROTATE90D3DKMDT_VPPR_ROTATE180D3DKMDT_VPPR_ROTATE270,然后固定路径的旋转转换。 否则,不会固定旋转转换。 轮换支持标志位于 vpnPath 中ContentTransformation.RotationSupport

报告多重采样方法

如果显示适配器具有一个或多个能够通过多重采样进行抗锯齿的视频输出编解码器,则必须针对具有固定模式的每个源报告 () 约束的情况下可用的多重采样方法。 若要报告可用的多重采样方法,请执行以下步骤:

D3DDDI_MULTISAMPLINGMETHOD结构具有两个成员(必须设置)来描述多重采样方法的特征。 NumSamples 成员指示采样的子像素数。 NumQualityLevels 成员指示方法可以运行的质量级别数。 可以指定任意数量的质量级别,只要每次提高级别都会明显提高所呈现图像的质量。

枚举透视表

如前所述, DxgkDdiEnumVidPnCofuncModality 必须使用在其 hConstrainingVidPn 参数中传递的 VidPN 创建协同函数的模式集。 在某些情况下, DxgkDdiEnumVidPnCofuncModality 必须根据在 EnumPivotTypeEnumPivot 参数中传递 (的枚举透视) 附加信息来增强其行为。

枚举透视可以是以下项之一:

  • 特定视频当前源的模式集

  • 特定视频存在的目标的模式集

  • 特定 VidPN 当前路径的缩放转换

  • 特定 VidPN 当前路径的旋转转换

如果枚举透视是模式集,则 DxgkDdkEnumVidPnCofuncModality 必须使该模式集保持不变。 如果枚举透视是缩放 (旋转) 转换路径,则 DxgkDdiEnumVidPnCofuncModality 不得更改缩放 (旋转) 该路径的支持标志。