Vulkan — bu nədir, kross-platform API və renderinq

Müəllif: IT Sectr Dərc olunub: 2026-05-03 Oxuma vaxtı: 9 dəq

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 — avadanlıq üzərində aşağı səviyyəli nəzarət ilə kross-platform GPU API
  • VkDeviceVkQueue GPU əmrlərinin çoxiplikli göndərilməsini təmin edir
  • SPIR-V — GLSL və HLSL-dən kompilyasiya olunan universal binar şeyder formatı
  • Vulkan Memory Allocator GPU yaddaşının açıq ayrılmasını idarə edir
  • Vulkan Ray Tracing (VK_KHR_ray_tracing) aparat şüa izləməni dəstəkləyir

Vulkan nədir?

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.

Vulkan tarixi

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ı: cihaz və növbələr

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, VkDevice və VkQueue

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.

cpp
// 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.

VkMemory və VkBuffer — yaddaş idarəçiliyi

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 və VkCommandBuffer

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 vasitəsilə renderinq: pipeline və əmrlə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.

VkPipeline — renderinq pipeline

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.

cpp
// 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.

Render Pass və Dynamic Rendering

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.

Vulkan-da şeyderlər: SPIR-V və GLSL

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-da GLSL

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.

glsl
// 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.

Deskriptorlar və deskriptor dəstləri

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.

Müxtəlif platformalarda Vulkan

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-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 vasitəsilə Apple-da Vulkan

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.

Vulkan Ray Tracing

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 nədir və OpenGL-dən nə fərqi var?

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 hansı platformalarda işləyir?

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.

Vulkan-da SPIR-V nədir?

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.

Vulkan şüa izləməni dəstəkləyirmi?

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.

Vulkan istifadə etməyə başlamaq çətindir?

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ə

  • Vulkan — Khronos Group-dan kross-platform aşağı səviyyəli GPU API
  • Açıq idarəetmə yaddaş, sinxronizasiya və növbələr CPU yükünü azaldır
  • VkPipeline — qrafika və hesablamalar üçün əvvəlcədən kompilyasiya olunmuş pipeline
  • SPIR-V — GLSL və HLSL-dən kompilyasiya olunan binar şeyder formatı
  • Dynamic Rendering (Vulkan 1.4) VkRenderPass olmadan Render Pass yaradılmasını sadələşdirir
  • MoltenVK iOS və macOS-da Vulkan-ın Metal vasitəsilə işləməsini təmin edir
  • Vulkan 1.4 Mesh Shaders, Video Encode API və məcburi şüa izləmə əlavə etdi

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.

Layihəni müzakirə et

Həm də oxuyun