Opengl学习笔记之ShaderStorageBufferObject和AtomicCounter

本文详细介绍了 OpenGL 中的 Shader Storage Buffer Object (SSBO) 和 Atomic Counter 的概念及使用。SSBO 提供了比 Uniform Buffer Object 更大的存储空间,并支持读写操作。Atomic Counter 则是一种特殊变量,可在多个着色器调用间共享存储,且提供了原子操作。文章还探讨了内存同步和屏障的重要性,包括 glMemoryBarrier 函数的应用。
摘要由CSDN通过智能技术生成

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值