资源的概述
如果您将呈现管道视为汽车装配线,那么资源将是所有进入装配线的组件,这些组件组合在一起创建汽车。当没有资源使用时,管道不能做任何事情,反之亦然。
资源的种类
在考虑如何构造算法时,我们可以使用多种不同的资源,每种类型都有不同的用例。通常,资源被分成两组——纹理(Texture)和缓冲区(Buffer)。纹理大致按其类型划分,可以创建为一维、二维和三维形式。缓冲区比较均匀,通常被认为是一维的
(尽管在某些情况下它们实际上是0维的,例如单个数据点)。尽管如此,仍然有很多种不同的缓冲区类型,包括顶点和索引缓冲区、常量缓冲区、结构化缓冲区、附加和使用缓冲区以及字节地址缓冲区。
使用语言
通常,使用资源有两个不同的领域一个来自C/C++,另一个来自HLSL。C/ c++主要关注创建资源并将它们绑定/解绑定到所需的位置。HLSL更关心实际操作和使用资源的内容。
使用资源
要使用资源,必须将资源绑定到管道。当一个资源被绑定到管道时,它可以用作数据输入、输出,或者两者兼而有之。这主要取决于它绑定到管道的位置和方式。
例如,作为 Input Assemble阶段(IA阶段) 的输入而绑定的顶点缓冲区显然是一个输入,作为渲染目标绑定到输出合并(output merge stage) 阶段 的 2D纹理(2D Texture) 显然是输出。
但是,如果我们想在随后的渲染过程中使用输出的渲染目标内容,该怎么办?它也可以绑定到一个像素着色器(Pixel shader) 作为纹理资源(texture resource) ,以便在下一次渲染操作中采样。
资源视图
为了帮助运行时(和开发人员)确定资源的预期用途,DirectX提供了资源视图(Resource View) 的概念。当特定资源可以绑定到渲染管线中几个不同的渲染位置时,必须使用资源视图绑定它,该视图指定如何使用它。
有四种不同类型的资源视图:渲染目标视图(render target view)、深度/模板视图(depth stencil view)、着色器资源视图(shader resource view)和无序访问视图(unordered access view) 。前两个分别用于将渲染和深度目标绑定到管道。着色器资源视图有些不同,它允许在任何可编程着色器阶段绑定资源以供读取。无序访问视图也有一些不同,它允许将资源绑定为同时进行随机读写访问,但是只能在计算着色器(Compute shader) 和像素着色器(pixel shader) 阶段使用。
还有其他资源绑定类型不需要资源视图来绑定到管道。这些通常用于为单一目的创建的资源,如顶点缓冲区(vertex buffer) 、索引缓冲区(index buffer) 或常量缓冲区(constant buffer) ,并且资源的用途是明确的。