gpt4 book ai didi

c++ - 在 DirectX 12 中,切换管道状态对象的性能如何?

转载 作者:搜寻专家 更新时间:2023-10-31 02:15:47 24 4
gpt4 key购买 nike

我正在研究 DirectX 12,我想知道切换管道状态对象的性能如何。我从我正在阅读的来源中得到相互矛盾的报告,即一些人说它非常慢而其他人都说它相当快。

使用的“慢”论点是:每当您使用 SetPipelineState() 时,GPU 必须在幕后做很多事情,例如重新编译等。

使用的“快速”参数是:管道状态的所有计算都是在创建管道状态对象时完成的,因此 GPU 可以只交换一些指针,仅此而已。

哪个是真的? SetPipelineState() 的性能如何,使用时应注意什么?

最佳答案

为了快速回答,您可能永远不会遇到切换 PSO 的性能问题,这就是它们最初的设计方式。

对于更长一点的答案,管道状态对象更改的成本将主要取决于三个标准:

  • 硬件和驱动效率。
  • 即将打开或关闭的流水线阶段,例如曲面 segmentation 单元。
  • 根签名,因为它很接近但仍然是一个抽象,驱动程序可能需要一些工作来准备它的映射。

PSO 旨在尽可能快地切换,它是 self 满足的,并且至少在 nVidia 和 AMD 上,唯一的着色器编译发生在创建时,而不是在使用时。在 AMD 上,甚至可以通过一些技巧从 ID3D12PipelineState::GetCachedBlob 的结果中提取真正的微码程序集。一项观察是,他们不再像在 DX11 上那样使用获取着色器系统来处理不同的输入布局,因为它现在是 PSO 描述的一部分。

不得不提的是,DX12的一大优势还在于提供了对无绑定(bind)资源的访问。使用该功能,可以将 Material 刷新量降低十倍左右,使用巧妙的实例化和 ExecuteIndirect,您可以让 GPU 决定 Material 和几何形状,而无需太多交互。

因为信息以某种方式公开(http://www.wihlidal.ca/Presentations/GDC_2016_Compute.pdf)。

On Xbox One, ExecuteIndirect has some incredible extensions where PSOs can be switched by indirect arguments, meaning we can issue a single ExecuteIndirect for our entire scene, regardless of state or
resource changes.

Xbox One 上的 PSO 更改实际上在 CPU 上是免费的,因为它们能够直接从 GPU 消耗它们。遗憾的是它在 PC 上不可用,但它应该可以帮助您降低对 PSO 开关的担忧。

关于c++ - 在 DirectX 12 中,切换管道状态对象的性能如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38117762/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com