Mechanizmy natywne i zastrzeżone

Pierwsze kroki z platformą Vulkan na Androidzie

Vulkan to główny niskopoziomowy interfejs API graficzny na Androida. Vulkan zapewnia optymalne w przypadku gier z własnym silnikiem gry i mechanizmem renderowania.

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

  • Określ, których urządzeń z Androidem chcesz używać z Vulkan
  • Poznaj wady obsługi starszych urządzeń z Androidem
  • Dodaj interfejs Vulkan do celu kompilacji Androida
  • Wybierz kompilator do cieniowania, by utworzyć SPIR-V dla Vulkana
  • 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
.
    Uwaga: informacje o korzystaniu z platformy Vulkan na Androidzie z systemem Unity lub Unreal silniki gier, zobacz:
  • Vulkan w Unity
  • Vulkan w Unreal

Wybierz minimalne specyfikacje urządzenia Vulkan

Interfejs Vulkan jest dostępny na urządzeniach z Androidem w wersji od 7.0 (poziom interfejsu API 24). Nie Wszystkie urządzenia z Androidem 7.0 lub nowszym obsługują interfejs Vulkan. 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:

  • Na urządzeniu jest zainstalowany Android 10.0 (poziom interfejsu API 29) lub nowszy
  • Urządzenie obsługuje interfejs Vulkan API w wersji 1.1 lub nowszej
  • Urządzenie ma możliwości sprzętowe i funkcje zgodne z modelem z 2022 roku Profil Baseline na Androidzie
.

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 obsługiwać starsze urządzenia, oceń, czy Vulkan korzyści dla użytkownika. gry, w których jest dużo wywołań funkcji losowania i które korzystają z platformy OpenGL ES; mogą obniżyć koszty kierowcy wynikające z wysokich kosztów połączeń telefonicznych. w środowisku 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. To jest zwłaszcza jeśli gra zawiera złożone sceny, których nie można wykorzystać w celu ograniczenia liczby wywołań losowania. 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ń obsługujących interfejs Vulkan, ponieważ nie mają one wydajność i funkcje lub problemy ze stabilnością.

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. Pracuje błędów kierowcy mogą wiązać się ze znacznym testowaniem i inżynierią obecnie się znajdujesz.

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

Uwzględnij 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żyj nagłówków Vulkan z NDK, użyj NDK w wersji 25 lub nowszej, która zawiera plików nagłówków obsługujących Vulkan w wersji 1.3. Pakiet SDK Vulkan zawiera bieżącej wersji 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 kompilować offline programy do cieniowania w ramach procesu tworzenia zasobów dla i dodaj moduły SPIR-V jako część zasobów środowiska wykonawczego.

Wywoływanie interfejsu Vulkan API w czasie działania

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 na to jest dodanie linku Zasoby wspólne usługi libvulkan.so, które wchodzą w skład pakietu Android NDK. Łączenie w porównaniu z biblioteką ma dwa wady: dodatkowy narzut związany z dystrybucją funkcji i ograniczeniami, które wskazują, że wskaźniki funkcji interfejsu Vulkan API są automatycznie .

Gdy wywołujesz funkcję interfejsu Vulkan API, element sterujący przekazuje sygnał dispatch tabela zarządzana przez program ładujący Vulkan. Android, korzysta z własnej implementacji programu Vulkan, a nie z platformy LunarG. . Ten system wczytywania jest częścią architektury warstw interfejsu Vulkan API. Połączenie z biblioteką systemową w czasie kompilacji skutkuje dodatkową dystrybucją dla danego wywołania interfejsu API. To niewielkie narzuty mogą być zauważalne, w przypadku gier, które generują dużą liczbę wywołań interfejsu Vulkan.

W bibliotece systemowej zwykle wskaźniki do funkcji Vulkana, które są które są częścią podstawowego 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 ograniczyć te problemy, dynamicznie rozwiązuj wskaźniki do wszystkich funkcji interfejsu Vulkan których zamierzasz używać w czasie działania. Można to osiągnąć na przykład za pomocą biblioteka open source meta-loader, np. volk. Przykładowa gra AGDKTunnel wykorzystuje w tym celu technologię Volk. Jeśli Używasz biblioteki metaloadera, nie łącz z tagiem libvulkan.so udostępniane w 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

Określany jest najwyższy numer wersji interfejsu Vulkan API dostępny na danym urządzeniu wersji Androida i obsługi sterowników Vulkan.

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 interfejsu API 33) lub nowszy
  • 1.1 – Android 10.0 (poziom interfejsu API 29) 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 zgłoszona przez vkEnumerateInstanceVersion (wersja vkEnumerateInstanceVersion)
  • Wersja interfejsu Vulkan API zgłaszana przez właściwość apiVersion atrybutu Struktura VkPhysicalDeviceWłaściwości

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 zapytać o możliwości urządzenia za pomocą odpowiednich interfejsów API Vulkan.

Profile Vulkan

Android korzysta z profili Vulkan który określa, które funkcje i rozszerzenia są dostępne 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. Minimalne_wartości VPA15 to pierwszy profil Androida 15. Co roku wszystkich głównych wersji Androida.

Wdrażanie tempa klatek

Właściwe tempo klatek jest nieodłączną częścią rozgrywki i uzyskiwanie dodatkowych informacji. Zestaw Android Game Development Kit obejmuje funkcję Frame Pacing biblioteka, która pomaga w osiągnięciu optymalnego tempa klatek. Więcej szczegóły implementacji można znaleźć w Zintegruj funkcję Android Frame Pacing z mechanizmem renderowania Vulkan

Wdrażanie rotacji wstępnej

Urządzenia z Androidem mogą wyświetlać się w różnych orientacjach. Orientacja urządzenia może musi różnić się od orientacji powierzchni renderowania. W przeciwieństwie do OpenGL ES Android Vulkan nie uwzględnia rozbieżności między nimi. Aby dowiedzieć się, jak to zrobić, proces orientacji i optymalna metoda różnice w korzystaniu z Vulkana – zapoznaj się z sekcją Obsługa rotacji urządzeń za pomocą Vulkana przed rotacją.

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 weryfikacji interfejsu Vulkan

Warstwy weryfikacji interfejsu Vulkan to biblioteki środowiska wykonawczego, które można włączyć w celu inspekcji interfejsu Vulkan API i wyświetlają ostrzeżenia lub błędy dotyczące nieprawidłowych lub nieoptymalne wykorzystanie. 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 tutaj: Debugowanie z użyciem warstwy walidacji.

Narzędzia do przechwytywania klatek

Używaj narzędzi do przechwytywania klatek, aby nagrywać i ponownie odtwarzać wywołania interfejsu Vulkan API ramki do gry. Dzięki tym narzędziom możesz:

  • Wyświetl informacje o aktywnych zasobach graficznych i wizualizacje
  • Zobacz sekwencję wywołań interfejsu API wykonywanych przez grę i zapoznaj się z jej parametrami.
  • Badaj stan potoku graficznego w momencie wywołania rysowania
  • 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 z platformy Vulkan, OpenGL ES.

Do przechwytywania klatek Vulkan można również używać Inspektora GPU (AGI) Androida.

Narzędzia do analizy skuteczności

Używaj narzędzi do analizy wydajności, by badać 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ż zbierać i analizować dane za pomocą Android GPU Inspector. dane o skuteczności kampanii. W przeciwieństwie do narzędzi dostawcy dostępny jest Android GPU Inspector. z kilkoma układami GPU od różnych dostawcó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 pakietu CTS (Compatibility Test Suite). aby upewnić się, że ich urządzenia są zgodne. 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 aktualizację urządzenia i sprawi, że ten sam błąd nie powtórzy się z żadnych innych urządzeń.

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