Vulkan, Khronos Group konsorsiyumu tarafından geliştirilen, GPU üzerinde grafik ve hesaplama için çapraz platform bir API'dir. Vulkan, donanım üzerinde düşük seviyeli kontrol, çok iş parçacıklı komut oluşturma ve öngörülebilir performans sağlar. Khronos Group'a (2026) göre, Vulkan modern Android cihazların %98'inde desteklenmektedir.
Önemli Noktalar
Vulkan, grafik işleme birimleriyle çalışmak için düşük seviyeli, çapraz platform bir API'dir ve ilk olarak 2016'da Khronos Group tarafından yayımlanmıştır. Vulkan, OpenGL'in halefi olarak önemli ölçüde daha düşük CPU yükü, öngörülebilir performans ve çok iş parçacıklı komut oluşturma yeteneği sunar.
Sürücünün CPU üzerinde doğrulama ve senkronizasyon gerçekleştirdiği OpenGL'in aksine, Vulkan kaynak yönetimini geliştiriciye bırakır. Bellek ayırma, semaforlar ve bariyerler aracılığıyla senkronizasyon, pipeline oluşturma — tüm bunlar açıkça kontrol edilir. Bu yaklaşım, CPU sınırlı senaryolarda %50'ye varan performans iyileştirmesi sağlar.
Vulkan, Windows, Linux, Android, iOS (MoltenVK aracılığıyla), macOS (MoltenVK), Nintendo Switch ve konsollarda desteklenir. Khronos Group'a (2026) göre API, NVIDIA, AMD, Intel, Qualcomm (Adreno), ARM (Mali) ve Apple (Metal katmanı aracılığıyla) GPU'larına sahip cihazlarda çalışır. Vulkan 1.4 (2026), Mesh Shader'lar ve Video Encode API desteği ekledi.
Başlangıçta Vulkan, “glNext” kod adıyla (OpenGL'in halefi) geliştirildi. Vulkan 1.0 (2016), açık bellek yönetimi, SPIR-V shader'lar ve çok iş parçacıklı kuyruklar içeren temel bir API sağladı. Vulkan 1.1 (2018), Subgroup Operations ve 16 bitlik türler için destek ekledi. Vulkan 1.2 (2020), Buffer Device Address ve Timeline Semaphores'ı tanıttı.
Vulkan 1.3 (2022), Dynamic Rendering ve Graphics Pipeline Library'yi standartlaştırdı. Vulkan 1.4 (2026), Mesh Shader desteğini zorunlu hale getirdi ve H.264/HEVC/AV1 donanım kodlaması için Video Encode/Decode API ekledi. Khronos'a (2026) göre Vulkan 1.4, tüm yeni NVIDIA RTX 50xx, AMD RX 9000 ve Intel Arc B serisi GPU'larda desteklenmektedir.
Vulkan mimarisi bir donanım soyutlama katmanı (HW katmanı) üzerine inşa edilmiştir. Uygulama, mantıksal bir cihaz (VkDevice) aracılığıyla fiziksel bir cihazla (VkPhysicalDevice) etkileşime girer. Komutlar, her biri belirli bir kuyruk ailesine (graphics, compute, transfer) ait olan kuyruklara (VkQueue) gönderilir.
VkInstance, doğrulama katmanları ve uzantılar hakkında bilgi depolayan Vulkan kök nesnesidir. VkPhysicalDevice fiziksel GPU'yu temsil eder ve özelliklerini, bellek yığınlarını ve kuyruk ailelerini sorgulamaya olanak tanır. VkDevice, açıkça istenen kuyruklar ve uzantılarla mantıksal bir cihazdır.
// Bir Vulkan mantıksal cihazı oluşturma
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 işlevi, belirtilen kuyruklarla mantıksal bir cihaz oluşturur. VkQueue, komut göndermek için bir kuyruk tanıtıcısıdır. İlgili bayraklar kuyruk ailesi tarafından destekleniyorsa, tek bir kuyruk grafik, hesaplama ve kopyalama için kullanılabilir. Kuyruk önceliği (0.0–1.0), rekabet durumunda yürütme sırasını etkiler.
Vulkan'da bellek, VkDeviceMemory aracılığıyla açıkça ayrılır. Geliştirici, fiziksel cihazdan bellek türlerini (HOST_VISIBLE, DEVICE_LOCAL) sorgular ve bloklar ayırır. Arabellekler (VkBuffer) ve dokular (VkImage) kendi belleğine sahip değildir — vkBindBufferMemory aracılığıyla ayrılmış bloklara bağlanırlar.
Vulkan Memory Allocator (VMA), bellek yönetimini basitleştiren AMD'den bir kütüphanedir. VMA, küçük ayırmaları otomatik olarak büyük bloklarda gruplandırır, birleştirmeyi yönetir ve uygun bellek türünü seçer. AMD'ye (2025) göre VMA, manuel yönetime kıyasla bellek ayırma sayısını 50–100 kat azaltır.
VkCommandPool, komut arabellekleri için belleği yönetir. Arabellekler (VkCommandBuffer) CPU'da kaydedilir ve vkQueueSubmit aracılığıyla GPU'ya gönderilir. Vulkan, birincil ve ikincil arabellekleri destekler: birinciller doğrudan gönderilir, ikinciller çok iş parçacıklı komut oluşturma için birincillerden çağrılabilir.
Komut kaydı vkBeginCommandBuffer ile başlar ve vkEndCommandBuffer ile biter. Bunların arasında, işleme komutları kaydedilir: vkCmdDraw, vkCmdDispatch, vkCmdCopyBuffer ve senkronizasyon için vkCmdPipelineBarrier. Her kare için havuz sıfırlama yoluyla havuzlama ile yeni bir komut arabelleği oluşturulur.
Vulkan'da render, pipeline'lar (VkPipeline) aracılığıyla düzenlenir. Pipeline durumunun küresel olarak değiştirildiği OpenGL'in aksine, Vulkan, tüm aşamaları (köşe girişi, shader'lar, rasterleştirme, derinlik-stensil ve harmanlama) içeren önceden derlenmiş bir pipeline olan VkPipeline'ı kullanır.
VkGraphicsPipelineCreateInfo, tam pipeline'ı tanımlar: köşe ve parçacık shader'ları, topoloji (triangle list, triangle strip), rasterleştirici (fill mode, cull mode), çoklu örnekleme, derinlik-stensil testleri, harmanlama ve görüntü alanı ayarları. Pipeline bir kez oluşturulur ve yeniden kullanılır — durumu değiştirmek yeni bir pipeline veya dinamik durum gerektirir.
// Grafik pipeline'ını ayarlama
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);
Dinamik Durum (VK_DYNAMIC_STATE_VIEWPORT, VK_DYNAMIC_STATE_SCISSOR), yeni bir pipeline oluşturmadan belirli parametrelerin değiştirilmesine olanak tanır. Vulkan 1.4, harmanlama sabitlerini, derinlik yanlılığını ve topolojiyi anında yönetmek için Dynamic State 3 (VK_EXT_extended_dynamic_state_3) desteğini zorunlu hale getirerek bir projedeki pipeline sayısını azaltır.
VkRenderPass, işleme geçişlerinin yapısını tanımlar: hangi eklerin kullanıldığı, nasıl temizlendikleri ve yüklendikleri. Dynamic Rendering (VK_KHR_dynamic_rendering, Vulkan 1.4'ten itibaren zorunlu), süreci basitleştirir: render geçişi, önceden bir VkRenderPass nesnesi olmadan komut arabelleğinde vkCmdBeginRendering aracılığıyla anında oluşturulur.
Khronos'a (2026) göre Dynamic Rendering, Vulkan başlatma kodunu %30–40 oranında azaltır ve pipeline permütasyonlarının sayısını düşürür. Karmaşık ertelenmiş işleme teknikleri (Deferred Shading) için, G-arabelleği ve aydınlatma için birden çok alt geçişli klasik VkRenderPass kullanmak hâlâ uygundur.
SPIR-V, Khronos tarafından geliştirilen Vulkan'da evrensel bir ikili shader formatıdır. Shader'lar GLSL, HLSL veya Zink dilinde yazılabilir ve glslangValidator, dxc veya Google Shaderc aracılığıyla SPIR-V'ye derlenebilir. Vulkan, shader'ları kaynak kodunda kabul etmez — yalnızca ikili SPIR-V.
Vulkan için GLSL, standart OpenGL GLSL'den farklıdır. Yerleşik değişkenler yerine, açık set ve bağlama numaralarına sahip bloklar (layout) kullanılır. Köşe öznitelikleri location aracılığıyla, uniform'lar uniform bloklar veya arabellekler aracılığıyla belirtilir. Push constants (128 bayta kadar), arabellekler olmadan hızlı veri aktarımı için kullanılabilir.
// Vulkan/GLSL köşe shader'ı
#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;
}
Niteleyiciler layout(set = N, binding = M), Vulkan GLSL ile OpenGL arasındaki temel bir farktır. Set, bir tanımlayıcı setine (VkDescriptorSet) karşılık gelir, binding ise belirli bir kaynağa (arabellek, doku, örnekleyici) karşılık gelir. Setlere ayırma, tek tek kaynakları bağlamadan draw call'lar arasında kaynak setlerinin verimli bir şekilde değiştirilmesine olanak tanır.
VkDescriptorSet, shader'lara bağlı kaynakların (arabellekler, dokular, örnekleyiciler) bir grubudur. Tanımlayıcı düzeni, kaynak türlerini ve bağlama numaralarını tanımlar. Tanımlayıcı setleri vkUpdateDescriptorSets aracılığıyla güncellenir ve draw call'lar arasında yeniden kullanılır. Vulkan 1.4, GPU'dan tanımlayıcılara doğrudan erişim için VK_EXT_descriptor_buffer'ı destekler.
Push Constants, tanımlayıcılar oluşturmadan shader'lara küçük veri hacimlerinin (128 bayta kadar) hızlı aktarımı için bir mekanizmadır. Push constants, komut arabelleğinde vkCmdPushConstants aracılığıyla ayarlanır. Khronos'a (2025) göre, uniform arabellekler yerine push constants kullanmak, kare başına 10 binden fazla draw call oranında CPU yükünü %10–15 oranında azaltır.
Vulkan, tüm büyük platformlarda çalışan tek API'dir: Windows (resmi ICD sürücüsü aracılığıyla), Linux (RADV, AMDVLK, NVIDIA), Android (Vulkan 1.3+, Android 10'dan itibaren zorunlu) ve Apple cihazlarında MoltenVK (Vulkan'dan Metal'e çeviri katmanı) aracılığıyla.
Android'de Vulkan, Android 10 ve sonrası için zorunludur. Google, yeni projeler, özellikle yüksek performanslı oyunlar ve ARCore aracılığıyla AR uygulamaları için Vulkan'ı önerir. Qualcomm Adreno ve ARM Mali, Adreno 8xx ve Mali-G720'de donanım ışın izleme ile tam Vulkan 1.3 desteği sağlar.
Google'a (2026) göre, Android 10+ çalıştıran Android cihazların %98'i Vulkan'ı desteklemektedir. Geriye dönük uyumluluk için, OpenGL ES'yi Vulkan'a çeviren ANGLE (Almost Native Graphics Layer Engine) mevcuttur. Bu, eski OpenGL uygulamalarının bir Vulkan sürücüsünde %20'ye varan performans iyileştirmesiyle çalıştırılmasına olanak tanır.
Android'de Vulkan, enerji verimliliği için yüksek önceliğe sahiptir: Vulkan uygulamaları, Adreno 7xx+ cihazlarda aynı grafik yükü altında OpenGL ES'ye kıyasla %25–40 daha az enerji tüketir. Bu, Vulkan'ı mobil cihazlarda oyunlar için tercih edilen API haline getirir.
MoltenVK, LunarG ve Valve tarafından geliştirilen, Metal üzerinde bir Vulkan uygulamasıdır. MoltenVK, Vulkan API çağrılarını Metal'e çevirir ve iOS ve macOS'ta Vulkan 1.2'yi destekler. MoltenVK'nın performansı yerel Metal'e yakındır: çeviri yükü senaryoya bağlı olarak %5–15'tir.
LunarG'ye (2025) göre MoltenVK, macOS'ta Windows oyunlarını çalıştırmak için CrossOver'da (Mac için Wine) kullanılır. macOS'ta Dota 2, Civilization VI ve Baldur's Gate 3, M3/M4'te 30–60 FPS performansıyla MoltenVK aracılığıyla çalışır. MoltenVK, performans iyileştirmesi için MetalFX yükseltmeyi destekler.
VK_KHR_ray_tracing, Vulkan'da donanım ışın izleme için bir uzantıdır ve Vulkan 1.4'ten itibaren zorunludur. RT çekirdekli GPU'larda desteklenir: NVIDIA RTX 20xx/30xx/40xx/50xx, AMD RX 6000+/9000, Intel Arc A/B. Vulkan RT, VkAccelerationStructure, VkRayTracingPipeline ve Shader Binding Table sağlar.
Vulkan Ray Tracing, gerçek zamanlı yansımaları, gölgeleri, ortam yokluğunu ve küresel aydınlatmayı destekler. Khronos'a (2026) göre NVIDIA RTX 5090'da Vulkan Ray Tracing, referans kalitesindeki sahnelerde 100 Giga rays/s'ye kadar ulaşır. Taşınabilir platformlar için Vulkan RT, bulanıklık azaltma ve zamansal gürültü giderme yoluyla ölçeklenir.
Sıkça Sorulan Sorular
Vulkan, açık kaynak yönetimi ile düşük seviyeli çapraz platform bir GPU API'sidir. OpenGL'in aksine, bellek, senkronizasyon ve çoklu iş parçacığı üzerinde kontrol sağlayarak CPU sınırlı senaryolarda %50'ye varan performans iyileştirmesi sunar.
Vulkan, Windows, Linux, Android, Nintendo Switch'te ve iOS/macOS'ta MoltenVK (Metal'e çeviri) aracılığıyla çalışır. NVIDIA, AMD, Intel, Qualcomm, ARM ve Apple (MoltenVK aracılığıyla) GPU'larında desteklenir.
SPIR-V, Vulkan için evrensel bir ikili shader formatıdır. Shader'lar GLSL veya HLSL'de yazılır, SPIR-V'ye derlenir ve Vulkan'a beslenir. Bu, shader dili bağımsızlığı ve öngörülebilir derleme performansı sağlar.
Evet, VK_KHR_ray_tracing (Vulkan 1.4'ten itibaren zorunlu bir uzantı) aracılığıyla destekler. RT çekirdekli GPU'larda desteklenir: NVIDIA RTX, AMD RX 6000+, Intel Arc. Vulkan RT, BVH hızlandırma yapıları, Shader Binding Table ve donanım ışın kesişimleri sağlar.
Açık bellek yönetimi, senkronizasyon ve pipeline'lar nedeniyle giriş engeli OpenGL veya DirectX 11'den daha yüksektir. Khronos, Vulkan Tutorial, Vulkan Samples ve Vulkan Guide sağlar. İlk üçgen yaklaşık 500 satır kod gerektirir.
Özet
Anahtar teslim bir mobil uygulama geliştireceğiz
IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.
Ayrıca okuyun