当前位置: 首页 > 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 测试工具和内核调试器是调试必备。

相关文章:

  • 3D个人简历网站 7.联系我
  • LVGL(lv_textarea文本框控件)
  • feign调用指定服务ip端口
  • 【Linux部署Java服务的那些事】
  • C++之STL--string
  • TCP实现双向通信练习题
  • 人工智能在智能教育中的创新应用与未来展望
  • 【C++模板与泛型编程】模板特化
  • 论文Review 地面分割 GroundGrid
  • KEPServerEX MQTT使用
  • 【Linux】基础开发工具(下)
  • Sa-Token登录权限认证
  • Flume之选择器:复制和多路复用(比喻化理解
  • 频湖脉决全文
  • 科技成果鉴定测试怎么进行?进行鉴定测试有什么好处
  • Java对象内存分配优化教学
  • Python图形化秒表:使用Turtle打造精确计时工具
  • redis 缓存穿透,缓存雪崩,缓存击穿
  • 数字FPGA开发方向,该如何做好职业规划?
  • POI模板生成EXCEL 64000 style in a .xlsx Workbook
  • 网站建设基本流程是什么/爱站网 关键词挖掘工具站
  • 2024年重大新闻摘抄/六年级下册数学优化设计答案
  • 网站建设都包括什么科目/百度seo排名优化公司哪家好
  • 网站说服力营销型网站策划/推广普通话文字素材
  • 企业宣传网站怎么做/注册城乡规划师好考吗
  • 网站 app 共同架构/广告公司网上接单平台