DX9与硬件加速API简介

发布时间:2026/11/4 1:33:37

DX9与硬件加速API简介 参考DirectX 图形文章DXGIDirect3D 入门Direct3D 12 图形Direct3D 11 图形Direct3D 10 图形Direct3D 9 参考DirectX 图形和游戏Microsoft媒体基础window 显示驱动开发-视频内存管理和 GPU 计划Microsoft媒体基础DirectX 视频加速 2.0DXVA 视频处理mediafoundation应用实例(win7Samples/multimedia/mediafoundation目录下)显示和图形Windows 中的图形 APIDirectX API 背景简单介绍DX9DirectX 第 9 版于 2002 年首次面向 Windows 发布随后于 2003 年和 2004 年进行了更新。 此 API 代表了 DirectX 技术十年来的演变为 Direct3D 引入了更强大的着色器编程模型并在成千上万款产品的支持下日臻成熟。 Direct3D 9 是 Windows Vista 的主要图形接口。 对于编写需要在各种现有硬件和 Windows 版本上运行的 3D 游戏和应用程序来说它仍然是理想的 API。 使用 Direct3D 9 接口的应用程序无法看到新驱动程序模型的细节但在后台操作系统会充分利用新功能来提供真正的 GPU 多任务处理、更高效的资源管理和强大的性能。为了确保与旧版本的 Windows 完全兼容旧驱动程序模型的一些怪异之处必须在新的 Windows Vista 显示驱动程序模型中加以模拟。 例如当全屏应用程序失去焦点时它必须假定已经丢失了显存 (VRAM) 中的所有资源并将其作为非托管资源重新加载尽管新的驱动程序模型可以透明地处理这些资源而不会将其从设备上下文中驱逐出去。 即使是托管资源类型与默认资源类型的概念也是旧驱动程序模型所特有的。 另一个例子是尽管新的驱动程序模型可以提供几乎无限量的虚拟显存但当分配的非托管默认池资源超过可用的 VRAM 数量时预计会出现故障。 由于这些要求在 Windows Vista 上运行的 Direct3D 应用程序仍会收到这些错误条件。 因此它们在使用基本的 Direct3D 9 接口以充分利用新驱动程序模型的某些功能方面受到了限制。虽然 Windows Vista 的新系统将包括带有 WDDM 驱动程序的显卡而且也包含了一些常用显卡的新驱动程序但 Windows Vista 仍支持在升级版和企业版中使用旧的 XPDM 驱动程序。 在使用旧驱动程序模型的系统上必须使用 Direct3D 9 和更旧的接口图形系统的操作与 Windows XP 非常相似。 应用程序需要 WDDM 才能使用 Direct3D 9Ex、Direct3D 10 和更高版本。DX9EXDirect3D 9Ex 接口提供了对标准 Direct3D 9 应用程序接口的轻微扩展它公开了虚拟化资源分配、新的丢失设备语义以及在 Windows Vista 上运行时可用的其他一些新功能。 通过创建该扩展对象Direct3D 9 API 使用了新的语义因此要求应用程序使用不同的逻辑因此也是不同的代码路径来创建、管理资源并针对新的情况处理错误。 此 API 仅适用于 Windows Vista并且需要使用 WDDM 驱动程序。 由于 Direct3D 9Ex 使用与 Direct3D 9 不同的 API 和驱动程序代码路径因此支持该 API 需要对应用程序进行额外的测试。创建新的 Direct3D 9Ex API 的主要原因是在保持现有 Direct3D 应用程序兼容性的同时允许完全访问 WDDM 的新功能。 新的 3D 桌面和许多特定于 Windows Vista 的应用程序都使用了这一版本的 Direct3D 9但它们在旧的 XPDM 驱动程序上运行时无法正常工作。 由于缺乏对 WDDM 的支持Direct3D 9Ex API 将永远不会出现在旧版本的 Windows 系统上因此标准 Direct3D 9 接口涵盖的系统范围要广得多。 对于能够利用下一代视频硬件的高性能应用程序来说全新的 Direct3D 10 版本提供了许多 Direct3D 9Ex 未提供的新功能。 因此对于游戏和大多数其他应用程序建议使用 Direct3D 9 或 Direct3D 10 API。DX10为了充分发挥新的 Windows Vista 驱动程序模型和下一代硬件的潜力我们创建了全新版本的 Direct3D API。 WDDM 消除了现有图形系统中对性能的一些限制而 Direct3D 10 则更进一步消除了现有 Direct3D API 中的设计瓶颈并大大简化了 GPU 的编程任务。除少数固定功能外新的 API 完全取消了其他所有功能取而代之的是可编程结构大大简化了内部实现。 Direct3D 以前版本中的数百个功能位已被完全取消取而代之的是一套定义明确、包含丰富功能的软件其中只有少数几种特定资源格式的可选使用场景。 在新的 API 中CPU 密集型资源的创建和验证现在有了明确的语义。 这使得性能行为的可预测性大大提高并大大减少了每次绘制的开销。 资源可以重新配置为多种形式以便在不同阶段高效使用而且功能集对格式使用场景的限制要少得多。 此外还有新的块压缩法线贴图纹理格式。在新的 API 中着色器常量和设备状态都是显式资源可以在硬件上实现更高效的缓存并大大简化驱动程序验证。 可编程着色器模型已在顶点和像素着色器中实现统一并通过定义明确的计算模型和运算符集使其更具表现力。 此外还新增了几何着色器阶段可在顶点着色器阶段之后对基元进行操作。 GPU 在顶点和几何着色器阶段的工作结果可以流式传输到视频 RAM 中重复使用从而可以在 CPU 互动最少的情况下进行极其复杂的多通道 GPU 交互。所有这些增强功能都支持下一代图形技术并扩展了应用程序将工作卸载到 GPU 的能力。 通过卸载可以实现更复杂的基于 GPU 的角色皮肤绘制、加速变形技术、阴影体积生成和挤出、完全基于 GPU 的粒子和物理系统、将更复杂的材质组合成高效的大型绘制批次、程序化细部处理、实时光线追踪位移贴图、单通道立方体贴图生成以及更多技术同时释放 CPU 资源用于更复杂的应用。为了在 Direct3D 10 中提供这种级别的创新旧硬件不能作为新接口的部分实现。 显卡要么能支持所有新功能要么就不是支持 Direct3D 10 的显卡。 因此Direct3D 9 可以驱动 DirectX7 时代的硬件但存在许多功能缺失和使用限制而 Direct3D 10 只能在新一代显卡上运行。 应用程序要支持旧版视频硬件还必须支持 Direct3D 9 接口。 Direct3D 的未来版本将以第 10 版为基础将其扩展到新版本的应用程序接口同时确保 Direct3D 10 功能的严格超集。Direct3D 10.1Windows Vista Service Pack 1 通过 Direct3D 10.1 扩展了 Direct3D 10 API增加了可选接口和额外的着色器模型以支持适用于 Direct3D 10.1 的显卡的新硬件功能。 所有能够支持 Direct3D 10.1 的硬件也完全支持 Direct3D 10 的所有功能游戏开发人员可以在 Direct3D 10.1 提供额外功能时加以利用。Direct3D 11Windows 7 支持基于 Direct3D 10.1 API 设计而构建的新版 Direct3D即 Direct3D 11。 API 的新功能包括多线程呈现和资源创建、计算着色器、支持 10level9 功能级别和 WARP10 软件呈现设备以及新的 Direct3D 11 类硬件功能如使用外壳 域着色器的分割、BC6H 和 BC7 纹理压缩格式、着色器模型 5.0 和动态着色器链接。 新的 API 可以使用现有的 Direct3D 10 和 10.1 级显卡、某些支持有限功能的 10level9 功能级别的 Direct3D 9 显卡以及最新一代的 Direct3D 11 级显卡。除了 Direct3D 11 API 之外Windows 7 还包括 DXGI 1.1、Direct2D、DirectWrite 和对 WDDM 1.1 驱动程序的支持。Direct3D 11.1Windows 8 通过 Direct3D 11.1 扩展了 Direct3D 11 API。 Direct3D 11.1 支持功能级别 11、10_x 和 9_x 的所有现有硬件以及新的 11_1 功能级别。除了 Direct3D 11.1 API 之外Windows 8 还包括 DXGI 1.2、Direct2D 设备上下文以及对 WDDM 1.2 驱动程序的支持。Direct3D 11 On 12Direct3D 11 on 12开发人员可以通过 D3D11On12 机制使用 D3D11 接口和对象来驱动 D3D12 API。 借助 D3D11on12使用 D3D11 编写的组件如 D2D 文本和 UI可与针对 D3D12 API 编写的组件配合工作。 D3D11on12 还可以实现应用程序从 D3D11 到 D3D12 的增量移植它可让应用的某些组成部分继续针对 D3D11 以简化操作同时让其他某些组成部分针对 D3D12 以保证性能并始终提供完整且准确的渲染效果。 使用 D3D11On12 比使用互操作技术在两个 API 之间共享资源和同步工作更为简单。使用D3D11.lib库。Direct3D 11on12 API 可帮助你以增量方式将代码从 D3D11 移植到 D3D12。D3D9On12D3D9On12是一个神奇的映射层它将Direct3D 9简称D3D9的图形命令转换为Direct3D 12简称D3D12。这不是一个简单的D3D9 API实现替换而是一个对D3D9用户模式DDI设备驱动接口的实现。这意味着它不是一个名为d3d9.dll的二进制文件而是称为d3d9on12.dll的库。通过调用Direct3DCreate9On12和Direct3DCreate9On12Ex函数应用可以选择创建一个D3D9On12设备而不是传统的D3D9设备。一旦加载了d3d9on12.dll当应用程序调用渲染命令时D3D9会验证这些命令然后将其转换为D3D9 DDI再发送给D3D9On12。D3D9On12会将这些命令转化为D3D12 API调用并由D3D12运行时进一步验证包括可能启用的D3D12调试层最终传递给D3D12驱动。通过将DX9的图形命令发送至D3D9On12层进行转换而非直接发送至D3D9图形驱动程序实现了一种间接的通信方式。当D3D9On12层从D3D9 API接收命令后会将这些命令全部转换为D3D12 API调用从而完成转换过程。这意味着D3D9On12在功能上将扮演一个GPU驱动程序的角色。DXGI在为图形应用程序选择 API 时请考虑以下建议API的选择建议如果应用程序必须支持 Windows XP 或更早版本的 Windows请使用 Direct3D 9。如果要支持使用 XPDM 驱动程序运行的 Windows Vista 或 Windows 7请使用 Direct3D 9。 对于缺乏 Direct3D 10 或更好视频硬件的 Windows Vista 或 Windows 7 系统可以选择使用现有的 Windows XP Direct3D 9 代码路径或者通过 Direct3D 10.1 或 Direct3D 11 API 使用 10level9 功能级别。在 Windows Vista、Windows 7 和 Windows 8 上使用 Direct3D 11充分利用新一代视频硬件的优势。 Windows 商店应用必须使用 Direct3D 11 或更高版本。DirectX 库文件文件说明d3dx10.dll/d3dx10d.dll零售和调试 D3DX10 组件;零售组件可以在 REDIST CAB 中重新分发。d3d10ref.dll参考光栅器。 提供图形管道的软件实现。 仅作为 Windows SDK 或旧版 DirectX SDK 的一部分包含在内不能重新分发。 参考光栅器仅用于调试。 不需要显式链接;尝试创建引用设备 (请参阅 D3D10CreateDevice) 将加载此 dll如果存在。d3d10sdklayers.dll一系列 SDK 实用工具充当 API 调用与运行时执行之间的层包括 调试层 和切换到引用层。 不需要显式链接;如果使用相应的层标志创建设备则会自动加载此 DLL。 此组件仅用于开发和调试目的。 仅作为 Windows SDK 或旧版 DirectX SDK 的一部分包含在内不能重新分发。DirectX API接口以DX9为例其他版本API可以参考相关链接DX9当需要使用DX9接口时需要Direct3DCreate9函数创建接口IDirect3D9指针IDirect3D9 * Direct3DCreate9( UINT SDKVersion );当需要使用DX9EX接口时需要Direct3DCreate9EX函数创建接口IDirect3D9Ex指针HRESULT Direct3DCreate9Ex( [in] UINT SDKVersion, [out] IDirect3D9Ex **unnamedParam2 );通过IDirect3D9接口和IDirect3D9Ex接口的CreateDevice和CreateDeviceEx函数可以创建相对于的Device设备IDirect3DDevice9和IDirect3DDevice9EX设备。通过相关的设备创建相关的特性和buffer等对象如Buffer,Texture对象…其他API不再列举。IDirect3D9Ex和IDirect3D9接口DirectXVA硬件加速DirectX 视频加速DXVA是一个 API 和相应的 DDI用于使用硬件加速来加速视频编解码器处理。 软件编解码器和软件视频处理器可以使用 DXVA 将某些 CPU 密集型作卸载到 GPU。 例如软件解码器可以将反向余弦转换iDCT卸载到 GPU。具体使用流程参考DXVA 视频处理图形硬件可以使用图形处理单元GPU来处理未压缩的视频图像。 视频处理设备是封装这些功能的软件组件。 应用程序可以使用视频处理设备来执行以下功能反交错和反转电视将视频子流混合到主视频图像上颜色调整ProcAmp和图像筛选图像缩放颜色空间转换Alpha 混合DXVA APIDXVA中的相关接口其中视频后处理的相关接口如下在使用 DXVA 视频处理之前应用程序必须创建视频处理设备。 下面是本部分其余部分更详细地介绍的步骤的简要概述获取指向 IDirectXVideoProcessorService 接口的指针。为主要视频流创建视频格式的说明。 使用此说明获取支持视频格式的视频处理设备的列表。 设备由 GUID 标识。对于特定设备获取设备支持的呈现目标格式列表。 格式以 D3DFORMAT 值列表的形式返回。 如果计划混合子流也获取支持的子流格式的列表。查询每个设备的功能。创建视频处理设备。从Direct3D 设备获取 IDirectXVideoProcessorService 接口。 可通过两种方法获取指向此接口的指针从 Direct3D 设备。(需要使用DX9的Device)HRESULT DXVA2CreateVideoService( IDirect3DDevice9 *pDD, REFIID riid, void **ppService );所请求的接口的接口标识符 (IID)。 Direct3D 设备可能支持以下任何接口IDirectXVideoAccelerationServiceIDirectXVideoDecoderServiceIDirectXVideoProcessorService从 Direct3D设备管理器。使用DXVA2CreateDirect3DDeviceManager9函数创建管理器HRESULT DXVA2CreateDirect3DDeviceManager9( [out] UINT *pResetToken, [out] IDirect3DDeviceManager9 **ppDeviceManager );创建管理器流程HRESULT CreateD3DDeviceManager( IDirect3DDevice9 *pDevice, UINT *pReset, IDirect3DDeviceManager9 **ppManager ) { UINT resetToken 0; IDirect3DDeviceManager9 *pD3DManager NULL; HRESULT hr DXVA2CreateDirect3DDeviceManager9(resetToken, pD3DManager); if (FAILED(hr)) { goto done; } hr pD3DManager-ResetDevice(pDevice, resetToken); if (FAILED(hr)) { goto done; } *ppManager pD3DManager; (*ppManager)-AddRef(); *pReset resetToken; done: SafeRelease(pD3DManager); return hr; }获取管理器中的视频处理接口流程HRESULT GetVideoProcessorService( IDirect3DDeviceManager9 *pDeviceManager, IDirectXVideoProcessorService **ppVPService ) { *ppVPService NULL; HANDLE hDevice; HRESULT hr pDeviceManager-OpenDeviceHandle(hDevice); if (SUCCEEDED(hr)) { // Get the video processor service HRESULT hr2 pDeviceManager-GetVideoService( hDevice, IID_PPV_ARGS(ppVPService) ); // Close the device handle. hr pDeviceManager-CloseDeviceHandle(hDevice); if (FAILED(hr2)) { hr hr2; } } if (FAILED(hr)) { SafeRelease(ppVPService); } return hr; }其余步骤省略。DXVAHD APIDXVAHD中的相关接口包含IDXVAHD_Device相关接口和IDXVAHD_VideoProcessor相关接口.IDXVAHD_Device接口由函数DXVAHD_CreateDevice创建IDXVAHD_VideoProcessor相关接口由IDXVAHD_Device使用CreateVideoPorcessor创建。HRESULT DXVAHD_CreateDevice( [in] IDirect3DDevice9Ex *pD3DDevice, [in] const DXVAHD_CONTENT_DESC *pContentDesc, [in] DXVAHD_DEVICE_USAGE Usage, [in] PDXVAHDSW_Plugin pPlugin, [out] IDXVAHD_Device **ppDevice );IDXVAHD_Device相关接口IDXVAHD_VideoProcessor相关接口ISSUEDX10,DX11,DX12如何使用DXVA,或者它们有自己版本的硬件加速标准。
延伸阅读

更多相关文章

2026/11/4 1:28:37

(最新)基于Springboot智能健身跟踪系统【附源码+文档】

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/4 1:28:37

探索Hermes Agent的多模态生成能力:文本到图像与视频

探索Hermes Agent的多模态生成能力:文本到图像与视频 Hermes Agent是一款功能强大的开源AI代理,提供了丰富的多模态生成能力,特别是在文本到图像转换方面表现出色。本文将深入探讨Hermes Agent如何通过其工具集实现高质量的图像生成&#xf…

2026/11/4 1:28:36

(最新)基于Springboot智慧在线教育平台【附源码+文档】

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/4 5:48:52

智慧社区人脸识别系统测试方法与优化实践

1. 项目背景与核心价值智慧社区建设已经成为现代城市管理的重要方向,其中安防系统的人脸识别技术作为关键环节,直接关系到居民生活安全和管理效率。但在实际落地过程中,我们发现很多社区部署的人脸识别系统存在识别率不稳定、误识别率高、极端…

2026/11/4 5:48:52

AI如何重构数据科学工作流:从自动化到智能化

1. 数据科学工作流的现状与挑战数据科学领域的工作流在过去十年间已经发生了翻天覆地的变化。作为一名从业者,我清晰地记得2016年时,一个典型的数据分析项目需要经历数据收集、清洗、特征工程、建模、评估和部署等线性流程。每个环节都需要人工介入&…

2026/11/4 5:48:52

Python自动化生成Word报告:精准替换关键词实战指南

1. 项目概述:为什么一个能自动生成Word报告的Python脚本,比手动复制粘贴省下37小时/月你有没有过这种经历:每周五下午三点,准时打开Word,把Excel里刚导出的销售数据表复制过来,再挨个替换掉“张三”“Q3”“…

2026/11/4 5:48:52

Steam ROM Manager:批量导入怀旧游戏到Steam的工程化实践

1. 项目概述:为什么一个“Steam ROM Manager”能让人反复搜索、收藏、转发?你有没有过这样的经历:硬盘里存着几百个经典游戏ROM,从红白机到PS2,从街机MAME到掌机GBA,文件夹层层叠叠,命名五花八门…

2026/11/4 5:48:52

光孤子自频移与光谱压缩技术在全光信号处理中的应用

1. 项目背景与核心价值光孤子自频移现象在光纤通信领域已经研究了三十余年,但直到最近五年,其光谱压缩特性才被重新认识并应用于全光信号处理。这个项目最初源于我们在调试超连续谱光源时的一个意外发现——当输入脉冲能量接近某个临界值时,输…

2026/11/4 5:43:52

声乐训练分析系统:音频信号处理与机器学习应用

1. 项目背景与核心价值在声乐教学领域,传统的发声训练主要依赖教师经验判断。这种主观评价方式存在几个明显痛点:一是初学者难以准确理解抽象的发声指导(如"声音要通透"),二是教师无法量化记录学生的进步曲线…

2026/11/3 7:47:06

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/3 14:24:53

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/4 0:03:20

AI辅助技术栈评估:提升研发决策效率60%

1. 项目背景与核心价值技术决策一直是研发团队面临的重大挑战。随着技术生态的快速演进,技术栈的选择、维护和迭代变得愈发复杂。我们团队在过去两年里,先后经历了三次重大技术栈迁移,每次都需要投入大量人力进行技术评估和风险分析。直到去年…

2026/11/4 0:03:20

从生成Token到直接决策:Jev如何重塑AI Agent工程实践

1. 从"生成文字"到"拍板决策":Jev 到底在解决什么问题大多数人第一次接触大模型,脑子里建立的模型是"输入问题、输出文字"。你问它今天天气怎么样,它给你一段描述;你让它写个周报,它给你…

2026/11/4 0:03:20

32G统一内存跑大模型:内存账、TPS实测与端云分流

想在一台 32G 统一内存的小主机上把大模型跑成"日常可用",这件事我前后折腾了小半年。标题里说的这台 Mac mini M6,是我们这次讨论的目标平台,具体到手规格以实物为准;但下面这套推算方法和实测思路,对任何统…

2026/11/3 7:47:06

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/3 14:24:53

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑