Vulkan — Khronos Group konsorsiumu tərəfindən hazırlanmış GPU-da qrafika və hesablamalarla iş üçün kross-platform API. Vulkan avadanlıq üzərində aşağı səviyyəli nəzarət, çoxiplikli əmr generasiyası və proqnozlaşdırıla bilən performans təmin edir. Khronos Group (2026) məlumatlarına görə, Vulkan müasir Android cihazlarının 98%-də dəstəklənir.
Əsas
Vulkan — Khronos Group tərəfindən 2016-cı ildə buraxılmış qrafik prosessorlarla iş üçün aşağı səviyyəli, kross-platform API. Vulkan OpenGL-i əvəz etdi, əhəmiyyətli dərəcədə aşağı CPU yükü, proqnozlaşdırıla bilən performans və çoxiplikli əmr generasiyası imkanı təklif edir.
OpenGL-dən fərqli olaraq, burada sürücü CPU-da yoxlamalar və sinxronizasiya aparır, Vulkan resurs idarəçiliyini tərtibatçıya ötürür. Yaddaş ayrılması, semaforlar və baryerlər vasitəsilə sinxronizasiya, pipelineların yaradılması — bütün bunlar açıq şəkildə idarə olunur. Bu yanaşma CPU-bound ssenarilərində performansı 50%-ə qədər artırır.
Vulkan Windows, Linux, Android, iOS (MoltenVK vasitəsilə), macOS (MoltenVK), Nintendo Switch və konsollarda dəstəklənir. Khronos Group (2026) məlumatlarına görə, API NVIDIA, AMD, Intel, Qualcomm (Adreno), ARM (Mali) və Apple (Metal təbəqəsi vasitəsilə) GPU-ları olan cihazlarda işləyir. Vulkan 1.4 (2026) Mesh Shaders və Video Encode API dəstəyini əlavə etdi.
Ilkin olaraq Vulkan “glNext” kod adı altında hazırlanırdı — OpenGL-in varisi. Vulkan 1.0 (2016) açıq yaddaş idarəçiliyi, SPIR-V şeyderləri və çoxiplikli növbələr ilə əsas API təmin etdi. Vulkan 1.1 (2018) Subgroup Operations və 16-bit tiplər dəstəyini əlavə etdi. Vulkan 1.2 (2020) Buffer Device Address və Timeline Semaphores-i təqdim etdi.
Vulkan 1.3 (2022) Dynamic Rendering və Graphics Pipeline Library-ni standartlaşdırdı. Vulkan 1.4 (2026) Mesh Shaders dəstəyini məcburi etdi və H.264/HEVC/AV1 aparat kodlaşdırması üçün Video Encode/Decode API əlavə etdi. Khronos (2026) məlumatlarına görə, Vulkan 1.4 bütün yeni GPU-larda dəstəklənir: NVIDIA RTX 50xx, AMD RX 9000 və Intel Arc B-seriyası.
Vulkan arxitekturası avadanlıq abstraksiya təbəqəsi (HW layer) üzərində qurulub. Tətbiq fiziki cihazla (VkPhysicalDevice) məntiqi cihaz (VkDevice) vasitəsilə qarşılıqlı əlaqədə olur. Əmrlər növbələrə (VkQueue) göndərilir, hər biri müəyyən növbə ailəsinə (graphics, compute, transfer) aiddir.
VkInstance — validasiya təbəqələri və genişlənmələr haqqında məlumat saxlayan Vulkan-ın kök obyekti. VkPhysicalDevice fiziki GPU-nu təmsil edir və onun xüsusiyyətlərini, memory heaps və queue families sorğulamağa imkan verir. VkDevice — açıq şəkildə tələb olunan növbələr və genişlənmələr ilə məntiqi cihaz.
// Vulkan məntiqi cihazının yaradılması
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);
vkCreateDevice funksiyası göstərilən növbələrlə məntiqi cihaz yaradır. VkQueue — əmrlər göndərmək üçün növbə deskriptoru. Bir növbə qrafika, hesablamalar və kopyalama üçün istifadə oluna bilər, əgər müvafiq flaglar növbə ailəsi tərəfindən dəstəklənirsə. Növbə prioriteti (0.0–1.0) rəqabət zamanı icra sırasına təsir edir.
Vulkan-da yaddaş açıq şəkildə VkDeviceMemory vasitəsilə ayrılır. Tərtibatçı fiziki cihazdan memory types (HOST_VISIBLE, DEVICE_LOCAL) tələb edir və bloklar ayırır. Bufferlər (VkBuffer) və teksturlar (VkImage) öz yaddaşına malik deyil — onlar ayrılmış bloklara vkBindBufferMemory vasitəsilə bağlanır.
Vulkan Memory Allocator (VMA) — AMD-dən yaddaş idarəçiliyini asanlaşdıran kitabxana. VMA kiçik ayrılmaları avtomatik olaraq böyük bloklarda qruplaşdırır, defraqmentasiyanı idarə edir və uyğun memory type seçir. AMD (2025) məlumatlarına görə, VMA əl ilə idarəetmə ilə müqayisədə yaddaş alokasiyalarının sayını 50–100 dəfə azaldır.
VkCommandPool əmr bufferləri üçün yaddaşı idarə edir. Bufferlər (VkCommandBuffer) CPU-da yazılır və vkQueueSubmit vasitəsilə GPU-ya göndərilir. Vulkan primary və secondary bufferləri dəstəkləyir: primary birbaşa göndərilir, secondary çoxiplikli əmr qurulması üçün primary-dən çağırıla bilər.
Əmrlərin yazılması vkBeginCommandBuffer ilə başlayır və vkEndCommandBuffer ilə bitir. Onların arasında renderinq əmrləri yazılır: vkCmdDraw, vkCmdDispatch, vkCmdCopyBuffer və sinxronizasiya üçün vkCmdPipelineBarrier. Hər çərçivə üçün pool reset vasitəsilə yeni əmr bufferi yaradılır.
Vulkan-da renderinq pipelinelar (VkPipeline) vasitəsilə təşkil olunur. OpenGL-dən fərqli olaraq, burada pipeline vəziyyəti qlobal olaraq dəyişir, Vulkan VkPipeline — bütün mərhələləri əhatə edən əvvəlcədən kompilyasiya olunmuş pipeline istifadə edir: təpə girişi, şeyderlər, rastrlaşdırma, depth-stencil və blending.
VkGraphicsPipelineCreateInfo tam pipeline-i təsvir edir: təpə, fraqment şeyderləri, topologiya (triangle list, triangle strip), rastrlaşdırıcı (fill mode, cull mode), multisampling, depth-stencil testləri, blending və viewport ayarları. Pipeline bir dəfə yaradılır və təkrar istifadə olunur — vəziyyət dəyişikliyi yeni pipeline və ya dynamic state tələb edir.
// Qrafik pipeline konfiqurasiyası
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) yeni pipeline yaratmadan müəyyən parametrləri dəyişməyə imkan verir. Vulkan 1.4 blend constants, depth bias və topologiyanı anında idarə etmək üçün Dynamic State 3 (VK_EXT_extended_dynamic_state_3) dəstəyini məcburi etdi, bu da layihədə pipelineların sayını azaldır.
VkRenderPass renderinq keçidlərinin strukturunu təsvir edir: hansı attachment istifadə olunur, onlar necə təmizlənir və yüklənir. Dynamic Rendering (VK_KHR_dynamic_rendering, Vulkan 1.4-dən məcburi) prosesi sadələşdirir: render pass əmr bufferində vkCmdBeginRendering vasitəsilə anında yaradılır, əvvəlcədən VkRenderPass obyekti olmadan.
Khronos (2026) məlumatlarına görə, Dynamic Rendering Vulkan başlanğıc kodunun miqdarını 30–40% azaldır və pipeline permutations sayını aşağı salır. Mürəkkəb gecikmiş renderinq texnikaları (Deferred Shading) üçün G-buffer və işıqlandırma üçün çoxsaylı subpasses ilə klassik VkRenderPass istifadə etmək hələ də rahatdır.
SPIR-V — Khronos tərəfindən hazırlanmış Vulkan-da universal binar şeyder formatı. Şeyderlər GLSL, HLSL və ya Zink dilində yazıla bilər və glslangValidator, dxc və ya Google Shaderc vasitəsilə SPIR-V-yə kompilyasiya olunur. Vulkan şeyderləri mənbə kodunda qəbul etmir — yalnız binar SPIR-V.
Vulkan üçün GLSL standart OpenGL GLSL-dən fərqlənir. Set və binding nömrələrinin açıq göstərilməsi ilə bloklar (layout) istifadə olunur, daxili dəyişənlər deyil. Təpə atributları location vasitəsilə, uniform-lar — uniform blocks və ya bufferlər vasitəsilə təyin olunur. Push constants (128 bayta qədər) buffersiz sürətli məlumat ötürülməsi üçün mövcuddur.
// Vulkan/GLSL təpə şeyderi
#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;
}
layout(set = N, binding = M) kvalifikatorları — Vulkan GLSL-nin OpenGL-dən əsas fərqi. Set deskriptor dəstinə (VkDescriptorSet), binding konkret resursa (buffer, tekstur, sampler) uyğundur. Set-ə bölmə, fərdi resursları bağlamadan draw calls arasında resurs dəstlərini səmərəli şəkildə dəyişməyə imkan verir.
VkDescriptorSet — şeyderlərə bağlanmış resurslar qrupu (bufferlər, teksturlar, samplerlər). Deskriptor layoutu resurs növlərini və onların binding nömrələrini təsvir edir. Deskriptor dəstləri vkUpdateDescriptorSets vasitəsilə yenilənir və draw calls arasında təkrar istifadə olunur. Vulkan 1.4 GPU-dan deskriptorlara birbaşa giriş üçün VK_EXT_descriptor_buffer dəstəkləyir.
Push Constants — deskriptor yaratmadan şeyderlərə kiçik həcmli məlumatların (128 bayta qədər) sürətli ötürülməsi mexanizmi. Push constants əmr bufferində vkCmdPushConstants vasitəsilə təyin olunur. Khronos (2025) məlumatlarına görə, uniform buffers əvəzinə push constants istifadəsi çərçivədə 10 mindən çox draw calls tezliyində CPU yükünü 10–15% azaldır.
Vulkan bütün əsas platformalarda işləyən yeganə API-dir: Windows (rəsmi ICD sürücüsü vasitəsilə), Linux (RADV, AMDVLK, NVIDIA), Android (Vulkan 1.3+, Android 10-dan məcburi) və Apple cihazlarında MoltenVK — Vulkan → Metal tərcümə təbəqəsi vasitəsilə.
Android-də Vulkan Android 10 və daha yeniləri üçün məcburidir. Google yeni layihələr üçün, xüsusilə yüksək performanslı oyunlar və ARCore vasitəsilə AR tətbiqləri üçün Vulkan-ı tövsiyə edir. Qualcomm Adreno və ARM Mali Adreno 8xx və Mali-G720-də aparat şüa izləmə ilə Vulkan 1.3-ün tam dəstəyini təmin edir.
Google (2026) məlumatlarına görə, Android 10+ olan Android cihazlarının 98%-i Vulkan-ı dəstəkləyir. Geriyə uyğunluq üçün ANGLE (Almost Native Graphics Layer Engine) mövcuddur, OpenGL ES-i Vulkan-a tərcümə edir. Bu, köhnə OpenGL tətbiqlərini Vulkan sürücüsündə işə salmağa imkan verir, performans artımı 20%-ə qədər.
Android-də Vulkan enerji səmərəliliyi üçün yüksək prioritetə malikdir: Vulkan tətbiqləri Adreno 7xx+ cihazlarında eyni qrafik yükündə OpenGL ES ilə müqayisədə 25–40% az enerji sərf edir. Bu, Vulkan-ı mobil cihazlarda oyunlar üçün üstünlük verilən API edir.
MoltenVK — LunarG və Valve tərəfindən hazırlanmış Metal üzərində Vulkan implementasiyası. MoltenVK Vulkan API çağırışlarını Metal-a tərcümə edir, iOS və macOS-da Vulkan 1.2 dəstəkləyir. MoltenVK performansı native Metal-a yaxındır: tərcümə yükü ssenaridən asılı olaraq 5–15% təşkil edir.
LunarG (2025) məlumatlarına görə, MoltenVK macOS-da Windows oyunlarını işə salmaq üçün CrossOver (Wine for Mac)-də istifadə olunur. macOS-da Dota 2, Civilization VI və Baldur’s Gate 3 MoltenVK vasitəsilə M3/M4-də 30–60 FPS performansla işləyir. MoltenVK performansı artırmaq üçün MetalFX upscaling dəstəkləyir.
VK_KHR_ray_tracing — Vulkan-da aparat şüa izləmə üçün genişlənmə, Vulkan 1.4-dən məcburi. RT nüvəli GPU-larda dəstəklənir: NVIDIA RTX 20xx/30xx/40xx/50xx, AMD RX 6000+/9000, Intel Arc A/B. Vulkan RT VkAccelerationStructure, VkRayTracingPipeline və Shader Binding Table təmin edir.
Vulkan Ray Tracing real vaxt rejimində əkslər, kölgələr, ambient occlusion və qlobal işıqlandırmanı dəstəkləyir. Khronos (2026) məlumatlarına görə, NVIDIA RTX 5090-da Vulkan Ray Tracing istinad keyfiyyətli səhnələrdə 100 Giga rays/s-ə qədər yerinə yetirir. Portativ platformalar üçün Vulkan RT blur reduction və temporal denoising vasitəsilə miqyaslanır.
Tez-tez verilən suallar
Vulkan — resursların açıq idarə edilməsi ilə aşağı səviyyəli kross-platform GPU API. OpenGL-dən fərqli olaraq, yaddaş, sinxronizasiya və çoxipliklik üzərində nəzarət verir, CPU-bound ssenarilərində performans artımını 50%-ə qədər təmin edir.
Vulkan Windows, Linux, Android, Nintendo Switch-də, iOS/macOS-da isə MoltenVK (Metal-a tərcümə) vasitəsilə işləyir. NVIDIA, AMD, Intel, Qualcomm, ARM və Apple (MoltenVK vasitəsilə) GPU-larında dəstəklənir.
SPIR-V — Vulkan-ın universal binar şeyder formatı. Şeyderlər GLSL və ya HLSL-də yazılır, SPIR-V-yə kompilyasiya olunur və Vulkan-a verilir. Bu, şeyder yazma dilindən asılı olmayaraq proqnozlaşdırıla bilən kompilyasiya performansını təmin edir.
Bəli, VK_KHR_ray_tracing vasitəsilə — Vulkan 1.4-dən məcburi genişlənmə. RT nüvəli GPU-larda dəstəklənir: NVIDIA RTX, AMD RX 6000+, Intel Arc. Vulkan RT BVH strukturlarının sürətləndirilməsi, Shader Binding Table və aparat şüa kəsişmələrini təmin edir.
Giriş həddi OpenGL və ya DirectX 11-dən yüksəkdir, açıq yaddaş idarəçiliyi, sinxronizasiya və pipelinelar səbəbindən. Khronos Vulkan Tutorial, Vulkan Samples və Vulkan Guide təqdim edir. Ilk üçbucaq üçün təxminən 500 sətir kod lazımdır.
Xülasə
Açar təslim mobil tətbiq hazırlayacağıq
IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.
Həm də oxuyun