欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 美食 > Windows 图形显示驱动开发-WDDM 3.0功能- 硬件翻转队列(二)

Windows 图形显示驱动开发-WDDM 3.0功能- 硬件翻转队列(二)

2025/3/19 6:44:36 来源:https://blog.csdn.net/m0_72813396/article/details/146122473  浏览:    关键词:Windows 图形显示驱动开发-WDDM 3.0功能- 硬件翻转队列(二)

DDI 支持

添加了以下 DDI 以支持硬件翻转队列功能。

检查功能可用性

硬件翻转队列需要 OS 启用/禁用协商。 支持硬件翻转队列的 KMD 必须在设备启动期间首先调用DXGKCB_QUERYFEATURESUPPORT,其中 FeatureId 为 DXGK_FEATURE_HWFLIPQUEUE,以确定 OS 是否允许启用硬件翻转队列。

仅当回调成功且启用设置为 TRUE 时,才能使用硬件翻转队列。

KMD 可以在硬件翻转队列启动和试验阶段使用以下示例代码。

DXGKARGCB_QUERYFEATURESUPPORT HwFlipQueueEnabledArgs = {};
HwFlipQueueEnabledArgs.DeviceHandle = DeviceHandle;
HwFlipQueueEnabledArgs.FeatureId = DXGK_FEATURE_HWFLIPQUEUE;
HwFlipQueueEnabledArgs.DriverSupportState = DXGK_FEATURE_SUPPORT_EXPERIMENTAL;if (!NT_SUCCESS(pDxgkInterface->DxgkCbQueryFeatureSupport(&HwFlipQueueEnabledArgs)) ||!HwFlipQueueEnabledArgs.Enabled)
{// Disable hardware flip queue because the OS didn't allow it.           
}
else
{// Enable hardware flip queue because the OS allowed it.
}

在驱动程序启动期间,即使可以在不启用 GPU 硬件调度的情况下启用硬件翻转队列,这种组合也不被官方支持。 Windows 目前需要启用 GPU 硬件计划,以便在正式发布的驱动程序上启用基本硬件翻转队列。

指示硬件队列功能

MaxHwQueuedFlips 已添加到 DXGK_DRIVERCAPS,以指示硬件翻转队列支持。 如果 OS 允许的硬件翻转队列支持,则支持硬件翻转队列的 KMD 应将 MaxHwQueuedFlips 设置为大于 1 的值。 当 MaxHwQueuedFlips 大于 1 时,KMD 指示显示硬件最多支持 MaxHwQueuedFlips 个未来帧,这些帧可以在 GPU 上为给定的 VidPnSource 排队显示。 OS 遵循驱动程序提供的限制,这些翻转类型可以提前排队。

HwQueuedFlipCaps 也添加到 DXGK_DRIVERCAPS。 此成员当前保留供系统使用;驱动程序不应使用它。

翻转目标时间和目标时间戳格式

当 OS 向硬件翻转队列提交翻转请求时,它还会发送目标翻转时间。 在达到目标翻转时间后,用户可以看到翻转。

OS 使用从 KeQueryPerformanceCounter 获取的 CPU 时钟计数器单元传递目标帧时间并解释实际帧时间。

提交排队翻转

传递给 KMD 的 DxgkDdiSetVidPnSourceAddressWithMultiPlaneOverlay3 回调函数的 DXGKARG_SETVIDPNSOURCEADDRESSWITHMULTIPLANEOVERLAY3 结构被修改如下,以允许提交排队翻转:

  • 以下三个成员被添加到 OutputFlags 的 DXGK_SETVIDPNSOURCEADDRESS_OUTPUT_FLAGS 结构中。( 有关这些成员的详细信息,请参阅DxgkDdiSetVidPnSourceAddressWithMultiPlaneOverlay3 重试和失败案例。)
  1.  HwFlipQueueDrainNeeded
  2. HwFlipQueueDrainAllPlanes
  3. HwFlipQueueDrainAllSources
  • 添加了 TargetFlipTime 成员。 TargetFlipTime 描述以 QPC 为单位的目标翻转时间。 当时钟达到这个值时,帧可以被发送到显示器,同时遵循 VSync 和撕裂标志。 如果存在以前排队的挂起翻转,OS 保证对于翻转请求引用的每个 MPO 平面, TargetFlipTime 大于或等于此平面的任何挂起翻转目标时间。 换言之,可以有一系列时间戳相同或不断增加的翻转,但不可能有一个时间戳倒退的序列。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词