Vulkan — API lintas platform untuk bekerja dengan grafik dan komputasi di GPU, dikembangkan oleh konsorsium Khronos Group. Vulkan menyediakan kontrol tingkat rendah atas perangkat keras, pembuatan perintah multi-thread, dan kinerja yang dapat diprediksi. Menurut data Khronos Group (2026), Vulkan didukung pada 98% perangkat Android modern.
Utama
Vulkan — adalah API tingkat rendah, lintas platform untuk bekerja dengan prosesor grafis, pertama kali dirilis oleh Khronos Group pada tahun 2016. Vulkan menggantikan OpenGL, menawarkan overhead CPU yang jauh lebih rendah, kinerja yang dapat diprediksi, dan kemampuan pembuatan perintah multi-thread.
Tidak seperti OpenGL, di mana driver melakukan pemeriksaan dan sinkronisasi pada CPU, Vulkan menyerahkan manajemen sumber daya kepada pengembang. Alokasi memori, sinkronisasi melalui semaphore dan barrier, pembuatan pipeline — semuanya dikendalikan secara eksplisit. Pendekatan ini memberikan peningkatan kinerja hingga 50% dalam skenario CPU-bound.
Vulkan didukung di Windows, Linux, Android, iOS (melalui MoltenVK), macOS (MoltenVK), Nintendo Switch, dan konsol. Menurut data Khronos Group (2026), API berfungsi pada perangkat dengan GPU dari NVIDIA, AMD, Intel, Qualcomm (Adreno), ARM (Mali), dan Apple (melalui lapisan Metal). Vulkan 1.4 (2026) menambahkan dukungan untuk Mesh Shaders dan Video Encode API.
Awalnya Vulkan dikembangkan dengan nama kode “glNext” — penerus OpenGL. Vulkan 1.0 (2016) menyediakan API dasar dengan manajemen memori eksplisit, shader SPIR-V, dan antrian multi-thread. Vulkan 1.1 (2018) menambahkan Subgroup Operations dan dukungan untuk tipe 16-bit. Vulkan 1.2 (2020) memperkenalkan Buffer Device Address dan Timeline Semaphores.
Vulkan 1.3 (2022) menstandarisasi Dynamic Rendering dan Graphics Pipeline Library. Vulkan 1.4 (2026) mewajibkan dukungan Mesh Shaders dan menambahkan Video Encode/Decode API untuk encoding perangkat keras H.264/HEVC/AV1. Menurut data Khronos (2026), Vulkan 1.4 didukung di semua GPU baru NVIDIA RTX 50xx, AMD RX 9000, dan Intel Arc B-series.
Arsitektur Vulkan dibangun di atas lapisan abstraksi perangkat keras (HW layer). Aplikasi berinteraksi dengan perangkat fisik (VkPhysicalDevice) melalui perangkat logis (VkDevice). Perintah dikirim ke antrian (VkQueue), masing-masing milik keluarga antrian tertentu (graphics, compute, transfer).
VkInstance — objek root Vulkan, yang menyimpan informasi tentang lapisan validasi dan ekstensi. VkPhysicalDevice mewakili GPU fisik dan memungkinkan untuk meminta properti, memory heaps, dan queue families. VkDevice — perangkat logis dengan antrian dan ekstensi yang diminta secara eksplisit.
// Pembuatan perangkat logis 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);
Fungsi vkCreateDevice membuat perangkat logis dengan antrian yang ditentukan. VkQueue — deskriptor antrian untuk mengirim perintah. Satu antrian dapat digunakan untuk grafik, komputasi, dan penyalinan, jika flag yang sesuai didukung oleh keluarga antrian. Prioritas antrian (0.0–1.0) mempengaruhi urutan eksekusi saat bersaing.
Dalam Vulkan, memori dialokasikan secara eksplisit melalui VkDeviceMemory. Pengembang meminta memory types (HOST_VISIBLE, DEVICE_LOCAL) dari perangkat fisik dan mengalokasikan blok. Buffer (VkBuffer) dan tekstur (VkImage) tidak memiliki memori sendiri — mereka terikat ke blok yang dialokasikan melalui vkBindBufferMemory.
Vulkan Memory Allocator (VMA) — pustaka dari AMD yang menyederhanakan manajemen memori. VMA secara otomatis mengelompokkan alokasi kecil ke dalam blok besar, mengelola defragmentasi, dan memilih memory type yang sesuai. Menurut data AMD (2025), VMA mengurangi jumlah alokasi memori 50–100 kali lipat dibandingkan dengan manajemen manual.
VkCommandPool mengelola memori untuk buffer perintah. Buffer (VkCommandBuffer) ditulis pada CPU dan dikirim ke GPU melalui vkQueueSubmit. Vulkan mendukung buffer primary dan secondary: primary dikirim langsung, secondary dapat dipanggil dari primary untuk pembangunan perintah multi-thread.
Penulisan perintah dimulai dengan vkBeginCommandBuffer dan diakhiri dengan vkEndCommandBuffer. Di antaranya, perintah rendering ditulis: vkCmdDraw, vkCmdDispatch, vkCmdCopyBuffer, dan vkCmdPipelineBarrier untuk sinkronisasi. Untuk setiap frame, buffer perintah baru dibuat dengan pool reset.
Rendering dalam Vulkan diorganisir melalui pipeline (VkPipeline). Tidak seperti OpenGL, di mana status pipeline berubah secara global, Vulkan menggunakan VkPipeline — pipeline yang telah dikompilasi sebelumnya yang mencakup semua tahap: input vertex, shader, rasterisasi, depth-stencil, dan blending.
VkGraphicsPipelineCreateInfo menjelaskan pipeline lengkap: shader vertex dan fragment, topologi (triangle list, triangle strip), rasterizer (fill mode, cull mode), multisampling, tes depth-stencil, blending, dan pengaturan viewport. Pipeline dibuat sekali dan digunakan kembali — perubahan status memerlukan pipeline baru atau dynamic state.
// Konfigurasi pipeline grafis
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) memungkinkan mengubah parameter tertentu tanpa membuat pipeline baru. Vulkan 1.4 mewajibkan dukungan Dynamic State 3 (VK_EXT_extended_dynamic_state_3) untuk mengelola blend constants, depth bias, dan topologi secara dinamis, yang mengurangi jumlah pipeline dalam proyek.
VkRenderPass menjelaskan struktur lintasan rendering: attachment mana yang digunakan, bagaimana dibersihkan dan dimuat. Dynamic Rendering (VK_KHR_dynamic_rendering, wajib sejak Vulkan 1.4) menyederhanakan proses: render pass dibuat secara dinamis dalam buffer perintah melalui vkCmdBeginRendering, tanpa objek VkRenderPass sebelumnya.
Menurut data Khronos (2026), Dynamic Rendering mengurangi jumlah kode inisialisasi Vulkan sebesar 30–40% dan menurunkan jumlah pipeline permutations. Untuk teknik rendering tertunda yang kompleks (Deferred Shading), masih nyaman menggunakan VkRenderPass klasik dengan beberapa subpasses untuk G-buffer dan pencahayaan.
SPIR-V — format biner shader universal dalam Vulkan, dikembangkan oleh Khronos. Shader dapat ditulis dalam GLSL, HLSL, atau bahasa Zink dan dikompilasi ke SPIR-V melalui glslangValidator, dxc, atau Google Shaderc. Vulkan tidak menerima shader dalam kode sumber — hanya SPIR-V biner.
GLSL untuk Vulkan berbeda dari GLSL OpenGL standar. Blok (layout) digunakan dengan penentuan nomor set dan binding secara eksplisit, bukan variabel bawaan. Atribut vertex ditentukan melalui location, uniform — melalui uniform blocks atau buffer. Push constants (hingga 128 byte) tersedia untuk transfer data cepat tanpa buffer.
// Shader vertex 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;
}
Kualifikasi layout(set = N, binding = M) — perbedaan utama Vulkan GLSL dari OpenGL. Set sesuai dengan set deskriptor (VkDescriptorSet), binding — dengan sumber daya spesifik (buffer, tekstur, sampler). Pembagian ke dalam set memungkinkan peralihan set sumber daya yang efisien antar draw calls tanpa mengikat sumber daya individual.
VkDescriptorSet — kelompok sumber daya (buffer, tekstur, sampler) yang terikat ke shader. Layout deskriptor menjelaskan jenis sumber daya dan nomor binding mereka. Set deskriptor diperbarui melalui vkUpdateDescriptorSets dan digunakan kembali antar draw calls. Vulkan 1.4 mendukung VK_EXT_descriptor_buffer untuk akses langsung ke deskriptor dari GPU.
Push Constants — mekanisme transfer cepat data dalam jumlah kecil (hingga 128 byte) ke shader tanpa membuat deskriptor. Push constants ditentukan melalui vkCmdPushConstants dalam buffer perintah. Menurut data Khronos (2025), penggunaan push constants alih-alih uniform buffers mengurangi overhead CPU sebesar 10–15% pada frekuensi draw calls lebih dari 10 ribu per frame.
Vulkan adalah satu-satunya API yang berfungsi di semua platform utama: Windows (melalui driver ICD resmi), Linux (RADV, AMDVLK, NVIDIA), Android (Vulkan 1.3+, wajib sejak Android 10), dan pada perangkat Apple melalui MoltenVK — lapisan penerjemahan Vulkan → Metal.
Di Android, Vulkan wajib untuk Android 10 dan yang lebih baru. Google merekomendasikan Vulkan untuk proyek baru, terutama game berkinerja tinggi dan aplikasi AR melalui ARCore. Qualcomm Adreno dan ARM Mali menyediakan dukungan penuh untuk Vulkan 1.3 dengan ray tracing perangkat keras pada Adreno 8xx dan Mali-G720.
Menurut data Google (2026), 98% perangkat Android dengan Android 10+ mendukung Vulkan. Untuk kompatibilitas mundur, tersedia ANGLE (Almost Native Graphics Layer Engine), yang menerjemahkan OpenGL ES ke Vulkan. Ini memungkinkan menjalankan aplikasi OpenGL lama pada driver Vulkan dengan peningkatan kinerja hingga 20%.
Di Android, Vulkan memiliki prioritas tinggi untuk efisiensi energi: aplikasi Vulkan mengkonsumsi 25–40% lebih sedikit energi dibandingkan dengan OpenGL ES pada beban grafis yang sama di perangkat dengan Adreno 7xx+. Ini menjadikan Vulkan API pilihan utama untuk game di perangkat seluler.
MoltenVK — implementasi Vulkan di atas Metal, dikembangkan oleh LunarG dan Valve. MoltenVK menerjemahkan panggilan API Vulkan ke Metal, mendukung Vulkan 1.2 di iOS dan macOS. Kinerja MoltenVK mendekati Metal asli: overhead penerjemahan adalah 5–15% tergantung pada skenario.
Menurut data LunarG (2025), MoltenVK digunakan dalam CrossOver (Wine untuk Mac) untuk menjalankan game Windows di macOS. Dota 2, Civilization VI, dan Baldur’s Gate 3 di macOS berjalan melalui MoltenVK dengan kinerja 30–60 FPS pada M3/M4. MoltenVK mendukung MetalFX upscaling untuk peningkatan kinerja.
VK_KHR_ray_tracing — ekstensi untuk ray tracing perangkat keras dalam Vulkan, wajib sejak Vulkan 1.4. Didukung pada GPU dengan inti RT: NVIDIA RTX 20xx/30xx/40xx/50xx, AMD RX 6000+/9000, Intel Arc A/B. Vulkan RT menyediakan VkAccelerationStructure, VkRayTracingPipeline, dan Shader Binding Table.
Vulkan Ray Tracing mendukung refleksi, bayangan, ambient occlusion, dan pencahayaan global secara real-time. Menurut data Khronos (2026), pada NVIDIA RTX 5090, Vulkan Ray Tracing menjalankan hingga 100 Giga rays/s dalam adegan kualitas referensi. Untuk platform portabel, Vulkan RT diskalakan melalui blur reduction dan temporal denoising.
Pertanyaan Umum
Vulkan — API GPU lintas platform tingkat rendah dengan manajemen sumber daya eksplisit. Tidak seperti OpenGL, memberikan kontrol atas memori, sinkronisasi, dan multi-threading, memberikan peningkatan kinerja hingga 50% dalam skenario CPU-bound.
Vulkan berfungsi di Windows, Linux, Android, Nintendo Switch, dan di iOS/macOS — melalui MoltenVK (penerjemahan ke Metal). Didukung pada GPU NVIDIA, AMD, Intel, Qualcomm, ARM, dan Apple (melalui MoltenVK).
SPIR-V — format biner shader universal Vulkan. Shader ditulis dalam GLSL atau HLSL, dikompilasi ke SPIR-V, dan diberikan ke Vulkan. Ini memastikan independensi dari bahasa penulisan shader dan kinerja kompilasi yang dapat diprediksi.
Ya, melalui VK_KHR_ray_tracing — ekstensi wajib sejak Vulkan 1.4. Didukung pada GPU dengan inti RT: NVIDIA RTX, AMD RX 6000+, Intel Arc. Vulkan RT menyediakan akselerasi struktur BVH, Shader Binding Table, dan persimpangan sinar perangkat keras.
Ambang masuk lebih tinggi daripada OpenGL atau DirectX 11, karena manajemen memori eksplisit, sinkronisasi, dan pipeline. Khronos menyediakan Vulkan Tutorial, Vulkan Samples, dan Vulkan Guide. Untuk segitiga pertama, diperlukan sekitar 500 baris kode.
Ringkasan
Kami akan mengembangkan aplikasi seluler turnkey
IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.
Baca juga