为什么Direct3D 11会区分SRV和无人机?

时间:2014-03-28 18:59:40

标签: direct3d api-design direct3d11

我一直在玩Direct3D 11并且惊讶地发现HLSL StructuredBuffer<T>必须绑定到着色器资源视图(SRV),而RWStructuredBuffer<T>必须绑定到统一访问视图( UAV)。深入研究这一点,似乎所有读写着色器资源都需要无人机,而只读资源需要SRV。

比较UNORDERED_ACCESS_VIEW_DESCSHADER_RESOURCE_VIEW_DESC结构,描述的无人机或多或少是描述SRV的信息子集。将UAV和SRV设置为流水线阶段的API也非常相似。即使是两个接口的文档看起来也像两个不同的技术作者所解释的相同概念:

  • SRV:着色器资源视图接口指定着色器在渲染过程中可以访问的子资源。
  • UAV:视图接口指定管道在渲染期间可以访问的资源部分

我对D3D11并不是很精通,但在我看来,无人机的概念使API复杂化而没有太大的好处。 SRV和UAV之间的区别是为了更好地映射到硬件还是因为技术限制?或者它只是一个API设计决定?

1 个答案:

答案 0 :(得分:2)

这种区别可能主要是出于性能原因而引入的。仅为读取而访问的数据的性能特征与可与任意写入和读取组合访问的数据完全不同。

在大多数硬件上,支持资源的内存可能应该分配在不同类型的内存中以获得最佳性能,并且具有不同的参数来确定缓存方式,调整方式,平铺方式,对齐方式等。在API级别的概念中,可以为驱动程序提供有关资源在创建时的预期用途的更多信息,以及在绑定资源时的更多信息。