Practical Rendering and Computation with Direct3D 11
+ -

2.1.2资源视图

2024-06-14 20 0

资源还共享一种将它们绑定到管道的通用技术。正如我们在上面看到的,有八个不同的绑定标志可用,用于标识允许绑定资源的位置。在这八个绑定位置中,有一半允许资源直接绑定到管道。其中包括顶点和索引缓冲区、常量缓冲区和流输出缓冲区(这些缓冲区类型的含义将在本章的“缓冲区资源”部分中进一步解释)。但是,其他四个绑定位置都要求在将资源绑定到管道时使用一种称为资源视图的适配器。资源视图是一个适配器对象,用于将资源连接到管道中的各个点。它在概念上提供了资源的特定“视图”。与资源的配置一样,资源视图也提供了一些可配置性。通过允许资源视图提供对资源的一些解释,可以对单个资源使用多个资源视图,以便在管道上的不同位置使用。事实上,正如我们将在本节后面看到的,资源视图也可以用于表示资源的子集。

  • 顶点和索引缓冲区、常量缓冲区和流输出缓冲区可以直接绑定到管道
  • 其它四个需要借助资源视图绑定到管道。所以本文介绍的就是这4种资源绑定管道时需要创建的4种资源视图。
资源 否需要创建视图
顶点缓冲区 D3D11_BIND_VERTEX_BUFFER 不用
索引缓冲区 D3D11_BIND_INDEX_BUFFERJ 不用
常量缓冲区 D3D11_BIND_C0NSTANT_BUFFER 不用
输入输出缓冲区 D3D11_BIND_STREAM_OUTPUT 不用
纹理/缓冲区 渲染目标视图 Render target views
纹理 深度模版视图Depth stencil views
纹理/缓冲区 着色器资源视图 Shader resource views
纹理/缓冲区 无序访问视图 Unordered access view

资源视图类型

有四种不同类型的资源视图,每种视图都对应于资源可以在管道上绑定到的特定位置。这些视图决定了哪些操作可以对它们绑定到的资源执行,哪些操作不能对其执行。
下面列出了这四种类型的资源视图。

  • Render target views (ID3D11RenderTargetView) - 用于输入混合
  • Depth stencil views (ID3D11DepthStencilView) - 用于对输入混合的深度模版测试
  • Shader resource views (ID3D11ShaderResourceView) - 用于着色器中访问资源纹理
  • Unordered access view (ID3 D11UnorderedAccessView) - 随机访问,信息共享(着色器与应用)

这些资源视图中的每一个都暗示了其资源可以使用的特定语义。此外,每种类型的资源视图都提供了许多不同的配置选项,允许进一步指定如何使用资源。我们将在第3章“渲染管道”中简要讨论每种类型的资源视图的语义,以及它们的确切用法。

渲染目标视图

Render target views渲染目标视图。渲染目标视图(RTV)用于附加资源以接收渲染管道的输出。这意味着连接的资源将由管道写入,在某些情况下还将从中读取以执行混合操作。传统上,渲染目标是二维纹理,但也可以绑定其他类型的资源。渲染目标视图的各种配置选项取决于要绑定的资源类型,但包括资源的DXGI格式,以及选择要公开到管道的资源子部分的各种方法。

深度模具视图(DSV)

Depth stencil views 深度模具视图(DSV)与渲染目标视图的相似之处在于,它被附加用于接收来自渲染管道的输出。但是,它与渲染目标视图的不同之处在于,它表示深度模版缓冲区,而不是颜色渲染目标。深度模版视图资源被积极用于执行深度和模版测试。这使得附加的深度模板资源对于管道的效率非常重要。因此,为了进一步提高性能,深度模板视图还公开了一个额外的标志,以确定附加的资源是否会被写入。这允许将资源附加为深度模具缓冲区并用于深度模具测试,但同时在具有着色器资源视图(我们将检查的下一个资源视图)的着色器程序中使用。在此配置中,两个视图都是只读的,这意味着任何一个视图都不会修改资源。有了这样的使用,同一资源可以在多个地方绑定到管道,而不会有读/写危险,这允许灵活使用资源。如果需要标准使用深度模具缓冲区,第二个资源视图可以取代只读视图,以允许进行写入。

着色器资源视图(SRV)

Shader resource views 着色器资源视图(SRV)提供对管道的可编程着色器阶段的资源的读取访问。此视图对应于纹理在像素着色器中扮演的传统角色,即从着色器程序中读取和使用但未写入的数据。着色器资源视图可用于所有不同的可编程着色器阶段。

无序访问视图(UAV)

Unordered access views无序访问视图(UAV)为Direct3D11中的资源提供了一些最有趣的新用途。与着色器资源视图一样,UAV可以用于从资源中读取信息。但是,它也允许从同一着色器程序中同时写入资源。此外,输出位置不是预定义的,这允许着色器程序对资源内的任何位置执行分散写入。这提供了一种全新的资源访问类别,因为它允许以更灵活的方式使用资源。但是,需要注意的是,这种类型的视图并不适用于所有可编程着色器阶段。这些资源视图只能与像素着色器和计算着色器阶段一起使用。无序访问视图 (UAV) 是无序访问资源的视图(可包括缓冲区、纹理和纹理数组,但无需多次采样)。 使用 UAV 可通过多个线程临时进行无序读/写访问。 这意味着此资源类型可由多个线程同时读/写,且不会产生内存冲突。 这种同时访问是通过使用 Atomic Functions(原子函数)来进行的。

0 篇笔记 写笔记

2.1.2资源视图
资源还共享一种将它们绑定到管道的通用技术。正如我们在上面看到的,有八个不同的绑定标志可用,用于标识允许绑定资源的位置。在这八个绑定位置中,有一半允许资源直接绑定到管道。其中包括顶点和索引缓冲区、常量缓冲区和流输出缓冲区(这些缓冲区类型的含义将在本章的“缓冲区资源”部分中进一步解释)。但是,其他四个绑......
D3D11的着色器资源视图资源视图有什么区别
在Direct3D 11中,着色器资源视图(Shader Resource View,SRV)和渲染目标视图(Render Target View,RTV)是两个不同的概念。着色器资源视图(SRV):主要用途是将资源(如纹理、缓冲区等)绑定到着色器阶段(如像素着色器、顶点着色器等)。可以用来......
gs_texture_2d成员函数
2d纹理可创建的类型是多样的。有是2d的,也有的是2d-cube的。有的是需要绑定的是渲染目标视图,有的是渲染着色器资源视图。其它的一些配置参数多样。 InitTexture(data);//根据纹理数据创建纹理 InitResourceView();//创建着色器资源视图 ......
2.1.2创建资源视图
下面列出了这四种类型的资源视图。Render target views (ID3D11RenderTargetView) - 用于输入混合Depth stencil views (ID3D11DepthStencilView) - 用于对输入混合的深度模版测试Shader resource vi......
作者信息
站长漫谈
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

您的支持,是我们前进的动力!