Mechanizmy natywne i zastrzeżone

Pierwsze kroki z platformą Vulkan na Androidzie

Vulkan to podstawowy interfejs API do obsługi grafiki na niższym poziomie na Androidzie. Vulkan zapewnia optymalną wydajność w przypadku gier, które implementują własny silnik i renderer.

Aby wdrożyć Vulkan w silniku gry, musisz:

  • Określ, których urządzeń z Androidem chcesz używać z Vulkan
  • Za i przeciwko obsłudze starszych urządzeń z Androidem
  • Dodaj interfejs Vulkan do celu kompilacji Androida
  • Wybierz kompilator shaderów, aby utworzyć SPIR-V dla Vulkan
  • Określanie dostępnej wersji interfejsu Vulkan API w czasie działania
  • Dowiedz się, jak zoptymalizować operacje renderowania Vulkan za pomocą profili Vulkan. tempo wyświetlania klatek i przed obrotem.
  • Wybierz narzędzia graficzne do debugowania i analizy wydajności

Wybierz minimalne specyfikacje urządzenia Vulkan

Vulkan jest dostępny na urządzeniach z Androidem w wersji 7.0 (interfejs API na poziomie 24) i nowszych. Nie wszystkie urządzenia z Androidem w wersji 7.0 lub nowszej obsługują Vulkana. Czynności, które musisz wykonać określać, które urządzenia z Androidem, które obsługują interfejs Vulkan, są obsługiwane przez Twoją grę.

Rekomendacje

Poniższe specyfikacje stanowią minimalne wymagania dotyczące obsługi interfejsu Vulkan:

  • urządzenie z Androidem w wersji 10.0 (poziom interfejsu API 29) lub nowszej,
  • urządzenie obsługuje interfejs Vulkan API w wersji 1.1 lub nowszej;
  • Urządzenie ma funkcje i możliwości sprzętowe zgodne z profilem podstawowym Androida z 2022 roku.
.

Obsługa starszych urządzeń

czy gra jest zaprojektowana z myślą o działaniu na różnych urządzeniach o różnych poziomach zaawansowania; funkcji graficznych, może być konieczna obsługa urządzeń starszych niż zalecane w artykule Wybieranie minimalnej specyfikacji urządzeń dla interfejsu Vulkan. Zanim zaczniesz tworzyć obsługę starszych urządzeń, sprawdź, czy Vulkan przyniesie korzyści Twojej grze. Gry, które zawierają wiele wywołań funkcji rysowania i korzystają z OpenGL ES, mogą generować znaczne obciążenie sterownika ze względu na wysoki koszt wywołania funkcji rysowania w OpenGL ES. Te gry mogą z powodu wydania dużej ilości zasobów wykorzystywać procesor czasu renderowania klatki. Gry mogą też zaobserwować znaczną zmniejszenie wykorzystania procesora i mocy obliczeniowej dzięki przejściu z OpenGL ES na Vulkan. Jest to szczególnie przydatne, jeśli gra zawiera sceny złożone, w których nie można efektywnie stosować instancjonowania w celu zmniejszenia liczby wywołań funkcji rysowania. W przypadku kierowania na starsze urządzenia uwzględnij OpenGL ES i wyświetlania reklam, bo niektóre urządzenia na liście urządzeń docelowych masz implementacje interfejsu Vulkan, które nie działają niezawodnie.

Możesz nie chcieć obsługiwać starszych urządzeń z Vulkanem, ponieważ mają one problemy ze stabilnością lub wydajnością albo nie mają odpowiednich funkcji.

Wydajność i funkcje

Starsze urządzenia z Androidem, które obsługują interfejs Vulkan, mogą nie mieć wydajności renderowania lub obsługę sprzętu w zakresie funkcji potrzebnych do uruchomienia gry. Jest to szczególnie prawdopodobne, jeśli Twoja gra ma grafikę o wysokiej jakości, a Vulkan to jedyny interfejs API, na Androida. Wiele starszych urządzeń ma ograniczenie do wersji 1.0.3 Vulkan API i często brakuje w nim powszechnie używanych rozszerzeń, które są dostępne na nowoczesny sprzęt.

Stabilność

Starsze urządzenia z Androidem mogą korzystać z nieaktualnych sterowników Vulkan. Te sterowniki mogą zawierać błędy, które wpływają na stabilność gry. Ominięcie błędów sterownika może wymagać znacznej ilości czasu na testowanie i rozwijanie.

Dodaj interfejs Vulkan do projektu

Aby dodać interfejs Vulkan do projektu, musisz:

  • Uwzględnij nagłówki interfejsu Vulkan API
  • Kompilowanie kodu cieniowania zgodnie ze standardem SPIR-V
  • Wywoływanie interfejsu Vulkan API w czasie działania

Dołącz nagłówki interfejsu Vulkan API

Twoja gra musi zawierać pliki nagłówka interfejsu Vulkan API, by skompilować kod, który korzysta interfejsu Vulkan. Kopię nagłówków Vulkan znajdziesz w narzędziu Android NDK lub w wersjach pakietu SDK Vulkan. Dowolna konkretna wersja NDK obejmuje tylko nagłówki Vulkan dostępne w momencie udostępnienia pakietu NDK. Jeśli używasz nagłówków Vulkan z NDK, użyj wersji NDK 25 lub nowszej, która zawiera pliki nagłówków obsługujące Vulkan w wersji 1.3. Pakiet SDK Vulkan zawiera najnowszą wersję nagłówków.

Kompilowanie kodu cieniowania zgodnie ze standardem SPIR-V

Interfejs Vulkan API wymaga, aby programy do cieniowania były udostępniane w pliku binarnym SPIR-V format pośredni. Ta konwencja różni się od trybu OpenGL ES, w którym może przesłać kod źródłowy napisany w Język cieniowania OpenGL (GLSL) jako tekst ciągi tekstowe. Używanie kompilatora do cieniowania kodu napisanego w programie do cieniowania takich jak GLSL lub High-level Shader Language (ang. High-level Shader Language) i przekształcić w moduły SPIR-V do użytku z Vulkanem.

Kompilatora shaderc można używać do kompilowania programów do cieniowania. zapisane w języku GLSL w formacie SPIR-V. Jeśli Twoja gra korzysta z protokołu HLSL, DirectXShaderCompiler obsługuje wyjście SPIR-V. Zazwyczaj programy shaderów kompilujesz w trybie offline w ramach procesu kompilacji zasobów do gry i uwzględniasz moduły SPIR-V jako część zasobów do uruchomienia.

Wywoływanie interfejsu Vulkan API w czasie wykonywania

Aby można było wywoływać interfejs Vulkan API, gra musi uzyskać wskaźniki funkcji do interfejsu Vulkan Wywołania interfejsu API. Najprostszym sposobem jest połączenie z libvulkan.so biblioteką wspólną, która jest zawarta w NDK Androida. Łączenie z biblioteką ma 2 wady: dodatkowy narzut na obsługę funkcji oraz ograniczenia dotyczące tego, które wskaźniki funkcji interfejsu Vulkan są automatycznie rozwiązywane.

Gdy wywołasz funkcję interfejsu Vulkan API, kontrola przechodzi przez tablicę rozsyłania zarządzaną przez konstrukt zwany ładownikiem Vulkan. Android używa własnej implementacji Vulkan loader, a nie ładowarki LunarG. Ten system wczytywania jest częścią architektury warstw interfejsu Vulkan API. Łączenie z biblioteką systemową w czasie kompilacji powoduje dodatkowy poziom przetwarzania w przypadku danego wywołania interfejsu API. Chociaż jest on niewielki, może być zauważalny w przypadku gier, które wykonują dużą liczbę wywołań Vulkan.

Biblioteka systemowa przeważnie rozwiązuje tylko wskaźniki do funkcji Vulkan, które są uważane za część głównego interfejsu API. Vulkan ma dużą liczbę rozszerzeń, zdefiniować dodatkowe funkcje interfejsu Vulkan, z których wiele nie jest rozpatrywanych automatycznie. przy użyciu biblioteki systemowej. Musisz ręcznie rozpoznać wskaźniki do tych interfejsów Vulkan przed ich użyciem.

Aby rozwiązać te problemy, dynamicznie rozwiązuj wskaźniki do wszystkich funkcji Vulkan, których zamierzasz używać w czasie wykonywania. Możesz to zrobić, korzystając z biblioteki meta-loader open source, takiej jak volk. Przykładowa gra AGDKTunnel wykorzystuje w tym celu technologię Volk. Jeśli używasz biblioteki meta-loader, nie łącz jej z biblioteką udostępnioną libvulkan.sow swoich skryptach kompilacji.

Określanie dostępnej wersji interfejsu Vulkan API

Android obsługuje te wersje interfejsu Vulkan API:

  • 1.0.3
  • 1,1
  • 1.3

Najwyższa wersja interfejsu Vulkan API dostępna na danym urządzeniu jest określana przez wersję Androida i obsługę sterownika Vulkana.

Wersja Androida

Obsługa wersji interfejsu Vulkan API przez platformę zależy od minimalnej wersji Androida wersja (poziom interfejsu API):

  • 1.3 – Android 13.0 (poziom 33 interfejsu API) lub nowszy
  • 1.1 – Android 10.0 (poziom 29 interfejsu API) lub nowszy
  • 1.0.3 – Android 7.0 (poziom interfejsu API 24) lub nowszy

Obsługa sterowników Vulkan

Obsługa platformy Androida w przypadku wersji interfejsu Vulkan API nie gwarantuje, że interfejs API zostanie włączony jest obsługiwana przez sterownik Vulkan urządzenia. Urządzenie z Androidem 13 może obsługiwać tylko wersję 1.1 interfejsu Vulkan API.

Podczas inicjowania interfejsu Vulkan nie żądaj interfejsu API w wersji nowszej niż:

  • Maksymalna wersja interfejsu Vulkan API dla wersji Androida działającego na urządzenie
  • Wersja interfejsu Vulkan API zwracana przez funkcję vkEnumerateInstanceVersion
  • Wersja interfejsu Vulkan API zgłaszana przez właściwość apiVersion struktury VkPhysicalDeviceProperties.

Oto przykład określania najwyższej obsługiwanej wersji interfejsu 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;
}

Określanie zgodności profilu Vulkan

Profile Vulkan to pliki JSON, które definiują zestaw wymaganych funkcji, rozszerzeń, możliwości i minimalnych limitów parametrów, które musi spełniać urządzenie z Vulkan . Aby określić, czy urządzenie z konkretnym profilem Vulkan, takim jak Android Baseline z 2022 r. profilu, użyj biblioteki interfejsu Vulkan Profiles API typu open source. Możesz też samodzielnie przeanalizować plik JSON profilu i za pomocą odpowiednich interfejsów Vulkan sprawdzić możliwości urządzenia, aby określić zgodność profilu.

Profile Vulkan

Android używa profili Vulkan, które określają, które funkcje i rozszerzenia są dostępne na poszczególnych urządzeniach z Androidem.

Android Baseline Profile (ABP) to pierwsza próba utworzenia profilu Vulkan. ABP2021 i ABP2022 to profile mające widok wstecz > 85% aktywnych urządzeń obecnie się znajdujesz. Nie będziemy już tworzyć nowych kont w tej usłudze.

Profile Vulkan na Androida (VPA) to nowy, przyszłościowy profil, odzwierciedlają potrzeby programistów i wprowadzanie spójnych funkcji które mogą dostarczyć deweloperzy sprzętu. VPA15_minimums to pierwszy profil dla Androida 15. Każdego roku będzie nowy profil VPA, aby objąć każdą główną wersję Androida.

Zastosowanie tempa klatek

Prawidłowe odświeżanie klatek jest kluczowym elementem zapewnienia wysokiej jakości rozgrywki. Pakiet Android Game Development Kit zawiera bibliotekę Frame Pacing, która pomaga uzyskać optymalne tempo wyświetlania klatek. Więcej informacji o wdrożeniu znajdziesz w artykule Integracja Android Frame Pacing z renderowaniem Vulkan.

Wdrażanie rotacji wstępnej

Urządzenia z Androidem mogą wyświetlać się w różnych orientacjach. Orientacja urządzenia może różnić się od orientacji powierzchni renderowania. W przeciwieństwie do OpenGL ES na Androidzie Vulkan nie obsługuje rozbieżności między tymi platformami. Aby dowiedzieć się, jak działa proces orientacji i jaka jest optymalna metoda obsługi różnic w orientacji podczas korzystania z Vulkana, przeczytaj artykuł Zarządzanie obracaniem urządzenia za pomocą Vulkana przed obrotem.

Rozwiązywanie problemów z renderowaniem pod kątem interfejsu Vulkan i profilowanie go

Dostępnych jest wiele narzędzi ułatwiających diagnozowanie problemów z renderowaniem jeśli występują problemy z wydajnością kodu renderowania Vulkan.

Więcej informacji o narzędziach Vulkan do debugowania i profilowania znajdziesz na stronie Narzędzia funkcje zaawansowane .

Warstwy walidacji Vulkan

Warstwy weryfikacji Vulkan to biblioteki czasu wykonywania, które można włączyć, aby sprawdzać Twoje wywołania interfejsu Vulkan API i wyświetlać ostrzeżenia lub błędy dotyczące nieprawidłowego lub nieoptymalnego użycia. Te warstwy weryfikacji są domyślnie nieaktywne, ponieważ sprawdzania poprawności działania środowiska wykonawczego, i wpływa na wydajność tę grę. Informacje o używaniu warstw weryfikacji w grze znajdziesz w artykule Debugowanie za pomocą warstwy weryfikacji.

Narzędzia do przechwytywania klatek

Użyj narzędzi do przechwytywania klatek, aby nagrywać i odtwarzać wywołania interfejsu Vulkan API w ramach klatki w grze. Dzięki tym narzędziom możesz:

  • Wyświetl informacje o aktywnych zasobach graficznych i wizualizacje
  • Zobacz sekwencję wywołań interfejsu API wykonanych przez Twoją grę oraz parametry interfejsu API
  • Sprawdzanie stanu potoku graficznego w momencie wywołania funkcji draw
  • Zwizualizuj wyniki renderowania do określonego wywołania rysowania w klatce

Za pomocą narzędzia RenderDoc typu open source możesz przechwytywać klatki z: w grach na Androida. RenderDoc obsługuje przechwytywanie klatek zarówno w Vulkan, jak i OpenGL ES.

Do rejestrowania klatek Vulkan można też użyć inspektora GPU Androida (AGI).

Narzędzia do analizy skuteczności

Użyj narzędzi do analizy wydajności, aby zbadać problemy z renderowaniem w grze, które powodują nieoptymalną liczbę klatek. Indywidualni dostawcy GPU oferują narzędzia zaprojektowane do profilować grę i podawać dane o wydajności odpowiednie dla jej GPU. i różnych architektur. Charakterystyka wydajności i wąskie gardła gry mogą mogą znacznie się różnić w przypadku renderowania przy użyciu GPU od różnych dostawców, a nawet różne generacje GPU od tego samego dostawcy.

Możesz też używać Inspektora GPU na Androidzie do zbierania i analizowania danych. dane o skuteczności kampanii. W przeciwieństwie do narzędzi dostawców, narzędzie Android GPU Inspector jest zgodne z wieloma procesorami graficznymi różnych producentów. Inspektor GPU Androida nie obsługują starszych urządzeń z Androidem i mogą nie być zgodne ze wszystkimi nowymi urządzenia.

Usprawnij testowanie interfejsu Vulkan dzięki CTS-D

Producenci urządzeń z Androidem korzystają z komputera Compatibility Test Suite (CTS), aby zapewnić zgodność swoich urządzeń. Konfiguracja CTS oparta na pomocy deweloperów (CTS-D) testów przesłanych przez programistów aplikacji na Androida, by upewnić się, Urządzenia z Androidem spełniają wymagania i mogą uruchamiać aplikacje. płynnie i bez błędów.

jeśli uda Ci się wywołać w aplikacji Vulkan nowy błąd, który wpływa na wszystkie urządzenia z systemem Android, można przesłać nową propozycję testującą i sposobów jego znalezienia. Dzięki temu problem zostanie rozwiązany w przyszłej aktualizacji urządzenia, a także nie wystąpi na innych urządzeniach.

Zapoznaj się z procesem przesyłania CTS. , gdzie znajdziesz szczegółowe instrukcje przesyłania testową ofertę pakietową.