20170321-shader storage block
1、 shader storage block与uniform block最大的区别是在shader中可以对前者进行写入操作,甚至是对其成员的内存进行原子操作,而后者在shader中是只读的。shader storage block拥有更高的大小上限
2、 shader storage block支持std140的布局方式,同时也支持std430的方式。std430的布局方式能使整型和浮点型的数组、包含他们的结构体的布局更加紧凑,这一点正是std140最缺乏的,这样能使像C++之类的编程语言的编译器更加有效率的使用内存。
3、 声明一个shader storage block的例子:
layout(binding=0,std430)myShaderStorageBlock
{
vec4aa;
vec3 bb;
intarr[];
MyStructurestructure;
};
20170321-shader storage block-原子内存操作(atomic memory oprations)(2)
1、 原子操作是指为了保证结果的正确性,如果在内存读取后可能紧跟着有内存写入的操作,那么在这一系列操作期间是绝对不能被打断的。(还有一种原子操作的概念是不可能被打断的最小的操作,比如一条CPU指令,是不可能在指令执行期间被打断的),类似于
1、 shader storage block与uniform block最大的区别是在shader中可以对前者进行写入操作,甚至是对其成员的内存进行原子操作,而后者在shader中是只读的。shader storage block拥有更高的大小上限
2、 shader storage block支持std140的布局方式,同时也支持std430的方式。std430的布局方式能使整型和浮点型的数组、包含他们的结构体的布局更加紧凑,这一点正是std140最缺乏的,这样能使像C++之类的编程语言的编译器更加有效率的使用内存。
3、 声明一个shader storage block的例子:
layout(binding=0,std430)myShaderStorageBlock
{
vec4aa;
vec3 bb;
intarr[];
MyStructurestructure;
};
20170321-shader storage block-原子内存操作(atomic memory oprations)(2)
1、 原子操作是指为了保证结果的正确性,如果在内存读取后可能紧跟着有内存写入的操作,那么在这一系列操作期间是绝对不能被打断的。(还有一种原子操作的概念是不可能被打断的最小的操作,比如一条CPU指令,是不可能在指令执行期间被打断的),类似于