【问题标题】:What is the difference between a "resource" and a "resource view"?“资源”和“资源视图”有什么区别?
【发布时间】:2019-06-30 01:04:06
【问题描述】:

在 Vulkan 中,通过“视图”中包含的“指针式”元数据访问内存资源,该元数据描述了应如何解释内存资源。描述符是向着色器指定此内存将位于“位置”的数据。

在 DirectX 12 中,资源是“内存资源”的缩写(请参阅:https://www.3dgep.com/learning-directx12-1/)。资源视图是允许特定用途的资源的包装。例如,“着色器资源视图”(SRV)允许着色器访问资源,而“无序访问视图”类似于 SRV,除了它允许以任何顺序访问数据。

“恒定缓冲区视图”(CBV) 允许着色器访问比平常更持久/恒定的数据。 DirectX 12 文档似乎没有区分 CBV 和常量缓冲区。比如标题为"Constant Buffer View"的文章说:

常量缓冲区包含着色器常量数据。它们的价值在于数据是持久的,并且可以被任何 GPU 着色器访问,直到需要更改数据。

在任何地方都没有提到“视图”这个词,几乎就好像资源和资源视图之间没有区别。文档中发生这种情况的另一个地方是resource bindings 上的文章:

最常见的资源是:

  • 恒定缓冲区视图 (CBV)
  • 无序访问视图 (UAV)
  • 着色器资源视图 (SRV)
  • 采样器

在列出常见资源时,文章提到了资源视图,就好像它们是同一个东西一样。

资源和 DirectX 12 中的资源视图有什么区别?

【问题讨论】:

    标签: directx-12


    【解决方案1】:

    在 DirectX 中,资源是您将用于呈现的数据。例如纹理或缓冲区(如顶点缓冲区)。然后,与 Vulkan 类似,您必须让图形驱动程序知道如何解释这些资源。例如,您可以将 4 字节块存储到缓冲区中,然后从其中读取,就好像它在浮点值的缓冲区中一样。这就是“视图”的用武之地。视图(在 DX12 中也称为描述符)是一个类似指针的描述,描述了它指向的资源将绑定到管道的方式。除了顶点缓冲区和索引缓冲区(在某些情况下还有常量缓冲区),您几乎总是必须使用视图(描述符)来绑定资源。这个过程称为资源绑定。

    重要的是要知道相同的资源可以被不同的视图绑定(即描述)。例如,您可以为纹理定义一个 SRV,为其其中一个 Mipmap 定义另一个,并为同一纹理定义一个 UAV,以便在计算着色器中写入它。

    资源绑定是在 D3D11/12 中使用/操作资源的主要过程。把你的头绕起来并不难,但是太长了,无法在这里完整地描述。您可以在MS documentation 阅读更多相关信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-15
      • 2014-07-29
      • 2018-02-20
      • 2019-02-08
      • 1970-01-01
      • 1970-01-01
      • 2010-12-28
      • 2015-10-17
      相关资源
      最近更新 更多