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

时间:2019-06-30 01:04:06

标签: directx-12

在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)
  •   
  • Samplers
  •   

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

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

1 个答案:

答案 0 :(得分:0)

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

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

资源绑定是在D3D11 / 12中使用/操纵资源的主要过程。缠头并不难,但是冗长以至于无法在此处完整描述。您可以在MS documentation中详细了解它。