Belirli bir sırayla yürütülmesi gereken ve çıktıları önceki girdilere bağlı olan birkaç hesaplama gölgelendiricim var. İdeal olarak, hiçbir zaman istemci tarafındaki bir tamponu kopyalamam ve GPU üzerinde tüm işlerimi yapmam gerekmeyecek.
İki hesaplama shader'lar derlenmiş ve olarak bağlantılı olması düşünün program_one
ve program_two
. Ayrıca, GL_SHADER_STORAGE_BUFFER
tarafından yazılan program_one
ve okunan verileri içeren bir tane olduğunu varsayalım program_two
. Sadece aşağıdakileri yapabilir miyim:
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);
İlk hesaplama gölgelendiricisinin tüm çağrılarının, ikinci çağrının çağrılmasından önce tamamlanması garanti edilir mi (okuma ve yazma arasındaki veri yarışlarından kaçınmak için buffer
)? Değilse, bunları nasıl senkronize edebilirim?