নেটিভ এবং মালিকানাধীন ইঞ্জিন

অ্যান্ড্রয়েডে ভলকান দিয়ে শুরু করুন

ভলকান হলো অ্যান্ড্রয়েডের প্রধান লো-লেভেল গ্রাফিক্স এপিআই। যেসব গেম নিজস্ব গেম ইঞ্জিন এবং রেন্ডারার ব্যবহার করে, ভলকান তাদের জন্য সর্বোত্তম পারফরম্যান্স প্রদান করে।

আপনার গেম ইঞ্জিনে সফলভাবে ভলকান প্রয়োগ করতে হলে আপনাকে অবশ্যই:

  • ভুলকানের সাথে কোন অ্যান্ড্রয়েড ডিভাইসগুলো ব্যবহার করতে হবে তা শনাক্ত করুন
  • পুরোনো অ্যান্ড্রয়েড ডিভাইস সমর্থন করার সুবিধা-অসুবিধাগুলো বুঝুন।
  • আপনার অ্যান্ড্রয়েড বিল্ড টার্গেটে ভলকান যোগ করুন
  • Vulkan-এর জন্য SPIR-V তৈরি করতে একটি শেডার কম্পাইলার বেছে নিন।
  • রানটাইমে উপলব্ধ ভলকান এপিআই সংস্করণ নির্ধারণ করুন
  • ভলকান প্রোফাইল, ফ্রেম পেসিং এবং প্রি-রোটেশন ব্যবহার করে কীভাবে আপনার ভলকান রেন্ডারিং অপারেশন অপ্টিমাইজ করবেন তা শিখুন।
  • ডিবাগিং এবং পারফরম্যান্স বিশ্লেষণের জন্য গ্রাফিক্স টুল নির্বাচন করুন

ভুলকানের জন্য ন্যূনতম ডিভাইস স্পেসিফিকেশন নির্বাচন করুন

অ্যান্ড্রয়েড ৭.০ (এপিআই লেভেল ২৪) থেকে ভলকান অ্যান্ড্রয়েডে উপলব্ধ। অ্যান্ড্রয়েড ৭.০ বা তার উচ্চতর সংস্করণে চালিত সব অ্যান্ড্রয়েড ডিভাইস ভলকান সমর্থন করে না। আপনার গেমটি কোন কোন ভলকান-সক্ষম অ্যান্ড্রয়েড ডিভাইস সমর্থন করে, তা আপনাকে নির্ধারণ করতে হবে।

সুপারিশসমূহ

ভুলকান সমর্থনের জন্য ন্যূনতম প্রয়োজনীয়তা হিসেবে নিম্নলিখিত স্পেসিফিকেশনগুলো ব্যবহার করুন:

  • ডিভাইসটি অ্যান্ড্রয়েড ১০.০ (এপিআই লেভেল ২৯) বা তার উচ্চতর সংস্করণে চলছে।
  • ডিভাইসটি ভলকান এপিআই সংস্করণ ১.১ বা তার উচ্চতর সংস্করণ সমর্থন করে।
  • ডিভাইসটির হার্ডওয়্যার সক্ষমতা ও ফিচারসমূহ ২০২২ সালের অ্যান্ড্রয়েড বেসলাইন প্রোফাইলের সাথে সামঞ্জস্যপূর্ণ।

পুরোনো ডিভাইস সমর্থন

If your game is designed to run on a wide range of devices with varying levels of graphics capabilities, you may need to support devices older than those recommended in Choose minimum devices specifications for Vulkan . Before building support for older devices, evaluate whether Vulkan provides benefits to your game. Games that have lots of draw calls and that use OpenGL ES can see significant driver overhead due to the high cost of making draw calls within OpenGL ES. These games can become CPU bound from spending large portions of their frame time in the graphics driver. The games can also see significant reductions in CPU and power use by switching from OpenGL ES to Vulkan. This is especially applicable if your game has complex scenes that can't effectively use instancing to reduce draw calls. When targeting older devices, include OpenGL ES rendering support as a fallback, as some devices in your target device list may have Vulkan implementations that can't run your game reliably.

আপনি হয়তো পুরোনো ভলকান-সক্ষম ডিভাইসগুলোকে সমর্থন করতে চাইবেন না, কারণ সেগুলোতে পারফরম্যান্স ও ফিচারের অভাব রয়েছে অথবা স্থিতিশীলতার সমস্যা আছে।

কর্মক্ষমতা এবং বৈশিষ্ট্য

Older Vulkan-capable Android devices may not have the rendering performance or hardware support for features needed to run your game. This is especially likely if your game has high-fidelity graphics and Vulkan is the only API you are targeting on Android. Many older devices are limited to version 1.0.3 of the Vulkan API and are often missing widely used Vulkan extensions available on more modern hardware.

স্থিতিশীলতা

পুরোনো অ্যান্ড্রয়েড ডিভাইসগুলোতে সেকেলে ভলকান ড্রাইভার ব্যবহৃত হতে পারে। এই ড্রাইভার সংস্করণগুলোতে এমন বাগ থাকতে পারে যা আপনার গেমের স্থিতিশীলতাকে প্রভাবিত করতে পারে। ড্রাইভারের বাগগুলো সমাধান করতে প্রচুর পরীক্ষা-নিরীক্ষা এবং প্রকৌশলগত সময়ের প্রয়োজন হতে পারে।

আপনার প্রোজেক্টে Vulkan যোগ করুন

আপনার প্রোজেক্টে Vulkan যোগ করতে হলে আপনাকে যা করতে হবে:

  • ভলকান এপিআই হেডার অন্তর্ভুক্ত করুন
  • SPIR-V-তে শেডার কোড কম্পাইল করুন
  • রানটাইমে ভলকান এপিআই কল করুন

ভলকান এপিআই হেডার অন্তর্ভুক্ত করুন

Your game needs to include the Vulkan API header files to compile code that uses Vulkan. You can find a copy of the Vulkan headers in the Android NDK or packaged in Vulkan SDK releases . Any particular NDK version only includes Vulkan headers available at the time of the NDK release. If you use Vulkan headers from the NDK, use NDK version 25 or higher, which includes header files that support Vulkan version 1.3. The Vulkan SDK has the most current version of the headers.

SPIR-V-তে শেডার কোড কম্পাইল করুন

The Vulkan API expects shader programs to be provided in the SPIR-V binary intermediate format. This convention is different from OpenGL ES, where you could submit source code written in the OpenGL Shading Language (GLSL) as text strings. Use a shader compiler to take code written in a shader language such as GLSL or the High-level Shader Language (HLSL) and compile it into SPIR-V modules for use with Vulkan.

shaderc কম্পাইলার ব্যবহার করে GLSL-এ লেখা শেডার প্রোগ্রামগুলোকে SPIR-V-তে কম্পাইল করা যায়। যদি আপনার গেমে HLSL ব্যবহৃত হয়, তাহলে DirectXShaderCompiler SPIR-V আউটপুট সমর্থন করে। সাধারণত, আপনি আপনার গেমের অ্যাসেট বিল্ড প্রক্রিয়ার অংশ হিসেবে শেডার প্রোগ্রামগুলো অফলাইনে কম্পাইল করেন এবং SPIR-V মডিউলগুলোকে আপনার রানটাইম অ্যাসেটের অংশ হিসেবে অন্তর্ভুক্ত করেন।

রানটাইমে ভলকান এপিআই কল করুন

To call the Vulkan API, your game needs to obtain function pointers to Vulkan API calls. The most straightforward way to do this is to link against the libvulkan.so shared library, which is included in the Android NDK. Linking against the library has two shortcomings: additional function dispatch overhead and limitations on which Vulkan API function pointers are automatically resolved.

When you call a Vulkan API function, control passes through a dispatch table managed by a construct called the Vulkan loader. Android uses its own Vulkan loader implementation and not the LunarG loader. This loader system is part of the layer architecture of the Vulkan API. Linking to the system library at build time results in an additional dispatch level for a given API call. While the overhead is small, it can be noticeable for games that perform high volumes of Vulkan calls.

সিস্টেম লাইব্রেরি সাধারণত শুধুমাত্র সেইসব ভলকান ফাংশনের পয়েন্টার রিজলভ করে যেগুলো কোর এপিআই-এর অংশ হিসেবে বিবেচিত। ভলকানের প্রচুর এক্সটেনশন রয়েছে, যেগুলো অতিরিক্ত ভলকান ফাংশন সংজ্ঞায়িত করে, এবং এগুলোর মধ্যে অনেকগুলোই সিস্টেম লাইব্রেরি দ্বারা স্বয়ংক্রিয়ভাবে রিজলভ হয় না। এই ভলকান ফাংশনগুলো ব্যবহার করার আগে আপনাকে ম্যানুয়ালি এগুলোর পয়েন্টার রিজলভ করতে হবে।

এই সমস্যাগুলো প্রশমিত করতে, রানটাইমে ব্যবহার করতে ইচ্ছুক সমস্ত ভলকান ফাংশনের পয়েন্টারগুলো ডায়নামিকভাবে রিজলভ করুন। এটি করার একটি উপায় হলো volk-এর মতো একটি ওপেন সোর্স মেটা-লোডার লাইব্রেরি ব্যবহার করা। AGDKTunnel স্যাম্পল গেমটি এই উদ্দেশ্যে volk-কে ইন্টিগ্রেট করেছে। আপনি যদি কোনো মেটা-লোডার লাইব্রেরি ব্যবহার করেন, তাহলে আপনার বিল্ড স্ক্রিপ্টে libvulkan.so শেয়ার্ড লাইব্রেরির সাথে লিঙ্ক করবেন না।

উপলব্ধ ভলকান এপিআই সংস্করণ নির্ধারণ করুন

অ্যান্ড্রয়েড নিম্নলিখিত ভলকান এপিআই সংস্করণগুলি সমর্থন করে:

  • ১.০.৩
  • ১.১
  • ১.৩

কোনো নির্দিষ্ট ডিভাইসে উপলব্ধ সর্বোচ্চ ভলকান এপিআই সংস্করণ নম্বরটি অ্যান্ড্রয়েড সংস্করণ এবং ভলকান ড্রাইভার সমর্থনের উপর নির্ভর করে নির্ধারিত হয়।

অ্যান্ড্রয়েড সংস্করণ

একটি ভলকান এপিআই সংস্করণের জন্য প্ল্যাটফর্ম সমর্থন ন্যূনতম অ্যান্ড্রয়েড সংস্করণ (এপিআই লেভেল)-এর উপর নির্ভরশীল:

  • ১.৩ — অ্যান্ড্রয়েড ১৩.০ (এপিআই লেভেল ৩৩) এবং উচ্চতর
  • ১.১ — অ্যান্ড্রয়েড ১০.০ (এপিআই লেভেল ২৯) এবং উচ্চতর
  • ১.০.৩ — অ্যান্ড্রয়েড ৭.০ (এপিআই লেভেল ২৪) এবং উচ্চতর সংস্করণ

ভুলকান ড্রাইভার সমর্থন

অ্যান্ড্রয়েড প্ল্যাটফর্মে কোনো ভলকান এপিআই সংস্করণ সমর্থিত হলেও, তার মানে এই নয় যে ডিভাইসটির ভলকান ড্রাইভারও সেই সংস্করণটি সমর্থন করবে। অ্যান্ড্রয়েড ১৩ চালিত একটি ডিভাইস হয়তো ভলকান এপিআই-এর শুধুমাত্র ১.১ সংস্করণটিই সমর্থন করে।

Vulkan চালু করার সময়, এর চেয়ে বড় কোনো API ভার্সনের জন্য অনুরোধ করবেন না:

  • ডিভাইসে চলমান অ্যান্ড্রয়েড সংস্করণের জন্য সর্বোচ্চ ভলকান এপিআই সংস্করণ
  • vkEnumerateInstanceVersion দ্বারা রিপোর্ট করা ভলকান এপিআই সংস্করণ
  • VkPhysicalDeviceProperties স্ট্রাকচারের apiVersion প্রপার্টি দ্বারা রিপোর্ট করা ভলকান এপিআই সংস্করণ।

সর্বোচ্চ সমর্থিত ভলকান এপিআই সংস্করণ নির্ধারণের একটি উদাহরণ নিচে দেওয়া হলো:

// Minimum Android API levels for Vulkan 1.3/1.1 version support
static constexpr int kMinimum_vk13_api_level = 33;
static constexpr int kMinimum_vk11_api_level = 29;

uint32_t GetHighestSupportedVulkanVersion(VkPhysicalDevice physical_device) {
  uint32_t instance_api_version = 0;
  vkEnumerateInstanceVersion(&instance_api_version);

  VkPhysicalDeviceProperties device_properties;
  vkGetPhysicalDeviceProperties(physical_device, &device_properties);

  // Instance and device versions don't have to match, use the lowest version
  // number for API support if they don't.
  const uint32_t driver_api_version =
      (instance_api_version < device_properties.apiVersion) ?
      instance_api_version : device_properties.apiVersion;

  const int device_api_level = android_get_device_api_level();
  if (device_api_level >= kMinimum_vk13_api_level &&
      driver_api_version >= VK_API_VERSION_1_3) {
    return VK_API_VERSION_1_3;
  } else if (device_api_level >= kMinimum_vk11_api_level &&
             driver_api_version >= VK_API_VERSION_1_1) {
    return VK_API_VERSION_1_1;
  }
  return VK_API_VERSION_1_0;
}

ভলকান প্রোফাইলের সামঞ্জস্যতা নির্ধারণ করুন

Vulkan profiles are JSON files that define a set of required features, extensions, capabilities, and minimum parameter limits that a Vulkan device must support to be compatible with the profile. To determine if a device is compatible with a specific Vulkan profile, such as the 2022 Android Baseline profile , use the open source Vulkan Profiles API library . You can also parse the profile JSON file yourself and query device capabilities using the relevant Vulkan APIs to determine profile compatibility.

ভলকান প্রোফাইল

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

অ্যান্ড্রয়েড বেসলাইন প্রোফাইল (ABP) হলো ভলকান প্রোফাইল তৈরির প্রথম প্রচেষ্টা। ABP2021 এবং ABP2022 হলো পূর্ববর্তী সংস্করণগুলোকে অন্তর্ভুক্ত করার জন্য তৈরি প্রোফাইল, যা সেই সময়ের ৮৫%-এর বেশি সক্রিয় ডিভাইসকে কভার করার লক্ষ্য রাখে। ভবিষ্যতে আর কোনো নতুন ABP আসবে না।

অ্যান্ড্রয়েডের জন্য ভলকান প্রোফাইল (VPA) হলো একটি নতুন ও ভবিষ্যৎমুখী প্রোফাইল, যার লক্ষ্য হলো সফটওয়্যার ডেভেলপারদের চাহিদা পূরণ করা এবং হার্ডওয়্যার ডেভেলপাররা ফিচারগুলো সরবরাহ করার সাথে সাথেই সেগুলোকে সামঞ্জস্যপূর্ণ করে তোলা। VPA15_minimums হলো অ্যান্ড্রয়েড ১৫-এর জন্য প্রথম প্রোফাইল এবং অ্যান্ড্রয়েডের প্রতিটি প্রধান রিলিজকে অন্তর্ভুক্ত করার জন্য প্রতি বছর একটি করে নতুন VPA আসবে।

ফ্রেম পেসিং বাস্তবায়ন করুন

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

অন্তর্নিহিত সিঙ্ক্রোনাইজেশন এবং ফ্রেম পেসিং-এর উপর নির্ভর করবেন না।

সোয়াপচেইন পরিচালনার জন্য vkAcquireNextImageKHR এবং vkQueuePresentKHR ব্যবহার করা হয়। সাধারণ অ্যাপ্লিকেশন বা জিপিইউ সিঙ্ক্রোনাইজেশনের জন্য এদের সম্ভাব্য ব্লকিং আচরণের উপর নির্ভর করা থেকে বিরত থাকুন।

এই ফাংশনগুলির সুনির্দিষ্ট ব্লকিং আচরণ বিভিন্ন ক্ষেত্রে যথেষ্ট ভিন্ন হতে পারে:

  • অ্যান্ড্রয়েড ডিভাইস
  • জিপিইউ ড্রাইভার
  • উপস্থাপনা ইঞ্জিনের অবস্থা ( VkPresentModeKHR )

vkAcquireNextImageKHR- এর একমাত্র উদ্দেশ্য হলো একটি উপলব্ধ প্রদর্শনযোগ্য ছবি সংগ্রহ করা এবং এটি ব্লক করতেও পারে বা নাও করতে পারে। একইভাবে, vkQueuePresentKHR একটি ছবি প্রদর্শনের জন্য অনুরোধকে কিউতে রাখে এবং এটিও ব্লক করতেও পারে বা নাও করতে পারে।

এই দুটি ফাংশনের কোনোটিই সম্পর্কহীন সিপিইউ টাস্ক বা জিপিইউ অপারেশন সিঙ্ক্রোনাইজ করার ক্ষেত্রে নির্ভরযোগ্য নিশ্চয়তা প্রদান করে না।

For robust synchronization, always employ explicit Vulkan primitives like semaphores for GPU-GPU dependencies (eg, render-to-present), fences for GPU-CPU synchronization (eg, knowing when rendering is finished on the CPU), and pipeline barriers or events for finer-grained GPU execution and memory dependencies. Using explicit synchronization ensures predictable behavior and avoids subtle bugs caused by implementation-specific timing variations inherent in Android's diverse hardware ecosystem.

প্রাক-ঘূর্ণন বাস্তবায়ন করুন

Android devices can display in multiple orientations. The device orientation can be different from the orientation of the render surface. Unlike OpenGL ES on Android, Vulkan does not handle discrepancies between the two. To understand how the orientation process works and the optimal method of handling orientation differences when using Vulkan, see Handle device rotation with Vulkan pre-rotation .

ভুলকান রেন্ডারিং-এর সমস্যা সমাধান এবং প্রোফাইল তৈরি

ভুলকান রেন্ডারিং কোডের রেন্ডারিং সমস্যা এবং পারফরম্যান্স সংক্রান্ত ত্রুটি নির্ণয়ে সাহায্য করার জন্য একাধিক টুল উপলব্ধ রয়েছে।

Vulkan-এর ডিবাগিং এবং প্রোফাইলিং টুলগুলো সম্পর্কে আরও তথ্যের জন্য, Tools & advanced features বিভাগটি দেখুন।

ভুলকান বৈধতা স্তর

Vulkan validation layers are runtime libraries that can be enabled to inspect your calls to the Vulkan API and provide warnings or errors about incorrect or nonoptimal use. These validation layers are not active by default, as the validation process adds runtime overhead and impacts the performance of your game. For information on how to use validation layers with your game, see Debugging with validation layer .

ফ্রেম ক্যাপচার টুল

একটি গেম ফ্রেম চলাকালীন করা ভলকান এপিআই কলগুলো রেকর্ড ও রিপ্লে করতে ফ্রেম ক্যাপচার টুল ব্যবহার করুন। এই টুলগুলো আপনাকে যা করতে দেয়:

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

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

অ্যান্ড্রয়েড জিপিইউ ইন্সপেক্টর (এজিআই) ব্যবহার করে ভলকান ফ্রেমও ক্যাপচার করা যায়।

কর্মক্ষমতা বিশ্লেষণ সরঞ্জাম

Use performance analysis tools to investigate rendering issues in your game that cause suboptimal frame rates. Individual GPU vendors provide tools designed to profile your game and provide performance data specific to their GPU architectures. The performance characteristics and bottlenecks of your game can vary significantly when rendering on GPUs from different vendors or even on different GPU generations from the same vendor.

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

CTS-D দিয়ে ভলকান টেস্টিং উন্নত করুন

অ্যান্ড্রয়েড-চালিত ডিভাইস নির্মাতারা তাদের ডিভাইসগুলো সামঞ্জস্যপূর্ণ কিনা তা নিশ্চিত করতে কম্প্যাটিবিলিটি টেস্ট স্যুট (CTS) ব্যবহার করে। ডেভেলপার-পাওয়ার্ড CTS (CTS-D) হলো অ্যান্ড্রয়েড অ্যাপ্লিকেশন ডেভেলপারদের দ্বারা জমা দেওয়া পরীক্ষা, যা নিশ্চিত করে যে ভবিষ্যতের অ্যান্ড্রয়েড ডিভাইসগুলো তাদের ব্যবহারের চাহিদা পূরণ করবে এবং তাদের অ্যাপ্লিকেশনগুলো মসৃণভাবে ও ত্রুটিমুক্তভাবে চালাতে সক্ষম হবে।

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

পরীক্ষার প্রস্তাব কীভাবে জমা দিতে হয়, তার ধাপে ধাপে নির্দেশনার জন্য CTS জমা দেওয়ার প্রক্রিয়াটি দেখে নিন।