unity computeshader的可读写buffer

23 篇文章 2 订阅
7 篇文章 0 订阅

可读写buffer:

computeshader中的读写的buffer,在opengl上是用ssbo实现的。

KernelState中的inBuffers,outBuffers这些buffer,会走到GfxDeviceGLES::SetComputeBuffer,如果索引0x7FFFFF表示GLE中实际上不存在缓冲区,但仍然需要计数器。则用BindShaderStorageBuffer来绑定ssbo,

 

ssbo的特点

1.如果用ubo,他的大小只能在16kb以内,但是ssbo可以达到128mb。

2.ssbo是可写的

3.ssbo具有可变存储,最多可达为该特定缓冲区绑定的任何缓冲区范围

4.在所有条件相同的情况下,SSBO访问可能会比UBO访问慢。

绑定方式

GLuint ssbo; 
glGenBuffers(1, &ssbo); 
glBindBuffer(GL_SHADER_STORAGE_BUFFER, ssbo); 
glBufferData(GL_SHADER_STORAGE_BUFFER, sizeof(data), data​, GLenum usage); //sizeof(data) only works for statically sized C/C++ arrays. 
glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 3, ssbo);
glBindBuffer(GL_SHADER_STORAGE_BUFFER, 0); // unbind

shader中使用

layout(std430, binding = 2) buffer anotherLayoutName
{
    int some_int;
    float fixed_array[42];
    float variable_array[];
};

对应的dx12的概念是

Structured Buffer

SSBO

UAV Buffer,RWBuffer

SSBO

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值