DirectX12资源与描述符

6. 资源与描述符

在渲染处理的过程中,GPU 可能会对资源进行读和写。

在发出绘制命令之前,我们需要将与本次绘制调用相关的资源绑定到渲染流水线上。部分资源可能在每次绘制调用时都会有所变化,所以我们也就要每次按需更新绑定。

GPU资源并非直接与渲染流水线相绑定,而是要通过一种名为描述符(descriptor)的对象来对它间接引用。可以把描述符视为对GPU的资源进行描述的轻量级结构。实际上即为一个中间层。

除了指定资源数据,描述符还会为GPU解释资源:告知Direct3D某个资源将如何使用(即此资源将被绑定在流水线的哪个阶段上),而且我们可借助描述符来指定欲绑定资源中的局部数据。如果某个资源在创建的时候采用了无类型格式,那么我们就必须在为它创建描述符时指明其具体类型。

视图(view)与描述符(descriptor)是同义词。

常用的描述符如下:

  • CBV/SRV/UAV
    • 常量缓冲区视图/描述符(constant buffer view/descriptor)
    • 着色器资源视图/描述符(shader resource view/descriptor)
    • 无序访问视图/描述符(unordered access view/descriptor)
  • 采样器描述符(sampler):用于纹理贴图
  • RTV描述符:渲染目标视图资源(render target view)
  • DSV描述符:深度/模板视图资源(depth/stencil view)

描述符堆(descriptor heap)中存有一系列描述符(描述符数组)。我们为每一种类型的描述符都创建出单独的描述符堆。

我们能用多个描述符来引用同一个资源。例如,可以通过多个描述符来引用同一个资源中不同的局部数据。一种资源可以绑定到渲染流水线的不同阶段。因此,对于每个阶段都需要设置独立的描述符。

创建描述符的最佳时机为初始化期间。最好不要在运行时(runtime)才创建描述符。除非当确实需要用到无类型资源所带来的灵活性时(即根据不同的视图对同一种数据进行多种不同解释的能力)。

你可能感兴趣的:(图形渲染)