Добавление изображения в атомный шейдер

У меня есть следующий вычислительный шейдер:

#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(),

Другие вопросы по тегам