В языке шейдеров OpenGL ES объект буфера хранилища шейдера (SSBO) может быть украшен квалификатором readonly
или writeonly
.
Раздел 4.9 (Квалификаторы доступа к памяти) Спецификация OpenGL ES Shading Language версии 3.1:
Блоки хранения шейдеров, переменные, объявленные в блоках хранения шейдеров, и переменные, объявленные как типы изображений (базовые непрозрачные типы с «изображением» в их ключевом слове), могут быть дополнительно уточнены одним или несколькими из следующих квалификаторов памяти: ...(таблица указан)
Так что у меня может быть что-то в шейдере 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 |
----------------------------------------------