특정 순서로 실행해야하고 출력이 이전 입력에 의존하는 두 개의 컴퓨팅 쉐이더가 있습니다. 이상적으로는 버퍼 클라이언트 측을 복사 할 필요가 없으며 GPU에 대한 모든 작업을 수행 할 필요가 없습니다.
나는 두 개의 컴퓨 트 셰이더 컴파일로 연결이 고려 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);
읽기와 쓰기 사이의 데이터 경쟁을 피하기 위해 첫 번째 컴퓨팅 셰이더의 모든 호출이 두 번째 호출의 호출 전에 완료되는 것이 보장 buffer
됩니까? 그렇지 않은 경우 어떻게 동기화합니까?