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

Windows 显示驱动程序模型 (WDDM) 1.2 及更高版本用户模式显示驱动程序必须使用内存套餐和回收功能(从Windows 8开始提供),以减少本地内存和系统内存中临时表面所需的内存开销。

最低 WDDM 版本:1.2

最低 Windows 版本:8

驱动程序实现 - 完整图形和仅呈现:必需

WHCK 要求和测试: Device.Graphics...OfferReclaim

特别是在移动方案中,需要硬件加速的图形密集型应用可能会大量使用 GPU 资源。 此外,在许多移动设备中,GPU 集成到 CPU 芯片集中,GPU 使用部分系统内存作为视频内存。 为了确保在多个应用大量使用 GPU 进而对系统内存提出大量需求时提供合理的系统性能,应尽量减少显示驱动程序的内存占用。 提供/回收设备驱动程序接口 (DDI) 提供执行此操作的机制。

1. 核心目标

减少内存开销:通过动态回收临时表面(Temporary Surfaces)的内存,优化 集成GPU(如移动设备)的 系统内存利用率。

适用场景:

  • GPU 共享系统内存(如 Intel HD Graphics、AMD APU、移动 SoC)。
  • 多应用高负载时避免内存耗尽导致的性能下降。

2. 关键机制

(1) 内存套餐(Offer)
作用:驱动程序标记不再需要的内存分配为“可回收”,允许 OS 临时将其分配给其他进程或系统使用。

触发条件:

  • 应用释放资源(如 Direct3D 纹理销毁)。
  • 驱动程序检测到闲置表面(如后台应用的交换链缓冲区)。

(2) 内存回收(Reclaim)
作用:当原始需求恢复时(如应用重新激活),驱动程序尝试收回之前“Offer”的内存。

可能结果:

  • 成功:内存内容可能保留(依赖 DXGI_RECLAIM_RESOURCE_FLAGS)
  • 失败:需重新分配内存并初始化(内容丢失)。

3. 驱动程序实现要求

 (1) 必需接口

DDI 函数描述
OfferResources标记资源为可回收(调用 DXGK_OFFER_ALLOCATION_LIST)。
ReclaimResources尝试收回资源(返回 DXGK_RECLAIM_RESULT 状态)。

(2) 数据结构
DXGKARGCB_OFFER_ALLOCATION:

包含要 Offer 的分配句柄列表及优先级(DXGK_OFFER_PRIORITY)。

DXGK_RECLAIM_ALLOCATION_LIST:

指定需回收的资源列表及回收标志(如 Discarded 状态)。

4. 用户模式驱动(UMD)与内核模式驱动(KMD)协作

  • UMD 触发 Offer:调用 IDXGIDevice2::OfferResources(Direct3D 11+)或 vkOfferResources(Vulkan)。
  • KMD 处理:通过 DxgkCbOfferAllocation 回调通知图形内核。
  • OS 决策:根据内存压力决定是否实际释放物理内存。
  • UMD 触发 Reclaim:调用 IDXGIDevice2::ReclaimResources。
  • KMD 验证:返回资源是否可重用(如 DXGK_RECLAIM_RESULT_OK)。

5. 优先级与策略

Offer 优先级(DXGK_OFFER_PRIORITY):

  1. Low:缓存数据(可优先回收)。
  2. Normal:常规资源。
  3. High:关键资源(尽量避免回收)。

回收策略:若 ReclaimResources 返回 DXGK_RECLAIM_RESULT_DISCARDED,UMD 需重建资源内容。

6. 代码示例(KMD 侧)

// Offer 资源处理(在 DxgkDdiOfferAllocations 中)
NTSTATUS DxgkDdiOfferAllocations(DXGKARG_OFFER_ALLOCATIONS* pOfferArgs
) {for (UINT i = 0; i < pOfferArgs->NumAllocations; i++) {DXGK_ALLOCATION_HANDLE hAlloc = pOfferArgs->pAllocationList[i];MarkAsOfferable(hAlloc, pOfferArgs->Priority);}return STATUS_SUCCESS;
}// Reclaim 资源处理(在 DxgkDdiReclaimAllocations 中)
NTSTATUS DxgkDdiReclaimAllocations(DXGKARG_RECLAIM_ALLOCATIONS* pReclaimArgs
) {for (UINT i = 0; i < pReclaimArgs->NumAllocations; i++) {if (IsResourceValid(pReclaimArgs->pAllocationList[i])) {pReclaimArgs->pResults[i] = DXGK_RECLAIM_RESULT_OK;} else {pReclaimArgs->pResults[i] = DXGK_RECLAIM_RESULT_DISCARDED;}}return STATUS_SUCCESS;
}

7. 应用层兼容性(DXGI 1.2+)

API 使用示例:

// Direct3D 11 应用示例
IDXGIDevice2* pDXGIDevice;
pD3DDevice->QueryInterface(IID_PPV_ARGS(&pDXGIDevice));
pDXGIDevice->OfferResources(1, &pTexture, DXGI_OFFER_RESOURCE_PRIORITY_NORMAL);
// ... 后续可能需要回收 ...
HRESULT hr = pDXGIDevice->ReclaimResources(1, &pTexture, &bDiscarded);

8. WHCK 测试要求

测试项:Device.Graphics.WDDM12.Render.OfferReclaim

验证点:

  • Offer 后内存压力缓解。
  • Reclaim 后资源功能正常。
  • 正确处理 DISCARDED 状态。

9. 性能与调试建议

日志记录:跟踪 Offer/Reclaim 调用频率及结果。

内存分析:使用 ETW 事件(如 Microsoft-Windows-DxgKrnl)监控内存回收效率。

Fallback 处理:确保资源回收失败时能优雅重建(如重新上传纹理数据)。

10. 总结

必要性:WDDM 1.2+ 驱动必须实现 Offer/Reclaim 以通过 WHQL 认证。

优势:显著降低集成 GPU 的内存占用,提升多任务性能。

注意:正确处理 DISCARDED 状态是健壮性关键。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/news/906607.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

什么是VR场景?VR与3D漫游到底有什么区别

在数字化时代&#xff0c;虚拟现实&#xff08;Virtual Reality, 简称VR&#xff09;场景与3D漫游作为两种前沿技术&#xff0c;改变着人们的生活方式和体验模式。通过计算机模拟真实或假想的场景&#xff0c;让用户仿佛身临其境&#xff0c;并能与虚拟环境进行互动。尽管VR场景…

JAVA查漏补缺(2)

AJAX 什么是Ajax Ajax&#xff08;Asynchronous Javascript And XML&#xff09;&#xff0c;即是异步的JavaScript和XML&#xff0c;Ajax其实就是浏览器与服务器之间的一种异步通信方式 异步的JavaScript 它可以异步地向服务器发送请求&#xff0c;在等待响应的过程中&…

客服中心大模型应用演进路线:从传统服务到超级智能助手的转型

客服中心作为企业与客户沟通的重要桥梁&#xff0c;近年来经历了从人工服务到人工智能驱动的深刻变革。本文基于"客服中心大模型应用演进路线图"&#xff0c;详细解析客服中心从传统模式向AI驱动智能服务的转型历程&#xff0c;剖析每个发展阶段的特点、应用场景及关…

使用 OpenCV 实现“随机镜面墙”——多镜片密铺的哈哈镜效果

1. 引言 “哈哈镜”是一种典型的图像变形效果&#xff0c;通过局部镜面反射产生扭曲的视觉趣味。在计算机视觉和图像处理领域&#xff0c;这类效果不仅有趣&#xff0c;还能用于艺术创作、交互装置、视觉特效等场景。 传统的“哈哈镜”往往是针对整张图像做某种镜像或扭曲变换…

Python训练营打卡——DAY33(2025.5.22)

目录 简单的神经网络 一、PyTorch的安装 二、准备工作 三、数据的准备 四、模型架构定义 五、模型训练&#xff08;CPU版本&#xff09; 1. 定义损失函数和优化器 2. 开始循环训练 3. 可视化结果 六、通俗解释 1. 环境安装&#xff08;相当于买锅碗瓢盆&#xff09;…

目标检测 Lite-DETR(2023)详细解读

文章目录 迭代高级特征跨尺度融合高效的低层次特征跨尺度融合KDA&#xff1a;Key-aware Deformable Attention 论文翻译&#xff1a; CVPR 2023 | Lite DETR&#xff1a;计算量减少60%&#xff01;高效交错多尺度编码器-CSDN博客 DINO团队的 &#xff08;Lightweight Transfo…

ES(Elasticsearch) 基本概念(一)

Elasticsearch作为当前最流行的开源搜索和分析引擎&#xff0c;广泛应用于日志分析、全文搜索、业务智能等领域。Elasticsearch是一个基于 Apache Lucene 构建的分布式搜索和分析引擎、可扩展数据存储和矢量数据库。它针对生产级工作负载的速度和相关性进行了优化。使用 Elasti…

当物联网“芯”闯入纳米世界:ESP32-S3驱动的原子力显微镜能走多远?

上次咱们把OV2640摄像头“盘”得明明白白&#xff0c;是不是感觉ESP32-S3这小东西潜力无限&#xff1f;今天&#xff0c;咱们玩个更刺激的&#xff0c;一个听起来就让人肾上腺素飙升的挑战——尝试用ESP32-S3这颗“智慧芯”&#xff0c;去捅一捅科学界的“马蜂窝”&#xff0c;…

Excel合并单元格后,如何自动批量生成序号列

1.选择整列 2.组合键&#xff1a;CtrlG 3.定位条件&#xff0c;选择“空值” 4.在第一个框中输入“MAX(”&#xff0c;鼠标选中A1框&#xff0c;后加“&#xff1a;”&#xff0c;鼠标选中前方“A1”&#xff0c;按“F4”绝对引用&#xff0c;补全右括号&#xff0c;后输入“1…

TDengine 运维—容量规划

概述 若计划使用 TDengine 搭建一个时序数据平台&#xff0c;须提前对计算资源、存储资源和网络资源进行详细规划&#xff0c;以确保满足业务场景的需求。通常 TDengine 会运行多个进程&#xff0c;包括 taosd、taosadapter、taoskeeper、taos-explorer 和 taosx。 在这些进程…

Axure设计数字乡村可视化大屏:从布局到交互的实战经验分享

乡村治理正从传统模式向“数据驱动”转型。数字乡村可视化大屏作为数据展示的核心载体&#xff0c;不仅能直观呈现乡村发展全貌&#xff0c;还能为决策提供科学依据。本文以Axure为工具&#xff0c;结合实际案例&#xff0c;分享如何从零设计一个功能完备、交互流畅的数字乡村大…

从零基础到最佳实践:Vue.js 系列(1/10):《环境搭建与基础概念》

Vue.js 环境搭建与基础概念 关键点 Vue.js 是一个简单易用的前端框架&#xff0c;适合初学者快速上手。搭建开发环境需要安装 Node.js 和 npm/Yarn&#xff0c;推荐使用最新 LTS 版本。Vue CLI 是官方工具&#xff0c;可快速创建项目并提供开发服务器。Vue.js 基于 MVVM 模式&…

使用docker compose部署dify(大模型开发使用平台)

Dify是一款生成式 AI 应用中间件&#xff0c;面向有私有部署与数据合规需求的企业用户&#xff0c;推动企业向 AI 时代转型。平台支持无代码构建&#xff0c;业务人员即可快速搭建与调试 AI 应用&#xff0c;显著降低开发门槛。 参考 https://docs.dify.ai/zh-hans/getting-s…

npm 安装时 SSL 证书过期问题笔记

问题描述: npm error code CERT_HAS_EXPIRED npm error errno CERT_HAS_EXPIRED npm error request to https://registry.npm.taobao.org/axios failed, reason: certificate has expired 这表明当前配置的 npm 镜像源&#xff08;淘宝镜像 https://registry.npm.taobao.org&…

力扣HOT100之二叉树: 236. 二叉树的最近公共祖先

果然&#xff0c;这道题二刷还是不会做&#xff0c;回去看卡尔视频了。结合灵神的题解&#xff0c;我对这道题有了一些新的理解。 首先这道题还是用递归来做&#xff0c;由于我们需要计算两个节点的最近公共祖先&#xff0c;一定是从下往上来遍历&#xff0c;只有先判断左右子树…

Word 转 HTML API 接口

Word 转 HTML API 接口 图像/转换 Word 文档转换为 HTML 文件转换 / 超高精度与还原度 文件转换 / Word。 1. 产品功能 超高精度与还原度的 HTML 文件转换&#xff1b;支持将 Word 文档转换为 HTML 格式&#xff1b;支持 .doc 和 .docx 格式&#xff1b;保持原始 Word 文档的…

idea 安装飞算-javaAI 插件使用

文章目录 前言idea 安装飞算-javaAI 插件使用1. 介绍一下飞算-AI2. 安装使用 前言 如果您觉得有用的话&#xff0c;记得给博主点个赞&#xff0c;评论&#xff0c;收藏一键三连啊&#xff0c;写作不易啊^ _ ^。   而且听说点赞的人每天的运气都不会太差&#xff0c;实在白嫖的…

Bert预训练任务-MLM/NSP

MLM MLM:Masked Language Mode:在每一个训练序列中以15%的概率随机地选中某个token进行MASK,当一个token被选中后&#xff0c;有以下三种处理方式&#xff1a; 80%的概率被[MASK]&#xff0c;如my dog is hairy->my dog is [MASK]10%的概率修改为随机的其他token,如my dog …

浏览器原生 Web Crypto API 实现 SHA256 Hash 加密

写在前面 在我上一篇文章 《node 后端和浏览器前端&#xff0c;有关 RSA 非对称加密的完整实践&#xff0c; 前后端匹配的代码演示》 中&#xff0c;我们使用 浏览器原生 Web Crypto API 实现了 RSA 的加密算法。 但是&#xff0c;在我之前的 《我设计的一个安全的 web 系统用…

5G 网络寻呼的信令及 IE 信息分析

一、寻呼信令的触发背景 在 5G 网络中,当网络侧有下行数据要发送给处于空闲态(RRC_IDLE)或非激活态(RRC_INACTIVE)的用户设备(UE)时,就会触发寻呼流程。这是因为在这些状态下,UE 与网络之间没有建立持续的无线资源控制(RRC)连接,网络需要通过寻呼机制来通知 UE 有…