Добавление изображения в атомный шейдер
У меня есть следующий вычислительный шейдер:
#version 430
layout(std430, binding=0) buffer wks{
ivec2 w[];
};
layout(r32i, binding=1) uniform writeonly iimage2D pathTex;
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
void main(){
imageAtomicAdd(pathTex, w[0], 1); // line 12
}
Это дает мне эту ошибку:
0(12) : error C1317: qualified actual parameter #1 cannot be converted to less qualified parameter ("im")
Я не могу найти то, что я делаю не так, согласно вики OpenGL
1 ответ
Решение
Согласно спецификации GLSL 4.50, imageAtomicAdd()
требуется переменная изображения с coherent
классификатор памяти.
Это имеет смысл, потому что атомарному добавлению нужно прочитать старое значение, добавить к нему значение и записать результат. Следовательно, он должен уметь читать и записывать изображение.
Чтобы это работало, вам нужно изменить объявление на:
layout(r32i, binding=1) uniform coherent iimage2D pathTex;
Как видно из названия, writeonly
будет работать только для операций с изображениями, которые пишут исключительно на изображение, например, imageStore()
,