特定の順序で実行する必要があり、出力が以前の入力に依存するいくつかの計算シェーダーがあります。理想的には、クライアント側のバッファーをコピーしてGPUですべての作業を行う必要はありません。
私はコンパイルとリンクとして2つのコンピュートシェーダ持って考えてみましょうprogram_one
としますprogram_two
。GL_SHADER_STORAGE_BUFFER
によって書き込まれprogram_one
、読み取られるデータを含むを持っているとしますprogram_two
。次のことができますか?
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);
最初の計算シェーダーのすべての呼び出しが、2番目の呼び出しの前に完了することが保証されていますか(読み取りと書き込みの間のデータの競合を回避するためbuffer
)?そうでない場合、どのようにそれらを同期しますか?