Vulkan คือ API ข้ามแพลตฟอร์มสำหรับกราฟิกและการคำนวณบน GPU พัฒนาโดยกลุ่ม Khronos Group Vulkan ให้การควบคุมฮาร์ดแวร์ระดับต่ำ การสร้างคำสั่งแบบหลายเธรด และประสิทธิภาพที่คาดเดาได้ ตามข้อมูลของ Khronos Group (2026) Vulkan รองรับบนอุปกรณ์ Android สมัยใหม่ 98%
ประเด็นสำคัญ
Vulkan คือ API ระดับต่ำแบบข้ามแพลตฟอร์มสำหรับทำงานกับหน่วยประมวลผลกราฟิก เปิดตัวครั้งแรกโดย Khronos Group ในปี 2016 Vulkan สืบทอดต่อจาก OpenGL โดยมีโอเวอร์เฮด CPU ต่ำกว่าอย่างมาก ประสิทธิภาพที่คาดเดาได้ และความสามารถในการสร้างคำสั่งแบบหลายเธรด
แตกต่างจาก OpenGL ที่ไดรเวอร์ดำเนินการตรวจสอบและซิงโครไนซ์บน CPU Vulkan มอบ การจัดการทรัพยากร ให้กับนักพัฒนา การจัดสรรหน่วยความจำ การซิงโครไนซ์ผ่านเซมาฟอร์และบาร์เรียร์ การสร้างไพพ์ไลน์ — ทั้งหมดนี้ถูกควบคุมอย่างชัดแจ้ง วิธีการนี้ให้ประสิทธิภาพดีขึ้นถึง 50% ในสถานการณ์ที่จำกัด CPU
Vulkan รองรับบน Windows, Linux, Android, iOS (ผ่าน MoltenVK), macOS (MoltenVK), Nintendo Switch และคอนโซล ตามข้อมูลของ Khronos Group (2026) API ทำงานบนอุปกรณ์ที่มี GPU จาก NVIDIA, AMD, Intel, Qualcomm (Adreno), ARM (Mali) และ Apple (ผ่านเลเยอร์ Metal) Vulkan 1.4 (2026) เพิ่มการรองรับ Mesh Shaders และ Video Encode API
เดิมที Vulkan ได้รับการพัฒนาภายใต้ชื่อรหัส “glNext” — ผู้สืบทอดของ OpenGL Vulkan 1.0 (2016) ให้ API พื้นฐานพร้อมการจัดการหน่วยความจำอย่างชัดแจ้ง เชเดอร์ SPIR-V และคิวแบบหลายเธรด Vulkan 1.1 (2018) เพิ่ม Subgroup Operations และรองรับชนิด 16 บิต Vulkan 1.2 (2020) นำเสนอ Buffer Device Address และ Timeline Semaphores
Vulkan 1.3 (2022) กำหนดมาตรฐาน Dynamic Rendering และ Graphics Pipeline Library Vulkan 1.4 (2026) ทำให้การรองรับ Mesh Shaders เป็นข้อบังคับและเพิ่ม Video Encode/Decode API สำหรับการเข้ารหัสฮาร์ดแวร์ H.264/HEVC/AV1 ตามข้อมูลของ Khronos (2026) Vulkan 1.4 รองรับบน GPU ใหม่ทั้งหมด NVIDIA RTX 50xx, AMD RX 9000 และ Intel Arc B-series
สถาปัตยกรรม Vulkan สร้างขึ้นบนเลเยอร์นามธรรมฮาร์ดแวร์ (เลเยอร์ HW) แอปพลิเคชันโต้ตอบกับอุปกรณ์จริง (VkPhysicalDevice) ผ่านอุปกรณ์เสมือน (VkDevice) คำสั่งจะถูกส่งไปยังคิว (VkQueue) โดยแต่ละคิวอยู่ในตระกูลคิวเฉพาะ (graphics, compute, transfer)
VkInstance คือออบเจ็กต์รากของ Vulkan ซึ่งเก็บข้อมูลเกี่ยวกับเลเยอร์ตรวจสอบและส่วนขยาย VkPhysicalDevice แทน GPU จริงและอนุญาตให้สอบถามคุณสมบัติ ฮีปหน่วยความจำ และตระกูลคิว VkDevice คืออุปกรณ์เสมือนที่มีคิวและส่วนขยายที่ร้องขออย่างชัดเจน
// การสร้างอุปกรณ์เสมือน 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);
ฟังก์ชัน vkCreateDevice สร้างอุปกรณ์เสมือนด้วยคิวที่ระบุ VkQueue คือแฮนเดิลคิวสำหรับส่งคำสั่ง คิวเดียวสามารถใช้สำหรับกราฟิก การคำนวณ และการคัดลอกหากแฟล็กที่เกี่ยวข้องรองรับโดยตระกูลคิว ลำดับความสำคัญของคิว (0.0–1.0) ส่งผลต่อลำดับการดำเนินการเมื่อมีการแข่งขัน
ใน Vulkan หน่วยความจำถูกจัดสรรอย่างชัดแจ้งผ่าน VkDeviceMemory นักพัฒนาสอบถามชนิดหน่วยความจำ (HOST_VISIBLE, DEVICE_LOCAL) จากอุปกรณ์จริงและจัดสรรบล็อก บัฟเฟอร์ (VkBuffer) และเท็กซ์เจอร์ (VkImage) ไม่มีหน่วยความจำของตัวเอง — พวกมันถูกผูกกับบล็อกที่จัดสรรผ่าน vkBindBufferMemory
Vulkan Memory Allocator (VMA) คือไลบรารีจาก AMD ที่ทำให้การจัดการหน่วยความจำง่ายขึ้น VMA จัดกลุ่มการจัดสรรขนาดเล็กเป็นบล็อกใหญ่โดยอัตโนมัติ จัดการการจัดเรียงข้อมูล และเลือกชนิดหน่วยความจำที่เหมาะสม ตามข้อมูลของ AMD (2025) VMA ลดจำนวนการจัดสรรหน่วยความจำลง 50–100 เท่าเมื่อเทียบกับการจัดการด้วยตนเอง
VkCommandPool จัดการหน่วยความจำสำหรับบัฟเฟอร์คำสั่ง บัฟเฟอร์ (VkCommandBuffer) ถูกบันทึกบน CPU และส่งไปยัง GPU ผ่าน vkQueueSubmit Vulkan รองรับบัฟเฟอร์หลักและรอง: บัฟเฟอร์หลักถูกส่งโดยตรง บัฟเฟอร์รองสามารถเรียกจากบัฟเฟอร์หลักสำหรับการสร้างคำสั่งแบบหลายเธรด
การบันทึกคำสั่งเริ่มต้นด้วย vkBeginCommandBuffer และสิ้นสุดด้วย vkEndCommandBuffer ระหว่างนั้น คำสั่งเรนเดอร์ถูกบันทึก: vkCmdDraw, vkCmdDispatch, vkCmdCopyBuffer และ vkCmdPipelineBarrier สำหรับการซิงโครไนซ์ บัฟเฟอร์คำสั่งใหม่ถูกสร้างขึ้นสำหรับแต่ละเฟรมด้วยการพูลผ่านรีเซ็ตพูล
การเรนเดอร์ใน Vulkan จัดระเบียบผ่านไพพ์ไลน์ (VkPipeline) แตกต่างจาก OpenGL ที่สถานะไพพ์ไลน์ถูกเปลี่ยนโดยรวม Vulkan ใช้ VkPipeline — ไพพ์ไลน์ที่คอมไพล์ล่วงหน้าซึ่งรวมทุกขั้นตอน: อินพุตจุดยอด เชเดอร์ การแรสเตอร์ไรซ์ depth-stencil และการผสม
VkGraphicsPipelineCreateInfo อธิบายไพพ์ไลน์แบบสมบูรณ์: เชเดอร์จุดยอดและแฟรกเมนต์ โทโพโลยี (triangle list, triangle strip) แรสเตอร์ไรเซอร์ (fill mode, cull mode) การสุ่มตัวอย่างหลายครั้ง การทดสอบ depth-stencil การผสม และการตั้งค่าวิวพอร์ต ไพพ์ไลน์ถูกสร้างขึ้นครั้งเดียวและนำกลับมาใช้ใหม่ — การเปลี่ยนสถานะต้องใช้ไพพ์ไลน์ใหม่หรือสถานะไดนามิก
// การตั้งค่าไพพ์ไลน์กราฟิก
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);
สถานะไดนามิก (VK_DYNAMIC_STATE_VIEWPORT, VK_DYNAMIC_STATE_SCISSOR) อนุญาตให้เปลี่ยนพารามิเตอร์บางอย่างโดยไม่ต้องสร้างไพพ์ไลน์ใหม่ Vulkan 1.4 ทำให้การรองรับ Dynamic State 3 (VK_EXT_extended_dynamic_state_3) เป็นข้อบังคับสำหรับการจัดการ blend constants, depth bias และโทโพโลยีทันที ซึ่งลดจำนวนไพพ์ไลน์ในโปรเจ็กต์
VkRenderPass อธิบายโครงสร้างของรอบการเรนเดอร์: สิ่งที่แนบใดที่ใช้ วิธีล้างและโหลด Dynamic Rendering (VK_KHR_dynamic_rendering, ข้อบังคับตั้งแต่ Vulkan 1.4) ทำให้กระบวนการง่ายขึ้น: เรนเดอร์พาสถูกสร้างขึ้นทันทีในบัฟเฟอร์คำสั่งผ่าน vkCmdBeginRendering โดยไม่มีออบเจ็กต์ VkRenderPass ล่วงหน้า
ตามข้อมูลของ Khronos (2026) Dynamic Rendering ลดโค้ดเริ่มต้น Vulkan ลง 30–40% และลดจำนวนรูปแบบไพพ์ไลน์ สำหรับเทคนิคการเรนเดอร์แบบเลื่อนเวลาที่ซับซ้อน (Deferred Shading) การใช้ VkRenderPass แบบคลาสสิกกับซับพาสหลายตัวสำหรับ G-buffer และแสงยังคงสะดวก
SPIR-V คือรูปแบบไบนารีเชเดอร์สากลใน Vulkan พัฒนาโดย Khronos เชเดอร์สามารถเขียนด้วย GLSL, HLSL หรือภาษา Zink และคอมไพล์เป็น SPIR-V ผ่าน glslangValidator, dxc หรือ Google Shaderc Vulkan ไม่รับเชเดอร์ในรูปแบบซอร์สโค้ด — เฉพาะ SPIR-V ไบนารีเท่านั้น
GLSL สำหรับ Vulkan แตกต่างจาก GLSL มาตรฐานของ OpenGL ใช้บล็อก (layout) พร้อมหมายเลข set และ binding ที่ชัดเจน แทนตัวแปรในตัว คุณลักษณะจุดยอดถูกระบุผ่าน location, uniform ผ่าน uniform blocks หรือบัฟเฟอร์ Push constants (สูงสุด 128 ไบต์) พร้อมใช้งานสำหรับการถ่ายโอนข้อมูลอย่างรวดเร็วโดยไม่ต้องใช้บัฟเฟอร์
// เชเดอร์จุดยอด 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;
}
ตัวระบุ layout(set = N, binding = M) คือความแตกต่างสำคัญระหว่าง Vulkan GLSL และ OpenGL Set สอดคล้องกับชุดตัวอธิบาย (VkDescriptorSet) binding สอดคล้องกับทรัพยากรเฉพาะ (บัฟเฟอร์ เท็กซ์เจอร์ ตัวอย่าง) การแบ่งเป็น sets อนุญาตให้สลับชุดทรัพยากรระหว่าง draw calls อย่างมีประสิทธิภาพโดยไม่ต้องผูกทรัพยากรแต่ละรายการ
VkDescriptorSet คือกลุ่มของทรัพยากร (บัฟเฟอร์ เท็กซ์เจอร์ ตัวอย่าง) ที่ผูกกับเชเดอร์ เลย์เอาต์ตัวอธิบายอธิบายชนิดทรัพยากรและหมายเลข binding ชุดตัวอธิบายถูกอัปเดตผ่าน vkUpdateDescriptorSets และนำกลับมาใช้ใหม่ระหว่าง draw calls Vulkan 1.4 รองรับ VK_EXT_descriptor_buffer สำหรับการเข้าถึงตัวอธิบายโดยตรงจาก GPU
Push Constants คือกลไกสำหรับการถ่ายโอนข้อมูลปริมาณน้อย (สูงสุด 128 ไบต์) ไปยังเชเดอร์อย่างรวดเร็วโดยไม่ต้องสร้างตัวอธิบาย Push constants ถูกตั้งค่าผ่าน vkCmdPushConstants ในบัฟเฟอร์คำสั่ง ตามข้อมูลของ Khronos (2025) การใช้ push constants แทน uniform buffers ช่วยลดโอเวอร์เฮด CPU ลง 10–15% ที่อัตรา draw calls มากกว่า 10,000 ครั้งต่อเฟรม
Vulkan คือ API เดียวที่ทำงานบนแพลตฟอร์มหลักทั้งหมด: Windows (ผ่านไดรเวอร์ ICD ทางการ), Linux (RADV, AMDVLK, NVIDIA), Android (Vulkan 1.3+, ข้อบังคับตั้งแต่ Android 10) และบนอุปกรณ์ Apple ผ่าน MoltenVK — เลเยอร์การแปลจาก Vulkan เป็น Metal
บน Android Vulkan เป็นข้อบังคับสำหรับ Android 10 ขึ้นไป Google แนะนำ Vulkan สำหรับโปรเจ็กต์ใหม่ โดยเฉพาะเกมประสิทธิภาพสูงและแอปพลิเคชัน AR ผ่าน ARCore Qualcomm Adreno และ ARM Mali ให้การรองรับ Vulkan 1.3 อย่างสมบูรณ์พร้อมการเรย์เทรซซิงด้วยฮาร์ดแวร์บน Adreno 8xx และ Mali-G720
ตามข้อมูลของ Google (2026) 98% ของอุปกรณ์ Android ที่ใช้ Android 10+ รองรับ Vulkan สำหรับความเข้ากันได้ย้อนหลัง มี ANGLE (Almost Native Graphics Layer Engine) ซึ่งแปล OpenGL ES เป็น Vulkan ซึ่งช่วยให้แอปพลิเคชัน OpenGL เก่าทำงานบนไดรเวอร์ Vulkan ด้วยประสิทธิภาพดีขึ้นถึง 20%
บน Android Vulkan มีลำดับความสำคัญสูงสำหรับประสิทธิภาพพลังงาน: แอปพลิเคชัน Vulkan ใช้ พลังงานน้อยกว่า 25–40% เมื่อเทียบกับ OpenGL ES ภายใต้ภาระกราฟิกเดียวกันบนอุปกรณ์ที่มี Adreno 7xx+ ทำให้ Vulkan เป็น API ที่ต้องการสำหรับเกมบนอุปกรณ์มือถือ
MoltenVK คือการใช้งาน Vulkan บน Metal พัฒนาโดย LunarG และ Valve MoltenVK แปลงการเรียก API Vulkan เป็น Metal รองรับ Vulkan 1.2 บน iOS และ macOS ประสิทธิภาพของ MoltenVK ใกล้เคียงกับ Metal ดั้งเดิม: โอเวอร์เฮดการแปลคือ 5–15% ขึ้นอยู่กับสถานการณ์
ตามข้อมูลของ LunarG (2025) MoltenVK ใช้ใน CrossOver (Wine สำหรับ Mac) เพื่อเรียกใช้เกม Windows บน macOS Dota 2, Civilization VI และ Baldur's Gate 3 บน macOS ทำงานผ่าน MoltenVK ด้วยประสิทธิภาพ 30–60 FPS บน M3/M4 MoltenVK รองรับ MetalFX อัปสเกลสำหรับการปรับปรุงประสิทธิภาพ
VK_KHR_ray_tracing คือส่วนขยายสำหรับการเรย์เทรซซิงด้วยฮาร์ดแวร์ใน Vulkan ข้อบังคับตั้งแต่ Vulkan 1.4 รองรับบน GPU ที่มีคอร์ RT: NVIDIA RTX 20xx/30xx/40xx/50xx, AMD RX 6000+/9000, Intel Arc A/B Vulkan RT ให้ VkAccelerationStructure, VkRayTracingPipeline และ Shader Binding Table
Vulkan Ray Tracing รองรับการสะท้อน เงา การบดบังโดยรอบ และการส่องสว่างทั่วโลกแบบเรียลไทม์ ตามข้อมูลของ Khronos (2026) บน NVIDIA RTX 5090 Vulkan Ray Tracing ทำได้ถึง 100 Giga rays/s ในฉากคุณภาพอ้างอิง สำหรับแพลตฟอร์มพกพา Vulkan RT ปรับขนาดผ่านการลดเบลอและการลดสัญญาณรบกวนชั่วคราว
คำถามที่พบบ่อย
Vulkan คือ GPU API ระดับต่ำแบบข้ามแพลตฟอร์มพร้อมการจัดการทรัพยากรอย่างชัดแจ้ง แตกต่างจาก OpenGL ที่ให้การควบคุมหน่วยความจำ การซิงโครไนซ์ และการทำงานหลายเธรด ให้ประสิทธิภาพดีขึ้นถึง 50% ในสถานการณ์ที่จำกัด CPU
Vulkan ทำงานบน Windows, Linux, Android, Nintendo Switch และบน iOS/macOS ผ่าน MoltenVK (การแปลเป็น Metal) รองรับบน GPU NVIDIA, AMD, Intel, Qualcomm, ARM และ Apple (ผ่าน MoltenVK)
SPIR-V คือรูปแบบไบนารีเชเดอร์สากลสำหรับ Vulkan เชเดอร์เขียนด้วย GLSL หรือ HLSL คอมไพล์เป็น SPIR-V และป้อนให้ Vulkan ซึ่งรับประกันความเป็นอิสระของภาษาเชเดอร์และประสิทธิภาพการคอมไพล์ที่คาดเดาได้
ใช่ ผ่าน VK_KHR_ray_tracing — ส่วนขยายที่ข้อบังคับตั้งแต่ Vulkan 1.4 รองรับบน GPU ที่มีคอร์ RT: NVIDIA RTX, AMD RX 6000+, Intel Arc Vulkan RT ให้โครงสร้างเร่งความเร็ว BVH, Shader Binding Table และการตัดกันรังสีด้วยฮาร์ดแวร์
อุปสรรคในการเริ่มใช้ สูงกว่า OpenGL หรือ DirectX 11 เนื่องจากการจัดการหน่วยความจำ การซิงโครไนซ์ และไพพ์ไลน์อย่างชัดแจ้ง Khronos มี Vulkan Tutorial, Vulkan Samples และ Vulkan Guide สามเหลี่ยมแรกต้องใช้โค้ดประมาณ 500 บรรทัด
สรุป
เราจะพัฒนาแอปพลิเคชันบนมือถือแบบครบวงจร
IT Sectr สร้างแอปพลิเคชัน iOS และ Android สำหรับสตาร์ทอัพและธุรกิจตั้งแต่ปี 2017 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ