Motori nativi e proprietari

Inizia a utilizzare Vulkan su Android

Vulkan è la principale API grafica di basso livello su Android. Vulkan offre prestazioni ottimali per i giochi che implementano un proprio motore grafico e renderer.

Per implementare correttamente Vulkan nel tuo motore di gioco, devi:

  • Identifica quali dispositivi Android utilizzare con Vulkan
  • Vantaggi del supporto dei dispositivi Android meno recenti
  • Aggiungi Vulkan al tuo target di build Android
  • Scegli un compilatore Shader per creare SPIR-V per Vulkan
  • Determina la versione disponibile dell'API Vulkan in fase di runtime
  • Scopri come ottimizzare le operazioni di rendering Vulkan con i profili Vulkan, il pacing dei frame e la pre-rotazione
  • Seleziona strumenti grafici per il debug e l'analisi delle prestazioni

Scegli le specifiche minime del dispositivo per Vulkan

Vulkan è disponibile su Android a partire da Android 7.0 (livello API 24). Non tutti i dispositivi con Android 7.0 o versioni successive supportano Vulkan. Devi determinare quali dispositivi Android compatibili con Vulkan sono supportati dal tuo gioco.

Contenuti consigliati

Utilizza le seguenti specifiche come requisiti minimi per il supporto di Vulkan:

  • Sul dispositivo è installato Android 10.0 (livello API 29) o versioni successive
  • Il dispositivo supporta l'API Vulkan versione 1.1 o successive
  • Il dispositivo dispone di funzionalità hardware compatibili con il profilo Android Baseline 2022

Supporto dei dispositivi meno recenti

Se il tuo gioco è progettato per funzionare su una vasta gamma di dispositivi con diversi livelli di capacità grafiche, potrebbe essere necessario supportare dispositivi precedenti a quelli consigliati in Scegliere le specifiche minime dei dispositivi per Vulkan. Prima di sviluppare il supporto per i dispositivi meno recenti, valuta se Vulkan offre vantaggi al tuo gioco. I giochi con molte chiamate di disegno che utilizzano OpenGL ES possono notare un notevole sovraccarico del driver a causa dei costi elevati di effettuare chiamate di estrazione con OpenGL ES. Questi giochi possono diventare legati alla CPU, poiché spendono grandi porzioni della durata frame nel driver di grafica. I giochi possono anche registrare riduzioni significative del consumo di CPU e della batteria passando da OpenGL ES a Vulkan. Ciò è particolarmente utile se il gioco presenta scene complesse che non possono utilizzare in modo efficace l'istanza per ridurre le chiamate al richiamo. Quando scegli come target dispositivi meno recenti, includi il supporto del rendering OpenGL ES come alternativa, poiché alcuni dispositivi nel tuo elenco di dispositivi target potrebbero avere implementazioni Vulkan che non possono eseguire il gioco in modo affidabile.

Ti consigliamo di non supportare i dispositivi Vulkan meno recenti perché non offrono prestazioni e funzionalità o presentano problemi di stabilità.

Prestazioni e funzionalità

I dispositivi Android meno recenti compatibili con Vulkan potrebbero non avere le prestazioni di rendering o il supporto hardware per le funzionalità necessarie per eseguire il tuo gioco. Ciò si verifica soprattutto se il tuo gioco ha una grafica ad alta fedeltà e Vulkan è l'unica API che hai scelto come target su Android. Molti dispositivi meno recenti sono limitati alla versione 1.0.3 dell'API Vulkan e spesso non sono disponibili estensioni Vulkan ampiamente utilizzate su hardware più moderni.

Stabilità

I dispositivi Android meno recenti potrebbero utilizzare driver Vulkan obsoleti. Queste versioni del driver potrebbero includere bug che possono influire sulla stabilità del gioco. Risolvere i bug dei driver può comportare una quantità significativa di tempo per i test e la progettazione.

Aggiungi Vulkan al tuo progetto

Per aggiungere Vulkan al tuo progetto devi:

  • Includi le intestazioni dell'API Vulkan
  • Compila il codice dello strumento di identificazione in SPIR-V
  • Chiama l'API Vulkan in fase di runtime

Includi le intestazioni dell'API Vulkan

Il tuo gioco deve includere i file di intestazione dell'API Vulkan per compilare il codice che utilizza Vulkan. Puoi trovare una copia delle intestazioni Vulkan nell'NDK di Android o in pacchetto nelle release dell'SDK Vulkan. Qualsiasi versione NDK specifica include solo le intestazioni Vulkan disponibili al momento della release NDK. Se utilizzi le intestazioni Vulkan dell'NDK, utilizza NDK versione 25 o successiva, che include i file di intestazione che supportano Vulkan versione 1.3. L'SDK Vulkan dispone della versione più recente delle intestazioni.

Compila il codice dello strumento di identificazione in SPIR-V

L'API Vulkan prevede che i programmi Shadr siano forniti nel formato binario intermedio SPIR-V. Questa convenzione è diversa da OpenGL ES, in cui puoi inviare il codice sorgente scritto in OpenGL Shading Language (GLSL) come stringhe di testo. Usa un compilatore Shader per prendere codice scritto in un linguaggio shader come GLSL o il linguaggio HLSL (High-level Shader Language) e compilalo in moduli SPIR-V per l'uso con Vulkan.

Il compilatore shaderc può essere usato per compilare i programmi Shaderc scritti in GLSL in SPIR-V. Se il tuo gioco usa HLSL, DirectXShaderCompiler supporta l'output SPIR-V. In genere, compili programmi di Shadr offline come parte del processo di creazione degli asset per il tuo gioco e includi i moduli SPIR-V come parte degli asset di runtime.

Chiama l'API Vulkan in fase di runtime

Per chiamare l'API Vulkan, il gioco deve ottenere i puntatori alle funzioni alle chiamate API Vulkan. Il modo più semplice per farlo è creare un collegamento alla libreria condivisa di libvulkan.so, inclusa nell'NDK di Android. Il collegamento alla libreria presenta due difetti: l'overhead di invio delle funzioni aggiuntivo e le limitazioni relative ai puntatori delle funzioni dell'API Vulkan che vengono risolti automaticamente.

Quando chiami una funzione API Vulkan, il controllo passa attraverso una tabella di invio gestita da un costrutto chiamato caricatore Vulkan. Android utilizza la propria implementazione Vulkan loader e non il caricatore LunarG. Questo sistema di caricamento fa parte dell'architettura dei livelli dell'API Vulkan. Il collegamento alla libreria di sistema al momento della build comporta un ulteriore livello di invio per una determinata chiamata API. Sebbene il sovraccarico sia ridotto, può essere evidente per i giochi che eseguono volumi elevati di chiamate Vulkan.

La libreria di sistema in genere risolve solo i puntatori alle funzioni Vulkan che sono considerate parte dell'API principale. Vulkan ha un numero elevato di estensioni, che definiscono funzioni aggiuntive, molte delle quali non vengono risolte automaticamente dalla libreria di sistema. Devi risolvere manualmente i puntatori a queste funzioni Vulkan prima di utilizzarle.

Per limitare questi problemi, risolvi in modo dinamico i puntatori a tutte le funzioni Vulkan che intendi utilizzare durante il runtime. Un modo per raggiungere questo obiettivo è utilizzare una libreria di meta-loader open source come volk. Il gioco di esempio AGDKTunnel integra volk a questo scopo. Se utilizzi una libreria di meta-loader, non collegare la libreria condivisa libvulkan.so negli script di build.

Determina la versione disponibile dell'API Vulkan

Android supporta le seguenti versioni dell'API Vulkan:

  • 1,0,3
  • 1,1
  • 1.3

Il numero di versione dell'API Vulkan più elevato disponibile su un determinato dispositivo dipende dalla versione di Android e dal supporto del driver Vulkan.

Versione di Android

Il supporto della piattaforma per una versione dell'API Vulkan dipende da una versione minima di Android (livello API):

  • 1.3: Android 13.0 (livello API 33) e versioni successive
  • 1.1: Android 10.0 (livello API 29) e versioni successive
  • 1.0.3: Android 7.0 (livello API 24) e versioni successive

Assistenza ai conducenti Vulkan

Il supporto della piattaforma Android per una versione dell'API Vulkan non garantisce che la versione dell'API sia supportata dal driver Vulkan del dispositivo. Un dispositivo con Android 13 potrebbe supportare solo la versione 1.1 dell'API Vulkan.

Durante l'inizializzazione di Vulkan, non richiedere una versione dell'API superiore a:

  • La versione massima dell'API Vulkan per la versione di Android in esecuzione sul dispositivo
  • La versione dell'API Vulkan segnalata da vkEnumerateInstanceVersion
  • La versione dell'API Vulkan segnalata dalla proprietà apiVersion della struttura VkPhysicalDeviceProperties

Di seguito è riportato un esempio di determinazione della versione dell'API Vulkan più supportata:

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

Determina la compatibilità del profilo Vulkan

I profili Vulkan sono file JSON che definiscono un insieme di funzionalità, estensioni, funzionalità e limiti minimi di parametri richiesti che un dispositivo Vulkan deve supportare per essere compatibile con il profilo. Per determinare se un dispositivo è compatibile con un profilo Vulkan specifico, ad esempio il profilo Android Baseline 2022, utilizza la libreria API Vulkan Profiles open source. Puoi anche analizzare autonomamente il file JSON del profilo ed eseguire query sulle funzionalità del dispositivo utilizzando le API Vulkan pertinenti per determinare la compatibilità del profilo.

Profili Vulkan

Android utilizza i profili Vulkan che definisce le funzionalità e le estensioni disponibili per ciascuno dei dispositivi su cui è in esecuzione Android.

Il Profilo Android Baseline (ABP) è il primo tentativo di creare un Profilo Vulkan. ABP2021 e ABP2022 sono profili arretrati volti a coprire oltre l'85% dei dispositivi attivi in quel momento. Non ci saranno nuovi IAP in futuro.

Vulkan Profiles for Android (VPA) è il nuovo profilo lungimirante volto a riflettere le esigenze degli sviluppatori di software e offrire funzionalità coerenti non appena gli sviluppatori di hardware possono fornirle. VPA15_minimums è il primo profilo per Android 15 e ogni anno verrà fornito un nuovo VPA per coprire ogni release principale di Android.

Implementare il pacing del frame

Il giusto ritmo del frame è una parte essenziale per offrire un'esperienza di gameplay di alta qualità. Android Game Development Kit include la libreria del pacing frame per aiutare il tuo gioco a ottenere un pacing ottimale dei frame. Per ulteriori dettagli sull'implementazione, consulta Integrare il pacing dei frame Android nel renderer Vulkan.

Implementa la pre-rotazione

I dispositivi Android possono avere diversi orientamenti. L'orientamento del dispositivo può essere diverso da quello della superficie di rendering. A differenza di OpenGL ES su Android, Vulkan non gestisce le discrepanze tra i due. Per capire come funziona il processo di orientamento e il metodo ottimale per gestire le differenze di orientamento quando si utilizza Vulkan, consulta Gestire la rotazione dei dispositivi con la pre-rotazione di Vulkan.

Risolvere i problemi e profilare il rendering Vulkan

Sono disponibili diversi strumenti per diagnosticare i problemi di rendering e di prestazioni con il codice di rendering Vulkan.

Per ulteriori informazioni sugli strumenti di debug e profilazione di Vulkan, consulta la sezione Strumenti e funzionalità avanzate.

Livelli di convalida Vulkan

I livelli di convalida Vulkan sono librerie di runtime che possono essere abilitate per ispezionare le chiamate all'API Vulkan e fornire avvisi o errori relativi a un uso non corretto o non ottimale. Questi livelli di convalida non sono attivi per impostazione predefinita, poiché il processo di convalida aggiunge un overhead di runtime e influisce sulle prestazioni del tuo gioco. Per informazioni su come utilizzare i livelli di convalida con il tuo gioco, consulta Debug con il livello di convalida.

Strumenti di acquisizione fotogrammi

Utilizza gli strumenti di acquisizione frame per registrare e riprodurre le chiamate API Vulkan effettuate durante un frame di gioco. Questi strumenti ti consentono di:

  • Vedi informazioni e visualizzazioni delle risorse grafiche attive
  • Visualizza la sequenza di chiamate API effettuate dal tuo gioco e controlla i parametri API
  • Esplora lo stato della pipeline grafica al momento di una chiamata di disegno
  • Visualizza i risultati del rendering fino a una chiamata di disegno specifica nel frame.

Utilizza lo strumento open source RenderDoc per acquisire frame da giochi in esecuzione su Android. RenderDoc supporta l'acquisizione di fotogrammi sia per Vulkan che per OpenGL ES.

Anche Android GPU Inspector (AGI) può essere utilizzato per acquisire i frame Vulkan.

Strumenti di analisi del rendimento

Usa strumenti di analisi delle prestazioni per esaminare i problemi di rendering nel tuo gioco che causano frequenze fotogrammi non ottimali. I singoli fornitori di GPU forniscono strumenti progettati per profilare il tuo gioco e fornire dati sulle prestazioni specifici per le loro architetture GPU. Le caratteristiche delle prestazioni e i colli di bottiglia del tuo gioco possono variare in modo significativo quando esegui il rendering su GPU di diversi fornitori o anche su generazioni di GPU diverse dello stesso fornitore.

Puoi anche utilizzare Android GPU Inspector per raccogliere e analizzare i dati sulle prestazioni. A differenza degli strumenti del fornitore, Android GPU Inspector è compatibile con più GPU di fornitori diversi. Tuttavia, Android GPU Inspector non supporta i dispositivi Android meno recenti e potrebbe non essere compatibile con tutti i nuovi dispositivi.

Migliora i test Vulkan con CTS-D

I produttori di dispositivi Android utilizzano il Compatibility Test Suite (CTS) per garantire la compatibilità dei loro dispositivi. I CTS basati sullo sviluppatore (CTS-D) sono test inviati dagli sviluppatori di applicazioni Android per verificare che i futuri dispositivi Android soddisfino i loro casi d'uso e siano in grado di eseguire le loro applicazioni in modo fluido e senza bug.

Se riesci ad attivare un nuovo bug nell'applicazione Vulkan che interessa qualsiasi dispositivo Android specifico, puoi inviare una nuova proposta di test con la descrizione del problema e le modalità di verifica. Ciò garantisce che il problema venga risolto in un aggiornamento futuro del dispositivo e che lo stesso bug non si verifichi per altri dispositivi.

Consulta la procedura di invio della CTS per istruzioni dettagliate su come inviare la proposta di test.