当前位置: 首页 > news >正文

window 显示驱动开发-视频内存供应和回收(三)

硬件认证要求
有关硬件设备在实现此功能时必须满足的要求的信息,请参阅 Device.Graphics... 上的相关 WHCK 文档。OfferReclaim。 请注意,这些要求列出了驱动程序必须提供分配的方案。

​1. WHCK 测试核心要求

Windows Hardware Compatibility Kit (WHCK) 对 Offer/Reclaim 功能的认证测试集中在以下关键领域:
(测试项:Device.Graphics.WDDM12.Render.OfferReclaim)

测试类别具体要求验证方法
基本功能驱动程序必须正确实现 OfferResources 和 ReclaimResources DDI。验证驱动能响应 OS 的 Offer/Reclaim 请求,并返回正确的状态码(如 DISCARDED)。
内存释放Offer 后,GPU 内存应能被系统重新分配。监控内存压力场景下 Offer 操作的实际内存释放效果。
数据一致性若 Reclaim 返回 OK,资源内容必须保留;若返回 DISCARDED,驱动需重建资源。注入强制丢弃测试,检查应用是否能正确恢复渲染。
优先级处理高优先级资源(如交换链缓冲区)应避免被回收。测试不同 D3DDDI_OFFER_PRIORITY 级别的资源回收策略。
多线程安全Offer/Reclaim 操作需与其他渲染命令线程安全。并发执行资源提交、Offer 和 Reclaim 操作,检查竞态条件。

2. 驱动程序必须支持的场景

根据 WHCK 文档,驱动需在以下场景触发 Offer/Reclaim:

应用显式请求:Direct3D 应用调用 IDXGIDevice2::OfferResources/ReclaimResources。

系统内存压力:OS 在低内存时自动请求驱动释放非活跃资源。

后台应用:最小化或非焦点窗口的交换链缓冲区应被 Offer。

3. 认证关键检查点

检查项合规性标准失败后果
Offer 后资源可释放驱动必须允许 OS 回收内存物理页。内存泄漏或认证失败。
Reclaim 状态处理正确处理 DISCARDED 并重建资源。渲染错误或应用崩溃。
优先级尊重高优先级资源(如 D3DDDI_OFFER_PRIORITY_HIGH)不被过早回收。前台应用性能下降。
无内存损坏Offer/Reclaim 后,其他未回收资源必须保持可用。系统蓝屏或图形损坏。

4. 实现示例(合规性关键代码)

(1) 内核模式驱动(KMD)正确处理 Reclaim

NTSTATUS DxgkDdiReclaimAllocations(DXGKARG_RECLAIM_ALLOCATIONS* pReclaim) {for (UINT i = 0; i < pReclaim->NumAllocations; i++) {if (IsResourceInUse(pReclaim->pAllocations[i])) {// 资源仍被占用,拒绝回收pReclaim->pResults[i] = DXGK_RECLAIM_RESULT_BUSY;} else if (IsResourceContentLost(pReclaim->pAllocations[i])) {// 内容已丢失,需应用重建pReclaim->pResults[i] = DXGK_RECLAIM_RESULT_DISCARDED;} else {// 成功回收pReclaim->pResults[i] = DXGK_RECLAIM_RESULT_OK;}}return STATUS_SUCCESS;
}


(2) 用户模式驱动(UMD)处理 DISCARDED 状态

HRESULT YourReclaimResourcesHandler(DXGI_DDI_ARG_RECLAIMRESOURCES* pArgs
) {for (UINT i = 0; i < pArgs->NumResources; i++) {if (pArgs->pDiscarded[i]) {RebuildTexture(pArgs->phResources[i]); // 重建纹理数据}}return S_OK;
}

5. 调试与认证准备建议

使用 WPA (Windows Performance Analyzer):分析 Microsoft-Windows-DxgKrnl ETW 事件,检查 Offer/Reclaim 调用的时间和频率。

WHCK 测试工具:运行 DXGKRNL_TEST 中的 OfferReclaim 压力测试(如强制内存压力模拟)。

日志记录:在驱动中记录 Offer/Reclaim 操作的资源句柄和结果,便于问题追踪。

6. 常见认证失败原因

问题修复建议
Offer 后内存未释放检查驱动是否正确解除 GPU 页表映射。
Reclaim 返回错误状态确保资源状态机正确跟踪(如 BUSY/DISCARDED)。
多线程竞争导致崩溃使用同步锁(如 KeAcquireSpinLock)保护资源列表。

7. 总结

强制要求:WDDM 1.2+ 驱动必须通过 WHCK OfferReclaim 测试以获得认证。

核心挑战:平衡内存释放和性能,确保关键资源不被过度回收。

工具链依赖:ETW、WHCK 测试工具和内核调试器是调试必备。

http://www.xdnf.cn/news/609643.html

相关文章:

  • STM32F103_Bootloader程序开发01 - 什么是IAP?跟OTA有什么关系?
  • 关于 Web 风险点原理与利用:6. 逻辑风险点
  • 跨平台三维可视化与图形库.VTK图形库.
  • CATIA高效工作指南——常规配置篇(三)
  • SAP在化工行业的数字化转型:无锡哲讯科技的赋能实践
  • 微气象在线监测装置:精准感知环境变化的科技之眼
  • win32相关(句柄表)
  • 【Mini-F5265-OB开发板试用测评】2、关于platform.c中的串口号初始化修改的建议
  • GO语言学习(九)
  • Flask项目打开总是上一个项目的网页
  • 短视频与直播场景下的美颜SDK优化方案:滤镜与特效如何平衡性能与美感?
  • 精益数据分析(80/126):病毒式传播系数实战计算与增长策略优化
  • 中电金信X中远海科推出“银航宝”解决方案,共绘航运金融新图景
  • Python Scikit-Learn核心流程
  • Vue3中的TSX:用函数式思维构建现代组件的实践指南
  • 基于vite构建的vue项目添加路由时注意要利用import.meta.glob映射构建生成后的路径
  • 计算机网络学习(三)——HTTP
  • 详解Mysql的快照读和当前读区别
  • 基于BERT预训练模型(bert_base_chinese)训练中文文本分类任务(AI老师协助编程)
  • 25年上半年五月之软考之设计模式
  • Linux基本指令(二)
  • 【Linux】基础开发工具(下)
  • Android正则表达式
  • Android中ServiceManager与Binder驱动的关系
  • java 进阶 1.0.3
  • 使用 Elasticsearch 和 Red Hat OpenShift AI 提升工作流程效率
  • C#日期和时间:DateTime转字符串全面指南
  • leetcode513.找树左下角的值:递归深度优先搜索中的最左节点追踪之道
  • Typescript学习教程,从入门到精通,TypeScript 集合类型语法知识点及案例代码(11)
  • 前缀和数组一文详解