Vulkan — un API cross-platform pentru lucrul cu grafica și calcule pe GPU, dezvoltat de consorțiul Khronos Group. Vulkan oferă control de nivel scăzut asupra hardware-ului, generarea multi-thread a comenzilor și performanță predictibilă. Conform datelor Khronos Group (2026), Vulkan este suportat pe 98% din dispozitivele Android moderne.
Principalele
Vulkan — este un API de nivel scăzut, cross-platform pentru lucrul cu procesoare grafice, lansat pentru prima dată de Khronos Group în 2016. Vulkan a înlocuit OpenGL, oferind o suprasarcină CPU semnificativ mai mică, performanță predictibilă și posibilitatea generării multi-thread a comenzilor.
Spre deosebire de OpenGL, unde driverul efectuează verificări și sincronizare pe CPU, Vulkan transferă gestionarea resurselor către dezvoltator. Alocarea memoriei, sincronizarea prin semafoare și bariere, crearea pipeline-urilor — toate sunt controlate explicit. Această abordare oferă o creștere a performanței de până la 50% în scenarii CPU-bound.
Vulkan este suportat pe Windows, Linux, Android, iOS (prin MoltenVK), macOS (MoltenVK), Nintendo Switch și console. Conform datelor Khronos Group (2026), API-ul funcționează pe dispozitive cu GPU de la NVIDIA, AMD, Intel, Qualcomm (Adreno), ARM (Mali) și Apple (prin stratul Metal). Vulkan 1.4 (2026) a adăugat suport pentru Mesh Shaders și Video Encode API.
Inițial Vulkan a fost dezvoltat sub numele de cod „glNext” — succesorul OpenGL. Vulkan 1.0 (2016) a oferit API de bază cu gestionare explicită a memoriei, shadere SPIR-V și cozi multi-thread. Vulkan 1.1 (2018) a adăugat Subgroup Operations și suport pentru tipuri pe 16 biți. Vulkan 1.2 (2020) a introdus Buffer Device Address și Timeline Semaphores.
Vulkan 1.3 (2022) a standardizat Dynamic Rendering și Graphics Pipeline Library. Vulkan 1.4 (2026) a impus suportul pentru Mesh Shaders și a adăugat Video Encode/Decode API pentru codificarea hardware H.264/HEVC/AV1. Conform datelor Khronos (2026), Vulkan 1.4 este suportat pe toate GPU-urile noi NVIDIA RTX 50xx, AMD RX 9000 și Intel Arc seria B.
Arhitectura Vulkan este construită pe un strat de abstractizare hardware (HW layer). Aplicația interacționează cu dispozitivul fizic (VkPhysicalDevice) prin intermediul dispozitivului logic (VkDevice). Comenzile sunt trimise în cozi (VkQueue), fiecare aparținând unei anumite familii de cozi (graphics, compute, transfer).
VkInstance — obiectul rădăcină Vulkan, care stochează informații despre straturile de validare și extensii. VkPhysicalDevice reprezintă GPU-ul fizic și permite interogarea proprietăților sale, memory heaps și queue families. VkDevice — dispozitiv logic cu cozile și extensiile solicitate explicit.
// Crearea dispozitivului logic Vulkan
VkDeviceCreateInfo devInfo {};
devInfo.sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO;
devInfo.queueCreateInfoCount = 1;
float queuePriority = 1.0f;
VkDeviceQueueCreateInfo queueInfo {};
queueInfo.sType = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO;
queueInfo.queueFamilyIndex = 0;
queueInfo.queueCount = 1;
queueInfo.pQueuePriorities = &queuePriority;
devInfo.pQueueCreateInfos = &queueInfo;
VkDevice device;
vkCreateDevice(physicalDevice, &devInfo,
nullptr, &device);
VkQueue queue;
vkGetDeviceQueue(device, 0, 0, &queue);
Funcția vkCreateDevice creează un dispozitiv logic cu cozile specificate. VkQueue — un descriptor de coadă pentru trimiterea comenzilor. O singură coadă poate fi utilizată pentru grafică, calcule și copiere, dacă flag-urile corespunzătoare sunt suportate de familia de cozi. Prioritatea cozii (0.0–1.0) influențează ordinea de execuție în caz de concurență.
În Vulkan, memoria este alocată explicit prin VkDeviceMemory. Dezvoltatorul solicită de la dispozitivul fizic memory types (HOST_VISIBLE, DEVICE_LOCAL) și alocă blocuri. Bufferele (VkBuffer) și texturile (VkImage) nu au memorie proprie — ele sunt atașate blocurilor alocate prin vkBindBufferMemory.
Vulkan Memory Allocator (VMA) — o bibliotecă de la AMD care simplifică gestionarea memoriei. VMA grupează automat alocările mici în blocuri mari, gestionează defragmentarea și selectează memory type-ul potrivit. Conform datelor AMD (2025), VMA reduce numărul de alocări de memorie de 50–100 de ori comparativ cu gestionarea manuală.
VkCommandPool gestionează memoria pentru bufferele de comenzi. Bufferele (VkCommandBuffer) sunt scrise pe CPU și trimise pe GPU prin vkQueueSubmit. Vulkan suportă buffere primary și secondary: primary sunt trimise direct, secondary pot fi apelate din primary pentru construirea multi-thread a comenzilor.
Scrierea comenzilor începe cu vkBeginCommandBuffer și se termină cu vkEndCommandBuffer. Între ele se scriu comenzile de randare: vkCmdDraw, vkCmdDispatch, vkCmdCopyBuffer și vkCmdPipelineBarrier pentru sincronizare. Pentru fiecare cadru se creează un nou buffer de comenzi cu reîncărcare prin pool reset.
Randarea în Vulkan este organizată prin pipeline-uri (VkPipeline). Spre deosebire de OpenGL, unde starea pipeline-ului se schimbă global, Vulkan utilizează VkPipeline — un pipeline precompilat care include toate etapele: introducerea vârfurilor, shadere, rasterizare, depth-stencil și blending.
VkGraphicsPipelineCreateInfo descrie pipeline-ul complet: shadere de vârfuri și fragment, topologie (triangle list, triangle strip), rasterizator (fill mode, cull mode), multisampling, teste depth-stencil, blending și setări viewport. Pipeline-ul este creat o dată și reutilizat — schimbarea stării necesită un nou pipeline sau dynamic state.
// Configurarea pipeline-ului grafic
VkGraphicsPipelineCreateInfo pipelineInfo {};
pipelineInfo.sType =
VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO;
pipelineInfo.stageCount = 2;
pipelineInfo.pStages = shaderStages;
pipelineInfo.pVertexInputState =&;
vertexInputState;
pipelineInfo.pRasterizationState =&;
rasterState;
VkPipeline graphicsPipeline;
vkCreateGraphicsPipelines(device,
VK_NULL_HANDLE, 1, &pipelineInfo,
nullptr, &graphicsPipeline);
Dynamic State (VK_DYNAMIC_STATE_VIEWPORT, VK_DYNAMIC_STATE_SCISSOR) permite modificarea anumitor parametri fără a crea un nou pipeline. Vulkan 1.4 a impus suportul pentru Dynamic State 3 (VK_EXT_extended_dynamic_state_3) pentru gestionarea blend constants, depth bias și topologiei din mers, ceea ce reduce numărul de pipeline-uri în proiect.
VkRenderPass descrie structura trecerilor de randare: care attachment sunt utilizate, cum sunt curățate și încărcate. Dynamic Rendering (VK_KHR_dynamic_rendering, obligatoriu din Vulkan 1.4) simplifică procesul: render pass-ul este creat din mers în bufferul de comenzi prin vkCmdBeginRendering, fără un obiect VkRenderPrealabil.
Conform datelor Khronos (2026), Dynamic Rendering reduce cantitatea de cod de inițializare Vulkan cu 30–40% și scade numărul de pipeline permutations. Pentru tehnici complexe de randare întârziată (Deferred Shading) este încă convenabil să se utilizeze VkRenderPass clasice cu mai multe subpasses pentru G-buffer și iluminare.
SPIR-V — un format binar universal pentru shadere în Vulkan, dezvoltat de Khronos. Shaderele pot fi scrise în GLSL, HLSL sau limbajul Zink și compilate în SPIR-V prin glslangValidator, dxc sau Google Shaderc. Vulkan nu acceptă shadere în cod sursă — doar SPIR-V binar.
GLSL pentru Vulkan diferă de GLSL-ul standard OpenGL. Se folosesc blocuri (layout) cu specificarea explicită a numerelor set și binding, nu variabile built-in. Atributele vârfurilor se specifică prin location, uniform-urile — prin uniform blocks sau buffere. Push constants (până la 128 de octeți) sunt disponibile pentru transmiterea rapidă a datelor fără buffere.
// Shader de vârfuri Vulkan/GLSL
#version 460
layout(location = 0) in vec3 inPosition;
layout(location = 1) in vec3 inNormal;
layout(binding = 0, set = 0)
uniform UniformBufferObject {
mat4 modelViewProjection;
} ubo;
layout(location = 0) out vec3 outNormal;
void main() {
gl_Position = ubo.modelViewProjection *
vec4(inPosition, 1.0);
outNormal = inNormal;
}
Calificatorii layout(set = N, binding = M) — diferența cheie dintre Vulkan GLSL și OpenGL. Set corespunde unui set de descriptori (VkDescriptorSet), binding — unei resurse specifice (buffer, textură, sampler). Împărțirea pe seturi permite comutarea eficientă a seturilor de resurse între draw calls fără a lega resurse individuale.
VkDescriptorSet — un grup de resurse (buffere, texturi, samplere) legate de shadere. Layout-ul descriptoriilor descrie tipurile de resurse și numerele lor de binding. Seturile de descriptori sunt actualizate prin vkUpdateDescriptorSets și reutilizate între draw calls. Vulkan 1.4 suportă VK_EXT_descriptor_buffer pentru acces direct la descriptori din GPU.
Push Constants — un mecanism de transmitere rapidă a unor volume mici de date (până la 128 de octeți) către shadere fără a crea descriptori. Push constants sunt specificate prin vkCmdPushConstants în bufferul de comenzi. Conform datelor Khronos (2025), utilizarea push constants în loc de uniform buffers reduce suprasarcina CPU cu 10–15% la frecvența draw calls de peste 10 mii per cadru.
Vulkan este singurul API care funcționează pe toate platformele principale: Windows (prin driverul oficial ICD), Linux (RADV, AMDVLK, NVIDIA), Android (Vulkan 1.3+, obligatoriu din Android 10) și pe dispozitivele Apple prin MoltenVK — stratul de traducere Vulkan → Metal.
Pe Android, Vulkan este obligatoriu pentru Android 10 și mai nou. Google recomandă Vulkan pentru proiecte noi, în special jocuri de înaltă performanță și aplicații AR prin ARCore. Qualcomm Adreno și ARM Mali oferă suport complet pentru Vulkan 1.3 cu trasare de raze hardware pe Adreno 8xx și Mali-G720.
Conform datelor Google (2026), 98% din dispozitivele Android cu Android 10+ suportă Vulkan. Pentru compatibilitate inversă, este disponibil ANGLE (Almost Native Graphics Layer Engine), care traduce OpenGL ES în Vulkan. Acest lucru permite rularea aplicațiilor OpenGL vechi pe driverul Vulkan cu o creștere a performanței de până la 20%.
Pe Android, Vulkan are prioritate ridicată pentru eficiența energetică: aplicațiile Vulkan consumă cu 25–40% mai puțină energie comparativ cu OpenGL ES la aceeași sarcină grafică pe dispozitivele cu Adreno 7xx+. Acest lucru face din Vulkan API-ul preferat pentru jocuri pe dispozitive mobile.
MoltenVK — o implementare Vulkan peste Metal, dezvoltată de LunarG și Valve. MoltenVK traduce apelurile API Vulkan în Metal, suportând Vulkan 1.2 pe iOS și macOS. Performanța MoltenVK este apropiată de Metal nativ: suprasarcina de traducere este de 5–15% în funcție de scenariu.
Conform datelor LunarG (2025), MoltenVK este utilizat în CrossOver (Wine pentru Mac) pentru a rula jocuri Windows pe macOS. Dota 2, Civilization VI și Baldur’s Gate 3 pe macOS rulează prin MoltenVK cu performanță de 30–60 FPS pe M3/M4. MoltenVK suportă MetalFX upscaling pentru îmbunătățirea performanței.
VK_KHR_ray_tracing — extensia pentru trasarea de raze hardware în Vulkan, obligatorie din Vulkan 1.4. Suportată pe GPU cu nuclee RT: NVIDIA RTX 20xx/30xx/40xx/50xx, AMD RX 6000+/9000, Intel Arc A/B. Vulkan RT oferă VkAccelerationStructure, VkRayTracingPipeline și Shader Binding Table.
Vulkan Ray Tracing suportă reflexii, umbre, ambient occlusion și iluminare globală în timp real. Conform datelor Khronos (2026), pe NVIDIA RTX 5090, Vulkan Ray Tracing execută până la 100 Giga rays/s în scene de calitate de referință. Pentru platforme portabile, Vulkan RT se scalează prin blur reduction și temporal denoising.
Întrebări frecvente
Vulkan — un API GPU cross-platform de nivel scăzut cu gestionare explicită a resurselor. Spre deosebire de OpenGL, oferă control asupra memoriei, sincronizării și multi-threading-ului, asigurând o creștere a performanței de până la 50% în scenarii CPU-bound.
Vulkan funcționează pe Windows, Linux, Android, Nintendo Switch, iar pe iOS/macOS — prin MoltenVK (traducere în Metal). Este suportat pe GPU NVIDIA, AMD, Intel, Qualcomm, ARM și Apple (prin MoltenVK).
SPIR-V — formatul binar universal al shaderelor Vulkan. Shaderele se scriu în GLSL sau HLSL, se compilează în SPIR-V și se trimit către Vulkan. Aceasta asigură independența de limbajul de scriere a shaderelor și performanță predictibilă de compilare.
Da, prin VK_KHR_ray_tracing — extensia obligatorie din Vulkan 1.4. Suportată pe GPU cu nuclee RT: NVIDIA RTX, AMD RX 6000+, Intel Arc. Vulkan RT oferă accelerare a structurilor BVH, Shader Binding Table și intersecții hardware de raze.
Pragul de intrare este mai ridicat decât OpenGL sau DirectX 11, din cauza gestionării explicite a memoriei, sincronizării și pipeline-urilor. Khronos oferă Vulkan Tutorial, Vulkan Samples și Vulkan Guide. Pentru primul triunghi sunt necesare aproximativ 500 de linii de cod.
Rezumat
Vom dezvolta o aplicație mobilă la cheie
IT Sectr creează aplicații iOS și Android pentru startup-uri și afaceri din 2017. Vă vom consilia și vă vom propune cea mai bună soluție.
Citiți și