Shader Storage Buffer Object
也是一种缓冲区对象,用于存储与检索着色器语言的数据,简称SSBO,类似于UBO。存储SSBO的缓冲区对象绑定到SSBO binding point。
SSBO与UBO的区别:
1.SSBO的容量大的多,opengl的规范保证UBOS的大小可达到16KB(实现时可允许更大),SSBO的大小可达到128MB(大多数实现可允许分配大小达到GPU的内存极限)。
2.SSBOS可写,atomically(甚至块成员可执行原子操作) ,其读写使用非连贯内存访问。
3.SSBOS可变存储,而UBOS必须有具体的、固定的存储尺寸。因此SSBOS内可有任意长度的数组,数组的实际大小基于缓存区的范围。
关键字:buffer,指定的memory layout 是: std430。
std140与std430 packing layout 据着色器语言的版本命名的。 std430相对于std130而言,有更好的内存效率以及与如C++语言等的编译器生成的结构布局能更好的衔接。
atomic operation 有Add、And、Or、Xor、Min、Max、Exchange、CompSwap。 这些函数只有 int/uint 类型。
同步访问内存存在一些可能的危害:
(1)read-after-write(RAW)
(2)write-after-write(WAW)
(3)write-after-read(WAR)
所以有了 memory barrier。glMemoryBarrier(GLbitfield barriers): 参数有如GL_SHADER_STOGAR
Opengl学习笔记之ShaderStorageBufferObject和AtomicCounter
最新推荐文章于 2024-07-12 11:13:21 发布
本文详细介绍了 OpenGL 中的 Shader Storage Buffer Object (SSBO) 和 Atomic Counter 的概念及使用。SSBO 提供了比 Uniform Buffer Object 更大的存储空间,并支持读写操作。Atomic Counter 则是一种特殊变量,可在多个着色器调用间共享存储,且提供了原子操作。文章还探讨了内存同步和屏障的重要性,包括 glMemoryBarrier 函数的应用。
摘要由CSDN通过智能技术生成