কাজের চাপের জন্য যেখানে GPU কম্পিউট আদর্শ, রেন্ডারস্ক্রিপ্ট স্ক্রিপ্টগুলিকে Vulkan কম্পিউটে স্থানান্তর করা আপনার অ্যাপকে GPU হার্ডওয়্যারের উপর আরও সরাসরি নিয়ন্ত্রণ দেয়, সম্ভাব্যভাবে অন্যান্য API-এর তুলনায় অতিরিক্ত কর্মক্ষমতা আনলক করে।
রেন্ডারস্ক্রিপ্ট স্ক্রিপ্ট প্রতিস্থাপন করতে ভলকান কম্পিউট শেডার ব্যবহার করতে সাহায্য করার জন্য একটি উচ্চ-স্তরের ওভারভিউ অনুসরণ করা হয়েছে।
ভলকান ইনিশিয়ালাইজেশন
কোটলিন বা জাভাতে একটি রেন্ডারস্ক্রিপ্ট প্রসঙ্গ অবজেক্ট তৈরি করার পরিবর্তে, NDK ব্যবহার করে একটি ভলকান প্রসঙ্গ তৈরি করতে নিম্নলিখিত পদক্ষেপগুলি সম্পাদন করুন৷
একটি ভলকান উদাহরণ তৈরি করুন।
একটি কম্পিউট সারি সমর্থন করে এমন একটি ভলকান ফিজিক্যাল ডিভাইস বেছে নিন।
একটি ভলকান লজিক্যাল ডিভাইস তৈরি করুন এবং কম্পিউট সারি পান।
ঐচ্ছিকভাবে, আপনি আপনার Vulkan অ্যাপ্লিকেশন বিকাশের গতি বাড়ানোর জন্য Android এ Vulkan যাচাইকরণ স্তরগুলি সেট আপ করতে পারেন৷
নমুনা অ্যাপটি দেখায় কিভাবে VulkanContext.h
এ ভলকান প্রসঙ্গ শুরু করতে হয়। আরও জানতে, ভলকান স্পেসিফিকেশনের সূচনা এবং ডিভাইস এবং সারি বিভাগগুলি দেখুন।
ভলকান বরাদ্দ
একটি রেন্ডারস্ক্রিপ্ট বরাদ্দ একটি Vulkan স্টোরেজ ইমেজ বা একটি Vulkan স্টোরেজ বাফারে স্থানান্তরিত করা যেতে পারে। শুধুমাত্র পঠনযোগ্য চিত্রগুলির সাথে আরও ভাল কার্যকারিতার জন্য, একটি সম্মিলিত চিত্র স্যাম্পলার হিসাবে, অথবা স্বতন্ত্র নমুনা এবং নমুনাযুক্ত চিত্র বাইন্ডিং সহ একটি নমুনাযুক্ত চিত্র ব্যবহার করুন।
Vulkan সম্পদ Vulkan মধ্যে বরাদ্দ করা হয়. অন্যান্য অ্যান্ড্রয়েড উপাদানগুলির সাথে ইন্টারঅ্যাক্ট করার সময় মেমরি কপি করা ওভারহেড এড়াতে, VK_ANDROID_external_memory_android_hardware_buffer
এক্সটেনশনটি Vulkan-এ একটি Android AHardwareBuffer
আমদানি করার কথা বিবেচনা করুন৷ এই এক্সটেনশনটি Vulkan 1.1 সমর্থনকারী সমস্ত Android ডিভাইসে উপলব্ধ। আরও তথ্যের জন্য, FEATURE_VULKAN_HARDWARE_VERSION
দেখুন।
নমুনা অ্যাপটি দেখায় কিভাবে VulkanResources.h
এ ভলকান রিসোর্স তৈরি করতে হয়। আরও জানতে, ভলকান স্পেসিফিকেশনের রিসোর্স তৈরি এবং রিসোর্স বর্ণনাকারী বিভাগগুলি দেখুন।
ভলকান কম্পিউট শেডারে রূপান্তর
আপনার রেন্ডারস্ক্রিপ্ট স্ক্রিপ্টগুলিকে ভলকান কম্পিউট শেডারে রূপান্তর করতে হবে৷ রেন্ডারস্ক্রিপ্ট গ্লোবাল ব্যবহারের উপর নির্ভর করে আপনাকে আপনার কোড মানিয়ে নিতে হতে পারে।
একটি ভলকান কম্পিউট শেডার লিখুন
একটি Vulkan কম্পিউট শেডার সাধারণত OpenGL Shading Language (GLSL) এ লেখা হয় এবং তারপর স্ট্যান্ডার্ড পোর্টেবল ইন্টারমিডিয়েট রিপ্রেজেন্টেশন-V (SPIR-V) ফরম্যাটে কম্পাইল করা হয়।
আপনার অ্যাপে শেডারগুলিকে একীভূত করার জন্য বিশদ তথ্য এবং নির্দেশাবলীর জন্য, Android এ Vulkan shader কম্পাইলারগুলি দেখুন।
স্ক্রিপ্ট বিশ্বব্যাপী অভিযোজন
স্ক্রিপ্ট গ্লোবালের বৈশিষ্ট্যের উপর ভিত্তি করে, আমরা বিশেষায়িত ধ্রুবক, পুশ ধ্রুবক, বা গ্লোবালের জন্য অভিন্ন বাফার অবজেক্ট ব্যবহার করার পরামর্শ দিই যেগুলি শেডারের মধ্যে পরিবর্তন করা হয়নি:
- স্পেশালাইজেশন কনস্ট্যান্টস : স্ক্রিপ্ট গ্লোবালের জন্য প্রস্তাবিত যা বেশিরভাগ কার্নেল আহ্বান জুড়ে সামঞ্জস্যপূর্ণ। বিশেষীকরণ ধ্রুবকের মান পরিবর্তন করে কম্পিউট পাইপলাইন পুনরায় তৈরি করতে হবে।
- পুশ ধ্রুবক :
maxPushConstantsSize
(নিশ্চিত সর্বনিম্ন: 128 বাইট) থেকে ছোট আকারের ঘন ঘন-পরিবর্তিত স্ক্রিপ্ট গ্লোবালের জন্য প্রস্তাবিত। - ইউনিফর্ম বাফার : পুশ ধ্রুবক সীমার চেয়ে বড় আকারের ঘন ঘন পরিবর্তিত স্ক্রিপ্ট গ্লোবালগুলির জন্য প্রস্তাবিত৷
শেডারের মধ্যে পরিবর্তিত গ্লোবালগুলির জন্য, আপনি Vulkan স্টোরেজ ইমেজ বা Vulkan স্টোরেজ বাফার ব্যবহার করতে পারেন।
গণনা
GPU আপনার কম্পিউট শেডার কার্যকর করার জন্য আপনাকে একটি ভলকান কম্পিউট পাইপলাইন তৈরি করতে হবে।
একটি ভলকান কম্পিউট পাইপলাইন তৈরি করুন
নমুনা অ্যাপের ComputePipeline.h
ফাইলটি দেখায় যে কীভাবে ভলকান কম্পিউট পাইপলাইন তৈরি করতে হয়।
ভলকানে একটি সংকলিত SPIR-V শেডার ব্যবহার করতে, নিম্নরূপ একটি ভলকান কম্পিউট পাইপলাইন তৈরি করুন:
- কম্পাইল করা SPIR-V শেডার দিয়ে একটি শেডার মডিউল তৈরি করুন।
- রিসোর্স বাইন্ডিং নির্দিষ্ট করে একটি বর্ণনাকারী সেট লেআউট তৈরি করুন (আরো বিশদ বিবরণের জন্য বরাদ্দ দেখুন)।
- বর্ণনাকারী সেট লেআউট থেকে একটি বর্ণনাকারী সেট তৈরি করুন।
- বর্ণনাকারী সেট লেআউট থেকে একটি পাইপলাইন বিন্যাস তৈরি করুন।
- শেডার মডিউল এবং পাইপলাইন লেআউট সহ একটি গণনা পাইপলাইন তৈরি করুন।
আরও তথ্যের জন্য, ভলকান স্পেসিফিকেশনে কম্পিউট পাইপলাইন বিভাগটি দেখুন।
একটি গণনা শুরু করুন
একটি গণনা পাইপলাইন দিয়ে গণনা শুরু করতে:
- ভলকান সংস্থানগুলির সাথে বর্ণনাকারী সেট আপডেট করুন।
- একটি Vulkan কমান্ড বাফার তৈরি করুন এবং নিম্নলিখিত কমান্ডগুলি রেকর্ড করুন:
- পাইপলাইন এবং বর্ণনাকারী সেট বাঁধুন।
- কম্পিউট ওয়ার্কগ্রুপ প্রেরণ করুন।
- কম্পিউট সারিতে কমান্ড বাফার জমা দিন।
- সারিতে অপেক্ষা করুন, অথবা ঐচ্ছিকভাবে একটি সিঙ্ক বেড়া ফেরত দিন।
একাধিক কার্নেল একসাথে চেইন করতে (উদাহরণস্বরূপ, ScriptGroup
ব্যবহার করে কোড স্থানান্তর করতে), সেগুলিকে একটি একক কমান্ড বাফারে রেকর্ড করুন এবং মেমরি বাধাগুলির সাথে সিঙ্ক্রোনাইজ করুন।
নমুনা অ্যাপ্লিকেশন দুটি গণনা কাজ প্রদর্শন করে:
- HUE ঘূর্ণন: একটি একক কম্পিউট শেডার সহ একটি সাধারণ গণনা কাজ৷ কোড নমুনার জন্য
ImageProcessor::rotateHue
দেখুন। - ব্লার: একটি আরও জটিল কম্পিউট টাস্ক যা ক্রমানুসারে দুটি কম্পিউট শেডার নির্বাহ করে। কোড নমুনার জন্য
ImageProcessor::blur
দেখুন।
কমান্ড বাফার বা মেমরি বাধা সম্পর্কে আরও জানতে, কমান্ড বাফার এবং মেমরি বাধা নামক ভলকান স্পেসিফিকেশনের বিভাগগুলি পড়ুন।