“资源”和“资源视图”有什么区别?

use*_*r89 2 directx-12

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

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

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

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

任何地方都没有提到“视图”这个词,就好像资源和资源视图之间没有区别一样。文档中发生这种情况的另一个地方是关于资源绑定的文章:

最常见的资源是:

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

在列出公共资源时,本文提到了资源视图,就好像它们是同一件事一样。

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

ras*_*ash 5

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

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

资源绑定是 D3D11/12 中使用/操作资源的主要过程。理解起来并不困难,但篇幅太长,无法在这里完整描述。您可以在MS 文档中阅读更多相关信息。