Saya punya beberapa penghitung komputasi yang perlu dieksekusi dalam urutan tertentu dan yang outputnya bergantung pada input sebelumnya. Idealnya, saya tidak perlu menyalin buffer sisi klien dan melakukan semua pekerjaan saya pada GPU.
Anggap saya memiliki dua compute shader yang dikompilasi dan dihubungkan sebagai program_one
dan program_two
. Misalkan saya juga memiliki GL_SHADER_STORAGE_BUFFER
yang berisi data yang ditulis oleh program_one
dan dibaca oleh program_two
. Bisakah saya melakukan hal berikut:
glUseProgram(program_one);
glBindBuffer(GL_SHADER_STORAGE_BUFFER, buffer);
glBindBufferBase(GL_SHADER_STORAGE_BUFFER, index, buffer);
glDispatchCompute(16, 16, 1);
glUseProgram(program_two);
glBindBuffer(GL_SHADER_STORAGE_BUFFER, buffer);
glBindBufferBase(GL_SHADER_STORAGE_BUFFER, index, buffer);
glDispatchCompute(16, 16, 1);
Apakah dijamin bahwa semua doa shader komputasi pertama akan selesai sebelum doa kedua (untuk menghindari perlombaan data antara membaca dan menulis buffer
)? Jika tidak, bagaimana cara menyinkronkannya?
sumber