เครื่องมือแบบเนทีฟและที่เป็นกรรมสิทธิ์

เริ่มต้นใช้งาน Vulkan ใน Android

Vulkan เป็น API กราฟิกระดับต่ำหลักใน Android Vulkan ให้ผลลัพธ์ที่ดีที่สุด ประสิทธิภาพสำหรับเกมที่ใช้เครื่องมือเกมและโหมดแสดงภาพของตนเอง

หากต้องการใช้ Vulkan ในเครื่องมือสร้างเกมให้สำเร็จ คุณต้องมีคุณสมบัติดังนี้

  • ระบุอุปกรณ์ Android ที่จะใช้กับ Vulkan
  • ทำความเข้าใจข้อดีข้อเสียของการรองรับอุปกรณ์ Android รุ่นเก่า
  • เพิ่ม Vulkan ลงในเป้าหมายการสร้าง Android
  • เลือกคอมไพเลอร์ Shader เพื่อสร้าง SPIR-V สำหรับ Vulkan
  • กำหนดเวอร์ชัน Vulkan API ที่พร้อมใช้งานขณะรันไทม์
  • ดูวิธีเพิ่มประสิทธิภาพการดำเนินการแสดงผล Vulkan ด้วยโปรไฟล์ Vulkan, การกำหนดเฟรม และการปรับภาพก่อนแสดง
  • เลือกเครื่องมือกราฟิกสำหรับการแก้ไขข้อบกพร่องและการวิเคราะห์ประสิทธิภาพ
    หมายเหตุ: ดูข้อมูลเกี่ยวกับการใช้ Vulkan ใน Android กับเครื่องมือเกม Unity หรือ Unreal ได้ที่
  • Vulkan บน Unity
  • Vulkan ใน Unreal

เลือกข้อมูลจำเพาะของอุปกรณ์ขั้นต่ำสำหรับ Vulkan

Vulkan พร้อมให้บริการใน Android โดยเริ่มจาก Android 7.0 (API ระดับ 24) ไม่ใช่ อุปกรณ์ Android ทั้งหมดที่ใช้ Android 7.0 ขึ้นไปรองรับ Vulkan คุณต้องระบุว่าเกมรองรับอุปกรณ์ Android ที่ใช้ Vulkan ได้รุ่นใดบ้าง

คำแนะนำ

ใช้ข้อกำหนดต่อไปนี้เป็นข้อกำหนดขั้นต่ำสำหรับการรองรับ Vulkan

  • อุปกรณ์ใช้ Android 10.0 (API ระดับ 29) ขึ้นไป
  • อุปกรณ์รองรับ Vulkan API เวอร์ชัน 1.1 ขึ้นไป
  • อุปกรณ์มีความสามารถด้านฮาร์ดแวร์และฟีเจอร์ที่เข้ากันได้กับปี 2022 โปรไฟล์พื้นฐานของ Android

การรองรับอุปกรณ์รุ่นเก่า

หากเกมออกแบบมาให้ทำงานได้ในอุปกรณ์ที่หลากหลายซึ่งมีความสามารถด้านกราฟิกในระดับต่างๆ คุณอาจต้องรองรับอุปกรณ์ที่เก่ากว่าอุปกรณ์ที่แนะนำในเลือกข้อกำหนดขั้นต่ำของอุปกรณ์สำหรับ Vulkan ก่อนที่จะสร้างการรองรับอุปกรณ์รุ่นเก่า ให้ประเมินว่า Vulkan ให้บริการ ประโยชน์ที่มีต่อเกมของคุณ เกมที่มีการเรียกใช้การวาดจำนวนมากและใช้ OpenGL ES อาจเห็นค่าใช้จ่ายเพิ่มเติมของไดรเวอร์อย่างมากเนื่องจากต้นทุนสูงของการทำ Draw Call ใน OpenGL ES เกมเหล่านี้อาจใช้ CPU มากเกินไปเนื่องจากใช้เวลาส่วนใหญ่ในการแสดงเฟรมในโปรแกรมควบคุมกราฟิก การแข่งขันยังมีโอกาสเห็น การลดลงของการใช้ CPU และการใช้พลังงานโดยการเปลี่ยนจาก OpenGL ES เป็น Vulkan นี่คือ โดยเฉพาะหากเกมมีฉากที่ซับซ้อนซึ่งใช้ เพื่อลดการเรียกร้องสิทธิ์ เมื่อกำหนดเป้าหมายอุปกรณ์รุ่นเก่า ให้ใส่ OpenGL ES การแสดงผลเป็นอุปกรณ์สำรอง เนื่องจากอุปกรณ์บางเครื่องในรายการอุปกรณ์เป้าหมายอาจ มีการใช้งาน Vulkan ที่ไม่สามารถเล่นเกมได้อย่างเสถียร

คุณอาจไม่ต้องการรองรับอุปกรณ์รุ่นเก่าที่รองรับ Vulkan เนื่องจากมีประสิทธิภาพและฟีเจอร์ไม่เพียงพอ หรือมีปัญหาด้านความเสถียร

ประสิทธิภาพและฟีเจอร์

อุปกรณ์ Android รุ่นเก่าที่รองรับ Vulkan อาจไม่มีประสิทธิภาพในการแสดงผลหรือ การสนับสนุนฮาร์ดแวร์สำหรับฟีเจอร์ที่จำเป็นในการเล่นเกม กรณีนี้อาจเกิดขึ้นได้หากเกมมีกราฟิกที่มีคุณภาพสูงและ Vulkan เป็น API เดียวที่คุณกำหนดเป้าหมายใน Android อุปกรณ์รุ่นเก่าจำนวนมากจำกัดอยู่ที่เวอร์ชัน 1.0.3 Vulkan API และมักไม่มีส่วนขยาย Vulkan ที่ใช้กันอย่างแพร่หลายซึ่งมีให้บริการในฟีเจอร์อื่นๆ ฮาร์ดแวร์ที่ทันสมัย

ความเสถียร

อุปกรณ์ Android รุ่นเก่าอาจใช้ไดรเวอร์ Vulkan ที่ล้าสมัย เวอร์ชันของไดรเวอร์เหล่านี้อาจมีข้อบกพร่องที่อาจส่งผลต่อความเสถียรของเกม การแก้ปัญหาข้อบกพร่องของไดรเวอร์อาจต้องใช้เวลาในการทดสอบและวิศวกรรมเป็นจำนวนมาก

เพิ่ม Vulkan ในโปรเจ็กต์

วิธีเพิ่ม Vulkan ในโปรเจ็กต์

  • รวมส่วนหัว Vulkan API
  • คอมไพล์โค้ด Shader เป็น SPIR-V
  • เรียกใช้ Vulkan API ขณะรันไทม์

รวมส่วนหัว Vulkan API

เกมของคุณต้องมีไฟล์ส่วนหัว Vulkan API เพื่อคอมไพล์โค้ดที่ใช้ Vulkan คุณดูสำเนาส่วนหัวของ Vulkan ได้ใน Android NDK หรือแพ็กเกจใน Vulkan SDK เวอร์ชันต่างๆ เวอร์ชัน NDK เฉพาะใดๆ รวมเฉพาะส่วนหัว Vulkan ที่ให้บริการ ณ เวลาที่ออก NDK หากคุณใช้ส่วนหัว Vulkan จาก NDK ให้ใช้ NDK เวอร์ชัน 25 ขึ้นไป ซึ่งมีไฟล์ส่วนหัวที่รองรับ Vulkan เวอร์ชัน 1.3 Vulkan SDK มี ของส่วนหัวเวอร์ชันปัจจุบัน

คอมไพล์โค้ด Shader เป็น SPIR-V

Vulkan API คาดหวังว่าโปรแกรม Shader จะอยู่ในรูปแบบกลางแบบไบนารี SPIR-V แบบแผนนี้แตกต่างจาก OpenGL ES ซึ่งคุณจะ สามารถส่งซอร์สโค้ดที่เขียนใน OpenGL Shading Language (GLSL) เป็นข้อความ สตริง ใช้คอมไพเลอร์ Shader เพื่อนำโค้ดที่เขียนด้วยภาษา Shader เช่น GLSL หรือ High-level Shader Language (HLSL) มาคอมไพล์เป็นโมดูล SPIR-V เพื่อใช้กับ Vulkan

คอมไพเลอร์ shaderc สามารถใช้คอมไพเลอร์โปรแกรม Shaderc ได้ ซึ่งเขียนด้วย GLSL เป็น SPIR-V หากเกมของคุณใช้ HLSL DirectXShaderCompiler รองรับเอาต์พุต SPIR-V โดยปกติแล้ว คุณจะคอมไพล์โปรแกรม Shader ออฟไลน์เป็นส่วนหนึ่งของกระบวนการสร้างชิ้นงานสำหรับเกม และรวมโมดูล SPIR-V ไว้ในชิ้นงานรันไทม์

เรียกใช้ Vulkan API ระหว่างรันไทม์

หากต้องการเรียกใช้ Vulkan API เกมของคุณจะต้องได้รับตัวชี้ฟังก์ชันสำหรับการเรียกใช้ Vulkan API วิธีที่ตรงที่สุดคือลิงก์กับlibvulkan.soไลบรารีที่ใช้ร่วมกันซึ่งรวมอยู่ใน Android NDK กำลังลิงก์ เทียบกับไลบรารีมีข้อบกพร่องอยู่ 2 ประการ ได้แก่ โอเวอร์เฮดการนำส่งฟังก์ชันเพิ่มเติม และข้อจำกัดต่างๆ ที่ตัวชี้ฟังก์ชัน Vulkan API จะดำเนินการโดยอัตโนมัติ แก้ปัญหาแล้ว

เมื่อคุณเรียกใช้ฟังก์ชัน Vulkan API ระบบจะส่งการควบคุมผ่าน dispatch table ที่จัดการโดยโครงสร้างที่เรียกว่า Vulkan Loader แอนดรอยด์ ใช้ตัวโหลด Vulkan ของตนเอง และไม่ใช่ LunarG ตัวโหลด ระบบโหลดนี้เป็นส่วนหนึ่งของสถาปัตยกรรมเลเยอร์ของ Vulkan API การลิงก์กับไลบรารีระบบ ณ เวลาบิลด์จะส่งผลให้มีการนำส่งเพิ่มเติม สำหรับการเรียก API หนึ่งๆ แม้ว่าการเรียกใช้ Vulkan จำนวนมากจะทำให้เกิดค่าใช้จ่ายเพิ่มเติมเพียงเล็กน้อย แต่ก็อาจสังเกตได้สำหรับเกมที่มีการเรียกใช้ Vulkan เป็นจำนวนมาก

โดยทั่วไปแล้ว ไลบรารีระบบจะแก้ไขตัวชี้ไปยังฟังก์ชัน Vulkan ที่ ถือว่าเป็นส่วนหนึ่งของ API หลัก Vulkan มีส่วนขยาย มากมาย กำหนดฟังก์ชัน Vulkan เพิ่มเติม ซึ่งหลายฟังก์ชันจะไม่ได้รับการแก้ไขโดยอัตโนมัติ จากไลบรารีของระบบ คุณต้องแก้ไขตัวชี้ไปยังฟังก์ชัน Vulkan เหล่านี้ด้วยตนเองก่อนจึงจะใช้ได้

แก้ไขตัวชี้แบบไดนามิกไปยังฟังก์ชัน Vulkan ทั้งหมดเพื่อลดปัญหาเหล่านี้ ที่ต้องการใช้ในช่วงรันไทม์ วิธีหนึ่งที่จะบรรลุเป้าหมายนี้ก็คือการใช้ ไลบรารีโอเพนซอร์ส Meta-loader เช่น volk เกมตัวอย่าง AGDKTunnel ผสานรวม volk เพื่อวัตถุประสงค์นี้ หากคุณใช้ไลบรารีตัวโหลดเมตา อย่าลิงก์กับlibvulkan.so ไลบรารีที่ใช้ร่วมกันในสคริปต์บิลด์

ระบุเวอร์ชันของ Vulkan API ที่พร้อมใช้งาน

Android รองรับ Vulkan API เวอร์ชันต่อไปนี้

  • 1.0.3
  • 1.1
  • 1.3

กำหนดหมายเลขเวอร์ชัน Vulkan API สูงสุดที่พร้อมใช้งานในอุปกรณ์ที่กำหนด ตามเวอร์ชัน Android และการสนับสนุนไดรเวอร์ของ Vulkan

เวอร์ชัน Android

การรองรับแพลตฟอร์มสำหรับเวอร์ชัน Vulkan API จะขึ้นอยู่กับ Android ขั้นต่ำ เวอร์ชัน (ระดับ API):

  • 1.3 — Android 13.0 (API ระดับ 33) ขึ้นไป
  • 1.1 — Android 10.0 (API ระดับ 29) ขึ้นไป
  • 1.0.3 — Android 7.0 (API ระดับ 24) ขึ้นไป

รองรับผู้ขับขี่ Vulkan

การรองรับแพลตฟอร์ม Android สำหรับเวอร์ชัน Vulkan API ไม่ได้รับประกัน API เวอร์ชันได้รับการสนับสนุนโดยไดรเวอร์ Vulkan ของอุปกรณ์ อุปกรณ์ที่ใช้ Android 13 อาจรองรับ Vulkan API เวอร์ชัน 1.1 เท่านั้น

เมื่อเริ่มต้น Vulkan อย่าขอ API เวอร์ชันที่มากกว่า

  • เวอร์ชัน Vulkan API สูงสุดสำหรับเวอร์ชันของ Android ที่ใช้งานบน อุปกรณ์
  • เวอร์ชัน Vulkan API ที่รายงานโดย vkEnumerateInstanceVersion
  • เวอร์ชัน Vulkan API ที่รายงานโดยพร็อพเพอร์ตี้ apiVersion ของ โครงสร้าง VkPhysicalDeviceProperties

ตัวอย่างการระบุเวอร์ชัน Vulkan API สูงสุดที่รองรับมีดังนี้

// 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

โปรไฟล์ Vulkan คือไฟล์ JSON ที่กำหนดชุดฟีเจอร์ ส่วนขยาย ความสามารถ และขีดจำกัดพารามิเตอร์ขั้นต่ำที่อุปกรณ์ Vulkan ต้องรองรับจึงจะใช้งานร่วมกับโปรไฟล์ได้ หากต้องการตรวจสอบว่าอุปกรณ์ใช้งานร่วมกับโปรไฟล์ Vulkan ที่เฉพาะเจาะจงได้หรือไม่ เช่น โปรไฟล์พื้นฐานของ Android ปี 2022 ให้ใช้ไลบรารี Vulkan Profiles API แบบโอเพนซอร์ส คุณยังแยกวิเคราะห์ไฟล์ JSON ของโปรไฟล์ด้วยตนเองและค้นหาความสามารถของอุปกรณ์ได้ด้วย ใช้ Vulkan API ที่เกี่ยวข้องเพื่อระบุความเข้ากันได้ของโปรไฟล์

โปรไฟล์ Vulkan

Android กำลังใช้โปรไฟล์ Vulkan ซึ่งกำหนดว่าฟีเจอร์และส่วนขยายใดที่พร้อมใช้งานสำหรับแต่ละฟีเจอร์ อุปกรณ์ที่ใช้ Android

Android Baseline Profile (ABP) คือความพยายามครั้งแรกในการสร้างโปรไฟล์ Vulkan ABP2021 และ ABP2022 กำลังมองย้อนกลับไปยังโปรไฟล์ที่มุ่งหวังให้ครอบคลุม > 85% ของอุปกรณ์ที่ใช้งานอยู่ในเวลานั้น จะไม่มี ABP ใหม่อีกต่อไป

โปรไฟล์ Vulkan สำหรับ Android (VPA) เป็นโปรไฟล์สำหรับอนาคตที่มุ่งหวัง สอดคล้องกับความต้องการของนักพัฒนาซอฟต์แวร์ และขับเคลื่อนคุณลักษณะที่สอดคล้องกันโดยเร็วที่สุด เนื่องจากนักพัฒนาซอฟต์แวร์ฮาร์ดแวร์ ให้บริการได้ VPA15_minimums เป็นโปรไฟล์แรกสำหรับ Android 15 และจะมี VPA ใหม่ทุกปีเพื่อ จะครอบคลุมรุ่นหลักๆ ของ Android แต่ละรุ่น

ใช้การกำหนดอัตราการแสดงเฟรม

การกำหนดเฟรมที่เหมาะสมเป็นสิ่งสำคัญในการสร้างประสบการณ์การเล่นเกมคุณภาพสูง Android Game Development Kit มีคลังการกำหนดเฟรมเพื่อช่วยให้เกมมีการกำหนดเฟรมที่เหมาะสมที่สุด สำหรับข้อมูลเพิ่มเติม รายละเอียดการใช้งาน โปรดดู ผสานรวม Android Frame Pacing ลงในโหมดแสดงภาพ Vulkan

ใช้การหมุนเวียนล่วงหน้า

อุปกรณ์ Android แสดงผลได้หลายการวางแนว การวางแนวของอุปกรณ์อาจ ต่างจากการวางแนว ของพื้นผิวการแสดงภาพ ซึ่งแตกต่างจาก OpenGL ES ใน Android ที่จัดการความคลาดเคลื่อนระหว่าง 2 รูปแบบ หากต้องการทำความเข้าใจวิธีการทำงานของกระบวนการการวางแนวและวิธีที่ดีที่สุดในการจัดการความแตกต่างของการวางแนวเมื่อใช้ Vulkan โปรดดูจัดการการหมุนอุปกรณ์ด้วย Vulkan การหมุนก่อนแสดงผล

แก้ปัญหาและโปรไฟล์การแสดงผล Vulkan

มีเครื่องมือหลายอย่างที่สามารถช่วยคุณวินิจฉัยปัญหาการแสดงผล และ ปัญหาด้านประสิทธิภาพเกี่ยวกับโค้ดการแสดงผล Vulkan

ดูข้อมูลเพิ่มเติมเกี่ยวกับเครื่องมือแก้ไขข้อบกพร่องและสร้างโปรไฟล์ของ Vulkan ได้ที่ เครื่องมือและ ฟีเจอร์ขั้นสูง

เลเยอร์การตรวจสอบ Vulkan

เลเยอร์การตรวจสอบ Vulkan คือไลบรารีรันไทม์ที่สามารถเปิดใช้เพื่อตรวจสอบ ไปยัง Vulkan API และแสดงคำเตือนหรือข้อผิดพลาดเกี่ยวกับ การใช้งานที่ไม่เหมาะสม เลเยอร์การตรวจสอบเหล่านี้จะไม่ทำงานโดยค่าเริ่มต้น เนื่องจากกระบวนการตรวจสอบจะเพิ่มภาระงานรันไทม์และส่งผลต่อประสิทธิภาพของเกม ดูข้อมูลเกี่ยวกับวิธีใช้เลเยอร์การตรวจสอบกับเกมได้ที่การแก้ไขข้อบกพร่องด้วยเลเยอร์การตรวจสอบ

เครื่องมือจับเฟรม

ใช้เครื่องมือจับเฟรมเพื่อบันทึกและเล่นซ้ำการเรียก Vulkan API ที่เกิดขึ้นระหว่างเฟรมเกม เครื่องมือเหล่านี้ช่วยให้คุณทำสิ่งต่อไปนี้ได้

  • ดูข้อมูลและการแสดงภาพทรัพยากรกราฟิกที่มีการใช้งาน
  • ดูลําดับการเรียก API ที่เกมทําและดูพารามิเตอร์ API
  • สำรวจสถานะของไปป์ไลน์กราฟิก ณ เวลาที่มีการเรียกใช้การวาด
  • แสดงผลลัพธ์ของการเรนเดอร์จนถึงการเรียกใช้การวาดที่เฉพาะเจาะจงในเฟรม

ใช้เครื่องมือ RenderDoc แบบโอเพนซอร์สเพื่อจับภาพเฟรมจาก เกมที่ทำงานบน Android RenderDoc รองรับการจับภาพเฟรมของทั้ง Vulkan และ OpenGL ES

นอกจากนี้ คุณยังใช้ Android GPU Inspector (AGI) เพื่อจับเฟรม Vulkan ได้ด้วย

เครื่องมือวิเคราะห์ประสิทธิภาพ

ใช้เครื่องมือวิเคราะห์ประสิทธิภาพเพื่อตรวจสอบปัญหาการแสดงผลในเกมที่ ทำให้อัตราเฟรมต่ำ ผู้ให้บริการ GPU แต่ละรายมีเครื่องมือที่ออกแบบมาเพื่อวิเคราะห์โปรไฟล์เกมและให้ข้อมูลประสิทธิภาพสำหรับสถาปัตยกรรม GPU ของตนโดยเฉพาะ ลักษณะประสิทธิภาพและจุดคอขวดของเกม แตกต่างกันอย่างมากเมื่อแสดงผลบน GPU จากผู้ให้บริการหลายรายหรือแม้แต่ GPU รุ่นที่แตกต่างกันจากผู้ให้บริการรายเดียวกัน

คุณยังสามารถใช้เครื่องมือตรวจสอบ GPU ของ Android เพื่อรวบรวมและวิเคราะห์ ข้อมูลประสิทธิภาพ เครื่องมือตรวจสอบ GPU ของ Android ใช้ได้กับ GPU หลายรุ่นจากผู้ให้บริการหลายราย ซึ่งแตกต่างจากเครื่องมือของผู้ให้บริการ อย่างไรก็ตาม เครื่องมือตรวจสอบ GPU ของ Android ไม่รองรับอุปกรณ์ Android รุ่นเก่าและอาจใช้งานร่วมกับอุปกรณ์รุ่นใหม่บางรุ่นไม่ได้

ปรับปรุงการทดสอบ Vulkan ด้วย CTS-D

ผู้ผลิตอุปกรณ์ที่ใช้ระบบปฏิบัติการ Android ใช้ชุดเครื่องมือทดสอบความเข้ากันได้ (CTS) เพื่อช่วยตรวจสอบว่าอุปกรณ์ของตนเข้ากันได้ CTS ที่นักพัฒนาแอปเป็นผู้ดำเนินการ (CTS-D) เป็นการทดสอบที่นักพัฒนาแอปพลิเคชัน Android ส่งเข้ามาเพื่อให้มั่นใจว่าอุปกรณ์ Android ในอนาคตจะเป็นไปตามกรณีการใช้งานและสามารถเรียกใช้แอปพลิเคชันได้อย่างราบรื่นและไม่มีข้อบกพร่อง

หากคุณทริกเกอร์ข้อบกพร่องใหม่ในแอปพลิเคชัน Vulkan ได้ที่ส่งผลต่อ อุปกรณ์ที่ใช้ระบบ Android บางอย่าง คุณสามารถส่งข้อเสนอการทดสอบใหม่ โดยอธิบายถึง ปัญหาและวิธีตรวจสอบ วิธีนี้ทำให้มั่นใจได้ว่าปัญหาได้รับการแก้ไขแล้วใน อัปเดตอุปกรณ์ในอนาคตและทำให้แน่ใจว่าข้อบกพร่องเดียวกันนี้จะไม่เกิดขึ้น อุปกรณ์อื่นๆ ทั้งหมด

ดูกระบวนการส่ง CTS เพื่อดูวิธีการทีละขั้นตอนในการส่งข้อเสนอการทดสอบ