与 PixelShader 相比,我有一个关于 ComputeShader 的问题。我想对缓冲区进行一些处理,这对于像素着色器和计算着色器都是可能的,现在我想知道两者是否有任何优势,特别是在速度方面。我遇到了仅使用 8 位值的问题,但我应该能够解决这个问题。
输出中的每个数据点都将使用围绕它的总共 8 个数据点(MxN 矩阵)来计算,所以我认为这对于像素着色器来说是完美的,因为不同的输出根本不会相互影响。
但是我找不到任何基准来比较着色器,现在我想知道我应该瞄准哪一个。唯一的目标是速度。
与 PixelShader 相比,我有一个关于 ComputeShader 的问题。我想对缓冲区进行一些处理,这对于像素着色器和计算着色器都是可能的,现在我想知道两者是否有任何优势,特别是在速度方面。我遇到了仅使用 8 位值的问题,但我应该能够解决这个问题。
输出中的每个数据点都将使用围绕它的总共 8 个数据点(MxN 矩阵)来计算,所以我认为这对于像素着色器来说是完美的,因为不同的输出根本不会相互影响。
但是我找不到任何基准来比较着色器,现在我想知道我应该瞄准哪一个。唯一的目标是速度。
据我了解,着色器是着色器,因为它们只是由许多线程在数据上运行的程序。因此,一般而言,在像素着色器与计算着色器中进行计算的计算能力/速度不应有任何差异。然而..
要对像素着色器进行计算,您必须对数据进行处理,使其看起来像图像数据,这意味着您必须首先绘制一个四边形,而且您的输出必须具有像素的“形状”(基本上是 float4) . 然后,您的应用程序必须将这些数据解释为有用的东西
如果您使用的是计算着色器,则可以完全控制要使用的线程数,而像素着色器必须是有效的分辨率。您还可以以您喜欢的任何格式输入和输出数据,并利用无人机加速转换(我认为)
我建议使用计算着色器,因为它们用于进行通用计算并且更容易使用。即使实际的着色器计算时间大致相同,您的所有应用程序也可能会更快,这只是因为您可以避免一些您必须跳过的圈子才能让像素着色器执行您想要的操作。