Vulkan — multiplatformní API pro práci s grafikou a výpočty na GPU, vyvinuté konsorciem Khronos Group. Vulkan poskytuje nízkoúrovňovou kontrolu nad hardwarem, vícevláknové generování příkazů a předvídatelný výkon. Podle údajů Khronos Group (2026) je Vulkan podporován na 98 % moderních zařízení s Androidem.
Hlavní
Vulkan — nízkoúrovňové, multiplatformní API pro práci s grafickými procesory, poprvé vydané Khronos Group v roce 2016. Vulkan nahradil OpenGL a nabízí výrazně nižší režii CPU, předvídatelný výkon a možnost vícevláknového generování příkazů.
Na rozdíl od OpenGL, kde ovladač provádí kontroly a synchronizaci na CPU, Vulkan přenáší správu zdrojů na vývojáře. Přidělování paměti, synchronizace pomocí semaforů a bariér, vytváření pipeline — vše je řízeno explicitně. Tento přístup poskytuje zvýšení výkonu až o 50 % v CPU-bound scénářích.
Vulkan je podporován na Windows, Linux, Android, iOS (přes MoltenVK), macOS (MoltenVK), Nintendo Switch a konzolích. Podle údajů Khronos Group (2026) API funguje na zařízeních s GPU od NVIDIA, AMD, Intel, Qualcomm (Adreno), ARM (Mali) a Apple (přes vrstvu Metal). Vulkan 1.4 (2026) přidal podporu pro Mesh Shaders a Video Encode API.
Původně byl Vulkan vyvíjen pod kódovým názvem „glNext” — nástupce OpenGL. Vulkan 1.0 (2016) poskytl základní API s explicitní správou paměti, shadery SPIR-V a vícevláknovými frontami. Vulkan 1.1 (2018) přidal Subgroup Operations a podporu 16bitových typů. Vulkan 1.2 (2020) zavedl Buffer Device Address a Timeline Semaphores.
Vulkan 1.3 (2022) standardizoval Dynamic Rendering a Graphics Pipeline Library. Vulkan 1.4 (2026) učinil podporu Mesh Shaders povinnou a přidal Video Encode/Decode API pro hardwarové kódování H.264/HEVC/AV1. Podle Khronos (2026) je Vulkan 1.4 podporován na všech nových GPU NVIDIA RTX 50xx, AMD RX 9000 a Intel Arc B-série.
Architektura Vulkan je postavena na vrstvě abstrakce hardwaru (HW layer). Aplikace komunikuje s fyzickým zařízením (VkPhysicalDevice) prostřednictvím logického zařízení (VkDevice). Příkazy jsou odesílány do front (VkQueue), každá patří do určité rodiny front (graphics, compute, transfer).
VkInstance — kořenový objekt Vulkan, který ukládá informace o validačních vrstvách a rozšířeních. VkPhysicalDevice představuje fyzickou GPU a umožňuje dotazování na její vlastnosti, memory heaps a queue families. VkDevice — logické zařízení s explicitně požadovanými frontami a rozšířeními.
// Vytvoření logického zařízení 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);
Funkce vkCreateDevice vytváří logické zařízení s uvedenými frontami. VkQueue — deskriptor fronty pro odesílání příkazů. Jedna fronta může být použita pro grafiku, výpočty a kopírování, pokud příslušné příznaky podporuje rodina front. Priorita fronty (0.0–1.0) ovlivňuje pořadí provádění při konkurenci.
Ve Vulkan je paměť přidělována explicitně prostřednictvím VkDeviceMemory. Vývojář požaduje od fyzického zařízení memory types (HOST_VISIBLE, DEVICE_LOCAL) a přiděluje bloky. Buffery (VkBuffer) a textury (VkImage) nemají vlastní paměť — jsou připojeny k přiděleným blokům přes vkBindBufferMemory.
Vulkan Memory Allocator (VMA) — knihovna od AMD, která zjednodušuje správu paměti. VMA automaticky seskupuje malé alokace do velkých bloků, spravuje defragmentaci a vybírá vhodný memory type. Podle AMD (2025) VMA snižuje počet alokací paměti 50–100krát ve srovnání s ruční správou.
VkCommandPool spravuje paměť pro příkazové buffery. Buffery (VkCommandBuffer) se zapisují na CPU a odesílají na GPU přes vkQueueSubmit. Vulkan podporuje primary a secondary buffery: primary se odesílají přímo, secondary mohou být volány z primary pro vícevláknové sestavení příkazů.
Zápis příkazů začíná vkBeginCommandBuffer a končí vkEndCommandBuffer. Mezi nimi se zapisují příkazy renderování: vkCmdDraw, vkCmdDispatch, vkCmdCopyBuffer a vkCmdPipelineBarrier pro synchronizaci. Pro každý snímek je vytvořen nový příkazový buffer s resetem poolu.
Renderování ve Vulkan je organizováno přes pipeline (VkPipeline). Na rozdíl od OpenGL, kde se stav pipeline mění globálně, Vulkan používá VkPipeline — předem zkompilovanou pipeline, která zahrnuje všechny fáze: vstup vrcholů, shadery, rasterizaci, depth-stencil a blending.
VkGraphicsPipelineCreateInfo popisuje kompletní pipeline: vertex a fragment shadery, topologii (triangle list, triangle strip), rasterizátor (fill mode, cull mode), multisampling, depth-stencil testy, blending a nastavení viewport. Pipeline se vytvoří jednou a znovu používá — změna stavu vyžaduje novou pipeline nebo dynamic state.
// Konfigurace grafické pipeline
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);
Dynamic State (VK_DYNAMIC_STATE_VIEWPORT, VK_DYNAMIC_STATE_SCISSOR) umožňuje měnit určité parametry bez vytváření nové pipeline. Vulkan 1.4 učinil podporu Dynamic State 3 (VK_EXT_extended_dynamic_state_3) povinnou pro správu blend constants, depth bias a topologie za běhu, což snižuje počet pipeline v projektu.
VkRenderPass popisuje strukturu renderovacích průchodů: které attachment se používají, jak se čistí a načítají. Dynamic Rendering (VK_KHR_dynamic_rendering, povinný od Vulkan 1.4) zjednodušuje proces: render pass se vytváří za běhu v příkazovém bufferu přes vkCmdBeginRendering, bez předchozího objektu VkRenderPass.
Podle Khronos (2026) Dynamic Rendering snižuje množství inicializačního kódu Vulkan o 30–40 % a snižuje počet pipeline permutací. Pro složité techniky odloženého renderování (Deferred Shading) je stále vhodné používat klasický VkRenderPass s několika subpassy pro G-buffer a osvětlení.
SPIR-V — univerzální binární formát shaderů ve Vulkan, vyvinutý Khronos. Shadery mohou být napsány v GLSL, HLSL nebo jazyce Zink a zkompilovány do SPIR-V přes glslangValidator, dxc nebo Google Shaderc. Vulkan nepřijímá shadery ve zdrojovém kódu — pouze binární SPIR-V.
GLSL pro Vulkan se liší od standardního OpenGL GLSL. Používají se bloky (layout) s explicitním uvedením set a binding čísel, nikoli vestavěné proměnné. Atributy vrcholů se zadávají přes location, uniformy přes uniform blocks nebo buffery. Push constants (až 128 bajtů) jsou k dispozici pro rychlý přenos dat bez bufferů.
// Vertex shader 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;
}
Kvalifikátory layout(set = N, binding = M) — klíčový rozdíl Vulkan GLSL od OpenGL. Set odpovídá deskriptorové sadě (VkDescriptorSet), binding — konkrétnímu zdroji (buffer, textura, sampler). Rozdělení na sety umožňuje efektivně přepínat sady zdrojů mezi draw calls bez vázání jednotlivých zdrojů.
VkDescriptorSet — skupina zdrojů (buffery, textury, samplery) připojených k shaderům. Layout deskriptorů popisuje typy zdrojů a jejich binding čísla. Deskriptorové sady se aktualizují přes vkUpdateDescriptorSets a znovu používají mezi draw calls. Vulkan 1.4 podporuje VK_EXT_descriptor_buffer pro přímý přístup k deskriptorům z GPU.
Push Constants — mechanismus rychlého přenosu malých objemů dat (až 128 bajtů) do shaderů bez vytváření deskriptorů. Push constants se zadávají přes vkCmdPushConstants v příkazovém bufferu. Podle Khronos (2025) použití push constants místo uniform buffers snižuje režii CPU o 10–15 % při frekvenci draw calls přes 10 tisíc za snímek.
Vulkan je jediné API, které funguje na všech hlavních platformách: Windows (přes oficiální ovladač ICD), Linux (RADV, AMDVLK, NVIDIA), Android (Vulkan 1.3+, povinný od Android 10) a na zařízeních Apple přes MoltenVK — překladovou vrstvu Vulkan → Metal.
Na Android je Vulkan povinný pro Android 10 a novější. Google doporučuje Vulkan pro nové projekty, zejména vysoce výkonné hry a AR aplikace přes ARCore. Qualcomm Adreno a ARM Mali poskytují plnou podporu Vulkan 1.3 s hardwarovým sledováním paprsků na Adreno 8xx a Mali-G720.
Podle Google (2026) 98 % zařízení s Androidem s Android 10+ podporuje Vulkan. Pro zpětnou kompatibilitu je k dispozici ANGLE (Almost Native Graphics Layer Engine), který překládá OpenGL ES do Vulkan. To umožňuje spouštět staré OpenGL aplikace na ovladači Vulkan se zvýšením výkonu až o 20 %.
Na Android má Vulkan vysokou prioritu pro energetickou účinnost: Vulkan aplikace spotřebovávají o 25–40 % méně energie ve srovnání s OpenGL ES při stejném grafickém zatížení na zařízeních s Adreno 7xx+. To činí Vulkan preferovaným API pro hry na mobilních zařízeních.
MoltenVK — implementace Vulkan nad Metal, vyvinutá LunarG a Valve. MoltenVK překládá volání Vulkan API do Metal, podporuje Vulkan 1.2 na iOS a macOS. Výkon MoltenVK se blíží nativnímu Metal: režie překladu činí 5–15 % v závislosti na scénáři.
Podle LunarG (2025) je MoltenVK používán v CrossOver (Wine pro Mac) ke spouštění Windows her na macOS. Dota 2, Civilization VI a Baldur’s Gate 3 na macOS běží přes MoltenVK s výkonem 30–60 FPS na M3/M4. MoltenVK podporuje MetalFX upscaling pro zlepšení výkonu.
VK_KHR_ray_tracing — rozšíření pro hardwarové sledování paprsků ve Vulkan, povinné od Vulkan 1.4. Podporováno na GPU s RT jádry: NVIDIA RTX 20xx/30xx/40xx/50xx, AMD RX 6000+/9000, Intel Arc A/B. Vulkan RT poskytuje VkAccelerationStructure, VkRayTracingPipeline a Shader Binding Table.
Vulkan Ray Tracing podporuje odrazy, stíny, ambient occlusion a globální osvětlení v reálném čase. Podle Khronos (2026) na NVIDIA RTX 5090 provádí Vulkan Ray Tracing až 100 Giga rays/s v referenčních scénách. Pro přenosné platformy je Vulkan RT škálovatelný pomocí blur reduction a temporal denoising.
Často kladené otázky
Vulkan — nízkoúrovňové multiplatformní GPU API s explicitní správou zdrojů. Na rozdíl od OpenGL poskytuje kontrolu nad pamětí, synchronizací a vícevláknovostí, s nárůstem výkonu až o 50 % v CPU-bound scénářích.
Vulkan funguje na Windows, Linux, Android, Nintendo Switch a na iOS/macOS — přes MoltenVK (překlad do Metal). Podporován na GPU NVIDIA, AMD, Intel, Qualcomm, ARM a Apple (přes MoltenVK).
SPIR-V — univerzální binární formát shaderů Vulkan. Shadery se píší v GLSL nebo HLSL, kompilují se do SPIR-V a předávají se Vulkan. To zajišťuje nezávislost na jazyce psaní shaderů a předvídatelný výkon kompilace.
Ano, přes VK_KHR_ray_tracing — povinné rozšíření od Vulkan 1.4. Podporováno na GPU s RT jádry: NVIDIA RTX, AMD RX 6000+, Intel Arc. Vulkan RT poskytuje akceleraci BVH struktur, Shader Binding Table a hardwarové průsečíky paprsků.
Práh vstupu je vyšší než OpenGL nebo DirectX 11, kvůli explicitní správě paměti, synchronizaci a pipeline. Khronos poskytuje Vulkan Tutorial, Vulkan Samples a Vulkan Guide. Pro první trojúhelník je potřeba přibližně 500 řádků kódu.
Shrnutí
Vyvineme mobilní aplikaci na klíč
IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.
Přečtěte si také