ধারাবাহিক ওপেনএল কম্পিউট শ্যাডার অনুরোধগুলি সিঙ্ক্রোনাইজ করা


12

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

উত্তর:


12

না এটির গ্যারান্টি নেই, যেহেতু ওপেনজিএল স্পেসিফিকেশন অনুমতি দেয় যে দুটি কম্পিউট শ্যাডার একই সাথে বা এমনকি বিভিন্ন ক্রমে চালানো যায়।

থেকে লেখকের দৃশ্যমানতা নিশ্চিত করতে আপনাকে glMemoryBarrier(GL_SHADER_STORAGE_BARRIER_BIT)দ্বিতীয়টির আগে কল glDispatchComputeকরতে হবে program_one


মেমরির মডেলটির ওপেনজিএল.আর উইকি নিবন্ধ থেকে :

[...] পর্যায়ের মধ্যে অনুরোধগুলি যে কোনও ক্রমে কার্যকর করা যেতে পারে। এর মধ্যে বিভিন্ন রেন্ডারিং কমান্ড দ্বারা চালিত অনুরোধগুলি অন্তর্ভুক্ত রয়েছে। যদিও বিভিন্ন রেন্ডারিং অপারেশন থেকে দুটি ভার্টেক্স শেডার একই সাথে চলতে পারে এটি সম্ভবত অসম্ভব, তাই ওপেনজিএল কোনও গ্যারান্টি সরবরাহ করে না

শ্যাডার স্টোরেজ বাফার সম্পর্কিত ওপেনগল.আর.জি. উইকি নিবন্ধ থেকে :

এসএসবিওগুলি অন্তর্নিহিত মেমরি অ্যাক্সেসগুলি পড়ে এবং লেখাগুলি ব্যবহার করে, তাই তাদের উপযুক্ত বাধাগুলি যেমন ইমেজ লোড স্টোর ক্রিয়াকলাপগুলির প্রয়োজন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.