আমার কয়েকটি কমপুট শেডার রয়েছে যা একটি নির্দিষ্ট ক্রমে কার্যকর করা দরকার এবং যার ফলাফলগুলি পূর্ববর্তী ইনপুটগুলির উপর নির্ভর করে। আদর্শভাবে, আমার কখনই বাফার ক্লায়েন্ট-সাইডটি অনুলিপি করার প্রয়োজন নেই এবং 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
)? যদি তা না হয় তবে আমি কীভাবে এগুলি সমন্বয় করব?