Vulkan — çapraz platform API'si ve render nedir

Yazar: IT Sectr Yayınlanma: 2026-05-03 Okuma süresi: 9 dk

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 — donanım üzerinde düşük seviyeli kontrol sağlayan çapraz platform GPU API'si
  • VkDevice ve VkQueue, GPU'ya çok iş parçacıklı komut gönderimini sağlar
  • SPIR-V — GLSL ve HLSL'den derlenen evrensel ikili shader formatı
  • Vulkan Memory Allocator açık GPU bellek ayırmayı yönetir
  • Vulkan Ray Tracing (VK_KHR_ray_tracing) donanım hızlandırmalı ışın izlemeyi destekler

Vulkan nedir?

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.

Vulkan'ın Tarihi

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: Cihaz ve Kuyruklar

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, VkDevice ve VkQueue

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.

cpp
// 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.

VkMemory ve VkBuffer — Bellek Yönetimi

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 ve VkCommandBuffer

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 ile Render: Pipeline ve Komutlar

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.

VkPipeline — Render Pipeline'ı

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.

cpp
// 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.

Render Pass ve Dynamic Rendering

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.

Vulkan'da Shader'lar: SPIR-V ve GLSL

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'da GLSL

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.

glsl
// 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.

Tanımlayıcılar ve Tanımlayıcı Setleri

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.

Farklı Platformlarda Vulkan

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'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 Aracılığıyla Apple'da Vulkan

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.

Vulkan Ray Tracing

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 nedir ve OpenGL'den farkı nedir?

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 hangi platformlarda çalışır?

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.

Vulkan'da SPIR-V nedir?

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.

Vulkan ışın izlemeyi destekliyor mu?

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.

Vulkan kullanmaya başlamak zor mu?

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

  • Vulkan — Khronos Group'tan çapraz platform düşük seviyeli GPU API'si
  • Açık yönetim bellek, senkronizasyon ve kuyruklar CPU yükünü azaltır
  • VkPipeline — grafik ve hesaplama için önceden derlenmiş pipeline
  • SPIR-V — GLSL ve HLSL'den derlenen ikili shader formatı
  • Dynamic Rendering (Vulkan 1.4) VkRenderPass olmadan Render Pass oluşturmayı basitleştirir
  • MoltenVK, Metal aracılığıyla iOS ve macOS'ta Vulkan'ı etkinleştirir
  • Vulkan 1.4 Mesh Shader'lar, Video Encode API ve zorunlu ışın izleme ekledi

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.

Projeyi tartış

Ayrıca okuyun