ฉันมีตัวประมวลผลสองตัวที่ต้องดำเนินการในลำดับที่แน่นอนและเอาต์พุตที่ขึ้นอยู่กับอินพุตก่อนหน้า เป็นการดีที่ฉันจะไม่ต้องคัดลอกบัฟเฟอร์ฝั่งไคลเอ็นต์และทำงานทั้งหมดของฉันบน 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);
มันรับประกันได้หรือไม่ว่าการร้องขอทั้งหมดของ shader การคำนวณแรกจะเสร็จสิ้นก่อนที่จะมีการร้องขอที่สอง (เพื่อหลีกเลี่ยงการแย่งข้อมูลระหว่างการอ่านและการเขียนbuffer
)? ถ้าไม่ฉันจะซิงโครไนซ์มันได้อย่างไร?