Thiết kế bởi | AMD, DICE (thiết kế Mantle gốc) |
---|---|
Phát triển bởi | Khronos Group (đóng góp và phát triển các biến thể Vulkan) |
Phát hành lần đầu | 16 tháng 2 năm 2016; 8 năm trước |
Kho mã nguồn | |
Viết bằng | C |
Hệ điều hành | Android, Linux, Haiku, Fuchsia, BSD Unix, QNX, Windows, Nintendo Switch, Stadia, Tizen, macOS, iOS, iPadOS, tvOS, Raspberry Pi, vxWorks |
Thể loại | API đồ hoạ 3D và tính toán |
Giấy phép | Giấy phép Apache 2.0 |
Website | vulkan |
Vulkan là một API đồ họa 3D và tính toán đa nền tảng, chi phí thấp, và tiêu chuẩn mở. Ban đầu do AMD phát triển dưới tên gọi Mantle, Vulkan sau đó được chuyển giao cho Khronos Group. Nó được thiết kế để khắc phục các hạn chế của OpenGL và cho phép kiểm soát sâu hơn đối với GPU.
Khái quát
Vulkan hướng đến các ứng dụng đồ họa 3D thời gian thực đòi hỏi hiệu suất cao như trò chơi video và phương tiện tương tác, cũng như tính toán song song hiệu quả. Vulkan cung cấp hiệu suất vượt trội và tối ưu hóa việc sử dụng CPU và GPU so với các API OpenGL và Direct3D 11 cũ, nhờ cung cấp một API cấp thấp hơn gần gũi hơn với các GPU hiện đại.
Vulkan tương tự như API Metal của Apple và Direct3D 12 của Microsoft, nhưng phức tạp hơn so với các API OpenGL và Direct3D 11 bậc cao hơn. Thiết kế của Vulkan không chỉ giảm tải CPU mà còn cho phép các nhà phát triển phân bổ công việc hiệu quả hơn trên nhiều nhân CPU.
Vulkan lần đầu được giới thiệu bởi Khronos Group tại GDC 2015. Ban đầu, API này được gọi là 'OpenGL thế hệ mới' hoặc 'OpenGL next' theo tên gọi của Khronos, nhưng sau đó đã được đổi tên thành 'Vulkan'.
Vulkan được xây dựng dựa trên các yếu tố từ API Mantle của AMD, mà AMD đã tặng cho Khronos để tạo ra một nền tảng cho việc phát triển API bậc thấp, nhằm tiêu chuẩn hóa trên toàn ngành công nghiệp.
Đặc điểm
Vulkan được thiết kế để mang lại nhiều lợi ích hơn so với các API khác và người tiền nhiệm của nó là OpenGL. Vulkan giảm thiểu chi phí, cung cấp sự kiểm soát trực tiếp hơn đối với GPU và tối ưu hóa việc sử dụng CPU. Các khái niệm và tính năng của Vulkan tương tự như những gì có trong Mantle, và được Microsoft đưa vào Direct3D 12 cũng như Apple với Metal.
API toàn diện
Vulkan cung cấp một API đồng nhất cho cả thiết bị đồ họa trên máy tính và di động, khác với sự phân chia trước đây giữa OpenGL và OpenGL ES.
Đa nền tảng
Vulkan có mặt trên nhiều hệ điều hành hiện đại. Tương tự như OpenGL và khác với Direct3D 12, Vulkan không bị giới hạn bởi hệ điều hành cụ thể hay thiết bị nào. Vulkan hỗ trợ Android, Linux, BSD Unix, QNX, Haiku, Nintendo Switch, Raspberry Pi, Stadia, Fuchsia, Tizen, và các phiên bản Windows 7, 8, 10, và 11. MoltenVK cung cấp hỗ trợ bên thứ ba với giấy phép mở cho macOS, iOS, và tvOS thông qua API Metal của Apple.
Tiết kiệm CPU
Vulkan giúp giảm tải cho CPU nhờ vào việc sử dụng batching và các tối ưu hóa cấp thấp khác, từ đó giảm bớt gánh nặng cho CPU và cho phép nó thực hiện nhiều phép toán hoặc xử lý đồ họa hơn.
Thiết kế tối ưu cho đa luồng
Direct3D 11 và OpenGL 4 được thiết kế ban đầu cho CPU đơn nhân và sau đó mới được điều chỉnh để hỗ trợ nhiều nhân. Dù có tính năng mở rộng, các API này thường không khai thác tốt khả năng mở rộng trên nhiều nhân. Vulkan cải thiện khả năng làm việc trên CPU đa nhân nhờ vào kiến trúc đa luồng hiện đại.
Shader biên dịch trước
OpenGL sử dụng ngôn ngữ GLSL cao cấp để viết shader, yêu cầu mỗi driver OpenGL phải có trình biên dịch riêng cho GLSL, thực hiện biên dịch khi ứng dụng chạy để chuyển mã nguồn shader thành mã máy của GPU. Ngược lại, Vulkan hỗ trợ các shader đã được biên dịch thành định dạng nhị phân SPIR-V, tương tự như định dạng nhị phân của shader HLSL trong Direct3D. Việc tiền biên dịch shader cải thiện tốc độ khởi tạo ứng dụng và cho phép sử dụng nhiều shader khác nhau trong mỗi cảnh. Driver Vulkan chỉ cần tối ưu hóa và tạo mã cho GPU, giúp dễ dàng bảo trì và có thể tạo ra các gói driver nhỏ hơn. Các nhà phát triển có thể bảo vệ mã shader dễ dàng hơn vì shader không lưu trữ trực tiếp dưới dạng mã nguồn, mặc dù công cụ giải mã SPIR-V thành mã nguồn bậc cao có thể đọc được bởi con người.
Các điểm khác
- Vulkan cung cấp khả năng quản lý đồng nhất cho các kernel tính toán và shader đồ họa, loại bỏ sự cần thiết phải kết hợp một API tính toán riêng biệt với một API đồ họa.
- Ray tracing được hỗ trợ thông qua các phần mở rộng mà nhiều nhà sản xuất đều hỗ trợ, tạo ra một chức năng tương tự như các API Raytracing OptiX và DirectX Raytracing. OpenGL không có chức năng tương tự.
So sánh OpenGL và Vulkan
OpenGL | Vulkan |
---|---|
Một máy có trạng thái toàn cục duy nhất | Dựa trên đối tượng, không có trạng thái toàn cục |
Trạng thái bị ràng buộc với một ngữ cảnh duy nhất | Tất cả khái niệm về trạng thái được giới hạn trong bộ đệm lệnh |
Các thao tác chỉ có thể được thực hiện tuần tự | Cho phép lập trình đa luồng |
Bộ nhớ GPU và sự đồng bộ thường được ẩn | Cung cấp sự kiểm soát sâu về quản lý bộ nhớ GPU và sự đồng bộ |
Kiểm tra lỗi mở rộng | Driver Vulkan không kiểm tra lỗi tại thời gian chạy; có một lớp kiểm tra lỗi dành cho nhà phát triển |
NVIDIA cho biết 'OpenGL vẫn là lựa chọn hợp lý cho nhiều tình huống, vì nó có độ phức tạp và gánh nặng bảo trì thấp hơn nhiều so với Vulkan, trong khi vẫn cung cấp hiệu suất tổng thể tốt.'
AMD cho biết 'Vulkan cung cấp mức kiểm soát gần với phần cứng, cho phép hiệu suất nhanh hơn và chất lượng hình ảnh tốt hơn trên Windows 7, Windows 8.1, Windows 10 và Linux. Không có API đồ họa nào khác cung cấp sự kết hợp mạnh mẽ giữa tính tương thích hệ điều hành, tính năng kết xuất và hiệu suất phần cứng như vậy.'
Các phiên bản
Vulkan 1.1
Tại SIGGRAPH 2016, Khronos đã công bố rằng Vulkan sẽ hỗ trợ tính năng đa GPU tự động, tương tự như Direct3D 12. Hỗ trợ đa GPU trong API này loại bỏ sự cần thiết của SLI hoặc Crossfire, mà yêu cầu các card đồ họa phải cùng một mẫu mã. Thay vào đó, API sẽ phân phối công việc thông minh giữa nhiều GPU khác nhau. Ví dụ, GPU tích hợp trong CPU có thể làm việc cùng với GPU chuyên dụng cao cấp để cải thiện hiệu suất.
Ngày 7 tháng 3 năm 2018, Khronos Group đã phát hành Vulkan 1.1, bản cập nhật lớn đầu tiên của API này. Bản cập nhật này tiêu chuẩn hóa nhiều phần mở rộng như multi-view, nhóm thiết bị, chia sẻ giữa quá trình và các API khác, tính toán nâng cao, hỗ trợ HLSL và YCbCr. Nó cũng cải thiện khả năng tương thích với DirectX 12, hỗ trợ rõ ràng cho đa GPU, ray tracing và đặt nền tảng cho thế hệ GPU mới. SPIR-V cũng được nâng cấp lên phiên bản 1.3 cùng với Vulkan 1.1.
Vulkan 1.2
Vào ngày 15 tháng 1 năm 2020, Khronos Group đã phát hành Vulkan 1.2, bản cập nhật chính thứ hai cho API này, với việc tích hợp 23 phần mở rộng thường dùng vào tiêu chuẩn cơ bản. Những tính năng nổi bật bao gồm 'timeline semaphores để dễ dàng quản lý đồng bộ hóa', 'mô hình bộ nhớ chính thức để xác định rõ ngữ nghĩa của đồng bộ hóa và thao tác bộ nhớ trên các luồng khác nhau', và 'mô hình chỉ mục cho phép nhiều shader sử dụng lại cùng một bố cục chỉ mục'. Các tính năng bổ sung của Vulkan 1.2 còn nâng cao tính linh hoạt trong việc triển khai các API đồ họa khác trên nền Vulkan, như 'bố cục chuẩn của bộ đệm đồng nhất', 'bố cục khối cố định' và 'sử dụng stencil riêng biệt'.
Vulkan 1.3
Ngày 25 tháng 1 năm 2022, Khronos Group đã phát hành Vulkan 1.3, bản cập nhật lớn thứ ba cho API này. Bản cập nhật này tích hợp 23 phần mở rộng thường dùng vào tiêu chuẩn cơ bản và tập trung vào việc giảm phân mảnh bằng cách yêu cầu các tính năng mới trở thành bắt buộc cho thiết bị hỗ trợ Vulkan 1.3. Các tính năng mới bao gồm kỹ thuật vẽ động, trạng thái động bổ sung, API đồng bộ hóa cải tiến và hồ sơ thiết bị.
Tính năng dự kiến
Khi phát hành OpenCL 2.2, Khronos Group đã thông báo rằng OpenCL sẽ kết hợp với Vulkan để tăng cường khả năng triển khai phần mềm OpenCL qua cả hai API. Adobe's Premiere Rush đã chứng minh điều này bằng cách sử dụng trình biên dịch mã nguồn mở clspv để chuyển đổi mã nguồn kernel OpenCL C thành mã Vulkan cho triển khai trên Android.
Lịch sử
Dự án phát triển API đồ họa thế hệ mới được Khronos Group khởi xướng vào tháng 7 năm 2014, với cuộc họp đầu tiên diễn ra tại Valve. Tại SIGGRAPH 2014, dự án này đã được công khai và mở ra cơ hội cho các bên quan tâm tham gia.
Theo Cục Sở hữu trí tuệ và Nhãn hiệu Hoa Kỳ, Vulkan đã được đăng ký thương hiệu vào ngày 19 tháng 2 năm 2015.
Vulkan chính thức được công bố và đặt tên tại Game Developers Conference 2015, mặc dù trước đó đã có nhiều đồn đoán về sự tồn tại của một API mới được gọi là 'glNext'.
2015
Đầu năm 2015, LunarG (do Valve tài trợ) đã phát triển và giới thiệu một driver Linux cho Intel, cho phép các card đồ họa tích hợp dòng HD 4000 hỗ trợ Vulkan. Mặc dù driver Mesa nguồn mở chưa hoàn toàn tương thích với OpenGL 4.0 cho đến cuối năm đó, tính toán qua Direct3D11 vẫn được hỗ trợ cho Sandy Bridge.
Ngày 10 tháng 8 năm 2015, Google thông báo rằng các phiên bản Android trong tương lai sẽ hỗ trợ Vulkan. Android 7.x 'Nougat' đã hỗ trợ Vulkan từ ngày 22 tháng 8 năm 2016, và Android 8.0 'Oreo' cung cấp hỗ trợ toàn diện.
Ngày 18 tháng 12 năm 2015, Khronos Group thông báo rằng phiên bản 1.0 của quy tắc Vulkan đã gần hoàn thiện và sẽ được phát hành khi có các driver tương thích.
2016
Bộ quy tắc và SDK Vulkan nguồn mở hoàn chỉnh đã được phát hành vào ngày 16 tháng 2 năm 2016.
2018
Ngày 26 tháng 2 năm 2018, Khronos Group công bố rằng API Vulkan đã có mặt trên macOS và iOS nhờ thư viện MoltenVK, cho phép Vulkan hoạt động trên nền tảng Metal. Các cập nhật mới cũng được trình diễn tại SIGGRAPH 2018. Trước đó, MoltenVK là một giải pháp độc quyền với giấy phép thương mại, nhưng Valve đã hợp tác với Brenwill Workshop Ltd để mở mã nguồn MoltenVK dưới giấy phép Apache 2.0. Thư viện này hiện có sẵn trên GitHub. Valve cũng thông báo rằng tính từ ngày 26 tháng 2 năm 2018, trò chơi Dota 2 có thể chạy trên macOS bằng API Vulkan dựa trên MoltenVK.
2019
Ngày 25 tháng 2 năm 2019, nhóm Vulkan Safety Critical (SC) được công bố nhằm tích hợp gia tốc GPU Vulkan vào các ngành công nghiệp yêu cầu an toàn cao.
Dịch vụ chơi game đám mây Stadia của Google sử dụng Vulkan trên các máy chủ Linux với GPU của AMD.
2020
Ngày 15 tháng 1 năm 2020, Vulkan 1.2 chính thức được phát hành.
Cùng với việc phát hành Vulkan 1.2, Khronos Group đã công bố trên blog rằng hỗ trợ HLSL trong Vulkan đã sẵn sàng cho môi trường sản xuất nhờ vào các cải tiến trong trình biên dịch DXC của Microsoft và glslang của Khronos, cùng với các tính năng mới trong Vulkan 1.2 nâng cao khả năng hỗ trợ HLSL.
Ngày 3 tháng 2 năm 2020, Raspberry Pi Foundation thông báo đang phát triển driver Vulkan mã nguồn mở cho Raspberry Pi, một máy tính bo mạch đơn phổ biến. Đến ngày 20 tháng 6 năm 2020, một kỹ sư đồ họa đã tiết lộ việc hoàn thành driver này sau hai năm làm việc, có khả năng chạy VkQuake3 với hơn 100 FPS trên thiết bị nhỏ bé này.
Ngày 17 tháng 3 năm 2020, Khronos Group phát hành các phần mở rộng Ray Tracing dựa trên phần mở rộng độc quyền của Nvidia, với nhiều cải tiến quan trọng và các thay đổi nhỏ dựa trên API OptiX của Nvidia. Đến ngày 23 tháng 11 năm 2020, các phần mở rộng Ray Tracing này đã được hoàn thiện.
Ngày 24 tháng 11 năm 2020, Raspberry Pi Foundation thông báo rằng driver dành cho Raspberry Pi 4 đã đạt chứng nhận Vulkan 1.0.
2022
Ngày 25 tháng 1 năm 2022, Vulkan 1.3 chính thức được phát hành.
Ngày 1 tháng 3 năm 2022, Vulkan SC 1.0 được ra mắt, mang đến khả năng đồ họa và tính toán của Vulkan cho các ngành công nghiệp chú trọng đến an toàn, dựa trên tiêu chuẩn Vulkan 1.2.
Ngày 1 tháng 8 năm 2022, Raspberry Pi Foundation thông báo rằng driver cho Raspberry Pi 4 đã đạt chứng nhận Vulkan 1.2.
Ngày 1 tháng 9 năm 2022, Mesh Shading đã được chính thức phát hành cho Vulkan.
Hỗ trợ từ nhiều nhà cung cấp
vulkaninfo
cho thấy thông tin về các phiên bản Vulkan được hỗ trợ cùng với vkcube
, một công cụ kiểm tra việc triển khai Vulkan trên hệ thống.Các quy tắc ban đầu quy định rằng driver Vulkan có thể hoạt động trên bất kỳ phần cứng nào hỗ trợ OpenGL ES 3.1 hoặc OpenGL 4.x trở lên. Tuy nhiên, việc hỗ trợ Vulkan yêu cầu các driver đồ họa mới, nên không phải tất cả thiết bị hiện tại hỗ trợ OpenGL ES 3.1 hoặc OpenGL 4.x đều có driver Vulkan sẵn có.
Intel
Vào tháng 3 năm 2023, Intel đã phân tách hỗ trợ Vulkan giữa Windows và Linux, với tất cả các driver do Intel phát triển.
Trên Windows, các dòng từ Skylake đến Ice Lake hỗ trợ Vulkan 1.3, nhưng chỉ nhận cập nhật sửa lỗi bảo mật sau tháng 7 năm 2022. Các card đồ họa Iris và các dòng mới hơn được hỗ trợ đầy đủ tính đến tháng 3 năm 2023.
Trên Linux, tính đến tháng 3 năm 2023, Haswell chưa hoàn toàn hỗ trợ Vulkan vì không đạt tiêu chuẩn Vulkan 1.0. Ngoài Haswell, Ivy Bridge và Broadwell được hỗ trợ bởi driver Vulkan cũ tên là HASVK trong Mesa. Skylake và các dòng mới hơn được hỗ trợ bởi driver ANV trong Mesa.
AMD
Trên Windows, Vulkan 1.2 được hỗ trợ từ GCN 1.0 đến GCN 3.0, và không có cập nhật nào dự kiến từ tháng 6 năm 2021. Các dòng GCN 4.0 và mới hơn hỗ trợ Vulkan 1.3.
Trên Linux, có nhiều driver Vulkan hỗ trợ phần cứng khác nhau và có thể trùng lặp. Một driver nguồn mở là AMDVLK, do AMD phát triển và có hỗ trợ hạn chế trên Windows. Một driver độc quyền là AMDGPU-PRO, không được khuyến nghị cho hầu hết người dùng tính đến tháng 3 năm 2023.
Cũng có driver được khuyến nghị là RADV trong Mesa, phát triển bởi Valve, Red Hat, Google và các nhà phát triển khác. Tính đến tháng 3 năm 2023, driver này hỗ trợ tất cả các card GCN và RDNA. Để hỗ trợ GCN 1.0 và GCN 2.0, chế độ hỗ trợ thử nghiệm phải được bật trong mô-đun nhân amdgpu.
NVIDIA
Trên Windows và Linux, NVIDIA cung cấp driver Vulkan hỗ trợ Vulkan 1.2 cho các card Kepler, không có kế hoạch cập nhật sau tháng 9 năm 2021. Các card Maxwell và mới hơn hỗ trợ Vulkan 1.3.
Tính đến tháng 3 năm 2023, trên Linux có một driver Vulkan nguồn mở thử nghiệm gọi là NVK, đang được phát triển trong Mesa với mục tiêu hỗ trợ các card Turing và mới hơn.
GPU dành cho Android và thiết bị di động
Hầu hết các thiết bị Android hiện đại đều hỗ trợ Vulkan. Android 7.0 Nougat cung cấp hỗ trợ tùy chọn cho Vulkan 1.0, Android 9.0 Pie hỗ trợ tùy chọn Vulkan 1.1, và Android 10 yêu cầu tất cả thiết bị 64-bit phải hỗ trợ Vulkan 1.1. Trên Linux và một số thiết bị ChromeOS, driver nguồn mở Mesa hỗ trợ phần cứng Arm Mali (Midgard và Bifrost), Qualcomm Adreno, và Broadcom VideoCore VI.
Apple
Tính đến tháng 6 năm 2022, các thiết bị của Apple chưa hỗ trợ API Vulkan. Tuy nhiên, Vulkan có thể được sử dụng qua thư viện mã nguồn mở MoltenVK, cung cấp triển khai Vulkan dựa trên API đồ họa Metal trên các thiết bị iOS và macOS, nhưng thư viện này có một số hạn chế với các tính năng API nâng cao.
Vào tháng 6 năm 2022, phiên bản Vulkan 1.3.217 đã bổ sung hỗ trợ cho các đối tượng Metal, giúp dễ dàng hơn trong việc chuyển đổi giữa hai API này. Vào tháng 12 năm 2022, phiên bản Vulkan 1.3.236 đã khắc phục một số lỗi nhỏ liên quan đến việc tương tác với Apple Metal.
Tương thích ngược
Vulkan không hỗ trợ tương thích ngược với OpenGL, mặc dù có một số dự án như ANGLE của Google và Zink của Mesa thực hiện việc triển khai OpenGL dựa trên Vulkan.
Vulkan cũng không tương thích với các API đồ họa khác như Direct3D, Metal và Mantle. Tuy nhiên, một số bản triển khai của các API này đã được phát triển trên nền tảng Vulkan.
- Direct3D có các bản triển khai như DXVK cho Direct3D 9, 10 và 11, và VKD3D-Proton cho Direct3D 12. Một số phiên bản Direct3D cũ hơn cũng có thể được cung cấp qua thư viện bên thứ ba, ví dụ như D8VK cho Direct3D 8.
- Metal có một bản triển khai bên thứ ba gọi là Indium, hiện đang được phát triển và dự kiến sẽ hoạt động với lớp tương thích Darling.
- Mantle có bản triển khai bên thứ ba đang được phát triển tên là GRVK, nhằm hỗ trợ các trò chơi Mantle cũ.
Các API đồ họa cụ thể cho từng nền tảng, khi triển khai trên Vulkan, có thể hoạt động trên các nền tảng khác. Ví dụ, DXVK cung cấp một thư viện thay thế cho Linux, giúp chuyển các trò chơi từ hệ điều hành khác sang Linux mà không cần lớp tương thích Wine.
- Danh sách các thư viện đồ họa 3D
Ghi chú bổ sung
Tiếp tục đọc
- Vulkan Programming Guide: Hướng dẫn Chính thức về Vulkan (OpenGL), xuất bản ngày 10 tháng 11 năm 2016, tác giả Graham Sellers và John Kessenich, ISBN 978-0-1344-64541
- Learning Vulkan, tháng 12 năm 2016, tác giả Parminder Singh, ISBN 978-1-78646-980-9
- Introduction to Computer Graphics and the Vulkan API, xuất bản ngày 1 tháng 7 năm 2017, tác giả Kenwright, ISBN 978-1-5486-16175
- Vulkan Cookbook, xuất bản ngày 28 tháng 4 năm 2017, tác giả Pawel Lapinski, ISBN 978-1-7864-68154
Các liên kết bên ngoài
Tiêu chuẩn Khronos Group | |
---|---|
Hoạt động |
|
Đã ngừng |
|