Vulkan — bu nima, kross-platform API va renderlash

Muallif: IT Sectr Nashr etilgan: 2026-05-03 O'qish vaqti: 9 daq

Vulkan — Khronos Group konsorsiumi tomonidan ishlab chiqilgan GPUda grafik va hisoblash bilan ishlash uchun kross-platform API. Vulkan apparat ustida past darajadagi nazorat, ko'p tarmoqli buyruq generatsiyasi va bashorat qilinadigan unumdorlikni ta'minlaydi. Khronos Group (2026) ma'lumotlariga ko'ra, Vulkan zamonaviy Android qurilmalarining 98 foizida qo'llab-quvvatlanadi.

Asosiy

  • Vulkan — apparat ustida past darajadagi nazorat bilan kross-platform GPU API
  • VkDevice va VkQueue GPU buyruqlarini ko'p tarmoqli jo'natishni ta'minlaydi
  • SPIR-V — GLSL va HLSL dan kompilyatsiya qilinadigan universal binar shader formati
  • Vulkan Memory Allocator GPU xotirasini aniq ajratishni boshqaradi
  • Vulkan Ray Tracing (VK_KHR_ray_tracing) apparat nur kuzatishni qo'llab-quvvatlaydi

Vulkan nima?

Vulkan — Khronos Group tomonidan 2016 yilda chiqarilgan grafik protsessorlar bilan ishlash uchun past darajadagi, kross-platform API. Vulkan OpenGL ni almashtirdi, ancha past CPU yuki, bashorat qilinadigan unumdorlik va ko'p tarmoqli buyruq generatsiyasi imkoniyatini taklif qiladi.

OpenGL dan farqli o'laroq, drayver CPU da tekshirishlar va sinxronizatsiyani amalga oshiradi, Vulkan resurs boshqaruvini dasturchiga o'tkazadi. Xotira ajratish, semaforlar va baryerlar orqali sinxronizatsiya, pipelinelar yaratish — barchasi aniq boshqariladi. Bu yondashuv CPU-bound stsenariylarida unumdorlikni 50 foizgacha oshiradi.

Vulkan Windows, Linux, Android, iOS (MoltenVK orqali), macOS (MoltenVK), Nintendo Switch va konsollarda qo'llab-quvvatlanadi. Khronos Group (2026) ma'lumotlariga ko'ra, API NVIDIA, AMD, Intel, Qualcomm (Adreno), ARM (Mali) va Apple (Metal qatlami orqali) GPU lari bo'lgan qurilmalarda ishlaydi. Vulkan 1.4 (2026) Mesh Shaders va Video Encode API qo'llab-quvvatlashni qo'shdi.

Vulkan tarixi

Dastlab Vulkan “glNext” kod nomi ostida ishlab chiqilgan — OpenGL ning vorisi. Vulkan 1.0 (2016) aniq xotira boshqaruvi, SPIR-V shaderlari va ko'p tarmoqli navbatlar bilan asosiy API ni taqdim etdi. Vulkan 1.1 (2018) Subgroup Operations va 16-bitli turlarni qo'llab-quvvatlashni qo'shdi. Vulkan 1.2 (2020) Buffer Device Address va Timeline Semaphores ni kiritdi.

Vulkan 1.3 (2022) Dynamic Rendering va Graphics Pipeline Library ni standartlashtirdi. Vulkan 1.4 (2026) Mesh Shaders qo'llab-quvvatlashni majburiy qildi va H.264/HEVC/AV1 apparat kodlash uchun Video Encode/Decode API qo'shdi. Khronos (2026) ma'lumotlariga ko'ra, Vulkan 1.4 barcha yangi GPU larda qo'llab-quvvatlanadi: NVIDIA RTX 50xx, AMD RX 9000 va Intel Arc B seriyasi.

Vulkan arxitekturasi: qurilma va navbatlar

Vulkan arxitekturasi apparat abstraktsiya qatlami (HW layer) ustida qurilgan. Ilova jismoniy qurilma (VkPhysicalDevice) bilan mantiqiy qurilma (VkDevice) orqali o'zaro aloqada bo'ladi. Buyruqlar navbatlarga (VkQueue) yuboriladi, har biri ma'lum bir navbat oilasiga (graphics, compute, transfer) tegishli.

VkInstance, VkDevice va VkQueue

VkInstance — validatsiya qatlamlari va kengaytmalar haqida ma'lumot saqlaydigan Vulkan ning ildiz ob'ekti. VkPhysicalDevice jismoniy GPU ni ifodalaydi va uning xususiyatlari, memory heaps va queue families so'rov qilish imkonini beradi. VkDevice — aniq so'ralgan navbatlar va kengaytmalar bilan mantiqiy qurilma.

cpp
// Vulkan mantiqiy qurilmasini yaratish
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 funksiyasi ko'rsatilgan navbatlar bilan mantiqiy qurilma yaratadi. VkQueue — buyruqlarni jo'natish uchun navbat deskriptori. Bitta navbat grafik, hisoblash va nusxalash uchun ishlatilishi mumkin, agar tegishli flaglar navbat oilasi tomonidan qo'llab-quvvatlansa. Navbat prioriteti (0.0–1.0) raqobat paytida bajarilish tartibiga ta'sir qiladi.

VkMemory va VkBuffer — xotira boshqaruvi

Vulkan da xotira aniq VkDeviceMemory orqali ajratiladi. Dasturchi jismoniy qurilmadan memory types (HOST_VISIBLE, DEVICE_LOCAL) so'raydi va bloklar ajratadi. Bufferlar (VkBuffer) va teksturalar (VkImage) o'z xotirasiga ega emas — ular ajratilgan bloklarga vkBindBufferMemory orqali bog'lanadi.

Vulkan Memory Allocator (VMA) — AMD dan xotira boshqaruvini soddalashtiradigan kutubxona. VMA kichik ajratmalarni avtomatik ravishda katta bloklarda guruhlaydi, defragmentatsiyani boshqaradi va mos memory type ni tanlaydi. AMD (2025) ma'lumotlariga ko'ra, VMA qo'lda boshqarish bilan solishtirganda xotira alokatsiyalari sonini 50–100 marta kamaytiradi.

VkCommandPool va VkCommandBuffer

VkCommandPool buyruq bufferlari uchun xotirani boshqaradi. Bufferlar (VkCommandBuffer) CPU da yoziladi va vkQueueSubmit orqali GPU ga yuboriladi. Vulkan primary va secondary bufferlarni qo'llab-quvvatlaydi: primary to'g'ridan-to'g'ri yuboriladi, secondary ko'p tarmoqli buyruq qurish uchun primary dan chaqirilishi mumkin.

Buyruqlarni yozish vkBeginCommandBuffer bilan boshlanadi va vkEndCommandBuffer bilan tugaydi. Ularning orasida renderlash buyruqlari yoziladi: vkCmdDraw, vkCmdDispatch, vkCmdCopyBuffer va sinxronizatsiya uchun vkCmdPipelineBarrier. Har bir kadr uchun pool reset orqali yangi buyruq bufferi yaratiladi.

Vulkan orqali renderlash: pipeline va buyruqlar

Vulkan da renderlash pipelinelar (VkPipeline) orqali tashkil etiladi. OpenGL dan farqli o'laroq, pipeline holati global o'zgaradi, Vulkan VkPipeline — barcha bosqichlarni o'z ichiga olgan oldindan kompilyatsiya qilingan pipeline dan foydalanadi: uch kiritish, shaderlar, rastrlash, depth-stencil va blending.

VkPipeline — renderlash pipeline

VkGraphicsPipelineCreateInfo to'liq pipeline ni tavsiflaydi: uch, fragment shaderlari, topologiya (triangle list, triangle strip), rastrlashtiruvchi (fill mode, cull mode), multisampling, depth-stencil testlari, blending va viewport sozlamalari. Pipeline bir marta yaratiladi va qayta ishlatiladi — holat o'zgarishi yangi pipeline yoki dynamic state talab qiladi.

cpp
// Grafik pipeline sozlamasi
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) yangi pipeline yaratmasdan ma'lum parametrlarni o'zgartirish imkonini beradi. Vulkan 1.4 blend constants, depth bias va topologiyani jonli boshqarish uchun Dynamic State 3 (VK_EXT_extended_dynamic_state_3) qo'llab-quvvatlashni majburiy qildi, bu loyihadagi pipelinelar sonini kamaytiradi.

Render Pass va Dynamic Rendering

VkRenderPass renderlash o'tishlarining tuzilishini tavsiflaydi: qaysi attachment ishlatiladi, ular qanday tozalanadi va yuklanadi. Dynamic Rendering (VK_KHR_dynamic_rendering, Vulkan 1.4 dan majburiy) jarayonni soddalashtiradi: render pass buyruq bufferida vkCmdBeginRendering orqali jonli yaratiladi, oldindan VkRenderPass ob'ektsiz.

Khronos (2026) ma'lumotlariga ko'ra, Dynamic Rendering Vulkan boshlang'ich kodining miqdorini 30–40 foizga kamaytiradi va pipeline permutations sonini pasaytiradi. Murakkab kechiktirilgan renderlash texnikalari (Deferred Shading) uchun G-buffer va yoritish uchun ko'p subpasses bilan klassik VkRenderPass ishlatish hali ham qulay.

Vulkan da shaderlar: SPIR-V va GLSL

SPIR-V — Khronos tomonidan ishlab chiqilgan Vulkan da universal binar shader formati. Shaderlar GLSL, HLSL yoki Zink tilida yozilishi va glslangValidator, dxc yoki Google Shaderc orqali SPIR-V ga kompilyatsiya qilinishi mumkin. Vulkan shaderlarni manba kodida qabul qilmaydi — faqat binar SPIR-V.

Vulkan da GLSL

Vulkan uchun GLSL standart OpenGL GLSL dan farq qiladi. Set va binding raqamlarining aniq ko'rsatilishi bilan bloklar (layout) ishlatiladi, o'rnatilgan o'zgaruvchilar emas. Uch atributlari location orqali, uniform lar — uniform blocks yoki bufferlar orqali belgilanadi. Push constants (128 baytgacha) buffersiz tez ma'lumot uzatish uchun mavjud.

glsl
// Vulkan/GLSL uch shaderi
#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) kvalifikatorlari — Vulkan GLSL ni OpenGL dan asosiy farqi. Set deskriptor to'plamiga (VkDescriptorSet), binding konkret resursga (buffer, tekstura, sampler) mos keladi. Set ga bo'lish alohida resurslarni bog'lamasdan draw calls o'rtasida resurs to'plamlarini samarali almashtirish imkonini beradi.

Deskriptorlar va deskriptor to'plamlari

VkDescriptorSet — shaderlarga bog'langan resurslar guruhi (bufferlar, teksturalar, samplerlar). Deskriptor layouti resurs turlarini va ularning binding raqamlarini tavsiflaydi. Deskriptor to'plamlari vkUpdateDescriptorSets orqali yangilanadi va draw calls o'rtasida qayta ishlatiladi. Vulkan 1.4 GPU dan deskriptorlarga to'g'ridan-to'g'ri kirish uchun VK_EXT_descriptor_buffer qo'llab-quvvatlaydi.

Push Constants — deskriptor yaratmasdan shaderlarga kichik hajmdagi ma'lumotlarni (128 baytgacha) tez uzatish mexanizmi. Push constants buyruq bufferida vkCmdPushConstants orqali belgilanadi. Khronos (2025) ma'lumotlariga ko'ra, uniform buffers o'rniga push constants ishlatish kadrda 10 mingdan ortiq draw calls chastotasida CPU yukini 10–15 foizga kamaytiradi.

Turli platformalarda Vulkan

Vulkan barcha asosiy platformalarda ishlaydigan yagona API: Windows (rasmiy ICD drayveri orqali), Linux (RADV, AMDVLK, NVIDIA), Android (Vulkan 1.3+, Android 10 dan majburiy) va Apple qurilmalarida MoltenVK — Vulkan → Metal tarjima qatlami orqali.

Android da Vulkan

Android da Vulkan Android 10 va undan yangilari uchun majburiy. Google yangi loyihalar uchun, ayniqsa yuqori unumdorlikdagi o'yinlar va ARCore orqali AR ilovalari uchun Vulkan ni tavsiya qiladi. Qualcomm Adreno va ARM Mali Adreno 8xx va Mali-G720 da apparat nur kuzatish bilan Vulkan 1.3 ni to'liq qo'llab-quvvatlaydi.

Google (2026) ma'lumotlariga ko'ra, Android 10+ bo'lgan Android qurilmalarining 98 foizi Vulkan ni qo'llab-quvvatlaydi. Orqaga moslik uchun ANGLE (Almost Native Graphics Layer Engine) mavjud bo'lib, OpenGL ES ni Vulkan ga tarjima qiladi. Bu eski OpenGL ilovalarini Vulkan drayverida ishga tushirish imkonini beradi, unumdorlik o'sishi 20 foizgacha.

Android da Vulkan energiya samaradorligi uchun yuqori ustuvorlikka ega: Vulkan ilovalari Adreno 7xx+ qurilmalarida bir xil grafik yukida OpenGL ES bilan solishtirganda 25–40 foiz kam energiya sarflaydi. Bu Vulkan ni mobil qurilmalarda o'yinlar uchun afzal ko'riladigan API ga aylantiradi.

MoltenVK orqali Apple da Vulkan

MoltenVK — LunarG va Valve tomonidan ishlab chiqilgan Metal ustidagi Vulkan implementatsiyasi. MoltenVK Vulkan API chaqiruvlarini Metal ga tarjima qiladi, iOS va macOS da Vulkan 1.2 ni qo'llab-quvvatlaydi. MoltenVK unumdorligi native Metal ga yaqin: tarjima yuki stsenariyga qarab 5–15 foizni tashkil qiladi.

LunarG (2025) ma'lumotlariga ko'ra, MoltenVK macOS da Windows o'yinlarini ishga tushirish uchun CrossOver (Wine for Mac) da ishlatiladi. macOS da Dota 2, Civilization VI va Baldur’s Gate 3 MoltenVK orqali M3/M4 da 30–60 FPS unumdorlik bilan ishlaydi. MoltenVK unumdorlikni yaxshilash uchun MetalFX upscaling ni qo'llab-quvvatlaydi.

Vulkan Ray Tracing

VK_KHR_ray_tracing — Vulkan da apparat nur kuzatish uchun kengaytma, Vulkan 1.4 dan majburiy. RT yadroli GPU larda qo'llab-quvvatlanadi: NVIDIA RTX 20xx/30xx/40xx/50xx, AMD RX 6000+/9000, Intel Arc A/B. Vulkan RT VkAccelerationStructure, VkRayTracingPipeline va Shader Binding Table ni ta'minlaydi.

Vulkan Ray Tracing real vaqtda akslar, soyalar, ambient occlusion va global yoritishni qo'llab-quvvatlaydi. Khronos (2026) ma'lumotlariga ko'ra, NVIDIA RTX 5090 da Vulkan Ray Tracing mos yozuvlar sifatli sahnalarda 100 Giga rays/s gacha bajaradi. Portativ platformalar uchun Vulkan RT blur reduction va temporal denoising orqali masshtablanadi.

Tez-tez so'raladigan savollar

Vulkan nima va u OpenGL dan qanday farq qiladi?

Vulkan — resurslarni aniq boshqarish bilan past darajadagi kross-platform GPU API. OpenGL dan farqli o'laroq, xotira, sinxronizatsiya va ko'p tarmoqlilik ustidan nazorat beradi, CPU-bound stsenariylarida unumdorlikni 50 foizgacha oshiradi.

Vulkan qaysi platformalarda ishlaydi?

Vulkan Windows, Linux, Android, Nintendo Switch da, iOS/macOS da esa MoltenVK (Metal ga tarjima) orqali ishlaydi. NVIDIA, AMD, Intel, Qualcomm, ARM va Apple (MoltenVK orqali) GPU larida qo'llab-quvvatlanadi.

Vulkan da SPIR-V nima?

SPIR-V — Vulkan ning universal binar shader formati. Shaderlar GLSL yoki HLSL da yoziladi, SPIR-V ga kompilyatsiya qilinadi va Vulkan ga beriladi. Bu shader yozish tilidan qat'iy nazar bashorat qilinadigan kompilyatsiya unumdorligini ta'minlaydi.

Vulkan nur kuzatishni qo'llab-quvvatlaydimi?

Ha, VK_KHR_ray_tracing orqali — Vulkan 1.4 dan majburiy kengaytma. RT yadroli GPU larda qo'llab-quvvatlanadi: NVIDIA RTX, AMD RX 6000+, Intel Arc. Vulkan RT BVH strukturalarini tezlashtirish, Shader Binding Table va apparat nur kesishmalarini ta'minlaydi.

Vulkan dan foydalanishni boshlash qiyinmi?

Kirish chegarasi OpenGL yoki DirectX 11 dan yuqori, aniq xotira boshqaruvi, sinxronizatsiya va pipelinelar sababli. Khronos Vulkan Tutorial, Vulkan Samples va Vulkan Guide ni taqdim etadi. Birinchi uchburchak uchun taxminan 500 qator kod kerak.

Xulosa

  • Vulkan — Khronos Group dan kross-platform past darajadagi GPU API
  • Aniq boshqaruv xotira, sinxronizatsiya va navbatlar CPU yukini kamaytiradi
  • VkPipeline — grafik va hisoblash uchun oldindan kompilyatsiya qilingan pipeline
  • SPIR-V — GLSL va HLSL dan kompilyatsiya qilingan binar shader formati
  • Dynamic Rendering (Vulkan 1.4) VkRenderPass siz Render Pass yaratishni soddalashtiradi
  • MoltenVK iOS va macOS da Vulkan ning Metal orqali ishlashini ta'minlaydi
  • Vulkan 1.4 Mesh Shaders, Video Encode API va majburiy nur kuzatishni qo'shdi

Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz

IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.

Loyihani muhokama qilish

Shuningdek o'qing