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