无论是否需要,GPU 都会进行插值。
原因很简单:检查变量是否已更改的成本非常高。
着色器是小程序,在不同的 GPU 核心上同时执行。因此,如果您想避免两个不同的内核计算相同的值,则必须“保留”输出变量。因此,您需要每个内核都可以读取的附加数据结构(例如标志或互斥体)。在您的情况下,这意味着三个不同的核心必须读取相同的标志,并且其中第一个核心必须保留它(如果尚未保留)。
这必须以原子方式发生,这意味着保留核心必须是一次唯一设置标志的核心。为此,所有其他核心必须停止一会儿。由于您不知道哪些核心正在计算顶点着色器,因此您必须停止所有其他核心(在 GTX Titan 上,这将是其他 2687 个核心)。
此外,当设置变量并渲染新帧时,所有标志都必须重置,因此标志的竞争可以再次开始。
总而言之:您的 GPU 中需要额外的硬件,这不仅昂贵而且会减慢渲染管道的速度。
程序员的工作是避免多个着色器产生相同的输出。因此,如果您正确地完成工作,这种情况就不会发生,或者您知道,避免它(在 CPU 上)比忽略它的成本更高。
一个例子是不同细节级别的拼接(例如在高度图上),其中大多数方法都会创建一些片段两次。这对渲染性能的影响非常小,但需要大量的 CPU 时间来避免。
| 归档时间: |
|
| 查看次数: |
279 次 |
| 最近记录: |