Direct3D 12简介

DirectX 12是Microsoft最新的DirectX API版本。 Direct3D随DirectX 12一起提供,Direct3D 12是DirectX API集合中的图形API(其他API包括DirectSound,DirectInput,DirectDraw等)。

Direct3D 12的性能比Direct3D的任何以前的迭代要好得多。 Direct3D提供了对图形硬件的较低级别控制,从而可以更有效地使用线程。我们能够使用多个线程来填充命令列表。拥有更多控制权的另一方面意味着我们现在要承担更多责任,例如CPU / GPU同步和内存管理。

Direct3D还通过使用预编译的管道状态对象和命令列表(bundles)来最大程度地减少CPU开销。在应用程序的初始化阶段,我们将创建许多管线状态对象,这些对象由着色器(顶点,像素等)和其他管线状态(混合,光栅化器,基本拓扑等)组成。然后,在运行时,驱动程序不必像在Direct3D 11中那样更改管道的状态,就可以创建管道状态。相反,我们提供了一个管道状态对象,当我们调用draw时,它将使用管道,而且我们没有动态创建管道状态的开销。我们还可以在初始化期间创建一组命令,这些命令可以反复使用称为Bundles的命令。

关于Direct3D的另一件很酷的事情是,它的API调用少得多,根据MSDN,它的调用数约为200(而其中大约三分之一完成了所有艰苦的工作)。

我们将在本教程中学习以下内容:

图形管道概述

  • The Compute Shader
  • Input Assembler (IA) Stage
  • Vertex Shader (VS) Stage
  • Hull Shader (HS) Stage
  • Tessellator (TS) Stage
  • Domain Shader (DS) Stage
  • Geometry Shader (GS) Stage
  • Stream Output (SO) Stage
  • Rasterizer Stage (RS)
  • Pixel Shader (PS) Stage
  • Output Merger (OM) Stage

Direct3D 12工作原理概述

  • The Device
  • Pipeline State Objects
  • Command Lists - Bundles
  • Command Queues
  • Command Allocators
  • Resources
  • Descriptors (Resource Views)
  • Descriptor Tables
  • Descriptor Heaps
  • Root Signatures
  • Resource Barriers
  • Fences and Fence Events
  • Overview of Application Flow Control for Direct3D 12
  • Multithreading in Direct3D 12

初始化Direct3D 12

  •  Creating a device 
  • Creating a command queue
  • Creating a swap chain
  • Creating a descriptor heap
  • Creating a command allocator
  • Creating a root signature
  • Compiling and Creating shader bytecode
  • Creating a pipeline state object
  • Creating a command list
  • Creating a fence and fence event

 

参考链接:

  1. https://docs.microsoft.com/en-us/windows/win32/direct3d12/directx-12-programming-guide
  2. http://www.d3dcoder.net/
  3. https://www.braynzarsoft.net/viewtutorial/q16390-04-directx-12-braynzar-soft-tutorials
  4. https://developer.nvidia.com/dx12-dos-and-donts
  5. https://www.3dgep.com/learning-directx-12-1/
  6. https://gpuopen.com/learn/lets-learn-directx12/
  7. https://alain.xyz/blog/raw-directx12
  8. https://www.rastertek.com/tutdx12.html
  9. https://digitalerr0r.net/2015/08/19/quickstart-directx-12-programming/
  10. https://walbourn.github.io/getting-started-with-direct3d-12/
  11. https://docs.aws.amazon.com/lumberyard/latest/userguide/graphics-rendering-directx.html
  12. http://diligentgraphics.com/diligent-engine/samples/
  13. https://www.programmersought.com/article/2904113865/
  14. https://www.tutorialspoint.com/directx/directx_first_hlsl.htm
  15. http://rbwhitaker.wikidot.com/hlsl-tutorials
  16. https://digitalerr0r.net/2015/08/19/quickstart-directx-12-programming/
  17. https://www.ronja-tutorials.com/post/002-hlsl/

Direct3D 12简介_DirectDirect3D 12简介_Direct_02Direct3D 12简介_Direct_03