เริ่มต้นใช้งาน Vulkan ใน Android
Vulkan เป็น API กราฟิกระดับต่ำหลักใน Android Vulkan ให้ผลลัพธ์ที่ดีที่สุด ประสิทธิภาพสำหรับเกมที่ใช้เครื่องมือเกมและโหมดแสดงภาพของตนเอง
คุณต้องมีคุณสมบัติต่อไปนี้เพื่อใช้ Vulkan ในเครื่องมือเกมให้ประสบความสำเร็จ
- ระบุอุปกรณ์ Android ที่จะใช้กับ Vulkan
- ทำความเข้าใจข้อดีของการรองรับอุปกรณ์ Android รุ่นเก่า
- เพิ่ม Vulkan ไปยังเป้าหมายบิลด์ของ Android
- เลือกคอมไพเลอร์เฉดสีเพื่อสร้าง 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 เห็นค่าใช้จ่ายในการขับรถจำนวนมากเนื่องจากค่าใช้จ่ายสูงในการสุ่มโทรศัพท์ ใน 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
- คอมไพล์โค้ดตัวปรับแสงเงาเป็น 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 มี ของส่วนหัวเวอร์ชันปัจจุบัน
คอมไพล์โค้ดตัวปรับแสงเงาเป็น SPIR-V
Vulkan API คาดว่าจะมีโปรแกรม Shadr ในไบนารี SPIR-V รูปแบบระดับกลาง แบบแผนนี้แตกต่างจาก OpenGL ES ซึ่งคุณจะ สามารถส่งซอร์สโค้ดที่เขียนใน OpenGL Shading Language (GLSL) เป็นข้อความ สตริง ใช้คอมไพเลอร์ตัวปรับแสงเงาเพื่อรับโค้ดที่เขียนไว้ในตัวปรับแสงเงา ภาษาอย่าง GLSL หรือ High-level Shader Language (HLSL) และคอมไพล์เป็นโมดูล SPIR-V เพื่อใช้กับ Vulkan
คอมไพเลอร์ shaderc สามารถใช้คอมไพเลอร์โปรแกรม Shaderc ได้ ซึ่งเขียนด้วย GLSL เป็น SPIR-V หากเกมของคุณใช้ HLSL DirectXShaderCompiler รองรับเอาต์พุต SPIR-V โดยปกติแล้ว คุณ รวบรวมโปรแกรมเครื่องมือเงาแบบออฟไลน์เป็นส่วนหนึ่งของกระบวนการสร้างชิ้นงานสำหรับ เกมของคุณและเพิ่มโมดูล SPIR-V ไว้เป็นส่วนหนึ่งของเนื้อหารันไทม์
เรียกใช้ Vulkan API ระหว่างรันไทม์
หากต้องการเรียกใช้ Vulkan API เกมของคุณต้องได้รับตัวชี้ฟังก์ชันไปยัง Vulkan
การเรียก API วิธีที่ง่ายที่สุดคือการเชื่อมโยงกับ
คลังภาพที่แชร์ของ libvulkan.so
ซึ่งมีอยู่ใน Android NDK กำลังลิงก์
เทียบกับไลบรารีมีข้อบกพร่องอยู่ 2 ประการ ได้แก่ โอเวอร์เฮดการนำส่งฟังก์ชันเพิ่มเติม
และข้อจำกัดต่างๆ ที่ตัวชี้ฟังก์ชัน Vulkan API จะดำเนินการโดยอัตโนมัติ
แก้ปัญหาแล้ว
เมื่อคุณเรียกใช้ฟังก์ชัน Vulkan API การควบคุมจะส่งผ่านการมอบหมายงาน ตารางที่มีการจัดการโดยโครงสร้างที่เรียกว่าตัวโหลด Vulkan แอนดรอยด์ ใช้ตัวโหลด Vulkan ของตนเอง และไม่ใช่ LunarG ตัวโหลด ระบบตัวโหลดนี้เป็นส่วนหนึ่งของสถาปัตยกรรมเลเยอร์ของ Vulkan API การลิงก์กับไลบรารีระบบ ณ เวลาบิลด์จะส่งผลให้มีการนำส่งเพิ่มเติม สำหรับการเรียก API หนึ่งๆ แม้โอเวอร์เฮดจะเล็ก แต่ก็สังเกตเห็นได้ สำหรับเกมที่มีการเรียกใช้ 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 ที่รายงานโดย vkEnumratingInstanceVersion
- เวอร์ชัน 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 Baseline ปี 2022 โปรไฟล์ ให้ใช้ไลบรารี API โปรไฟล์ Vulkan แบบโอเพนซอร์ส คุณยังแยกวิเคราะห์ไฟล์ 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 ประกอบด้วยการกำหนดอัตราการใช้เฟรม ไลบรารีเพื่อช่วยให้เกมได้จังหวะของเฟรมที่มีประสิทธิภาพสูงสุด สำหรับข้อมูลเพิ่มเติม รายละเอียดการใช้งาน โปรดดู ผสานรวม Android Frame Pacing ลงในโหมดแสดงภาพ Vulkan
ใช้การหมุนเวียนล่วงหน้า
อุปกรณ์ Android แสดงผลได้หลายการวางแนว การวางแนวของอุปกรณ์อาจ ต่างจากการวางแนว ของพื้นผิวการแสดงภาพ ไม่เหมือนกับ OpenGL ES บน Android และ Vulkan จะไม่จัดการกับความคลาดเคลื่อนระหว่างทั้ง 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 เพื่อรวบรวมและวิเคราะห์ ข้อมูลประสิทธิภาพ Android GPU Inspector ต่างจากเครื่องมือของผู้ให้บริการ ด้วย GPU หลายตัวจากผู้ให้บริการต่างๆ อย่างไรก็ตาม Android GPU Inspector ไม่รองรับอุปกรณ์ Android รุ่นเก่าและอาจใช้งานกับอุปกรณ์เครื่องใหม่บางอย่างไม่ได้ อุปกรณ์
ปรับปรุงการทดสอบ Vulkan ด้วย CTS-D
ผู้ผลิตอุปกรณ์ที่ใช้ระบบ Android ใช้ ชุดเครื่องมือทดสอบความเข้ากันได้ (CTS) เพื่อช่วย เพื่อให้มั่นใจว่าอุปกรณ์ใช้งานร่วมกันได้ CTS ที่ขับเคลื่อนโดยนักพัฒนาแอป (CTS-D) ที่ส่งโดยนักพัฒนาแอปพลิเคชัน Android เพื่อให้มั่นใจว่า อุปกรณ์ Android ตรงตามกรณีการใช้งานและสามารถเรียกใช้แอปพลิเคชันได้ ได้อย่างราบรื่นและไม่มีข้อบกพร่อง
หากคุณทริกเกอร์ข้อบกพร่องใหม่ในแอปพลิเคชัน Vulkan ได้ที่ส่งผลต่อ อุปกรณ์ที่ใช้ระบบ Android บางอย่าง คุณสามารถส่งข้อเสนอการทดสอบใหม่ โดยอธิบายถึง ปัญหาและวิธีตรวจสอบ วิธีนี้ทำให้มั่นใจได้ว่าปัญหาได้รับการแก้ไขแล้วใน อัปเดตอุปกรณ์ในอนาคตและทำให้แน่ใจว่าข้อบกพร่องเดียวกันนี้จะไม่เกิดขึ้น อุปกรณ์อื่นๆ ทั้งหมด
ดูขั้นตอนการยื่นเรื่องของ CTS เพื่อดูวิธีส่งแบบทีละขั้นตอน ทดสอบข้อเสนอ