Vulkan — apa itu, API lintas platform dan rendering

Penulis: IT Sectr Diterbitkan: 2026-05-03 Waktu membaca: 9 mnt

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 — API GPU lintas platform dengan kontrol tingkat rendah atas perangkat keras
  • VkDevice dan VkQueue menyediakan pengiriman perintah GPU multi-thread
  • SPIR-V — format biner shader universal, dikompilasi dari GLSL dan HLSL
  • Vulkan Memory Allocator mengelola alokasi memori GPU secara eksplisit
  • Vulkan Ray Tracing (VK_KHR_ray_tracing) mendukung ray tracing perangkat keras

Apa itu Vulkan?

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.

Sejarah Vulkan

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: perangkat dan antrian

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

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.

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

VkMemory dan VkBuffer — manajemen memori

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

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 melalui Vulkan: pipeline dan perintah

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.

VkPipeline — pipeline rendering

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.

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

Render Pass dan Dynamic Rendering

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.

Shader dalam Vulkan: SPIR-V dan GLSL

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 dalam Vulkan

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.

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

Deskriptor dan set deskriptor

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 di berbagai platform

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.

Vulkan di Android

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.

Vulkan di Apple melalui MoltenVK

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.

Vulkan Ray Tracing

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

Apa itu Vulkan dan apa bedanya dengan OpenGL?

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.

Di platform apa Vulkan berfungsi?

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).

Apa itu SPIR-V dalam Vulkan?

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.

Apakah Vulkan mendukung ray tracing?

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.

Apakah sulit untuk mulai menggunakan Vulkan?

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

  • Vulkan — API GPU lintas platform tingkat rendah dari Khronos Group
  • Manajemen eksplisit memori, sinkronisasi, dan antrian mengurangi overhead CPU
  • VkPipeline — pipeline yang telah dikompilasi sebelumnya untuk grafik dan komputasi
  • SPIR-V — format biner shader, dikompilasi dari GLSL dan HLSL
  • Dynamic Rendering (Vulkan 1.4) menyederhanakan pembuatan Render Pass tanpa VkRenderPass
  • MoltenVK memastikan Vulkan berfungsi di iOS dan macOS melalui Metal
  • Vulkan 1.4 menambahkan Mesh Shaders, Video Encode API, dan ray tracing wajib

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.

Diskusikan proyek

Baca juga