Vulkan GPU पर ग्राफ़िक्स और कंप्यूटिंग के लिए एक क्रॉस-प्लेटफ़ॉर्म API है, जिसे Khronos Group कंसोर्टियम द्वारा विकसित किया गया है। Vulkan हार्डवेयर पर निम्न-स्तरीय नियंत्रण, मल्टीथ्रेडेड कमांड जनरेशन और पूर्वानुमानित प्रदर्शन प्रदान करता है। Khronos Group (2026) के अनुसार, Vulkan 98% आधुनिक Android उपकरणों पर समर्थित है।
मुख्य बिंदु
Vulkan एक निम्न-स्तरीय, क्रॉस-प्लेटफ़ॉर्म API है जो ग्राफ़िक्स प्रोसेसिंग यूनिट्स के साथ काम करने के लिए है, जिसे पहली बार 2016 में Khronos Group द्वारा जारी किया गया था। Vulkan OpenGL का उत्तराधिकारी बना, जो काफी कम CPU ओवरहेड, पूर्वानुमानित प्रदर्शन और मल्टीथ्रेडेड कमांड जनरेशन की क्षमता प्रदान करता है।
OpenGL के विपरीत, जहाँ ड्राइवर CPU पर सत्यापन और सिंक्रनाइज़ेशन करता है, Vulkan संसाधन प्रबंधन डेवलपर पर डालता है। मेमोरी आवंटन, सेमाफोर और बैरियर के माध्यम से सिंक्रनाइज़ेशन, पाइपलाइन निर्माण — यह सब स्पष्ट रूप से नियंत्रित किया जाता है। यह दृष्टिकोण CPU-बाउंड परिदृश्यों में 50% तक प्रदर्शन सुधार प्रदान करता है।
Vulkan Windows, Linux, Android, iOS (MoltenVK के माध्यम से), macOS (MoltenVK), Nintendo Switch और कंसोल पर समर्थित है। Khronos Group (2026) के अनुसार, API NVIDIA, AMD, Intel, Qualcomm (Adreno), ARM (Mali) और Apple (Metal परत के माध्यम से) के GPU वाले उपकरणों पर चलता है। Vulkan 1.4 (2026) ने Mesh Shaders और Video Encode API के लिए समर्थन जोड़ा।
मूल रूप से, Vulkan को कोडनेम “glNext” के तहत विकसित किया गया था — OpenGL का उत्तराधिकारी। Vulkan 1.0 (2016) ने स्पष्ट मेमोरी प्रबंधन, SPIR-V शेडर और मल्टीथ्रेडेड कतारों के साथ एक बुनियादी API प्रदान किया। Vulkan 1.1 (2018) ने Subgroup Operations और 16-बिट प्रकारों के लिए समर्थन जोड़ा। Vulkan 1.2 (2020) ने Buffer Device Address और Timeline Semaphores पेश किए।
Vulkan 1.3 (2022) ने Dynamic Rendering और Graphics Pipeline Library को मानकीकृत किया। Vulkan 1.4 (2026) ने Mesh Shaders के लिए समर्थन अनिवार्य कर दिया और H.264/HEVC/AV1 के हार्डवेयर एन्कोडिंग के लिए Video Encode/Decode API जोड़ा। Khronos (2026) के अनुसार, Vulkan 1.4 सभी नए NVIDIA RTX 50xx, AMD RX 9000 और Intel Arc B-श्रृंखला GPU पर समर्थित है।
Vulkan आर्किटेक्चर हार्डवेयर एब्स्ट्रक्शन लेयर (HW लेयर) पर बनाया गया है। एप्लिकेशन एक लॉजिकल डिवाइस (VkDevice) के माध्यम से भौतिक डिवाइस (VkPhysicalDevice) के साथ इंटरैक्ट करता है। कमांड कतारों (VkQueue) में भेजे जाते हैं, प्रत्येक एक विशिष्ट कतार परिवार (graphics, compute, transfer) से संबंधित होती है।
VkInstance मूल Vulkan ऑब्जेक्ट है, जो वैलिडेशन लेयर और एक्सटेंशन के बारे में जानकारी संग्रहीत करता है। VkPhysicalDevice भौतिक GPU का प्रतिनिधित्व करता है और इसके गुणों, मेमोरी हीप और कतार परिवारों की क्वेरी करने की अनुमति देता है। VkDevice स्पष्ट रूप से अनुरोधित कतारों और एक्सटेंशन के साथ एक लॉजिकल डिवाइस है।
// 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);
फ़ंक्शन vkCreateDevice निर्दिष्ट कतारों के साथ एक लॉजिकल डिवाइस बनाता है। VkQueue कमांड सबमिट करने के लिए एक कतार हैंडल है। एक एकल कतार का उपयोग ग्राफ़िक्स, कंप्यूट और कॉपी के लिए किया जा सकता है यदि संबंधित फ़्लैग कतार परिवार द्वारा समर्थित हों। कतार प्राथमिकता (0.0–1.0) प्रतिस्पर्धा में निष्पादन क्रम को प्रभावित करती है।
Vulkan में, मेमोरी स्पष्ट रूप से VkDeviceMemory के माध्यम से आवंटित की जाती है। डेवलपर भौतिक डिवाइस से मेमोरी प्रकार (HOST_VISIBLE, DEVICE_LOCAL) क्वेरी करता है और ब्लॉक आवंटित करता है। बफ़र (VkBuffer) और टेक्सचर (VkImage) की अपनी मेमोरी नहीं होती — वे vkBindBufferMemory के माध्यम से आवंटित ब्लॉक से बंधे होते हैं।
Vulkan Memory Allocator (VMA) AMD की एक लाइब्रेरी है जो मेमोरी प्रबंधन को सरल बनाती है। VMA स्वचालित रूप से छोटे आवंटन को बड़े ब्लॉक में समूहित करती है, डीफ़्रैग्मेंटेशन का प्रबंधन करती है और उपयुक्त मेमोरी प्रकार का चयन करती है। AMD (2025) के अनुसार, VMA मैन्युअल प्रबंधन की तुलना में मेमोरी आवंटन की संख्या 50–100 गुना कम कर देता है।
VkCommandPool कमांड बफ़र के लिए मेमोरी का प्रबंधन करता है। बफ़र (VkCommandBuffer) CPU पर रिकॉर्ड किए जाते हैं और vkQueueSubmit के माध्यम से GPU को भेजे जाते हैं। Vulkan प्राथमिक और द्वितीयक बफ़र का समर्थन करता है: प्राथमिक सीधे सबमिट किए जाते हैं, द्वितीयक को मल्टीथ्रेडेड कमांड निर्माण के लिए प्राथमिक से कॉल किया जा सकता है।
कमांड रिकॉर्डिंग vkBeginCommandBuffer से शुरू होती है और vkEndCommandBuffer पर समाप्त होती है। उनके बीच, रेंडरिंग कमांड रिकॉर्ड किए जाते हैं: vkCmdDraw, vkCmdDispatch, vkCmdCopyBuffer और सिंक्रनाइज़ेशन के लिए vkCmdPipelineBarrier। प्रत्येक फ्रेम के लिए पूल रीसेट के माध्यम से पूलिंग के साथ एक नया कमांड बफ़र बनाया जाता है।
Vulkan में रेंडरिंग पाइपलाइन (VkPipeline) के माध्यम से आयोजित की जाती है। OpenGL के विपरीत, जहाँ पाइपलाइन स्थिति वैश्विक रूप से बदली जाती है, Vulkan VkPipeline का उपयोग करता है — एक पूर्व-संकलित पाइपलाइन जिसमें सभी चरण शामिल हैं: वर्टेक्स इनपुट, शेडर, रास्टराइज़ेशन, depth-stencil और ब्लेंडिंग।
VkGraphicsPipelineCreateInfo पूर्ण पाइपलाइन का वर्णन करता है: वर्टेक्स और फ़्रैगमेंट शेडर, टोपोलॉजी (triangle list, triangle strip), रास्टराइज़र (fill mode, cull mode), मल्टीसैंपलिंग, depth-stencil परीक्षण, ब्लेंडिंग और व्यूपोर्ट सेटिंग्स। पाइपलाइन एक बार बनाई जाती है और पुनः उपयोग की जाती है — स्थिति बदलने के लिए नई पाइपलाइन या डायनामिक स्थिति की आवश्यकता होती है।
// ग्राफ़िक्स पाइपलाइन सेट अप करना
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);
डायनामिक स्टेट (VK_DYNAMIC_STATE_VIEWPORT, VK_DYNAMIC_STATE_SCISSOR) नई पाइपलाइन बनाए बिना कुछ पैरामीटर बदलने की अनुमति देता है। Vulkan 1.4 ने चलते-फिरते blend constants, depth bias और टोपोलॉजी के प्रबंधन के लिए Dynamic State 3 (VK_EXT_extended_dynamic_state_3) का समर्थन अनिवार्य कर दिया, जिससे प्रोजेक्ट में पाइपलाइनों की संख्या कम हो जाती है।
VkRenderPass रेंडरिंग पास की संरचना का वर्णन करता है: कौन से अटैचमेंट का उपयोग किया जाता है, उन्हें कैसे साफ़ और लोड किया जाता है। डायनामिक रेंडरिंग (VK_KHR_dynamic_rendering, Vulkan 1.4 से अनिवार्य) प्रक्रिया को सरल बनाता है: रेंडर पास कमांड बफ़र में vkCmdBeginRendering के माध्यम से चलते-फिरते बनाया जाता है, बिना किसी पूर्व VkRenderPass ऑब्जेक्ट के।
Khronos (2026) के अनुसार, Dynamic Rendering Vulkan इनिशियलाइज़ेशन कोड को 30–40% कम करता है और पाइपलाइन परम्यूटेशन की संख्या घटाता है। जटिल डिफर्ड रेंडरिंग तकनीकों (Deferred Shading) के लिए, G-buffer और प्रकाश व्यवस्था के लिए कई सबपास के साथ क्लासिक VkRenderPass अभी भी सुविधाजनक है।
SPIR-V Vulkan में एक सार्वभौमिक बाइनरी शेडर प्रारूप है, जिसे Khronos द्वारा विकसित किया गया है। शेडर GLSL, HLSL या Zink भाषा में लिखे जा सकते हैं और glslangValidator, dxc या Google Shaderc के माध्यम से SPIR-V में संकलित किए जा सकते हैं। Vulkan शेडर को स्रोत कोड में स्वीकार नहीं करता — केवल बाइनरी SPIR-V।
Vulkan के लिए GLSL मानक OpenGL GLSL से भिन्न है। बिल्ट-इन वेरिएबल के बजाय स्पष्ट set और binding नंबर वाले ब्लॉक (layout) का उपयोग किया जाता है। वर्टेक्स विशेषताएँ location के माध्यम से निर्दिष्ट की जाती हैं, uniform को uniform blocks या बफ़र के माध्यम से। Push constants (128 बाइट्स तक) बफ़र के बिना तेज़ डेटा स्थानांतरण के लिए उपलब्ध हैं।
// 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;
}
क्वालिफ़ायर layout(set = N, binding = M) Vulkan GLSL और OpenGL के बीच एक महत्वपूर्ण अंतर है। Set एक डिस्क्रिप्टर सेट (VkDescriptorSet) से मेल खाता है, binding एक विशिष्ट संसाधन (बफ़र, टेक्सचर, सैंपलर) से मेल खाता है। सेट में अलगाव व्यक्तिगत संसाधनों को बाँधे बिना draw calls के बीच संसाधन सेट को कुशलतापूर्वक स्विच करने की अनुमति देता है।
VkDescriptorSet शेडर से बंधे संसाधनों (बफ़र, टेक्सचर, सैंपलर) का एक समूह है। डिस्क्रिप्टर लेआउट संसाधन प्रकारों और उनके binding नंबर का वर्णन करता है। डिस्क्रिप्टर सेट vkUpdateDescriptorSets के माध्यम से अपडेट किए जाते हैं और draw calls के बीच पुनः उपयोग किए जाते हैं। Vulkan 1.4 GPU से डिस्क्रिप्टर तक सीधी पहुँच के लिए VK_EXT_descriptor_buffer का समर्थन करता है।
Push Constants डिस्क्रिप्टर बनाए बिना शेडर में छोटी डेटा मात्रा (128 बाइट्स तक) के तेज़ स्थानांतरण के लिए एक तंत्र है। Push constants कमांड बफ़र में vkCmdPushConstants के माध्यम से सेट किए जाते हैं। Khronos (2025) के अनुसार, uniform buffers के बजाय push constants का उपयोग 10 हजार से अधिक draw calls प्रति फ्रेम की दर पर CPU ओवरहेड को 10–15% कम करता है।
Vulkan एकमात्र API है जो सभी प्रमुख प्लेटफ़ॉर्म पर काम करता है: Windows (आधिकारिक ICD ड्राइवर के माध्यम से), Linux (RADV, AMDVLK, NVIDIA), Android (Vulkan 1.3+, Android 10 से अनिवार्य), और Apple उपकरणों पर MoltenVK के माध्यम से — Vulkan से Metal में अनुवाद परत।
Android पर, Vulkan Android 10 और नए के लिए अनिवार्य है। Google नई परियोजनाओं के लिए Vulkan की अनुशंसा करता है, विशेष रूप से उच्च-प्रदर्शन वाले गेम और ARCore के माध्यम से AR एप्लिकेशन के लिए। Qualcomm Adreno और ARM Mali Adreno 8xx और Mali-G720 पर हार्डवेयर रे ट्रेसिंग के साथ पूर्ण Vulkan 1.3 समर्थन प्रदान करते हैं।
Google (2026) के अनुसार, Android 10+ वाले 98% Android उपकरण Vulkan का समर्थन करते हैं। पिछड़ी संगतता के लिए, ANGLE (Almost Native Graphics Layer Engine) उपलब्ध है, जो OpenGL ES को Vulkan में अनुवादित करता है। यह पुराने OpenGL एप्लिकेशन को 20% तक के प्रदर्शन सुधार के साथ Vulkan ड्राइवर पर चलाने की अनुमति देता है।
Android पर, Vulkan को ऊर्जा दक्षता के लिए उच्च प्राथमिकता प्राप्त है: Vulkan एप्लिकेशन Adreno 7xx+ वाले उपकरणों पर समान ग्राफ़िक्स लोड के तहत OpenGL ES की तुलना में 25–40% कम ऊर्जा की खपत करते हैं। यह Vulkan को मोबाइल उपकरणों पर गेम के लिए पसंदीदा API बनाता है।
MoltenVK Metal के ऊपर Vulkan का एक कार्यान्वयन है, जिसे LunarG और Valve द्वारा विकसित किया गया है। MoltenVK Vulkan API कॉल को Metal में अनुवादित करता है, iOS और macOS पर Vulkan 1.2 का समर्थन करता है। MoltenVK का प्रदर्शन मूल Metal के करीब है: अनुवाद ओवरहेड परिदृश्य के आधार पर 5–15% है।
LunarG (2025) के अनुसार, MoltenVK का उपयोग CrossOver (Mac के लिए Wine) में macOS पर Windows गेम चलाने के लिए किया जाता है। macOS पर Dota 2, Civilization VI और Baldur's Gate 3 M3/M4 पर 30–60 FPS प्रदर्शन के साथ MoltenVK के माध्यम से चलते हैं। MoltenVK प्रदर्शन सुधार के लिए MetalFX अपस्केलिंग का समर्थन करता है।
VK_KHR_ray_tracing Vulkan में हार्डवेयर रे ट्रेसिंग के लिए एक एक्सटेंशन है, जो Vulkan 1.4 से अनिवार्य है। RT कोर वाले GPU पर समर्थित: NVIDIA RTX 20xx/30xx/40xx/50xx, AMD RX 6000+/9000, Intel Arc A/B। Vulkan RT VkAccelerationStructure, VkRayTracingPipeline और Shader Binding Table प्रदान करता है।
Vulkan Ray Tracing रिफ्लेक्शन, शैडो, एम्बिएंट ऑक्लूज़न और रीयल-टाइम में वैश्विक प्रकाश व्यवस्था का समर्थन करता है। Khronos (2026) के अनुसार, NVIDIA RTX 5090 पर, Vulkan Ray Tracing संदर्भ गुणवत्ता वाले दृश्यों में 100 Giga rays/s तक प्राप्त करता है। पोर्टेबल प्लेटफ़ॉर्म के लिए, Vulkan RT ब्लर रिडक्शन और टेम्पोरल डीनॉइज़िंग के माध्यम से स्केल करता है।
अक्सर पूछे जाने वाले प्रश्न
Vulkan एक निम्न-स्तरीय क्रॉस-प्लेटफ़ॉर्म GPU API है जिसमें स्पष्ट संसाधन प्रबंधन है। OpenGL के विपरीत, यह मेमोरी, सिंक्रनाइज़ेशन और मल्टीथ्रेडिंग पर नियंत्रण प्रदान करता है, CPU-बाउंड परिदृश्यों में 50% तक प्रदर्शन सुधार प्रदान करता है।
Vulkan Windows, Linux, Android, Nintendo Switch पर और iOS/macOS पर MoltenVK (Metal में अनुवाद) के माध्यम से काम करता है। NVIDIA, AMD, Intel, Qualcomm, ARM और Apple (MoltenVK के माध्यम से) GPU पर समर्थित।
SPIR-V Vulkan के लिए एक सार्वभौमिक बाइनरी शेडर प्रारूप है। शेडर GLSL या HLSL में लिखे जाते हैं, SPIR-V में संकलित किए जाते हैं, और Vulkan में फीड किए जाते हैं। यह शेडर भाषा स्वतंत्रता और पूर्वानुमानित संकलन प्रदर्शन सुनिश्चित करता है।
हाँ, VK_KHR_ray_tracing के माध्यम से — Vulkan 1.4 से एक अनिवार्य एक्सटेंशन। RT कोर वाले GPU पर समर्थित: NVIDIA RTX, AMD RX 6000+, Intel Arc। Vulkan RT BVH त्वरण संरचना, Shader Binding Table और हार्डवेयर रे इंटरसेक्शन प्रदान करता है।
प्रवेश बाधा स्पष्ट मेमोरी प्रबंधन, सिंक्रनाइज़ेशन और पाइपलाइन के कारण OpenGL या DirectX 11 से अधिक है। Khronos Vulkan Tutorial, Vulkan Samples और Vulkan Guide प्रदान करता है। पहले त्रिकोण के लिए लगभग 500 लाइन कोड की आवश्यकता होती है।
सारांश
हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे
IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।
यह भी पढ़ें