Metal — یہ کیا ہے، گرافکس API اور شیڈرز

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

Metal Apple کا ایک نچلی سطح کا گرافکس اور کمپیوٹ API ہے جو iOS، macOS اور tvOS پر GPU تک براہ راست رسائی فراہم کرتا ہے۔ یہ OpenGL اور OpenCL کی جگہ لیتا ہے، کم سے کم CPU اوور ہیڈ اور پیش قیاسی کارکردگی فراہم کرتا ہے۔ Apple WWDC (2025) کے مطابق، Apple کے ماحولیاتی نظام میں GPU رینڈرنگ والی 98% ایپلیکیشنز میں Metal استعمال ہوتا ہے۔

اہم نکات

  • Metal — گرافکس اور کمپیوٹ سپورٹ کے ساتھ Apple کا نچلی سطح کا GPU API
  • MTLDevice — GPU کا تجرید جس کے ذریعے تمام Metal وسائل بنائے جاتے ہیں
  • کمانڈ بفرز MTLCommandBuffer ملٹی تھریڈڈ کمانڈ ریکارڈنگ کو قابل بناتے ہیں
  • Metal Shading Language شیڈرز C++14 پر مبنی GPU کوڈ میں کمپائل ہوتے ہیں
  • Metal Performance Shaders ML اور فلٹرنگ کے لیے بہتر کردہ GPU فنکشن فراہم کرتے ہیں

Metal کیا ہے؟

Metal گرافکس پروسیسنگ یونٹ (GPU) کے ساتھ کام کرنے کے لیے ایک نچلی سطح کا API ہے، جسے Apple نے 2014 میں iOS 8 اور OS X Yosemite کے ساتھ متعارف کرایا تھا۔ Metal کو OpenGL اور OpenCL کے متبادل کے طور پر بنایا گیا تھا جس کا مقصد CPU اوور ہیڈ کو کم کرنا اور Apple آلات پر GPU ہارڈویئر تک مزید براہ راست رسائی فراہم کرنا تھا۔

OpenGL کے برعکس، جہاں ڈرائیور CPU پر بہت سے چیک اور تبدیلیاں انجام دیتا ہے، Metal واضح وسائل کے انتظام کا ماڈل استعمال کرتا ہے۔ ڈویلپر میموری کی تقسیم، ہم آہنگی اور GPU کمانڈ جمع کروانے کو کنٹرول کرتا ہے، جو اسی ہارڈویئر پر OpenGL ES کے مقابلے میں 50% تک کارکردگی میں بہتری فراہم کرتا ہے۔

Metal A7 (2013) سے M4 Ultra (2025) تک تمام Apple چپس کو سپورٹ کرتا ہے۔ API مسلسل ترقی کر رہا ہے: Metal 3 (2022) نے میش شیڈرز اور رے ٹریسنگ سپورٹ شامل کیا، Metal 3.1 (2023) نے CPU اور GPU کے درمیان تیز رفتار وسائل کی شراکت، اور Metal 4 (2025) نے FP8 اور INT4 سپورٹ کے ساتھ GPU پر نیورل نیٹ ورکس کی ہارڈویئر ایکسلریشن شامل کی۔

Metal کی تاریخ

Metal کا پہلا ورژن (2014) iOS پر گرافکس رینڈرنگ کے لیے بنیادی API فراہم کرتا تھا۔ Metal 2 (2017) نے کمپیوٹ شیڈرز اور Metal Performance Shaders شامل کیے۔ Metal 3 (2022) نے MetalFX Upscaling متعارف کرایا — گیمز کے لیے Apple کا اپنا اپسکیلنگ، جو NVIDIA DLSS اور AMD FSR کا حریف ہے۔ MetalFX M2 والے Mac پر 2x تک کارکردگی میں بہتری فراہم کرتا ہے۔

Metal 4 (2025) نے مشین لرننگ اور رے ٹریسنگ پر توجہ مرکوز کی۔ Apple (2025) کے مطابق، M4 Ultra پر Metal 4 FP16 پر کمپیوٹ کاموں میں 80 TFLOPS تک فراہم کرتا ہے اور ہارڈویئر AV1 ڈی کوڈنگ کو سپورٹ کرتا ہے۔ Metal اب Apple Vision Pro پر بھی کمپوزیٹر سروس کے ذریعے عمیق مواد رینڈر کرنے کے لیے سپورٹ کیا جاتا ہے۔

Metal کا فن تعمیر: آلہ اور وسائل

Metal کا فن تعمیر واضح انتظام کے تصور کے گرد بنایا گیا ہے: ڈویلپر MTLDevice آبجیکٹ (آلہ)، MTLBuffer (ڈیٹا بفرز)، MTLTexture (ٹیکسچر) اور MTLCommandQueue (کمانڈ قطار) بناتا ہے۔ OpenGL کے برعکس، جہاں حالت سیاق و سباق میں محفوظ ہوتی ہے، Metal حالت کی آبجیکٹ استعمال کرتا ہے جو پہلے سے کمپائل کی جاتی ہیں۔

MTLDevice — API کا داخلی نقطہ

MTLDevice ایک فزیکل یا ورچوئل GPU کی نمائندگی کرتا ہے۔ تمام Metal وسائل اس آبجیکٹ کے ذریعے بنائے جاتے ہیں: بفرز، ٹیکسچرز، شیڈر لائبریریاں، پائپ لائنز۔ ایک سے زیادہ GPU والے سسٹمز (Mac Pro) پر ایک مخصوص آلہ منتخب کیا جا سکتا ہے۔ supportsFamily: طریقہ فیچر سپورٹ چیک کرتا ہے: رے ٹریسنگ، میش شیڈرز، MetalFX۔

swift
import Metal
 
// GPU آلہ حاصل کیا جا رہا ہے
guard let device = MTLCreateSystemDefaultDevice() else {
    fatalError("Metal تعاون یافتہ نہیں")
}
 
// صلاحیتوں کی جانچ کی جا رہی ہے
let supportsRayTracing = device.supportsFamily(.metal3)
let gpuName = device.name // "Apple M4 Pro"
let maxBufferSize = device.maxBufferLength

maxBufferLength پراپرٹی آلہ کے ذریعے تعاون یافتہ زیادہ سے زیادہ بفر سائز کا تعین کرتی ہے۔ Apple Silicon پر Unified Memory کے ساتھ حد 128 GB تک ہے (M4 Ultra پر)۔ یہ بفر سیگمنٹیشن کے بغیر ML اور سائنسی کمپیوٹنگ کے لیے بڑے ڈیٹاسیٹس کے ساتھ کام کرنے کی اجازت دیتا ہے۔ آلہ MTLHeap کے ذریعے میموری پول کا بھی انتظام کرتا ہے۔

MTLBuffer اور MTLTexture — GPU کے لیے ڈیٹا

MTLBuffer — GPU کے لیے قابل رسائی ایک متصل میموری علاقہ۔ بفرز ورٹیکس ڈیٹا، میٹرکس، uniform متغیرات کے لیے استعمال ہوتے ہیں۔ طریقے: shared (متحد میموری پر CPU + GPU رسائی)، private (صرف GPU، تیز)، managed (مجرد GPU کے لیے، ہم آہنگی کے ساتھ)۔ Apple Silicon پر سادگی کے لیے shared طریقہ تجویز کیا جاتا ہے۔

MTLTexture — ٹیکسچرز اور رینڈر ٹارگٹ کے لیے پکسلز کی ایک کثیر جہتی صف۔ 1D، 2D، 3D، cube اور array ٹیکسچرز کو سپورٹ کرتا ہے۔ فارمیٹس: RGBA8Unorm، BGRA8Unorm، RGBA16Float، R32Float، ASTC (کمپریسڈ)، گہرائی (depth32Float) اور سٹینسل۔ Texture Usage جھنڈے بتاتے ہیں کہ ٹیکسچر کیسے استعمال ہوگا: رینڈرنگ، شیڈر ریڈنگ، کاپی کرنا۔

MTLLibrary اور شیڈر کمپائلیشن

MTLLibrary — کمپائل شدہ GPU فنکشنز (شیڈرز) کا ایک مجموعہ۔ ایک لائبریری رن ٹائم پر MSL (Metal Shading Language) سورس کوڈ سے بنائی جا سکتی ہے یا پہلے سے کمپائل کر کے بنڈل (.metallib) میں شامل کی جا سکتی ہے۔ ابتدائی تاخیر کو ختم کرنے کے لیے پہلے سے کمپائلیشن تجویز کی جاتی ہے۔

MTLFunction ایک مخصوص شیڈر فنکشن کی نمائندگی کرتا ہے۔ ورٹیکس شیڈرز، فریگمنٹ شیڈرز، کمپیوٹ کرنل اور میش شیڈرز لائبریری کے ذریعے بنائے جاتے ہیں۔ فنکشنز GPU پر کیش کیے جاتے ہیں اور فریموں کے درمیان دوبارہ استعمال ہوتے ہیں۔ شیڈر آرگیومینٹس انڈیکس پر مبنی بائنڈنگ کے ساتھ بفرز اور ٹیکسچر سلاٹس کے ذریعے منتقل کیے جاتے ہیں۔

Metal کے ذریعے رینڈرنگ: کمانڈ بفرز

Metal میں رینڈرنگ غیر متزامن کمانڈ قطاروں کے ذریعے منظم کی جاتی ہے۔ ڈویلپر MTLCommandBuffer بناتا ہے، اس میں رینڈرنگ یا کمپیوٹ کمانڈز انکوڈ کرتا ہے اور MTLCommandQueue کو جمع کراتا ہے۔ GPU کمانڈز کو ترتیب وار انجام دیتا ہے جبکہ CPU کام جاری رکھ سکتا ہے۔ ہم آہنگی سیمافور یا completionHandler کے ذریعے ہوتی ہے۔

MTLCommandQueue اور MTLCommandBuffer

MTLCommandQueue — MTLDevice سے بنائی گئی ایک کمانڈ قطار۔ ایک ایپلیکیشن میں گرافکس، کمپیوٹ اور کاپی آپریشنز کے لیے متعدد قطاریں ہو سکتی ہیں۔ ہر قطار کمانڈز کی ترتیب وار عملدرآمد کی ضمانت دیتی ہے۔ MTLCommandBuffer — GPU کام کے ایک بیچ کے لیے کنٹینر۔ انکوڈنگ کے بعد، یہ کمٹ کیا جاتا ہے اور GPU پر عملدرآمد کیا جاتا ہے۔

swift
// مرکزی رینڈر لوپ
let commandQueue = device.makeCommandQueue()!
 
guard let commandBuffer = commandQueue.makeCommandBuffer()
else { return }
 
guard let descriptor = currentDrawable.texture.makeRenderPassDescriptor(
    attachment: 0
) else { return }
 
let encoder = commandBuffer.makeRenderCommandEncoder(
    descriptor: descriptor
)!
encoder.setRenderPipelineState(pipelineState)
encoder.drawPrimitives(type: .triangle,
    vertexStart: 0, vertexCount: 36)
encoder.endEncoding()
 
commandBuffer.present(currentDrawable)
commandBuffer.commit()

drawPrimitives طریقہ جیومیٹری رینڈرنگ انجام دیتا ہے۔ vertexCount پیرامیٹر ورٹیکس کی تعداد بتاتا ہے۔ ہر فریم کے لیے ایک نیا کمانڈ بفر بنایا جاتا ہے۔ Present رینڈرنگ کو ڈسپلے کے VSync کے ساتھ ہم آہنگ کرتا ہے۔ Metal CAMetalLayer کے ذریعے ڈسپلے ہم آہنگی کا خود بخود انتظام کرتا ہے۔

رینڈر پائپ لائن حالت

MTLRenderPipelineState — ایک کمپائل شدہ رینڈرنگ پائپ لائن حالت، جس میں ورٹیکس اور فریگمنٹ شیڈرز، ڈیپتھ-سٹینسل کنفیگریشن، بلینڈنگ اور آؤٹ پٹ پکسل فارمیٹ شامل ہے۔ پائپ لائن حالت بنانا ایک مہنگا آپریشن ہے، لہٰذا آبجیکٹس کیش کی جاتی ہیں اور دوبارہ استعمال ہوتی ہیں۔ مختلف شیڈر مجموعوں کے لیے مختلف پائپ لائن حالتیں بنائی جاتی ہیں۔

Metal 3.1 نے Immutable Samplers کے ذریعے تیز رینڈرنگ متعارف کرائی جو ٹیکسچر سیمپلنگ کو تیز کرنے کے لیے GPU پر کیش کیے جاتے ہیں۔ Metal Apple Silicon پر فی شیڈر سلاٹ 31 ٹیکسچرز تک سپورٹ کرتا ہے۔ A13 اور اس سے نیچے والے پرانے آلات پر حد 16 سلاٹس تک کم ہو جاتی ہے۔ نمونوں کی تعداد کم کرنے کے لیے ٹیکسچرز کو Texture Atlases میں یکجا کرنے کی تجویز کی جاتی ہے۔

Metal Shading Language اور شیڈرز

Metal Shading Language (MSL) GPU کمپیوٹنگ کے لیے توسیع کے ساتھ C++14 پر مبنی شیڈر پروگرامنگ زبان ہے۔ MSL ٹیمپلیٹس، فنکشن اوور لوڈنگ، نام کی جگہوں اور ایڈریس ریاضی کو سپورٹ کرتی ہے۔ شیڈرز Apple کے LLVM بیک اینڈ کے ذریعے بائنری GPU کوڈ میں کمپائل ہوتے ہیں۔

ورٹیکس اور فریگمنٹ شیڈرز

ورٹیکس شیڈر ہر ورٹیکس کو پروسیس کرتا ہے: کوآرڈینیٹ کو ورلڈ اسپیس سے اسکرین اسپیس میں تبدیل کرتا ہے، نارملز کا حساب لگاتا ہے اور فریگمنٹ شیڈر کو ڈیٹا بھیجتا ہے۔ فریگمنٹ شیڈر ہر پکسل کا رنگ طے کرتا ہے: ٹیکسچرز، لائٹنگ اور پوسٹ پروسیسنگ اثرات لگاتا ہے۔

cpp
// Metal ورٹیکس شیڈر
#include <metal_stdlib>
using namespace metal;
 
struct VertexIn {
    float3 position [[attribute(0)]];
    float3 normal   [[attribute(1)]];
};
 
struct VertexOut {
    float4 position [[position]];
    float3 worldNormal;
};
 
vertex VertexOut vertexMain(
    VertexIn in [[stage_in]],
    constant float4x4 &mvp [[buffer(0)]]
) {
    VertexOut out;
    out.position = mvp * float4(in.position, 1.0);
    out.worldNormal = in.normal;
    return out;
}

[[attribute(N)]] صفات MTLVertexDescriptor میں متعین ورٹیکس فارمیٹس سے مطابقت رکھتی ہیں۔ [buffer(0)] بفر MVP میٹرکس کو uniform متغیر کے طور پر منتقل کرتا ہے۔ ورٹیکس پوزیشن کو راسٹرائزر کو بھیجنے کے لیے [[position]] سے نشان زد کیا جانا چاہیے۔ تمام MSL ویکٹر اقسام — float2، float3، float4 — GPU ہارڈویئر رجسٹرز پر میپ ہوتی ہیں۔

کمپیوٹ کرنل

کمپیوٹ شیڈر (کرنل) ایک GPU فنکشن ہے جو گرافکس پائپ لائن کے باہر عملدرآمد ہوتا ہے۔ کرنل فنکشنز kernel کوالیفائر سے نشان زد ہوتے ہیں اور تھریڈز میں عملدرآمد ہوتے ہیں جو تھریڈ گروپس میں منظم ہوتے ہیں۔ کمپیوٹ شیڈرز تصویری پروسیسنگ، فزکس سمولیشن، ML اور پوسٹ پروسیسنگ کے لیے استعمال ہوتے ہیں۔

cpp
// تصویری دھندلاپن کے لیے کمپیوٹ کرنل
kernel void blurKernel(
    texture2d<half> input  [[texture(0)]],
    texture2d<half> output [[texture(1)]],
    constant float &radius  [[buffer(0)]],
    uint2 gid [[thread_position_in_grid]]
) {
    if (gid.x >= input.get_width() ||
        gid.y >= input.get_height()) { return; }
    half4 color = input.read(gid);
    output.write(color, gid);
}

gid [[thread_position_in_grid]] پیرامیٹر میں منفرد تھریڈ انڈیکس ہوتا ہے۔ Texture2D<type> پکسل قسم کے مطابق مخصوص ہوتا ہے: half (FP16)، float (FP32)۔ کمپیوٹ کرنل M4 Ultra پر 1 بلین سے زیادہ تھریڈز کے گرڈ سائز کے ساتھ لانچ کیے جا سکتے ہیں۔ Apple Silicon GPU پر زیادہ سے زیادہ تھریڈ گروپ سائز 1024 تھریڈز ہے۔

کارکردگی اور Metal Performance Shaders

Metal Performance Shaders (MPS) Apple کے فراہم کردہ بہتر کردہ GPU فنکشنز کی لائبریری ہے۔ MPS میں کنولوشنل نیورل نیٹ ورکس (MPSNNConvolution)، میٹرکس ضرب (MPSMatrixMultiplication)، ترتیب (MPSParallelSort) اور تصویری پروسیسنگ (MPSImageGaussianBlur) شامل ہیں۔ تمام فنکشنز مخصوص Apple GPU کے لیے بہتر کیے گئے ہیں۔

MetalFX اپسکیلنگ

MetalFX ایک اپسکیلنگ اور اینٹی ایلیاسنگ ٹیکنالوجی ہے، جو NVIDIA DLSS اور AMD FSR کی حریف ہے۔ MetalFX دو طریقے پیش کرتا ہے: Spatial (FSR 2 الگورتھم کے ذریعے مقامی اپسکیلنگ) اور Temporal (موشن ویکٹر کے ساتھ وقتی اپسکیلنگ)۔ Temporal MetalFX 1440p رینڈر سے نیٹیو 4K کے قریب معیار فراہم کرتا ہے۔

Apple (2025) کے مطابق، M4 Max پر MetalFX Temporal نیٹیو ریزولوشن سے بصری طور پر الگ نہ ہونے والے معیار کو برقرار رکھتے ہوئے گیمز میں 3x تک کارکردگی میں بہتری فراہم کرتا ہے۔ MetalFX مخصوص ٹینسر کور کے بغیر، Metal 3 کو سپورٹ کرنے والے کسی بھی GPU پر کام کرتا ہے۔ پروجیکٹ میں MetalFX کو ضم کرنے میں تقریباً 50 لائنز کوڈ لگتا ہے۔

Metal میں رے ٹریسنگ

رے ٹریسنگ Metal 3 میں ہارڈویئر ایکسلریشن یونٹس (Ray Tracing Accelerators) کے ساتھ M3، M4 اور A17 Pro چپس پر سپورٹ کی جاتی ہے۔ Metal BVH بنانے کے لیے MTLAccelerationStructure اور شیڈرز میں رے انٹرسیکشن کے لیے MTLIntersectionFunction فراہم کرتا ہے۔ لاکھوں مثلثوں والے بڑے مناظر ملی سیکنڈز میں BVH میں کمپائل ہوتے ہیں۔

Apple (2025) کے مطابق، M4 Ultra پر ہارڈویئر رے ٹریسنگ فی سیکنڈ 40 بلین رے انٹرسیکشن (Giga rays/s) تک انجام دیتی ہے۔ یہ M1 Ultra پر سافٹ ویئر رے ٹریسنگ سے 4 گنا تیز ہے۔ Metal RT انٹرسیکشن کوریز، ڈائنامک جیومیٹری اور حقیقت پسندانہ اینیمیشن کے لیے موشن بلر کو سپورٹ کرتا ہے۔ رے ٹریسنگ کے ساتھ ریفلیکشنز اور شیڈوز 60 FPS پر ریئل ٹائم میں کام کرتے ہیں۔

متحد میموری اور Zero-Copy

Unified Memory Apple Silicon کا فن تعمیر ہے جہاں CPU اور GPU ایک ہی فزیکل میموری شیئر کرتے ہیں۔ Apple Silicon پر Metal کو CPU اور GPU کے درمیان ڈیٹا کاپی کرنے کی ضرورت نہیں ہوتی: shared طریقے میں MTLBuffer بغیر کاپی کیے دونوں پروسیسرز کے لیے قابل رسائی ہے۔ یہ روایتی GPU (PCIe منتقلی) کی اہم رکاوٹ کو ختم کرتا ہے۔

Metal میں Zero-Copy CPU کو بفر میں ڈیٹا لکھنے اور GPU کو بغیر تاخیر کے اسے پڑھنے کی اجازت دیتا ہے۔ Apple (2025) کے مطابق، یہ گیمز اور ML کاموں میں مجرد GPU کے مقابلے میں 30–50% کارکردگی میں بہتری فراہم کرتا ہے۔ مجرد GPU (Radeon کے ساتھ Mac Pro) کے لیے Metal میموری بیریئرز کے ذریعے خودکار ہم آہنگی کے ساتھ managed طریقہ سپورٹ کرتا ہے۔

اکثر پوچھے گئے سوالات

Metal کیا ہے اور اس کی ضرورت کیوں ہے؟

Metal Apple کا نچلی سطح کا GPU API ہے جو کم سے کم CPU اوور ہیڈ فراہم کرتا ہے۔ یہ iOS، macOS اور tvOS پر 3D گرافکس، ML حسابات، تصویری پروسیسنگ اور سمولیشنز کے لیے استعمال ہوتا ہے۔ یہ OpenGL اور OpenCL کی جگہ لیتا ہے۔

Metal، Vulkan سے کیسے مختلف ہے؟

Metal صرف Apple آلات پر کام کرتا ہے، Unified Memory اور Metal Performance Shaders کے ساتھ مربوط ہے۔ Vulkan Windows، Android اور Linux کے لیے ایک کراس پلیٹ فارم API ہے۔ دونوں API کارکردگی میں ایک جیسے ہیں، لیکن Metal کا Apple Silicon پر اوور ہیڈ کم ہے۔

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

ہاں، Metal 3 کے ساتھ M3، M4 اور A17 Pro چپس پر ہارڈویئر رے ٹریسنگ دستیاب ہے۔ Metal شیڈرز میں MTLAccelerationStructure اور انٹرسیکشن کوری سپورٹ فراہم کرتا ہے۔ کارکردگی — M4 Ultra پر 40 Giga rays/s تک۔

MetalFX Upscaling کیا ہے؟

MetalFX Spatial اور Temporal طریقوں کے ساتھ Apple کی اپسکیلنگ ٹیکنالوجی ہے۔ یہ ٹینسر کور کے بغیر، Metal 3 والے کسی بھی GPU پر کام کرتی ہے۔ M4 Max پر نیٹیو 4K کے قریب معیار کے ساتھ 3x تک کارکردگی میں بہتری فراہم کرتی ہے۔

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

نچلی سطح کے وسائل کے انتظام کی وجہ سے داخلے کی رکاوٹ SceneKit یا Unity سے زیادہ ہے۔ Apple Metal Sample Code اور developer.apple.com پر سبق فراہم کرتا ہے۔ بنیادی مثلث رینڈرنگ کے لیے تقریباً 200 لائنز کوڈ درکار ہے۔

خلاصہ

  • Metal — کم سے کم CPU اوور ہیڈ کے ساتھ Apple کا نچلی سطح کا GPU API
  • MTLDevice اور MTLCommandQueue — واضح وسائل کے انتظام کے ساتھ فن تعمیر کی بنیاد
  • MTLCommandBuffer اور انکوڈرز ملٹی تھریڈڈ GPU کمانڈ ریکارڈنگ کو قابل بناتے ہیں
  • Metal Shading Language (C++14) ورٹیکس، فریگمنٹ، کمپیوٹ اور میش شیڈرز کو سپورٹ کرتی ہے
  • MetalFX — Metal 3 والے کسی بھی GPU پر 3x تک بہتری کے ساتھ اپسکیلنگ
  • ہارڈویئر رے ٹریسنگ M3/M4/A17 Pro پر دستیاب
  • متحد میموری Apple Silicon پر CPU اور GPU کے درمیان ڈیٹا کاپی ختم کرتی ہے

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

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

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

مزید پڑھیں