Vulkan — کراس پلیٹ فارم API اور رینڈرنگ کیا ہے

مصنف: IT Sectr اشاعت: 2026-05-03 مطالعے کا وقت: 9 منٹ

Vulkan GPU پر گرافکس اور کمپیوٹنگ کے لیے ایک کراس پلیٹ فارم API ہے، جسے Khronos Group کنسورشیم نے تیار کیا ہے۔ Vulkan ہارڈویئر پر نچلی سطح کا کنٹرول، ملٹی تھریڈڈ کمانڈ جنریشن اور پیش قیاسی کارکردگی فراہم کرتا ہے۔ Khronos Group (2026) کے مطابق، Vulkan جدید Android آلات کے 98% پر تعاون یافتہ ہے۔

اہم نکات

  • Vulkan — ہارڈویئر پر نچلی سطح کے کنٹرول کے ساتھ ایک کراس پلیٹ فارم GPU API
  • VkDevice اور VkQueue GPU کو ملٹی تھریڈڈ کمانڈ جمع کروانے کے قابل بناتے ہیں
  • SPIR-V — GLSL اور HLSL سے مرتب کردہ ایک یونیورسل بائنری شیڈر فارمیٹ
  • Vulkan Memory Allocator واضح GPU میموری مختص کا انتظام کرتا ہے
  • Vulkan Ray Tracing (VK_KHR_ray_tracing) ہارڈویئر سے تیز رفتار رے ٹریسنگ کو سپورٹ کرتا ہے

Vulkan کیا ہے؟

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 کی تاریخ

اصل میں، 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 کا فن تعمیر: ڈیوائس اور قطاریں

Vulkan کا فن تعمیر ہارڈویئر تجریدی پرت (HW پرت) پر بنایا گیا ہے۔ ایپلیکیشن ایک منطقی ڈیوائس (VkDevice) کے ذریعے ایک طبعی ڈیوائس (VkPhysicalDevice) کے ساتھ تعامل کرتی ہے۔ کمانڈز قطاروں (VkQueue) میں بھیجی جاتی ہیں، ہر ایک کا تعلق ایک مخصوص قطار خاندان (graphics, compute, transfer) سے ہوتا ہے۔

VkInstance, VkDevice اور VkQueue

VkInstance Vulkan کی جڑ آبجیکٹ ہے، جو توثیق کی تہوں اور توسیعات کے بارے میں معلومات ذخیرہ کرتی ہے۔ VkPhysicalDevice طبعی GPU کی نمائندگی کرتا ہے اور اس کی خصوصیات، میموری ہیپ اور قطار خاندانوں کو دریافت کرنے کی اجازت دیتا ہے۔ VkDevice واضح طور پر درخواست کردہ قطاروں اور توسیعات کے ساتھ ایک منطقی ڈیوائس ہے۔

cpp
// 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) مسابقت میں عملدرآمد کی ترتیب کو متاثر کرتی ہے۔

VkMemory اور VkBuffer — میموری کا انتظام

Vulkan میں، میموری واضح طور پر VkDeviceMemory کے ذریعے مختص کی جاتی ہے۔ ڈیولپر طبعی ڈیوائس سے میموری کی اقسام (HOST_VISIBLE, DEVICE_LOCAL) دریافت کرتا ہے اور بلاک مختص کرتا ہے۔ بفر (VkBuffer) اور ٹیکسچر (VkImage) کی اپنی میموری نہیں ہوتی — یہ vkBindBufferMemory کے ذریعے مختص کردہ بلاکس سے منسلک ہوتے ہیں۔

Vulkan Memory Allocator (VMA) AMD کی ایک لائبریری ہے جو میموری کے انتظام کو آسان بناتی ہے۔ VMA خود بخود چھوٹے مختصات کو بڑے بلاکس میں گروپ کرتی ہے، ڈی فرگمنٹیشن کا انتظام کرتی ہے اور مناسب میموری کی قسم کا انتخاب کرتی ہے۔ AMD (2025) کے مطابق، VMA دستی انتظام کے مقابلے میں میموری مختصات کی تعداد 50–100 گنا کم کر دیتی ہے۔

VkCommandPool اور VkCommandBuffer

VkCommandPool کمانڈ بفرز کے لیے میموری کا انتظام کرتا ہے۔ بفر (VkCommandBuffer) CPU پر ریکارڈ کیے جاتے ہیں اور vkQueueSubmit کے ذریعے GPU کو بھیجے جاتے ہیں۔ Vulkan بنیادی اور ثانوی بفر کو سپورٹ کرتا ہے: بنیادی براہ راست جمع کروائے جاتے ہیں، ثانوی کو ملٹی تھریڈڈ کمانڈ تعمیر کے لیے بنیادی سے بلایا جا سکتا ہے۔

کمانڈ ریکارڈنگ vkBeginCommandBuffer سے شروع ہوتی ہے اور vkEndCommandBuffer پر ختم ہوتی ہے۔ ان کے درمیان، رینڈرنگ کمانڈ ریکارڈ کی جاتی ہیں: vkCmdDraw, vkCmdDispatch, vkCmdCopyBuffer اور ہم آہنگی کے لیے vkCmdPipelineBarrier۔ ہر فریم کے لیے پول ری سیٹ کے ذریعے پولنگ کے ساتھ ایک نیا کمانڈ بفر بنایا جاتا ہے۔

Vulkan کے ذریعے رینڈرنگ: پائپ لائن اور کمانڈز

Vulkan میں رینڈرنگ پائپ لائن (VkPipeline) کے ذریعے منظم کی جاتی ہے۔ OpenGL کے برعکس، جہاں پائپ لائن کی حالت عالمی طور پر تبدیل ہوتی ہے، Vulkan VkPipeline استعمال کرتا ہے — ایک پہلے سے مرتب کردہ پائپ لائن جس میں تمام مراحل شامل ہیں: ورٹیکس ان پٹ، شیڈر، راسٹرائزیشن، ڈیپتھ-سٹینسل اور بلینڈنگ۔

VkPipeline — رینڈرنگ پائپ لائن

VkGraphicsPipelineCreateInfo مکمل پائپ لائن کو بیان کرتا ہے: ورٹیکس اور فریگمنٹ شیڈر، ٹوپولوجی (triangle list, triangle strip), راسٹرائزر (fill mode, cull mode), ملٹی سیمپلنگ، ڈیپتھ-سٹینسل ٹیسٹ، بلینڈنگ اور ویوپورٹ سیٹنگز۔ پائپ لائن ایک بار بنائی جاتی ہے اور دوبارہ استعمال ہوتی ہے — حالت تبدیل کرنے کے لیے نئی پائپ لائن یا متحرک حالت کی ضرورت ہوتی ہے۔

cpp
// گرافکس پائپ لائن مرتب کرنا
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) کی سپورٹ لازمی قرار دی، جس سے پروجیکٹ میں پائپ لائنوں کی تعداد کم ہو جاتی ہے۔

Render Pass اور Dynamic Rendering

VkRenderPass رینڈرنگ پاس کی ساخت کو بیان کرتا ہے: کون سے اٹیچمنٹ استعمال ہوتے ہیں، انہیں کیسے صاف اور لوڈ کیا جاتا ہے۔ Dynamic Rendering (VK_KHR_dynamic_rendering, Vulkan 1.4 سے لازمی) عمل کو آسان بناتا ہے: رینڈر پاس کسی پہلے VkRenderPass آبجیکٹ کے بغیر کمانڈ بفر میں vkCmdBeginRendering کے ذریعے چلتے چلتے بنایا جاتا ہے۔

Khronos (2026) کے مطابق، Dynamic Rendering Vulkan ابتدائیہ کوڈ کو 30–40% کم کرتا ہے اور پائپ لائن کی ترتیب کی تعداد گھٹاتا ہے۔ پیچیدہ موخر رینڈرنگ تکنیکوں (Deferred Shading) کے لیے، G-buffer اور روشنی کے لیے متعدد ذیلی پاس کے ساتھ کلاسک VkRenderPass استعمال کرنا اب بھی آسان ہے۔

Vulkan میں شیڈر: SPIR-V اور GLSL

SPIR-V Vulkan میں ایک یونیورسل بائنری شیڈر فارمیٹ ہے، جسے Khronos نے تیار کیا ہے۔ شیڈر GLSL, HLSL یا Zink زبان میں لکھے جا سکتے ہیں اور glslangValidator, dxc یا Google Shaderc کے ذریعے SPIR-V میں مرتب کیے جا سکتے ہیں۔ Vulkan شیڈر کو سورس کوڈ میں قبول نہیں کرتا — صرف بائنری SPIR-V۔

Vulkan میں GLSL

Vulkan کے لیے GLSL معیاری OpenGL GLSL سے مختلف ہے۔ بلٹ ان متغیرات کی بجائے، واضح set اور binding نمبر والے بلاک (layout) استعمال ہوتے ہیں۔ ورٹیکس صفات location کے ذریعے مخصوص کی جاتی ہیں، uniform uniform block یا بفر کے ذریعے۔ Push constants (128 بائٹس تک) بفر کے بغیر تیز ڈیٹا منتقلی کے لیے دستیاب ہیں۔

glsl
// 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 ایک مخصوص وسیلے (بفر، ٹیکسچر، سیمپلر) سے مطابقت رکھتا ہے۔ سیٹ میں تقسیم انفرادی وسائل کو باندھے بغیر ڈرا کالز کے درمیان وسائل کے سیٹ کو مؤثر طریقے سے تبدیل کرنے کی اجازت دیتی ہے۔

وضافت کنندگان اور وضافت کنندہ سیٹ

VkDescriptorSet شیڈر سے منسلک وسائل (بفر، ٹیکسچر، سیمپلر) کا ایک گروپ ہے۔ وضافت کنندہ ترتیب وسائل کی اقسام اور ان کے binding نمبر کو بیان کرتی ہے۔ وضافت کنندہ سیٹ vkUpdateDescriptorSets کے ذریعے اپ ڈیٹ ہوتے ہیں اور ڈرا کالز کے درمیان دوبارہ استعمال ہوتے ہیں۔ Vulkan 1.4 GPU سے وضافت کنندگان تک براہ راست رسائی کے لیے VK_EXT_descriptor_buffer کو سپورٹ کرتا ہے۔

Push Constants وضافت کنندہ بنائے بغیر شیڈر میں چھوٹے ڈیٹا والیوم (128 بائٹس تک) کی تیز منتقلی کے لیے ایک طریقہ کار ہے۔ Push constants کمانڈ بفر میں vkCmdPushConstants کے ذریعے سیٹ کیے جاتے ہیں۔ Khronos (2025) کے مطابق، uniform buffers کی بجائے push constants استعمال کرنے سے 10 ہزار سے زیادہ ڈرا کالز فی فریم کی شرح پر CPU اوور ہیڈ 10–15% کم ہوتا ہے۔

مختلف پلیٹ فارمز پر Vulkan

Vulkan واحد API ہے جو تمام اہم پلیٹ فارمز پر کام کرتا ہے: Windows (سرکاری ICD ڈرائیور کے ذریعے)، Linux (RADV, AMDVLK, NVIDIA)، Android (Vulkan 1.3+, Android 10 سے لازمی)، اور Apple آلات پر MoltenVK (Vulkan سے Metal میں ترجمے کی پرت) کے ذریعے۔

Android پر Vulkan

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 کے ذریعے Apple پر Vulkan

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 اپ اسکیلنگ کو سپورٹ کرتا ہے۔

Vulkan Ray Tracing

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 کیا ہے اور یہ OpenGL سے کیسے مختلف ہے؟

Vulkan واضح وسائل کے انتظام کے ساتھ ایک نچلی سطح کراس پلیٹ فارم GPU API ہے۔ OpenGL کے برعکس، یہ میموری، ہم آہنگی اور ملٹی تھریڈنگ پر کنٹرول فراہم کرتا ہے، CPU باؤنڈ منظرناموں میں 50% تک کارکردگی بہتری فراہم کرتا ہے۔

Vulkan کن پلیٹ فارمز پر کام کرتا ہے؟

Vulkan Windows, Linux, Android, Nintendo Switch پر اور iOS/macOS پر MoltenVK (Metal میں ترجمہ) کے ذریعے کام کرتا ہے۔ NVIDIA, AMD, Intel, Qualcomm, ARM اور Apple (MoltenVK کے ذریعے) GPU پر تعاون یافتہ۔

Vulkan میں SPIR-V کیا ہے؟

SPIR-V Vulkan کے لیے ایک یونیورسل بائنری شیڈر فارمیٹ ہے۔ شیڈر GLSL یا HLSL میں لکھے جاتے ہیں، SPIR-V میں مرتب کیے جاتے ہیں اور Vulkan میں فراہم کیے جاتے ہیں۔ یہ شیڈر زبان کی آزادی اور پیش قیاسی مرتب کرنے کی کارکردگی کو یقینی بناتا ہے۔

کیا Vulkan رے ٹریسنگ کو سپورٹ کرتا ہے؟

جی ہاں، VK_KHR_ray_tracing (Vulkan 1.4 سے ایک لازمی توسیع) کے ذریعے۔ RT کور والے GPU پر تعاون یافتہ: NVIDIA RTX, AMD RX 6000+, Intel Arc۔ Vulkan RT BVH تیز رفتار ڈھانچے، Shader Binding Table اور ہارڈویئر رے تقاطع فراہم کرتا ہے۔

کیا Vulkan استعمال کرنا شروع کرنا مشکل ہے؟

واضح میموری انتظام، ہم آہنگی اور پائپ لائنوں کی وجہ سے داخلے کی رکاوٹ OpenGL یا DirectX 11 سے زیادہ ہے۔ Khronos Vulkan Tutorial, Vulkan Samples اور Vulkan Guide فراہم کرتا ہے۔ پہلے مثلث کے لیے تقریباً 500 لائن کوڈ درکار ہے۔

خلاصہ

  • Vulkan — Khronos Group کا ایک کراس پلیٹ فارم نچلی سطح کا GPU API
  • واضح انتظام میموری، ہم آہنگی اور قطاروں کا CPU اوور ہیڈ کم کرتا ہے
  • VkPipeline — گرافکس اور کمپیوٹ کے لیے پہلے سے مرتب کردہ پائپ لائن
  • SPIR-V — GLSL اور HLSL سے مرتب کردہ بائنری شیڈر فارمیٹ
  • Dynamic Rendering (Vulkan 1.4) VkRenderPass کے بغیر Render Pass تخلیق کو آسان بناتا ہے
  • MoltenVK Metal کے ذریعے iOS اور macOS پر Vulkan کو فعال کرتا ہے
  • Vulkan 1.4 نے Mesh Shaders, Video Encode API اور لازمی رے ٹریسنگ شامل کیا

ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے

IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔

پروجیکٹ پر بحث کریں

مزید پڑھیں