ভলকান ডিজাইন নির্দেশিকা

ভলকান পূর্ববর্তী গ্রাফিক্স এপিআইগুলির থেকে ভিন্ন যে ড্রাইভাররা অ্যাপের জন্য পাইপলাইন পুনঃব্যবহারের মতো নির্দিষ্ট অপ্টিমাইজেশানগুলি সম্পাদন করে না। পরিবর্তে, ভলকান ব্যবহার করা অ্যাপগুলিকে অবশ্যই এই ধরনের অপ্টিমাইজেশান প্রয়োগ করতে হবে। যদি তারা তা না করে, তাহলে তারা OpenGL ES চালিত অ্যাপগুলির চেয়ে খারাপ কর্মক্ষমতা প্রদর্শন করতে পারে।

যখন অ্যাপগুলি এই অপ্টিমাইজেশানগুলি নিজেরাই প্রয়োগ করে, তখন তাদের চালকের চেয়ে বেশি সফলতার সাথে এটি করার সম্ভাবনা থাকে, কারণ প্রদত্ত ব্যবহারের ক্ষেত্রে তাদের আরও নির্দিষ্ট তথ্যে অ্যাক্সেস রয়েছে। ফলস্বরূপ, ভলকান ব্যবহার করে এমন একটি অ্যাপকে দক্ষতার সাথে অপ্টিমাইজ করলে অ্যাপটি যদি OpenGL ES ব্যবহার করে থাকে তার চেয়ে ভাল কর্মক্ষমতা দিতে পারে।

এই পৃষ্ঠাটি বেশ কয়েকটি অপ্টিমাইজেশানের সাথে পরিচয় করিয়ে দেয় যা আপনার Android অ্যাপটি Vulkan থেকে কার্যক্ষমতা বৃদ্ধি পেতে প্রয়োগ করতে পারে৷

হার্ডওয়্যার ত্বরণ

বেশিরভাগ ডিভাইস হার্ডওয়্যার ত্বরণের মাধ্যমে ভলকান 1.1 সমর্থন করে যখন একটি ছোট উপসেট সফ্টওয়্যার এমুলেশনের মাধ্যমে এটিকে সমর্থন করে। অ্যাপগুলি vkGetPhysicalDeviceProperties ব্যবহার করে একটি সফ্টওয়্যার-ভিত্তিক Vulkan ডিভাইস সনাক্ত করতে পারে এবং ফিরে আসা কাঠামোর deviceType ক্ষেত্রটি পরীক্ষা করে৷ SwiftShader এবং অন্যান্য CPU-ভিত্তিক বাস্তবায়নের মান আছে VK_PHYSICAL_DEVICE_TYPE_CPU । অ্যাপ্লিকেশানগুলি SwiftShader-নির্দিষ্ট মানগুলির জন্য একই কাঠামোর vendorID এবং deviceID ক্ষেত্রগুলি পরীক্ষা করে সুইফটশেডারের জন্য বিশেষভাবে পরীক্ষা করতে পারে।

পারফরম্যান্স-সমালোচনামূলক অ্যাপগুলিকে সফ্টওয়্যার-অনুকরণ করা ভলকান বাস্তবায়ন এড়ানো উচিত এবং পরিবর্তে OpenGL ES-এ ফিরে যাওয়া উচিত।

রেন্ডারিংয়ের সময় প্রদর্শন ঘূর্ণন প্রয়োগ করুন

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

বিপরীতে, সোয়াপচেন ছবিগুলি তৈরি করার সময় ঘোরানোর ফলে সামান্য, যদি থাকে, অতিরিক্ত শক্তি খরচ হয়। VkSurfaceCapabilitiesKHR::currentTransform ক্ষেত্রটি ঘূর্ণন নির্দেশ করে যা কম্পোজিটর উইন্ডোতে প্রযোজ্য। রেন্ডারিংয়ের সময় একটি অ্যাপ সেই ঘূর্ণন প্রয়োগ করার পরে, অ্যাপটি VkSwapchainCreateInfoKHR::preTransform ফিল্ড ব্যবহার করে রিপোর্ট করে যে ঘূর্ণন সম্পূর্ণ হয়েছে।

প্রতি ফ্রেম রেন্ডার পাস মিনিমাইজ করুন

বেশিরভাগ মোবাইল GPU আর্কিটেকচারে, রেন্ডার পাস শুরু করা এবং শেষ করা একটি ব্যয়বহুল অপারেশন। আপনার অ্যাপ যতটা সম্ভব কম রেন্ডার পাসে রেন্ডারিং ক্রিয়াকলাপ সংগঠিত করে কর্মক্ষমতা উন্নত করতে পারে।

বিভিন্ন সংযুক্তি-লোড এবং সংযুক্তি-স্টোর অপারেশনগুলি বিভিন্ন স্তরের কর্মক্ষমতা অফার করে। উদাহরণস্বরূপ, যদি আপনার একটি সংযুক্তির বিষয়বস্তু সংরক্ষণ করার প্রয়োজন না হয়, আপনি VK_ATTACHMENT_LOAD_OP_LOAD এর পরিবর্তে আরও দ্রুত VK_ATTACHMENT_LOAD_OP_CLEAR বা VK_ATTACHMENT_LOAD_OP_DONT_CARE ব্যবহার করতে পারেন। একইভাবে, যদি আপনাকে পরবর্তী ব্যবহারের জন্য মেমরিতে সংযুক্তির চূড়ান্ত মানগুলি লেখার প্রয়োজন না হয়, তাহলে আপনি VK_ATTACHMENT_STORE_OP_STORE এর চেয়ে অনেক ভালো কর্মক্ষমতা অর্জন করতে VK_ATTACHMENT_STORE_OP_DONT_CARE ব্যবহার করতে পারেন।

এছাড়াও, বেশিরভাগ রেন্ডার পাসে, আপনার অ্যাপের গভীরতা/স্টেনসিল সংযুক্তি লোড বা সঞ্চয় করার প্রয়োজন নেই। এই ধরনের ক্ষেত্রে, আপনি সংযুক্তি চিত্র তৈরি করার সময় VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT পতাকা ব্যবহার করে সংযুক্তির জন্য শারীরিক মেমরি বরাদ্দ করা এড়াতে পারেন। এই বিটটি OpenGL ES-এ glFramebufferDiscard এর মতো একই সুবিধা প্রদান করে।

উপযুক্ত মেমরি প্রকার নির্বাচন করুন

ডিভাইস মেমরি বরাদ্দ করার সময়, অ্যাপ্লিকেশানগুলিকে অবশ্যই একটি মেমরি টাইপ বেছে নিতে হবে। মেমরির ধরন নির্ধারণ করে কিভাবে একটি অ্যাপ মেমরি ব্যবহার করতে পারে, এবং মেমরির ক্যাশিং এবং সমন্বয় বৈশিষ্ট্যও বর্ণনা করে। বিভিন্ন ডিভাইসে বিভিন্ন ধরনের মেমরি পাওয়া যায়; বিভিন্ন মেমরি ধরনের বিভিন্ন কর্মক্ষমতা বৈশিষ্ট্য প্রদর্শন করে.

একটি অ্যাপ একটি প্রদত্ত ব্যবহারের জন্য সেরা মেমরি টাইপ বাছাই করতে একটি সাধারণ অ্যালগরিদম ব্যবহার করতে পারে। এই অ্যালগরিদমটি VkPhysicalDeviceMemoryProperties::memoryTypes অ্যারেতে প্রথম মেমরি টাইপ বাছাই করে যা দুটি মানদণ্ড পূরণ করে: মেমরির ধরনটি অবশ্যই বাফার বা চিত্রের জন্য অনুমোদিত হতে হবে এবং অ্যাপটির প্রয়োজন ন্যূনতম বৈশিষ্ট্য থাকতে হবে।

মোবাইল সিস্টেমে সাধারণত CPU এবং GPU-এর জন্য আলাদা শারীরিক মেমরির স্তূপ থাকে না। এই ধরনের সিস্টেমে, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT যতটা তাৎপর্যপূর্ণ নয় যতটা তা এমন সিস্টেমে যার নিজস্ব, ডেডিকেটেড মেমরির সাথে আলাদা GPU আছে। একটি অ্যাপ্লিকেশন এই সম্পত্তি প্রয়োজন অনুমান করা উচিত নয়.

গ্রুপ বর্ণনাকারী ফ্রিকোয়েন্সি দ্বারা সেট

আপনার যদি রিসোর্স বাইন্ডিং থাকে যা বিভিন্ন ফ্রিকোয়েন্সিতে পরিবর্তিত হয়, তবে প্রতিটি ড্রয়ের জন্য সমস্ত সংস্থান রিবাইন্ড করার পরিবর্তে প্রতি পাইপলাইনে একাধিক বর্ণনাকারী সেট ব্যবহার করুন। উদাহরণস্বরূপ, প্রতি-দৃশ্য বাইন্ডিংয়ের জন্য আপনার কাছে বর্ণনাকারীর একটি সেট, প্রতি-ম্যাটেরিয়াল বাইন্ডিংয়ের জন্য আরেকটি সেট এবং প্রতি-মেশ-ইনস্ট্যান্স বাইন্ডিংয়ের জন্য তৃতীয় সেট থাকতে পারে।

সর্বোচ্চ-ফ্রিকোয়েন্সি পরিবর্তনের জন্য অবিলম্বে ধ্রুবক ব্যবহার করুন, যেমন প্রতিটি ড্র কলের সাথে সম্পাদিত পরিবর্তনগুলি।