Shader Storage Block与Uniform Blocks的区别

8

我现在了解到,uniform块不能写入,因此shader storage block优于uniform块。此外,shader storage block的大小(上限)要大得多。

我不明白的是shader storage block的atomic操作属性,在什么情况下会用到?有实际的例子吗?

此外,我何时应该使用其中一个而不是另一个?

1个回答

5
我认为你的问题提得不清楚。听起来你想弄清楚统一缓冲区和着色器存储缓冲区之间的区别。块只是一种组织着色器输入和输出的方式。
正如你所指出的,统一缓冲区和着色器存储缓冲区之间最大的区别在于你可以从着色器程序中写入着色器存储缓冲区。
问为什么写入ssbo很方便就像问为什么变量很方便一样。每当你想要累积结果或在渲染通道之间共享数据时,你可以将ssbo用作“临时内存”。
在过去(我相信),如果你想要共享数据,你可能需要进行纹理渲染,这将经过整个图形管线,并伴随着所有相关的成本。
关于着色器存储缓冲对象的更多信息,请参考以下链接:

https://www.opengl.org/wiki/Shader_Storage_Buffer_Object

为了确保你真正理解这些差异,请按照时间顺序查找各种向着色器提供数据的方式:
- 纹理和帧缓冲对象 - Uniform 变量 - Uniform 缓冲对象 - 纹理缓冲对象 - 具有图像加载/存储功能的纹理 - 着色器存储缓冲对象
这个 Stack Overflow 上的回答对它们几乎都有一个很好的概述: 将值列表传递给片段着色器

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