Vulkan düşük bir genel giderdir. Yüksek performanslı 3D için platformlar arası API gösterir. OpenGL ES (GLES) gibi, Vulkan, yüksek kaliteli, çok çeşitli gerçek zamanlı grafiklere sahip oluyorsunuz. Vulkan kullanmanın avantajları arasında CPU kullanımındaki düşüşler SPIR-V İkili Program Orta Düzey dili için ek yük ve destek.
Vulkan'ın başarıyla uygulanabilmesi için cihazın şunları içermesi gerekir:
- Android tarafından sağlanan Vulkan yükleyici.
- GPU IHV'ler gibi SoC'ler tarafından sağlanan bir Vulkan sürücüsü, , Vulkan API'si. Android, Vulkan işlevselliğini desteklemek için cihazın, Vulkan özellikli GPU donanımına ve ilişkili sürücüye ihtiyacı vardır. GPU GLES 3.1 ve sonraki sürümleri de desteklemelidir. Aşağıdaki işlemler için SoC tedarikçi firmanıza danışın: sürücü desteği isteyin.
Bir cihaz Vulkan sürücüsü içeriyorsa cihazın,
FEATURE_VULKAN_HARDWARE_LEVEL
ve
Şu sürümleri içeren FEATURE_VULKAN_HARDWARE_VERSION
sistem özelliği:
özelliklerini doğru bir şekilde yansıtması gerekir. Böylece ekip üyeleri
bununla uyumlu olup olmadığını
Uyumluluk Tanımlama Belgesi (CDD)
Vulkan yükleyici
Vulkan yükleyici platform/frameworks/native/vulkan
Vulkan uygulamaları ile cihazın Vulkan sürücüsü arasındaki birincil arayüzdür. Vulkan
yükleyici /system/lib[64]/libvulkan.so
adresine yüklendi. Yükleyici
temel Vulkan API giriş noktalarını, yani uzantıların giriş noktalarını
ve isteğe bağlı birçok ek uzantı ile birlikte uygulanabilir. Pencere
Sistem Entegrasyonu (WSI) uzantıları, yükleyici tarafından dışa aktarılır ve
yükleyicide uygulanması gerekir. Yükleyici ayrıca şunları da destekler:
ek uzantıları ve kesişimleri gösterebilen katmanları numaralandırma ve yükleme
asıl API çağrıları sürücüye doğru ilerler.
NDK'da şu konular için bir libvulkan.so
kütüphanesi bulunmaktadır:
bağlanıyor. Kitaplık, yükleyiciyle aynı simgeleri dışa aktarır. Uygulamalar, işlevleri
gerçek libvulkan.so
kitaplığından
yükleyiciye trambolin fonksiyonlarını girin, bu fonksiyonlar uygun
katman veya sürücüye göre test edilir. vkGet*ProcAddr()
çağrısı, trambolinlerin dağıttığı fonksiyon işaretçilerini (yani
. İşlev aracılığıyla çağrı yapma
kullanmak, dışa aktarılan simgeler yerine işaretçileri
ve trambolini atlar.
Sürücü numaralandırması ve yükleniyor
Sistem görüntüsü oluşturulduğunda Android, sistemin hangi GPU'ları bilmesini bekler.
kullanılabilir. Yükleyici, mevcut HAL mekanizmasını kullanır
hardware.h
.
sürücüyü bulup yüklemek için. 32 bit ve 64 bit Vulkan sürücüleri için tercih edilen yollar şunlardır:
/vendor/lib/hw/vulkan.<ro.hardware.vulkan>.so /vendor/lib/hw/vulkan.<ro.product.platform>.so /vendor/lib64/hw/vulkan.<ro.hardware.vulkan>.so /vendor/lib64/hw/vulkan.<ro.product.platform>.so. .
Android 7.0 ve sonraki sürümlerde, Vulkan hw_module_t
türevi
tek bir hw_module_t
struct'ı sarmalar; yalnızca tek bir sürücü desteklenir ve sabit dize
HWVULKAN_DEVICE_0
, open()
adlı yapıya geçirildi.
Vulkan hw_device_t
türevi tek bir değere karşılık gelir
birden fazla fiziksel cihazı destekleyebilen bir sürücünün eklenmesidir. İlgili içeriği oluşturmak için kullanılan
hw_device_t
yapısı, dışa aktarma işlemi için genişletilebilir
vkGetGlobalExtensionProperties()
, vkCreateInstance()
ve
vkGetInstanceProcAddr()
işlev. Yükleyici diğer tüm
VkInstance()
, VkPhysicalDevice()
ve
Çağrı yaparak vkGetDeviceProcAddr()
işlevleri
hw_device_t
yapısının vkGetInstanceProcAddr()
.
Katman bulma ve yükleme
Vulkan yükleyici, ortaya çıkarabilecek katmanların numaralandırılmasını ve yüklenmesini destekler. ek uzantılar ve çekirdek API çağrılarına müdahale gerekir. Android, sistem görüntüsünde katman içermez; ancak, uygulamaları, APK'larında katmanlar içerebilir.
Katmanları kullanırken Android'in güvenlik modelinin ve politikalarının diğer platformlardan önemli ölçüde farklı. Özellikle Android, üretimde (rootlanmamış) hata ayıklaması mümkün olmayan bir işleme harici kod yükleme harici kodun, sürecin durumunu denetlemesine veya kontrol etmesine izin vermez. bellek, durum vb. Buna, temel dökümlerin, API'lerin ve izler vb. bunları daha sonra incelemek üzere diske kaydeder. Yalnızca kapsamında yayınlanan katmanlar Hata ayıklanamayan uygulamalar üretim cihazlarında etkinleştirilir ve sürücüler, bu politikaları ihlal eden diğer işlevler.
Katmanların kullanım alanları şunlardır:
- Geliştirme zamanı katmanları: Doğrulama İzleme/profil çıkarma/hata ayıklama araçları için katmanlar ve dolgular üretim cihazlarının sistem görüntüsü. Şunun için doğrulama katmanları ve dolgular: İzleme/profil çıkarma/hata ayıklama araçları sistem kullanılmadan güncellenebilir olmalıdır görüntüsüdür. Uygulama kullanmak isteyen geliştiriciler katmandan biri, uygulama paketini değiştirebilir. Örneğin, yerel kitaplık dizinine dosya ekleyerek. IHV ve OEM mühendisleri ile değiştirilemeyen uygulamaların gönderimindeki hataları teşhis etmek isteyen kişilerin sistem görüntüsünün üretim dışı (rootlanmış) derlemelerine erişim (bu uygulamalar hata ayıklaması yapılabilir. Daha fazla bilgi için Android'de Vulkan doğrulama katmanları bölümüne bakın.
- Yardımcı program katmanları: Bu katmanlar, uzantılar (ör. cihaz belleği için bellek yöneticisi uygulayan bir katman). Geliştiriciler, kendi çalışmalarında kullanmak üzere bu katmanların katmanlarını ve sürümlerini uygulama aynı katmanı kullanan farklı uygulamalar farklı versiyonları var. Bu katmanlardan hangilerinin kendi uygulama paketi.
- Yerleştirilen (örtülü) katmanlar: Kullanıcı veya kullanıcı tarafından sağlanan kare hızı, sosyal ağ ve oyun başlatıcı yer paylaşımları uygulamanın bilgisi veya onayı olmadan başka bir uygulamaya. Bu Android'in güvenlik politikalarını ihlal eden ve desteklenmeyen uygulamalar.
Hata ayıklanamayan uygulamalar için, yükleyici yalnızca
uygulamanın yerel kitaplık dizinini başlatır ve ada sahip herhangi bir kitaplığı yüklemeye çalışır
belirli bir kalıpla eşleşiyor (örneğin, libVKLayer_foo.so
).
Hata ayıklaması yapılabilecek uygulamalar için yükleyici, şurada katmanları arar:
/data/local/debug/vulkan
ve kitaplıkla eşleşen içerikleri yüklemeye çalışır
görebilirsiniz.
Android, katmanların taşınmasını ve aynı zamanda Android ve diğer platformlar. Katmanlar ve yükleyici, bkz. Vulkan Yükleyici Arayüzlerinin Mimarisi. Khronos'un bakımı doğrulama katmanlarının Vulkan Doğrulama Katmanları.
Vulkan API sürümleri ve özellikleri
Aşağıdaki tabloda, çeşitli Android sürümleri için Vulkan API sürümleri listelenmektedir.Android Sürümü | Vulkan Sürümü |
---|---|
Android 13 | Vulkan 1.3 |
Android 9 | Vulkan 1.1 |
Android 7 | Vulkan 1.0 |
Vulkan 1.3 işlevlerine genel bakış
Vulkan 1.3, daha önce isteğe bağlı olan birkaç uzantıyı Vulkan'ın temel işlevinde birleştiriyor. Bu işlevin büyük bölümü, kontrol ve ayrıntı düzeyini artırmak amacıyla, Vulkan programlama arayüzü. Tek geçişli oluşturma geçişi örneklerine artık ihtiyaç duyulmadı oluşturma geçişi nesneleri veya çerçeve arabellekleri. Ardışık düzen durumu nesnelerinin toplam sayısı azaltılabilir. senkronizasyonu yenilendi. Vulkan 1.3, Vulkan 1.2, 1.1 ve 1.0'a özeldir. Uygulamanın büyük bir kısmı SoC'ye özel grafik sürücüsünde var.
Android için en önemli Vulkan 1.3 özellikleri şunlardır:
- Tek geçişli oluşturma geçişi örnekleri için destek
- Gölgelendirici çağrısını hemen sonlandırma desteği
- Ardışık düzen oluşturma, paylaşma ve kontrolde daha hassas ayrıntı düzeyi
Vulkan 1.3 ayrıca birçok küçük özellik ve API kullanılabilirliği geliştirmesi içerir. Tüm değişiklikler temel Vulkan API'sinde küçük bir revizyon 1.3 ile yapılmış olan değişiklikleri şu adreste bulabilirsiniz: Temel Düzeltmeler (Vulkan 1.3).
Vulkan 1.2 işlevlerine genel bakış
Vulkan 1.2, API yüzeyini basitleştiren bir dizi özellik ve uzantı ekler. Buna şunlar dâhildir: Birleştirilmiş bir Bellek Modeli ve cihaz sürücüsünden sorgulanabilecek ek bilgiler. Vulkan 1.2, Vulkan 1.0 ve 1.1 ile aynı donanım gereksinimlerine sahiptir; tümünün uygulaması SoC'ye özel grafik sürücüsündedir, çerçevede değil.
Android için en önemli Vulkan 1.2 özelliği, 8 bit depolama desteğidir.
Vulkan 1.2 ayrıca çeşitli daha küçük özellikler ve API kullanılabilirliği geliştirmeleri de içerir. Tüm değişiklikler temel Vulkan API'sinde küçük bir revizyon 1.2 ile yapılmış olan değişiklikleri şu adreste bulabilirsiniz: Temel Düzeltmeler (Vulkan 1.2).
Vulkan 1.1 işlevlerine genel bakış
Vulkan 1.1'de, tek bir sistem kullanarak zamandan ve OEM'lerin cihazlarda Vulkan 1.1'i desteklemesini sağlar. Ayrıca, bellek/senkronizasyon birlikte çalışabilirliği, geliştiricilerin Vulkan 1.1'in bir cihazda desteklenip desteklenmediğini belirlemek ve etkili bir şekilde kullanmak olduğu zamandır. Vulkan 1.1, Vulkan 1.0 ile aynı donanım gereksinimlerine sahiptir ancak çoğu zaman uygulama, SOC'ye özel grafik sürücüsündedir, çerçevede değildir.
Android için en önemli Vulkan 1.1 özellikleri şunlardır:
- Bellek arabelleklerini ve senkronizasyonu içe ve dışa aktarma desteği Vulkan dışından nesneler (kamera, codec'ler ve GLES ile birlikte çalışmak için)
- YCbCr biçimleri için destek
Vulkan 1.1, birçok küçük özellik ve API kullanılabilirliği geliştirmesi de içerir. Tüm değişiklikler temel Vulkan API'sinde küçük bir revizyon 1.1 ile yapılmış olan değişiklikleri şu adreste bulabilirsiniz: Temel Düzeltmeler (Vulkan 1.1).
Vulkan desteğini seçin
Android cihazlar, piyasadaki en gelişmiş Vulkan özellik grubunu desteklemelidir. Bunun için 64 bit ABI'yı destekler ve düşük belleğe sahip değildir.
Android 13 ve sonraki sürümlerin yüklü olduğu cihazlar Vulkan 1.3'ü desteklemelidir.
Android 10 ile başlatılan cihazlar Vulkan 1.1'i desteklemelidir.
Diğer cihazlar isteğe bağlı olarak Vulkan 1.3, 1.2 ve 1.1'i destekleyebilir.
Vulkan sürümünü destekleme
Aşağıdaki koşullar karşılanıyorsa bir Android cihaz Vulkan sürümünü destekler:
- İlgili Vulkan sürümünü destekleyen bir Vulkan sürücüsü ekleyin (bu, Vulkan sürümünden biri olmalıdır) Ek CDD şartlarına ek olarak Android sürümü. Alternatif olarak, mevcut bir Vulkan sürücüsünü daha düşük bir Vulkan sürüm numarasına güncelleyin.
- Vulkan 1.3 veya 1.1 için, paket yöneticisi tarafından döndürülen sistem özelliğinin geri döndüğünden emin olun
Doğru vulkan sürümü için
true
.- Vulkan 1.3'te özellik,
PackageManager#hasSystemFeature(PackageManager.FEATURE_VULKAN_HARDWARE_VERSION, 0x403000)
- Vulkan 1.1'de özellik,
PackageManager#hasSystemFeature(PackageManager.FEATURE_VULKAN_HARDWARE_VERSION, 0x401000)
true
değerini döndürür. aşağıdaki gibi gösterilen bir dosyayı uygun birdevice.mk
dosyasına kopyalayın.- Vulkan 1.3 için aşağıdakini ekleyin:
PRODUCT_COPY_FILES += frameworks/native/data/etc/android.hardware.vulkan.version-1_3.xml: $(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.vulkan.version.xml
.
- Vulkan 1.3'te özellik,
- Vulkan 1.1 için aşağıdakini ekleyin:
PRODUCT_COPY_FILES += frameworks/native/data/etc/android.hardware.vulkan.version-1_1.xml: $(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.vulkan.version.xml
.
Android Temel profili (ABP)
Tüm Android cihazların en son Android Baseline 2022 profiline uymasını öneririz. bu kılavuzda Android Baseline profil kılavuzu.
Android 14 veya sonraki sürümleri ve Vulkan API'yi destekleyen tüm cihazlar
burada tanımlanan tüm işlevleri yerine
Android Baseline 2021 profili. Gerekli işlevlerin tam listesi
Vulkan profili json
dosyasında numaralanmıştır, ancak gerekli
işlevsellik şunları içerir:
- ASTC ve ETC aracılığıyla sıkıştırılmış dokular.
VK_EXT_swapchain_colorspace
tarihine kadar değişken renk alanları.- Örnek gölgelendirme ve çoklu örnek interpolasyonu
sampleRateShading
Pencere sistem entegrasyonu (WSI)
libvulkan.so
ürününde sürücü aşağıdaki işlemleri uygular
pencere sistemi entegrasyonu (WSI) uzantıları:
VK_KHR_surface
VK_KHR_android_surface
VK_KHR_swapchain
VK_KHR_driver_properties
, Vulkan 1.1 için uygulandı. Yalnızca Android 10VK_GOOGLE_display_timing
, herhangi bir Vulkan sürümü için uygulanır Android 10'da
VkSurfaceKHR
ve VkSwapchainKHR
nesneleri ve tümü
ANativeWindow
ile olan etkileşimler platform tarafından işlenir ve
sürücülere maruz kalıyor. WSI'nın uygulanması
VK_ANDROID_native_buffer
uzantısı,
Sürücü tarafından desteklendiğinde; bu uzantı yalnızca WSI uygulaması tarafından kullanılır
ve uygulamalara maruz kalmamasını sağlar.
Gralloc kullanım işaretleri
Vulkan uygulamaları için değişim zinciri arabelleklerinin tanımlanmış özel Gralloc kullanım işaretlerine sahiptir. Takas zinciri oluştururken Android, sürücüden istenen biçimi ve resim kullanımını çevirmesini ister aşağıdaki kodu çağırarak Gralloc kullanım işaretlerine kaydeder:
typedef enum VkSwapchainImageUsageFlagBitsANDROID { VK_SWAPCHAIN_IMAGE_USAGE_SHARED_BIT_ANDROID = 0x00000001, VK_SWAPCHAIN_IMAGE_USAGE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF } VkSwapchainImageUsageFlagBitsANDROID; typedef VkFlags VkSwapchainImageUsageFlagsANDROID; VkResult VKAPI vkGetSwapchainGrallocUsage2ANDROID( VkDevice device, VkFormat format, VkImageUsageFlags imageUsage, VkSwapchainImageUsageFlagsANDROID swapchainUsage, uint64_t* grallocConsumerUsage, uint64_t* grallocProducerUsage );
format
ve imageUsage
parametreleri
VkSwapchainCreateInfoKHR
yapısını seçin. Sürücü,
*grallocConsumerUsage
ve *grallocProducerUsage
biçim için gerekli Gralloc kullanım işaretleri
daha iyi anlamanızı sağlar. Sürücü tarafından döndürülen kullanım işaretleri, kullanım işaretleri
flag'leri değiştirebilirsiniz.
Android 7.x, VkSwapchainImageUsageFlagsANDROID()
uygulamasının önceki bir sürümünü çağırır.
vkGetSwapchainGrallocUsageANDROID()
adlı. Android 8.0 ve sonraki sürümler kullanımdan kaldırılıyor
vkGetSwapchainGrallocUsageANDROID()
ancak aramaya devam ediyor
Şu durumda vkGetSwapchainGrallocUsageANDROID()
vkGetSwapchainGrallocUsage2ANDROID()
, sürücü tarafından sağlanmadı:
VkResult VKAPI vkGetSwapchainGrallocUsageANDROID( VkDevice device, VkFormat format, VkImageUsageFlags imageUsage, int* grallocUsage );
vkGetSwapchainGrallocUsageANDROID()
, takas zinciri kullanımını desteklemiyor
veya genişletilmiş Gralloc kullanım işaretleri.
Gralloc destekli resimler
VkNativeBufferANDROID
, vkCreateImage
uzantısıdır
arka planla desteklenen bir görüntü oluşturma yapısıdır. VkNativeBufferANDROID
VkImageCreateInfo
içinde vkCreateImage()
adlı kullanıcıya sağlanır
yapı zinciridir. vkCreateImage()
numaralı telefona VkNativeBufferANDROID
üzerinden arama yapılıyor
vkCreateSwapchainKHR
numaralı telefona yapılan arama sırasında. WSI uygulaması,
takas zinciri için istenen yerel arabelleklerin sayısını belirler, daha sonra
Her biri için VkImage
:
typedef struct { VkStructureType sType; // must be VK_STRUCTURE_TYPE_NATIVE_BUFFER_ANDROID const void* pNext; // Buffer handle and stride returned from gralloc alloc() buffer_handle_t handle; int stride; // Gralloc format and usage requested when the buffer was allocated. int format; int usage; // Beginning in Android 8.0, the usage field above is deprecated and the // usage2 struct below was added. The usage field is still filled in for // compatibility with Android 7.0 drivers. Drivers for Android 8.0 // should prefer the usage2 struct, especially if the // android.hardware.graphics.allocator HAL uses the extended usage bits. struct { uint64_t consumer; uint64_t producer; } usage2; } VkNativeBufferANDROID;
Gralloc destekli bir görüntü oluştururken VkImageCreateInfo
,
aşağıdaki veriler:
.sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO .pNext = the above VkNativeBufferANDROID structure .imageType = VK_IMAGE_TYPE_2D .format = a VkFormat matching the format requested for the gralloc buffer .extent = the 2D dimensions requested for the gralloc buffer .mipLevels = 1 .arraySize = 1 .samples = 1 .tiling = VK_IMAGE_TILING_OPTIMAL .usage = VkSwapchainCreateInfoKHR::imageUsage .flags = 0 .sharingMode = VkSwapchainCreateInfoKHR::imageSharingMode .queueFamilyCount = VkSwapchainCreateInfoKHR::queueFamilyIndexCount .pQueueFamilyIndices = VkSwapchainCreateInfoKHR::pQueueFamilyIndices
Android 8.0 ve sonraki sürümlerde platform,
VkSwapchainImageCreateInfoKHR
uzantısı yapısı
vkCreateImage
adresine VkImageCreateInfo
zincir sağlandı
.
Uzantı yapısı, takas zinciri resim kullanım işaretlerini içerir:
typedef struct { VkStructureType sType; // must be VK_STRUCTURE_TYPE_SWAPCHAIN_IMAGE_CREATE_INFO_ANDROID const void* pNext; VkSwapchainImageUsageFlagsANDROID usage; } VkSwapchainImageCreateInfoANDROID;
Platform, Android 10 ve sonraki sürümlerde
VK_KHR_swapchain
v70, dolayısıyla Vulkan uygulaması
VkImage
değişim zinciri belleği ile destekleniyor. Uygulama ilk çağrıyı yapar
VkImageSwapchainCreateInfoKHR
ile vkCreateImage
ve VkImageCreateInfo
yapısına bağlı. Ardından
Uygulama, şunu kullanarak vkBindImageMemory2(KHR)
çağırıyor:
Şuna bağlı VkBindImageMemorySwapchainInfoKHR
yapı:
VkBindImageMemoryInfo
yapısı. imageIndex
VkBindImageMemorySwapchainInfoKHR
yapısında belirtilen
geçerli bir takas zinciri resim dizini olmalıdır. Aynı zamanda platform,
VkNativeBufferANDROID
uzantı yapısı ve
VkBindImageMemoryInfo
zincirine Gralloc arabellek bilgisi, dolayısıyla
sürücü, VkImage
öğesini hangi Gralloc arabelleğine bağlayacağını bilir.
Resim edinme
vkAcquireImageANDROID
, bir takas zinciri görüntüsünün sahipliğini aldı
ve harici olarak sinyal almış bir yerel çiti hem mevcut
VkSemaphore
nesnesi ve mevcut bir VkFence
nesnesi:
VkResult VKAPI vkAcquireImageANDROID( VkDevice device, VkImage image, int nativeFenceFd, VkSemaphore semaphore, VkFence fence );
vkAcquireImageANDROID()
şu çağrı sırasında arandı:
içe aktarmak için vkAcquireNextImageKHR
VkSemaphore
ve VkFence
nesnelerine yerel sınır
uygulama tarafından sağlanır (ancak hem semafor hem de çit nesneleri
isteğe bağlı olarak kullanabilirsiniz. Sürücü bu fırsatı fark etmeksizin,
ve Gralloc arabellek durumundaki harici değişiklikleri yönetme; birçok sürücü
herhangi bir şey yapmanız gerekmiyor. Bu çağrı, VkSemaphore
ve
VkFence
, vkQueueSubmit
sinyaliyle aynı bekleme durumuna geçirilir.
Böylece sıralar semaforda bekleyebilir ve uygulama da plansızca bekleyebilir.
Temeldeki yerel sınır sinyalleri olduğunda her iki nesne de sinyal alır; eğer
zaten sinyal vermişse semaforun da
bu işlev geri döndüğünde geçerli olan bir durumdur. Sürücü gizli dosyanın sahipliğini alır
tanımlayıcıyı açar ve artık ihtiyaç duyulmadığında telsiz dosyası tanımlayıcısını kapatır. Sürücü
bir semafor ya da çit nesnesi sağlanmasa bile,
vkAcquireImageANDROID
başarısız olur ve hata döndürür. Eğer
fenceFd
-1, sanki yerel parmaklık zaten yapılmış gibi
işaret eder.
Resimleri yayınlayın
vkQueueSignalReleaseImageANDROID
, şunun için bir değişim zinciri görüntüsü hazırlıyor:
yerel bir çit oluşturur ve yerel çitin sonradan sinyal verilmesini planlar
giriş semaforları şu sinyalleri veriyor:
VkResult VKAPI vkQueueSignalReleaseImageANDROID( VkQueue queue, uint32_t waitSemaphoreCount, const VkSemaphore* pWaitSemaphores, VkImage image, int* pNativeFenceFd );
vkQueuePresentKHR()
, vkQueueSignalReleaseImageANDROID()
araması yapıyor
görebilirsiniz. Sürücü, sinyal vermeyen yerel bir çit üretmelidir
şuradaki waitSemaphoreCount
semaforun tümüne kadar
pWaitSemaphores
sinyali ve
image
için sunum hazırlama.
Bekleme semaforları (varsa) zaten işaret edilmişse ve queue
zaten boşta, sürücü *pNativeFenceFd
ayarlayabilir
öğesini -1
değerine ayarlayın. Bu da
bir şey yok. Arayan, dosya tanımlayıcısının sahibi olur ve dosyayı kapatır
*pNativeFenceFd
içinde iade edildi.
Birçok sürücü resim parametresini yok sayabilir, ancak bazılarının hazırlanması gerekebilir
Harici kullanıcılar tarafından kullanılan Gralloc arabelleğiyle ilişkilendirilmiş CPU tarafı veri yapıları
görsel tüketicileri. Tampon içerikleri harici tüketicilerin kullanımı için hazırlarken
geçişin bir parçası olarak eş zamansız olarak yapılır.
VK_IMAGE_LAYOUT_PRESENT_SRC_KHR
Resim
VK_SWAPCHAIN_IMAGE_USAGE_SHARED_BIT_ANDROID
, ardından sürücünün
vkQueueSignalReleaseImageANDROID()
e-posta adresinin tekrar tekrar çağrılmasına izin ver
ve vkAcquireImageANDROID()
için yapılan aramalara müdahale etmez.
Paylaşılan sunum desteği
Bazı cihazlar tek bir resmin sahipliğini
görüntü ardışık düzeni ve Vulkan uygulaması ile gecikmeyi en aza indirmek.
Android 9 ve sonraki sürümlerde, yükleyici koşullu olarak
Sürücüye bağlı olarak VK_KHR_shared_presentable_image
uzantı
vkGetPhysicalDeviceProperties2
numaralı telefona yapılan çağrıya yanıt.
Sürücü, Vulkan 1.1'i veya
VK_KHR_physical_device_properties2
uzantısı, yükleyici
paylaşılan sunum desteği vermek. Aksi takdirde, yükleyici
vkGetPhysicalDeviceProperties2()
arayarak sürücüye sunulan özelliklerden
ve aşağıdaki yapıyı “
VkPhysicalDeviceProperties2::pNext
zincir:
typedef struct { VkStructureType sType; // must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENTATION_PROPERTIES_ANDROID const void* pNext; VkBool32 sharedImage; } VkPhysicalDevicePresentationPropertiesANDROID;
Sürücü, ekranla bir resmin sahipliğini paylaşabiliyor mu?
sharedImage
üyesini VK_TRUE
olarak ayarlar.
Doğrulama
OEM'ler, Vulkan uygulamalarını CTS kullanarak test edebilir. CTS'ler aşağıdakileri içerir:
- Khronos Vulkan Uygunluk testleri
CtsDeqpTestCases
modülünde Vulkan 1.0, 1.1, 1.2 ve 1.3 için işlevsel API testlerini içerir. - Cihazın özelliklerini test eden
CtsGraphicsTestCases
modülü doğru yapılandırıldığından emin olun.
Vulkan özellik bayrağı
Android 11 veya sonraki sürümleri ve Vulkan API'yi destekleyen bir cihaz
bir özellik bayrağını göstermek için gereklidir.
android.software.vulkan.deqp.level
Bu özellik işaretinin değeri
tam sayı olarak kodlanan bir tarihtir. Bu sütun,
cihazın başarılı olduğunu iddia ettiği Vulkan dEQP testleri.
YYYY-AA-GG biçimindeki bir tarih, aşağıdaki gibi 32 bitlik bir tam sayı olarak kodlanır:
- Yılda 0-15 arası bitler var
- Aylık 16-23 arası bitler
- 24-31 arasındaki bitler gün içinde saklanır
Özellik bayrağı için izin verilen minimum değer 0x07E30301
.
Bu,
Android 10 için Vulkan dEQP testleri. Özellik bayrağı en azından bu değerse
Cihaz, Android 10 Vulkan dEQP testlerinin tümünü geçtiğini iddia ediyor.
0x07E40301
değeri, 01.03.2020 tarihine karşılık gelir.
Android 11 için Vulkan dEQP testleriyle ilişkilendirilen tarih. Özellik
flag'i en azından bu değer olarak ayarlarsa cihaz, Android 11 sürümünün tüm sürümlerinden geçtiğini iddia eder.
Vulkan dEQP testleri.
0x07E60301
değeri, 01.03.2022 tarihine karşılık gelir.
için Vulkan dEQP testleriyle ilişkili tarih
Android 13. Özellik bayrağı en azından bu değerse
cihaz Android 13 Vulkan'ın tüm sürümlerinden geçtiğini iddia ediyor
dEQP testleri.
Belirli bir özellik bayrağı (ör.
0x07E30301
, 0x07E40301
, 0x07E60301
)
Bu özellik bayrağının tüm Android Vulkan dEQP testlerini geçtiğini iddia ediyor (Android 10,
Android 11, Android 13). Bu cihaz
Daha sonraki bir Android sürümünde bulunan Vulkan dEQP testlerini geçebilir.
Vulkan dEQP, Android CTS'nin bir parçasıdır. Android 11'den itibaren dEQP test çalıştırıcısı
bileşeninin android.software.vulkan.deqp.level
farkındalığı vardır
ve bu özelliğe göre
özellik bayrağı: cihaz desteklediğini iddia etmiyor. Bu tür testler,
üzerinden geçildi.