1-初识DXGI与D3D

1 D3D(Direct3D)

简介:显卡,又叫做3D加速卡。当我们希望调用显卡中的3D加速功能来进行某些优化时,无法直接通过操作系统或者应用程序调用显卡,而是通过系统提供的API。D3D就是其中一种API,另外还有OPENGL。
Feature Level: D3D11以后支持,是D3D11的必备概念。因为D3D11的不同功能对于硬件的最低要求是不尽相同的,所以通过引入feature level对D3D11的功能进行了划分。这使得D3D11可以在D3D10甚至D3D9的硬件上运行。具体版本对应的功能如下图所示:


1-初识DXGI与D3D_第1张图片

  关于 D3D9,它是 D3D 系列中唯一支持 Windows XP 的版本,所以依然存在。然而值得一提的是,XP 下的 OpenGL 驱动也在不断更新,OpenGL 同样可以带给 XP 原本只有 D3D10 和 D3D11 的 GPU 能力,而且没有性能损失。
CheckFormatSupport: D3D10 本身不支持 ARGB 颜色格式。但是根据 D3D11 的描述: ARGB 对 feature level 9_x 和 11_0 是必须支持,对于 feature level 10_x 是可选支持。用 CheckFormatSupport 可以检查某个格式是否支持, 或者直接通过 feature level检查格式的支持情况。
  另外, D3D11 还增加了 CheckFeatureSupport 函数, 用来检查 multithread、 double、 atomic、 compute shader 4.x 是肉支持。
Compute Shader: compute shader又叫做 DirectCompute, 在 D3D11 的 GPU 上是 5.0 版本, 在 D3D10.x 的 GPU 上 是简化的 4.x 版本(不支持RWTexture, 无法写入 texture)。在 D3D11 下, 可以把 texture 和 buffer 作为输入、 texture 作为输出, 从而实现从 texture 到 texture 的流水线。

题外话:
  从 CS 转回图形流水线的时候, 在 N卡 上都会出现明显的几毫秒延迟,而在 A卡 上不会出现这个问题。

Multi-threaded: D3D11 加入了显示的多线程支持, 它把接口分成了两部分:
  1- 负责建立资源的函数属于 ID3D11Device, 它是线程安全的, 在必要情况下会自动加锁。
  2- 剩下的部分都属于 ID3D11DeviceContext, 没有线程安全, 需要上层代码处理。

顺带一提:
  高性能地使用多线程事需要驱动支持的,虽然 GPU 一般都有多个指令单元, 但是驱动通常不开放多线程的功能。所以得通过软件实现命令列表, 这使得性能并无提高反而降低。

2 DXGI(DirectX Graphics Infrastructure)

简介: DirectX 图形基础架构,提供了对图形硬件进行底层管理的功能,与 D3D 的i图形功能独立。DXGI 可以说是提供了一个底层的通用框架用来支持未来的硬件。DXGI 的目的是沟通核心模式驱动和系统硬件。
主要功能: 枚举显示硬件设备,将渲染好的帧呈现到输出设备,调整显示设备参数,全屏模式的切换等。

你可能感兴趣的:(DXGI,与,D3D)