Native und proprietäre Engines

Erste Schritte mit Vulkan auf Android

Vulkan ist die primäre Low-Level-Grafik-API unter Android. Vulkan bietet optimale Leistung für Spiele, die eine eigene Spiel-Engine und einen eigenen Renderer implementieren.

Damit du Vulkan in deine Spiel-Engine implementieren kannst, musst du

  • Herausfinden, welche Android-Geräte mit Vulkan verwendet werden sollen
  • Vor- und Nachteile der Unterstützung älterer Android-Geräte
  • Vulkan dem Android-Build-Ziel hinzufügen
  • Wähle einen Shader-Compiler aus, um SPIR-V für Vulkan zu erstellen
  • Verfügbare Vulkan API-Version zur Laufzeit ermitteln
  • Hier erfährst du, wie du deine Vulkan-Renderingvorgänge mit Vulkan-Profilen optimieren kannst. Frame-Taktung und Pre-Rotation
  • Grafiktools für Fehlerbehebung und Leistungsanalyse auswählen

Mindestgerätespezifikationen für Vulkan auswählen

Vulkan ist ab Android 7.0 (API-Level 24) auf Android-Geräten verfügbar. Nicht Alle Android-Geräte mit Android 7.0 oder höher unterstützen Vulkan. Erforderliche Schritte um herauszufinden, welche Vulkan-fähigen Android-Geräte dein Spiel unterstützt.

Empfehlungen

Beachten Sie für den Vulkan-Support die folgenden Mindestanforderungen:

  • Gerät verwendet Android 10.0 (API-Level 29) oder höher
  • Gerät unterstützt Vulkan API-Version 1.1 oder höher
  • Gerät verfügt über Hardwarefunktionen und -funktionen, die mit 2022 kompatibel sind. Android Baseline-Profil

Support für ältere Geräte

Wenn Ihr Spiel für eine Vielzahl von Geräten mit unterschiedlichen Leveln entwickelt wurde benötigen, müssen Sie möglicherweise Geräte unterstützen, empfohlen im Artikel Mindestanforderungen an Geräte für Vulkan auswählen Bevor du Unterstützung für ältere Geräte erstellst, solltest du prüfen, ob Vulkan die Vorteile für Ihr Spiel. Spiele mit vielen Zeichenaufrufen, die OpenGL ES verwenden kann aufgrund der hohen Kosten für Zeichnungsanrufe einen erheblichen Treiberaufwand sehen in OpenGL ES ausführen. Diese Spiele können CPU-gebunden arbeiten, weil ein großer Teil der Kosten nicht ausgegeben wird ihrer Frame Time in den Grafiktreiber ein. Die Spiele können auch signifikante durch den Wechsel von OpenGL ES zu Vulkan reduzieren sich der CPU- und Stromverbrauch. Dies ist vor allem, wenn Ihr Spiel komplexe Szenen aufweist, um weniger Aufrufe zu erhalten. Bei der Ausrichtung auf ältere Geräte geben Sie OpenGL ES ein. Rendering-Unterstützung als Fallback, da einige Geräte in Ihrer Zielgeräteliste Vulkan-Implementierungen haben, bei denen dein Spiel nicht zuverlässig läuft.

Möglicherweise möchten Sie keine älteren Vulkan-fähigen Geräte unterstützen, oder Stabilitätsprobleme haben.

Leistung und Funktionen

Ältere Vulkan-fähige Android-Geräte bieten möglicherweise nicht die Rendering-Leistung oder Hardware-Unterstützung für Funktionen, die zum Ausführen deines Spiels erforderlich sind. Das ist besonders wahrscheinlich, Wenn Ihr Spiel High-Fidelity-Grafik hat und Vulkan die einzige API ist, die Sie nutzen Ausrichtung auf Android-Geräte. Viele ältere Geräte verfügen nur über Version 1.0.3 der der Vulkan API fehlen. Häufig sind weit verbreitete Vulkan-Erweiterungen moderne Hardware.

Stabilität

Möglicherweise verwenden ältere Android-Geräte veraltete Vulkan-Treiber. Diese Fahrer Versionen können Programmfehler enthalten, die die Stabilität deines Spiels beeinträchtigen können. Wird ausgeführt im Zusammenhang mit Treiberfehlern kann sehr viel Tests und Entwicklung erfordern. .

Vulkan Ihrem Projekt hinzufügen

So fügen Sie Ihrem Projekt Vulkan hinzu:

  • Vulkan API-Header einschließen
  • Shader-Code in SPIR-V kompilieren
  • Vulkan API zur Laufzeit aufrufen

Vulkan API-Header einschließen

Dein Spiel muss die Header-Dateien der Vulkan API enthalten, um Code zu kompilieren, der Vulkan Eine Kopie der Vulkan-Header findest du im Android-NDK oder die in Vulkan SDK-Releases enthalten sind. Beliebige NDK-Version umfasst nur Vulkan-Header, die zum Zeitpunkt der NDK-Veröffentlichung verfügbar waren. Wenn Sie Vulkan-Header aus dem NDK verwenden, NDK Version 25 oder höher verwenden, einschließlich Headerdateien, die Vulkan Version 1.3 unterstützen. Das Vulkan SDK bietet aktuelle Version der Kopfzeilen.

Shader-Code in SPIR-V kompilieren

Die Vulkan API erwartet, dass Shader-Programme im SPIR-V-Binärprogramm bereitgestellt werden. Zwischenformat. Diese Konvention unterscheidet sich von OpenGL ES, wo Sie Quellcode senden, der in der OpenGL Shading Language (GLSL) als Text Zeichenfolgen. Einen Shader-Compiler verwenden, um in einem Shader geschriebenen Code zu übernehmen Sprache wie GLSL oder die High-level Shader Language (HLSL) und es zur Verwendung mit Vulkan in SPIR-V-Module kompilieren.

Der Compiler shaderc kann zum Kompilieren von Shader-Programmen verwendet werden in GLSL in SPIR-V umgewandelt. Wenn dein Spiel HLSL verwendet, DirectXShaderCompiler unterstützt die SPIR-V-Ausgabe. In der Regel Shader-Programme offline im Rahmen des Asset-Erstellungsprozesses kompilieren und fügen Sie die SPIR-V-Module in Ihre Laufzeit-Assets ein.

Vulkan API zur Laufzeit aufrufen

Wenn du die Vulkan API aufrufen möchtest, benötigt dein Spiel Funktionszeiger für Vulkan API-Aufrufe Am einfachsten geht das, indem Sie eine Verknüpfung Die gemeinsam genutzte Bibliothek von libvulkan.so, die im Android-NDK enthalten ist. Wird verknüpft... hat zwei Nachteile: der zusätzliche Aufwand bei der Funktionsverteilung. und Einschränkungen dazu, welche Vulkan API-Funktionszeiger automatisch erstellt werden behoben.

Wenn Sie eine Vulkan API-Funktion aufrufen, wird die Steuerung durch eine Weiterleitung , die von einem Konstrukt namens Vulkan Loader verwaltet wird. Android-Geräte verwendet eine eigene Vulkan Loader-Implementierung statt LunarG loader. Dieses Ladesystem ist Teil der Ebenenarchitektur der Vulkan API. Das Verknüpfen der Systembibliothek zum Build-Zeitpunkt führt zu einer zusätzlichen Weiterleitung. für einen bestimmten API-Aufruf an. Der Mehraufwand ist zwar gering, aber wahrnehmbar für Spiele mit vielen Vulkan-Aufrufen.

Die Systembibliothek löst im Allgemeinen nur Verweise auf Vulkan-Funktionen auf, die als Teil der Kern-API betrachtet wird. Vulkan hat eine große Anzahl an Erweiterungen, Zusätzliche Vulkan-Funktionen definieren, von denen viele nicht automatisch aufgelöst werden von der Systembibliothek. Du musst die Verweise auf diesen Vulkan manuell auflösen bevor Sie sie verwenden.

Um diese Probleme zu beheben, müssen Sie Verweise auf alle Vulkan-Funktionen dynamisch auflösen die Sie zur Laufzeit verwenden möchten. Eine Möglichkeit dazu ist die Verwendung eines Open-Source-Metaloader-Bibliothek wie volk Die Das Beispielspiel AGDKTunnel integriert zu diesem Zweck Volk. Wenn Wenn du eine Metaloader-Bibliothek verwendest, verlinke keine Verknüpfung mit dem libvulkan.so. gemeinsam genutzten Bibliothek in Ihren Build-Skripts.

Verfügbare Vulkan API-Version ermitteln

Android unterstützt die folgenden Vulkan API-Versionen:

  • 1.0.3
  • 1,1
  • 1.3

Es wird die höchste Vulkan API-Versionsnummer ermittelt, die auf einem bestimmten Gerät verfügbar ist nach Android-Version und Vulkan-Treiberunterstützung.

Android-Version

Für die Unterstützung der Vulkan API-Version ist mindestens Android erforderlich Version (API-Level):

  • 1.3 – Android 13.0 (API-Level 33) und höher
  • 1.1 – Android 10.0 (API-Level 29) und höher
  • 1.0.3 – Android 7.0 (API-Level 24) und höher

Vulkan-Treiberunterstützung

Die Unterstützung der Android-Plattform für eine Vulkan API-Version garantiert nicht, dass die API funktioniert. Version wird vom Vulkan-Treiber des Geräts unterstützt. Ein Gerät mit Android 13 unterstützt möglicherweise nur Version 1.1 der Vulkan API.

Fordern Sie beim Initialisieren von Vulkan keine API-Version an, die höher als:

Hier ein Beispiel zum Ermitteln der höchsten unterstützten Vulkan API-Version:

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

Kompatibilität des Vulkan-Profils ermitteln

Vulkan-Profile sind JSON-Dateien, in denen eine Reihe von Erweiterungen, Funktionen und Parametergrenzen, die ein Vulkan-Gerät nicht überschreiten muss um mit dem Profil kompatibel zu sein. Um festzustellen, ob ein Gerät kompatibel mit einem bestimmten Vulkan-Profil, wie z. B. Android Baseline 2022“ verwenden, verwenden Sie die Open-Source-Bibliothek Vulkan Profiles API. Du kannst die JSON-Profildatei auch selbst parsen und Gerätefunktionen abfragen Ermitteln Sie mithilfe der relevanten Vulkan-APIs die Kompatibilität des Profils.

Vulkan-Profile

Android verwendet Vulkan-Profile in dem definiert wird, welche Funktionen und Erweiterungen mit Android-Geräten.

Android Baseline Profile (ABP) ist der erste Versuch, ein Vulkan-Profil zu erstellen. ABP2021 und ABP2022 sind rückwärts gerichtete Profile, die die Abdeckung > 85% der aktiven Geräte gleichzeitig . Es wird künftig keine neuen Abo-Optionen mehr geben.

Vulkan-Profile für Android (VPA) ist das neue, zukunftsorientierte Profil, die Anforderungen von Softwareentwicklern zu berücksichtigen und für einheitliche Funktionen zu sorgen, da Hardwareentwickler sie umsetzen können. VPA15_Minimum ist das erste Profil für Android 15 und es wird jedes Jahr ein neues VPA geben, decken alle wichtigen Android-Versionen ab.

Frame-Taktung implementieren

Die richtige Frame-Taktung ist für eine qualitativ hochwertige Spielqualität unerlässlich. Nutzererfahrung. Das Android Game Development Kit enthält die Frame Pacing. -Bibliothek, damit Ihr Spiel ein optimales Frame-Tempo erreichen kann. Weitere Informationen Implementierungsdetails, siehe Integriere Android Frame Pacing in deinen Vulkan-Renderer.

Vorrotation implementieren

Android-Geräte können in mehreren Ausrichtungen angezeigt werden. Die Ausrichtung des Geräts kann von der Ausrichtung der Rendering-Oberfläche abweichen. Anders als bei OpenGL ES Android verarbeitet Vulkan keine Diskrepanzen zwischen den beiden. Um zu verstehen, wie wie der Ausrichtungsprozess funktioniert, und die optimale Methode für den Umgang mit Unterschiede bei der Verwendung von Vulkan, siehe Geräterotation mit Vulkan verarbeiten vor der Rotation.

Fehlerbehebung und Profil für das Vulkan-Rendering

Zur Diagnose von Rendering-Problemen stehen Ihnen verschiedene Tools zur Verfügung. Leistungsprobleme bei Vulkan-Rendering-Code auftreten.

Weitere Informationen zu den Tools zur Fehlerbehebung und Profilerstellung von Vulkan findest du in der Tools und erweiterte Funktionen .

Vulkan-Validierungsebenen

Vulkan-Validierungsebenen sind Laufzeitbibliotheken, die für die Prüfung aktiviert werden können Ihre Aufrufe an die Vulkan API senden und Warnungen oder Fehler bei falschen oder nicht optimale Nutzung. Diese Validierungsebenen sind standardmäßig nicht aktiv, da die Validierungsprozess bedingt, erhöht sich die Laufzeit Spiel. Informationen zur Verwendung von Validierungsebenen mit deinem Spiel findest du unter Fehlerbehebung mit Validierungsebene

Tools zur Bilderfassung

Mit Frame-Capture-Tools können Sie die Vulkan API-Aufrufe aufzeichnen und wiedergeben, die während einer Spiel-Frame. Mit diesen Tools können Sie:

  • Informationen zu aktiven Grafikressourcen und Visualisierungen ansehen
  • Abfolge der von Ihrem Spiel ausgeführten API-Aufrufe und API-Parameter ansehen
  • Status der Grafikpipeline während eines Zeichenaufrufs untersuchen
  • Die Ergebnisse des Renderings bis zu einem bestimmten Zeichenaufruf im Frame visualisieren

Mit dem Open-Source-Tool RenderDoc können Sie Frames aus Spiele auf Android-Geräten. RenderDoc unterstützt die Frame-Erfassung sowohl von Vulkan als auch von OpenGL ES

Du kannst auch den Android GPU Inspector (AGI) verwenden, um Vulkan-Frames zu erfassen.

Tools zur Leistungsanalyse

Mit Tools zur Leistungsanalyse kannst du Rendering-Probleme in deinem Spiel untersuchen, die suboptimale Framerates verursachen. Einzelne GPU-Anbieter stellen Tools bereit, Profil für Ihr Spiel erstellen und für die GPU spezifische Leistungsdaten bereitstellen Architekturen. Die Leistungsmerkmale und Engpässe Ihres Spiels können beim Rendering auf GPUs verschiedener Anbieter oder sogar auf verschiedene GPU-Generationen vom selben Anbieter.

Sie können auch den Android GPU Inspector verwenden, Leistungsdaten erfasst werden. Im Gegensatz zu den Anbietertools ist Android GPU Inspector kompatibel, mit mehreren GPUs verschiedener Anbieter. Der Android GPU Inspector unterstützen keine älteren Android-Geräte und sind möglicherweise nicht mit allen neuen Geräte.

Vulkan-Tests mit CTS-D verbessern

Hersteller von Android-Geräten nutzen die Compatibility Test Suite (CTS), um um sicherzustellen, dass ihre Geräte kompatibel sind. Developer-Powered CTS (CTS-D) sind von Android-App-Entwicklern eingereicht, um sicherzustellen, Android-Geräte erfüllen ihre Anwendungsfälle und sind in der Lage, ihre Apps auszuführen. reibungslos und ohne Fehler.

Wenn Sie in Ihrer Vulkan-App einen neuen Fehler auslösen, bestimmte Android-Geräte benötigen, können Sie ein neues Testangebot einreichen, in dem Ihr Problem und Möglichkeiten zur Überprüfung. So wird sichergestellt, dass das Problem ein zukünftiges Update für das Gerät, und sorgt auch dafür, dass der gleiche Fehler nicht auftritt. auf andere Geräte übertragen.

Lesen Sie den CTS-Übermittlungsprozess. finden Sie eine detaillierte Anleitung des Testangebots.