DirectX12 - 基础知识

这里是SunshineBooming,GPU公司一枚小小的Driver工程师,主要工作是写DirectX12 Driver,我会持续更新这个DX12 Spec系列,可能比较冷门,但是都是干货和工作中的心得体会,有任何GPU相关的问题都可以在评论区互动,知无不言:

DirectX12 Spec 总目录

1. directX12是什么?

  • directx 12(简称dx12)是微软开发的图形应用程序接口(api)的最新版本,于2014年发布,专为windows 10及以上系统设计。它通过更底层的硬件控制和多线程优化,显著提升了图形渲染效率和硬件资源利用率。
  • 与directx 9/10/11相比,directx 12提供底层api(类似AMD Mantle),允许开发者直接管理gpu资源和命令列表,减少驱动干预。完美支持多核cpu,任务可线性分配到多个核心,四核性能可达单核的4倍,尤其适合现代多核处理器。加入异步计算(允许gpu同时处理图形和计算任务)、光线追踪(需硬件支持)及显式多gpu协作(如同时调用独立显卡和集成显卡)。
  • 因为更贴近硬件特性,使用directx12来进行图形开发,也对应用开发者提出了更高的要求,dx12需要开发者深入理解硬件架构(如显存分配、管线同步),而dx9/10/11则更容易上手。

2. directx12架构

2.1 总体架构

  • 参考官方文档:https://learn.microsoft.com/zh-cn/windows-hardware/drivers/display/windows-vista-and-later-display-driver-model-architecture
  • 我根据工作经验,拓展总结了一下:
    在这里插入图片描述

2.2 架构理解

2.2.1 directx runtime

  • 上图红色部分都是windows系统实现的系统层,这也是directx架构和vulkan等同级别图形驱动框架主要的差异点:微软帮你作了中间系统层,而vulkan等则是app直接call到driver内。
  • 优点是,能预防app和driver的低级错误,提升开发效率。如果说app开发者水平不高,代码有明显错误,directx12 runtime是会直接报错的。相应的微软也提供了一套完整的directx12 debug layer,app开发调试过程中,可以选择打开debug layer,开发过程中可以看到完整的debug信息,能规避常见的错误,提升开发效率。
  • 缺点是,中间runtime层不透明,对于driver开发者不友好。系统往往会在app和driver之间作各类转译,遇到复杂的问题,基本就麻爪了。

2.2.2 umd & kmd

  • umd和kmd都是gpu驱动层,需要gpu硬件厂商去实现的部分。
  • 在架构上,这样区切分的意图也是很明显的:增强系统稳定性。
  • driver会将主要的功能实现部分:包括各种特性实现,resource allocation,gpu硬件指令生成,shader编译(HLSL),放在umd层。umd层即使挂掉,也只会影响当前调用driver的app,而不会影响整个windows系统。
  • 而kmd层,则只会实现与gpu硬件直接相关的:gpu硬件指令传输,resource allocation,硬件状态监测。kmd层如果挂掉,windows系统大概率也会挂掉,直接表现就是系统蓝屏。

2.2.3 gpu硬件

  • driver层,通过umd-kmd-kernel runtime这样一套流程,生成具体的gpu指令后,directx kernel runtime会通过pcie总线(一般都是通过pcie总线),将存放硬件指令的dma buffer地址,写到gpu硬件寄存器中,然后trigger gpu硬件执行指令,生成最后的渲染结果。

3. 参考资料

  • a trip through the grapics pipeline(这个网上很多链接,就不贴pdf了)
  • https://learn.microsoft.com/zh-cn/windows-hardware/drivers/display/windows-vista-and-later-display-driver-model-architecture
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值