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

Windows 图形显示驱动开发-WDDM 1.2功能—Windows 8 中的 DirectX 功能改进(四)

一、无覆盖和放弃 

在基于磁贴的延迟呈现 (TBDR) 体系结构上呈现内容:
Direct3D 11.1 中的呈现目标现在可以使用一组新的资源 API 来支持放弃行为。 开发人员必须了解此功能,并调用额外的 Discard () 方法,以在 TBDR 体系结构 (更高效地运行,不会对传统图形硬件) 造成任何损失。 这将提高移动平台和使用平铺呈现器的其他受电源限制的设备的性能。

1.1 现代GPU架构演变

graph LRA[传统IMR架构] -->|功耗瓶颈| B[TBDR架构]B --> C[PowerVR Series]B --> D[ARM Mali]B --> E[Adreno]

1.2 关键工作流程对比

阶段IMR架构TBDR架构
几何处理立即提交分块缓存
光栅化全屏扫描分块执行
像素着色无序执行按块优化

二 、放弃(Discard)API详解

2.1 核心接口增强

阶段	IMR架构	TBDR架构
几何处理	立即提交	分块缓存
光栅化	全屏扫描	分块执行
像素着色	无序执行	按块优化

2.2 内存优化机制

graph TBA[应用调用Discard] --> B[驱动标记内存块]B --> C{是否TBDR架构?}C -->|是| D[释放片上缓存]C -->|否| E[无操作]

三、移动平台专项优化

3.1 能效提升数据

场景功耗降低帧率提升
UI渲染22%15%
2D游戏18%12%
网页浏览25%9%

3.2 最佳实践指南

// 每帧结束前调用
void EndFrame() {pContext1->DiscardView(pRTV);pContext1->DiscardView(pDSV);if (pUAView) pContext1->DiscardView(pUAView);
}

四、开发者适配方案

4.1 兼容性检查流程

graph TDA[创建设备] --> B[查询D3D11_FEATURE_DATA_ARCHITECTURE_INFO]B --> C{IsTileBasedDeferredRenderer?}C -->|是| D[启用Discard优化]C -->|否| E[保持传统路径]

4.2 多平台代码示例

#if defined(WINAPI_FAMILY) && (WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP)#define USE_TBDR_OPTIMIZATION 1
#else#define USE_TBDR_OPTIMIZATION 0
#endifvoid Present() {if(USE_TBDR_OPTIMIZATION) {pContext1->DiscardView(pRTV);}pSwapChain->Present(1, 0);
}

五、性能诊断工具

5.1 PIX for Windows分析

# 捕获Discard调用
PIXCapture -discard -file tdr_capture.wpix

5.2 功耗监测指标

计数器TBDR优化值传统架构基准
GPU功耗(mW)12001800
显存带宽(GB/s)8.512.2
帧延迟(ms)1622

六、更新 TBDR 体系结构上的资源


由于 TBDR 体系结构通过同一命令缓冲区完成多次传递,因此,在上一次绘制调用期间未修改子资源的一部分时,必须特别小心地通知驱动程序。 在 Direct3DUpdateSubResource 函数上拥有NO_OVERWRITE用法可帮助驱动程序管理以前未对纹理区域进行绘制调用的资源。 这只需告知驱动程序应用程序放弃现有数据或防止其覆盖的意图。 这样就可以更高效地在 TBDR 体系结构上呈现,并且不会在传统桌面硬件上运行它时产生任何处罚。

Direct3D 11 UpdateSubresource () 和 CopySubresourceRegions API 的新变体都更新了 GPU 图面的一部分,提供了一个可在其中指定NO_OVERWRITE或 DISCARD 的附加标志字段。

这些 API 驱动 Direct3D 11.1 设备驱动程序接口 (DDI) 和 Direct3D 9 DDI。 任何 DirectX 9 以上硬件的新驱动程序都需要通过添加此处讨论的标志来支持修改后的 BLT、BUFBLT、VOLBLT 和 TEXBLT DDI。

对于具有 Direct3D 11.1 驱动程序的所有 Direct3D 10+ 硬件,还需要支持这些硬件。

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

相关文章:

  • Linux之 grep、find、ls、wc 命令
  • Sentinel源码—4.FlowSlot实现流控的原理二
  • 【NLP 64、基于LLM的垂直领域【特定领域】问答方案】
  • kotlin + spirngboot3 + spring security6 配置登录与JWT
  • 【安卓开发】【Android Studio】Menu(菜单栏)的使用及常见问题
  • 【HDFS入门】HDFS与Hadoop生态的深度集成:与YARN、MapReduce和Hive的协同工作原理
  • 观察者设计模式详解:解耦通知机制的利器
  • 16-算法打卡-哈希表-两个数组的交集-leetcode(349)-第十六天
  • Flutter 常用命令
  • Qt GUI 库总结
  • gitee新的仓库,Vscode创建新的分支详细步骤
  • Python 实现日志备份守护进程
  • MCP理解笔记及deepseek使用MCP案例介绍
  • 每日算法-链表(23.合并k个升序链表、25.k个一组翻转链表)
  • Java 开发玩转 MCP:从 Claude 自动化到 Spring AI Alibaba 生态整合
  • pycharm无法识别到本地python的conda环境解决方法
  • 【远程管理绿联NAS】家庭云存储无公网IP解决方案:绿联NAS安装内网穿透
  • 数字孪生城市技术应用典型实践案例汇编(22个典型案例)(附下载)
  • 20.3 使用技巧3
  • Openfein实现远程调用的方法(实操)
  • 【音视频开发】第五章 FFmpeg基础
  • 最新Spring Security实战教程(十一)CSRF攻防实战 - 从原理到防护的最佳实践
  • 逻辑回归 (Logistic Regression)
  • 山东大学软件学院创新项目实训开发日志(18)之对话自动生成标题设为用户第一次对话发的文字
  • 第五章 SQLite数据库:3、SQLite 常用语法及使用案例
  • requestAnimationFrame 深度理解
  • AI在多Agent协同领域的核心概念、技术方法、应用场景及挑战 的详细解析
  • 【OSCP-vulnhub】GoldenEye
  • 【秣厉科技】LabVIEW工具包——OpenCV 教程(20):拾遗 - imgproc 基础操作(下)
  • Linux 防火墙( iptables )