D3D11
+ -

D3D11的着色器资源视图和资源视图有什么区别

2024-06-19 38 0

在Direct3D 11中,着色器资源视图(Shader Resource View,SRV)和渲染目标视图(Render Target View,RTV)是两个不同的概念。

  1. 着色器资源视图(SRV)

    • 主要用途是将资源(如纹理、缓冲区等)绑定到着色器阶段(如像素着色器、顶点着色器等)。
    • 可以用来从资源中读取数据,比如从纹理中采样像素数据。
    • 在渲染过程中,用来向着色器传递资源数据。
  2. 渲染目标视图(RTV)

    • 主要用于指定将渲染输出写入的目标(如后台缓冲区或纹理)。
    • 通常用于像素着色器输出到屏幕或者后处理效果。

使用区别:

  • SRV 用于读取资源数据,是输入布局的一部分,供着色器消费。
  • RTV 用于写入渲染输出,是输出布局的一部分,用于指定渲染目标。

总结:

  • SRVRTV 都是用来访问 GPU 资源的视图,但用途和操作方向不同:SRV 用于读取资源数据到着色器,而 RTV 用于将着色器输出到渲染目标。

更多详见:https://www.vaczh.com/article/detail-64.html

纹理资源视图

  • 纹理可以被绑定到渲染管线(rendering pipeline) 的不同阶段(stage)。

    • 比如将纹理作为渲染目标(即,Direct3D 渲染到纹理)或着色器资源(即,在着色器中对纹理进行采样)。
    • 当创建用于这两种目的的纹理资源时,应使用绑定标志值:D3D11_BIND_RENDER_TARGET | D3D10_BIND_SHADER_RESOURCE
  • 指定纹理所要绑定的两个管线阶段。资源不能被直接绑定到一个管线阶段;我们只能把与资源关联的资源视图绑定到不同的管线阶段。无论以哪种方式使用纹理,Direct3D始终要求我们在初始化时为纹理创建相关的资源视图(resource view)。

    • 作用:这样有助于提高运行效率,正如 SDK 文档指出的那样:“运行时环境与驱动程序可以在视图创建执行相应的验证和映射,减少绑定时的类型检查”。所以,当把纹理作为一个渲染目标和着色器资源时,我们要为它创建两种视图:渲染目标视图(ID3D11RenderTargetView)和着色器资源视图(ID3D11ShaderResourceView)
    • 资源视图主要有两个功能:
      • (1)告诉 Direct3D 如何使用资源(即,指定资源所要绑定的管线阶段);
      • (2)如果在创建资源时指定的是弱类型(typeless)格式,那么在为它创建资源视图时就必须指定明确的资源类型。对于弱类型格式,纹理元素可能会在一个管线阶段中视为浮点数,而在另一个管线阶段中视为整数
  • 为了给资源创建一个特定视图,我们必须在创建资源时使用特定的绑定标志值。

    • 例如,如果在创建资源没有使用 D3D11_BIND_DEPTH_STENCIL 绑定标志值(该标志值表示纹理 将作为一个深度/模板缓冲区绑定到管线上), 那我们就无法为该资源创建ID3D11DepthStencilView 视图。
    • 只要你试一下就会发现 Direct3D 会给出如下调试错误:
      • ERROR: ID3D11Device::CreateDepthStencilView: A DepthStencilView cannot be60 / 529
      • created of a Resource that did not specify D3D10_BIND_DEPTH_STENCI

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......
作者信息
站长漫谈
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

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

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