OpenGL:SSBO vs“缓冲纹理”vs“PBO /纹理”用于提供计算着色器的区别

7

我需要将浮点数据传递给计算着色器。

我认为有以下三种方法:

  • 着色器存储缓冲对象
  • 缓冲纹理
  • '传统' 纹理(使用PBO将数据上传到GPU,然后使用glTexSubImage2D将数据复制到纹理中,并在着色器中作为 'image2D' 访问)

每种技术的优缺点和性能如何?

我不需要过滤,只需要访问原始浮点数据。由于SSBO和缓冲纹理是1D的,这意味着如果我的数据是"2D"的,则需要自己计算偏移量。


1
"访问原始浮点数据" 好的,那么...什么是“原始浮点数据”?它是多维的吗?它有多大?它代表什么? - Nicol Bolas
它们是代表时间序列的复杂浮点数(实数和虚数部分)。每秒都有数百万个点的连续流,我会批量将它们发送到GPU进行处理(可能每批次高达1M个点)。因此它们最初不是多维的,但它们的第一个操作是对1024个块进行FFT,这使它们成为一个1024 * N的数组... - 246tNt
1个回答

1
  • 缓冲纹理 - 无用
  • 纹理 - 如果你的数据是矩阵类型并且可以适应4通道浮点数,它可能比纯缓冲区快一点,你可以利用textureGather和texture filtering等函数。
  • 图像 - 像纹理一样,但没有采样器。
  • SSBO - 通用解决方案,与图像相同的性能,你仍然可以将2D数组放入缓冲区并作为data[y][x]索引。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接