Android'de Vulkan'ı kullanmaya başlama
Vulkan, Android'deki birincil düşük düzey grafik API'sidir. Vulkan, kendi oyun motorunu ve oluşturma aracını uygulayan oyunlar için optimum performans sağlar.
Vulkan'ı oyun motorunuza başarıyla uygulamak için:
- Vulkan ile kullanılacak Android cihazları belirleme
- Eski Android cihazları desteklemenin avantajlarını ve dezavantajlarını anlama
- Android derleme hedefinize Vulkan'ı ekleme
- Vulkan için SPIR-V oluşturmak üzere bir gölgelendirici derleyici seçin
- Çalışma zamanında kullanılabilen Vulkan API sürümünü belirleme
- Vulkan profilleri, kare hızlandırma ve ön döndürme ile Vulkan oluşturma işlemlerinizi nasıl optimize edeceğinizi öğrenin
- Hata ayıklama ve performans analizi için grafik araçları seçme
- Not: Android'de Unity veya Unreal oyun motorlarıyla Vulkan'ı kullanma hakkında bilgi edinmek için şu makaleleri inceleyin:
- Unity'de Vulkan
- Unreal'da Vulkan
Vulkan için minimum cihaz özelliklerini seçme
Vulkan, Android 7.0 (API düzeyi 24) ve sonraki sürümlerde kullanılabilir. Android 7.0 veya sonraki sürümleri çalıştıran tüm Android cihazlar Vulkan'ı desteklemez. Oyununuzun hangi Vulkan özellikli Android cihazları desteklediğini belirlemeniz gerekir.
Öneriler
Vulkan desteği için minimum gereksinimler olarak aşağıdaki spesifikasyonları kullanın:
- Cihazınızda Android 10.0 (API düzeyi 29) veya daha yeni bir sürüm yüklü olmalıdır.
- Cihaz, Vulkan API 1.1 veya sonraki sürümleri desteklemelidir.
- Cihaz, 2022 Android Temel profili ile uyumlu donanım özelliklerine ve özelliklere sahiptir.
Eski cihaz desteği
Oyununuz, farklı grafik düzeylerine sahip çok çeşitli cihazlarda çalışacak şekilde tasarlandıysa Vulkan için minimum cihaz özelliklerini seçme bölümünde önerilenlerden daha eski cihazları desteklemeniz gerekebilir. Eski cihazlar için destek oluşturmadan önce Vulkan'ın oyununuza fayda sağlayıp sağlamadığını değerlendirin. Çok sayıda çizim çağrısı olan ve OpenGL ES kullanan oyunlarda, OpenGL ES'de çizim çağrısı yapmanın yüksek maliyeti nedeniyle önemli ölçüde sürücü yükü görülebilir. Bu oyunlar, kare sürelerinin büyük bir kısmını grafik sürücüsünde harcayarak CPU'ya bağlı hale gelebilir. OpenGL ES'den Vulkan'a geçiş yaparak oyunlarda CPU ve güç kullanımında da önemli düşüşler görülebilir. Bu, özellikle oyununuzda çizim çağrılarını azaltmak için örneklemeyi etkili bir şekilde kullanamayan karmaşık sahneler varsa geçerlidir. Hedef cihaz listenizdeki bazı cihazlarda oyununuzu güvenilir bir şekilde çalıştıramayan Vulkan uygulamaları olabileceğinden, eski cihazları hedeflerken yedek olarak OpenGL ES oluşturma desteği ekleyin.
Performans ve özellik eksikliği veya kararlılık sorunları nedeniyle Vulkan özellikli eski cihazları desteklemek istemeyebilirsiniz.
Performans ve Özellikler
Vulkan özellikli eski Android cihazlar, oyununuzu çalıştırmak için gereken özelliklere yönelik oluşturma performansına veya donanım desteğine sahip olmayabilir. Bu durum, özellikle oyununuzda yüksek kaliteli grafikler varsa ve Android'de hedeflediğiniz tek API Vulkan ise söz konusu olabilir. Birçok eski cihaz, Vulkan API'nin 1.0.3 sürümüyle sınırlıdır ve genellikle daha modern donanımlarda bulunan yaygın olarak kullanılan Vulkan uzantılarını içermez.
Kararlılık
Eski Android cihazlarda güncel olmayan Vulkan sürücüleri kullanılıyor olabilir. Bu sürücü sürümleri, oyununuzun kararlılığını etkileyebilecek hatalar içerebilir. Sürücü hatalarını gidermek, önemli miktarda test ve mühendislik süresi gerektirebilir.
Projenize Vulkan ekleme
Vulkan'ı projenize eklemek için:
- Vulkan API üstbilgilerini dahil etme
- Gölgelendirici kodunu SPIR-V olarak derleme
- Çalışma zamanında Vulkan API'yi çağırma
Vulkan API üstbilgilerini dahil etme
Vulkan kullanan kodu derlemek için oyununuzun Vulkan API başlık dosyalarını içermesi gerekir. Vulkan üstbilgilerinin bir kopyasını Android NDK'da veya Vulkan SDK sürümlerinde paketlenmiş olarak bulabilirsiniz. Belirli bir NDK sürümü yalnızca NDK sürümü yayınlandığı sırada mevcut olan Vulkan başlıklarını içerir. NDK'dan Vulkan üstbilgilerini kullanıyorsanız Vulkan 1.3 sürümünü destekleyen üstbilgi dosyalarını içeren NDK 25 veya sonraki bir sürümü kullanın. Vulkan SDK'sında başlıkların en güncel sürümü bulunur.
Gölgelendirici kodunu SPIR-V olarak derleme
Vulkan API, gölgelendirici programların SPIR-V ikili ara biçiminde sağlanmasını bekler. Bu kural, OpenGL Gölgelendirme Dili'nde (GLSL) yazılmış kaynak kodunu metin dizeleri olarak gönderebileceğiniz OpenGL ES'den farklıdır. GLSL veya Yüksek Seviye Gölgelendirici Dili (HLSL) gibi bir gölgelendirici dilinde yazılmış kodu alıp Vulkan ile kullanmak üzere SPIR-V modüllerine derlemek için gölgelendirici derleyici kullanın.
shaderc derleyicisi, GLSL ile yazılmış gölgelendirici programlarını SPIR-V'ye derlemek için kullanılabilir. Oyununuz HLSL kullanıyorsa DirectXShaderCompiler SPIR-V çıkışını destekler. Genellikle, oyununuzun öğe oluşturma sürecinin bir parçası olarak gölgelendirici programlarını çevrimdışı olarak derleyip SPIR-V modüllerini çalışma zamanındaki öğelerinize dahil edersiniz.
Çalışma zamanında Vulkan API'yi çağırma
Vulkan API'yi çağırmak için oyununuzun Vulkan API çağrılarına yönelik işlev işaretçileri alması gerekir. Bunu yapmanın en kolay yolu, Android NDK'ya dahil olan libvulkan.so
paylaşılan kitaplığına bağlantı oluşturmaktır. Kitaplığa bağlamanın iki eksikliği vardır: ek işlev dağıtma yükü ve Vulkan API işlev işaretçilerinin otomatik olarak çözüldüğü sınırlamalar.
Bir Vulkan API işlevini çağırdığınızda kontrol, Vulkan yükleyici adlı bir yapı tarafından yönetilen bir dağıtım tablosundan geçer. Android, LunarG yükleyicisini değil kendi Vulkan yükleyici uygulamasını kullanır. Bu yükleyici sistemi, Vulkan API'nin katman mimarisinin bir parçasıdır. Derleme zamanında sistem kitaplığına bağlanmak, belirli bir API çağrısı için ek bir dağıtım düzeyine neden olur. Ek maliyet küçük olsa da çok sayıda Vulkan çağrısı yapan oyunlarda fark edilebilir.
Sistem kitaplığı genellikle yalnızca temel API'nin bir parçası olarak kabul edilen Vulkan işlevlerine işaretçileri çözer. Vulkan, ek Vulkan işlevlerini tanımlayan çok sayıda uzantıya sahiptir. Bu uzantıların çoğu sistem kitaplığı tarafından otomatik olarak çözülmez. Bu Vulkan işlevlerine ait işaretçileri kullanmadan önce manuel olarak çözmeniz gerekir.
Bu sorunları azaltmak için çalışma zamanında kullanmayı planladığınız tüm Vulkan işlevlerinin işaretçilerini dinamik olarak çözün. Bunu yapmanın bir yolu, volk gibi açık kaynak bir meta yükleyici kitaplığı kullanmaktır. AGDKTunnel örnek oyunu, bu amaçla volk'ü entegre eder. Meta yükleyici kitaplığı kullanıyorsanız derleme komut dosyalarınızda libvulkan.so
paylaşılan kitaplığa bağlantı vermeyin.
Kullanılabilir Vulkan API sürümünü belirleme
Android aşağıdaki Vulkan API sürümlerini destekler:
- 1.0.3
- 1,1
- 1.3
Belirli bir cihazda kullanılabilen en yüksek Vulkan API sürüm numarası, Android sürümü ve Vulkan sürücü desteğine göre belirlenir.
Android sürümü
Vulkan API sürümü için platform desteği, minimum Android sürümüne (API düzeyi) bağlıdır:
- 1.3 — Android 13.0 (API düzeyi 33) ve sonraki sürümler
- 1.1 — Android 10.0 (API düzeyi 29) ve sonraki sürümler
- 1.0.3 — Android 7.0 (API düzeyi 24) ve sonraki sürümler
Vulkan sürücü desteği
Bir Vulkan API sürümü için Android platform desteği, API sürümünün cihazın Vulkan sürücüsü tarafından desteklendiğini garanti etmez. Android 13 çalıştıran bir cihaz, Vulkan API'nin yalnızca 1.1 sürümünü destekleyebilir.
Vulkan'ı başlatırken aşağıdakinden daha yüksek bir API sürümü istemeyin:
- Cihazda çalışan Android sürümü için maksimum Vulkan API sürümü
- vkEnumerateInstanceVersion tarafından bildirilen Vulkan API sürümü
- VkPhysicalDeviceProperties yapısının
apiVersion
mülkü tarafından bildirilen Vulkan API sürümü
Desteklenen en yüksek Vulkan API sürümünü belirleme örneği aşağıda verilmiştir:
// 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 profili uyumluluğunu belirleme
Vulkan profilleri, bir Vulkan cihazının profille uyumlu olması için desteklemesi gereken bir dizi gerekli özellik, uzantı, özellik ve minimum parametre sınırını tanımlayan JSON dosyalarıdır. Bir cihazın 2022 Android temel profili gibi belirli bir Vulkan profiliyle uyumlu olup olmadığını belirlemek için açık kaynak Vulkan Profiles API kitaplığını kullanın. Profil JSON dosyasını kendiniz de ayrıştırabilir ve profil uyumluluğunu belirlemek için ilgili Vulkan API'lerini kullanarak cihaz özelliklerini sorgulayabilirsiniz.
Vulkan Profilleri
Android, Android çalıştıran cihazların her biri için hangi özelliklerin ve uzantıların kullanılabileceğini tanımlayan Vulkan Profilleri'ni kullanır.
Android Temel Profili (ABP), Vulkan Profili'ni oluşturmaya yönelik ilk denemedir. ABP2021 ve ABP2022, o sıradaki etkin cihazların% 85'inden fazlasını kapsamayı amaçlayan geçmişe dönük profillerdir. Bundan sonra yeni ABP eklenmeyecek.
Android için Vulkan Profilleri (VPA), yazılım geliştiricilerin ihtiyaçlarını yansıtmayı ve donanım geliştiricileri sunar sunmaz tutarlı özellikler sunmayı amaçlayan yeni ve ileriye dönük bir profildir. VPA15_minimums, Android 15 için ilk profildir ve her büyük Android sürümünü kapsayacak şekilde her yıl yeni bir VPA yayınlanır.
Kare ilerleme hızını uygulama
Doğru kare hızı, yüksek kaliteli bir oyun deneyimi sunmanın önemli bir parçasıdır. Android Game Development Kit, oyununuzun optimum kare hızına ulaşmasına yardımcı olmak için Frame Pacing kitaplığını içerir. Daha fazla uygulama ayrıntısı için Android kare hızını Vulkan oluşturma aracınıza entegre etme başlıklı makaleyi inceleyin.
Döndürme öncesini uygulama
Android cihazlar birden fazla yönde görüntülenebilir. Cihaz yönü, oluşturma yüzeyinin yönünden farklı olabilir. Android'deki OpenGL ES'in aksine Vulkan, bu iki sürüm arasındaki tutarsızlıkları ele almaz. Yönlendirme sürecinin işleyiş şeklini ve Vulkan kullanılırken yön farklılıklarını işleme konusunda en uygun yöntemi anlamak için Vulkan ön döndürme özelliğiyle cihaz döndürmeyi işleme başlıklı makaleyi inceleyin.
Vulkan oluşturma ile ilgili sorunları giderme ve oluşturma işlemini profilleme
Vulkan oluşturma kodundaki oluşturma ve performans sorunlarını teşhis etmenize yardımcı olacak birden fazla araç vardır.
Vulkan'ın hata ayıklama ve profil oluşturma araçları hakkında daha fazla bilgi için Araçlar ve gelişmiş özellikler bölümüne göz atın.
Vulkan doğrulama katmanları
Vulkan doğrulama katmanları, Vulkan API'ye yaptığınız çağrıları incelemek ve yanlış veya optimum olmayan kullanımla ilgili uyarılar ya da hatalar sağlamak için etkinleştirilebilen çalışma zamanı kitaplıklarıdır. Doğrulama işlemi çalışma zamanı yükü eklediği ve oyununuzun performansını etkilediği için bu doğrulama katmanları varsayılan olarak etkin değildir. Doğrulama katmanlarını oyununuzla nasıl kullanacağınız hakkında bilgi edinmek için Doğrulama katmanı ile hata ayıklama başlıklı makaleyi inceleyin.
Kare yakalama araçları
Oyun karesi sırasında yapılan Vulkan API çağrılarını kaydetmek ve yeniden oynatmak için kare yakalama araçlarını kullanın. Bu araçlar sayesinde:
- Etkin grafik kaynaklarıyla ilgili bilgileri ve görselleştirmeleri görüntüleme
- Oyununuz tarafından yapılan API çağrılarının sırasını ve API parametrelerini görme
- Çizim çağrısı sırasında grafik ardışık düzeninin durumunu keşfetme
- Karedeki belirli bir çizim çağrısına kadar oluşturma sonuçlarını görselleştirme
Android'de çalışan oyunlardan kare yakalamak için açık kaynak RenderDoc aracını kullanın. RenderDoc, hem Vulkan hem de OpenGL ES kare yakalamayı destekler.
Vulkan karelerini yakalamak için Android GPU Inspector (AGI) da kullanılabilir.
Performans analizi araçları
Oyununuzda optimum olmayan kare hızlarına neden olan oluşturma sorunlarını incelemek için performans analiz araçlarını kullanın. GPU tedarikçileri, oyununuzun profilini oluşturmak ve GPU mimarilerine özgü performans verileri sağlamak için tasarlanmış araçlar sağlar. Oyununuzun performans özellikleri ve darboğazları, farklı satıcıların GPU'larında veya hatta aynı satıcının farklı GPU nesillerinde oluşturulurken önemli ölçüde değişiklik gösterebilir.
Performans verilerini toplamak ve analiz etmek için Android GPU Denetleyici'yi de kullanabilirsiniz. Tedarikçi firma araçlarından farklı olarak Android GPU Inspector, farklı tedarikçi firmalara ait birden fazla GPU ile uyumludur. Ancak Android GPU Inspector eski Android cihazları desteklemez ve tüm yeni cihazlarla uyumlu olmayabilir.
CTS-D ile Vulkan testini iyileştirin
Android destekli cihaz üreticileri, cihazlarının uyumlu olmasını sağlamak için Compatibility Test Suite'i (CTS) kullanır. Geliştirici Tarafından Güçlendirilmiş CTS (CTS-D), gelecekteki Android cihazların kullanım alanlarını karşıladığından ve uygulamalarının sorunsuz ve hatasız bir şekilde çalışabildiğinden emin olmak için Android uygulama geliştiricileri tarafından gönderilen testlerdir.
Vulkan uygulamanızla belirli bir Android cihazı etkileyen yeni bir hatayı tetiklemeyi başarırsanız sorununuzu ve kontrol etme yöntemlerini açıklayan yeni bir test önerisi gönderebilirsiniz. Bu sayede, cihaz için gelecekteki bir güncellemede sorunun düzeltilmesi ve aynı hatanın başka cihazlarda yaşanmaması sağlanır.
Test teklifinin nasıl gönderileceğine dair adım adım talimatlar için CTS gönderim sürecine göz atın.