在OpenGL ES着色语言中,可以用限定符readonly
或writeonly
装饰着色器存储缓冲区对象(SSBO)。
OpenGL ES Shading Language version 3.1 specification的第4.9节(内存访问限定符):
着色器存储块,在着色器存储块中声明的变量以及声明为图像类型的变量(其关键字中带有“ image”的基本不透明类型)可以使用以下一个或多个内存限定符进行进一步限定:... (列出了一个表)
所以我可以在opengl es着色器中添加一些东西,例如:
layout(std430, binding = 0) readonly buffer mybuffer {
a_struct_type myarray[]; //a_struct_type was defined before
};
但是如何在spir-v中指定只读?
在spir-v specification的3.18节“访问限定符”中,它表示:
由OpTypeImage和OpTypePipe使用。
这是否意味着在spir-v中不能将SSBO指定为只读?我不认为SSBO属于OpTypeImage或OpTypePipe类型。
---------------------------------------------
Resource Type | Storage Class | Type
---------------------------------------------
Storage Buffer| Uniform |
|----------------| OpTypeStruct
| Storage Buffer |
----------------------------------------------