Представено нов экспериментален Vulkan драйвер Ape — отворен софтверен реализатор на Vulkan ICD, написан почти изцяло на Zig и не използва кода на Mesa. Проектът все още не претендира за промишлена употреба: авторът го описва като учебен опит "да събере драйвер с ръце" и предупреждава да не се използва Ape в сериозни проекти. Кодът е публикуван под лиценз MIT.
Интересът към Ape се появи след като в спецификацията Vulkan беше добавен отделен идентификатор на доставчик за Ape и идентификатор на драйвер за ApeSoft. Съответното pull request в репозиторийта на KhronosGroup/Vulkan-Docs беше слято на 6 юни 2026 г.. В коментара авторът спомена, че работи върху любителски Vulkan драйвер и приближава до преминаване на всички тестове на Vulkan 1.0.
Всъщност, Ape не е драйвер за конкретна видеокарта, а софтверен Vulkan рендерер, близък по предназначение до Mesa Lavapipe: Vulkan команди се изпълняват чрез собствената реализация, без да се обръща към хардуерния GPU драйвер. В същото време Ape не е основан на Mesa и е написан като самостоятелна кодова база на Zig.
Какво вече може Ape
Работи като Vulkan ICD.
Ape е оформен като Installable Client Driver — тоест като драйвер, който може да бъде захванат от стандартния Vulkan loader през ICD манифест. След компилирането авторът предлага да посочи на загрузчика Vulkan съответния manifest файл. Това прави проекта не просто набор от експерименти, а истинска реализация на Vulkan драйвер, макар и учебна. Vulkan loader е точно проектиран да открива и свързва няколко ICD драйвера в системата.Пълно написан на Zig.
Основната кодова база на Ape е написана на Zig; на основната страница на проекта езикът е посочен като Zig 99,9%. Phoronix подчертава отделно, че проектът не зависи от Mesa и е реализиран точно на Zig, а не на C/C++. Графичните драйвери традиционно се пишат на C/C++, а Ape показва, че Vulkan ICD може да се реализира и на по-съвременен системен език.Има софтуерна реализация на ApeSoft.
В проекта е отделена софтуерната реализация Мек, която е част от самата кодова база на драйвера. Тя използва собствен SPIR-V интерпретатор и собствен рендерер. Ape не просто приема Vulkan повиквания, а се опитва самостоятелно да изпълнява шейдъри и рендеринг на CPU.Поддържа сборка чрез Zig build.
В README е указанный способ сборки с помощю команди zig build soft. След това трябва да настроите Vulkan loader на ICD manifest. В момента това е явно инструмент за разработчици и ентусиасти, а не пакет "инсталирайте и стартирайте".Реализирана е значителна част от Vulkan 1.0.
В README е представен списък със статуса на функциите на Vulkan 1.0. Сред реализираните са създаването на екземпляр и устройство, заделяне на памет, буфери, изображения, command buffers, render pass, framebuffer, graphics pipeline, compute pipeline, shader modules, descriptor sets, swapchain и основни команди за визуализация. По набор от реализирани функции проектът вече е преминал отвъд "hello triangle" експеримента, но за да достигне статус на напълно съвместим драйвер, трябва да премине проверка и да закрие незавършените части.Има команди за визуализация и изчисления.
В списъка с реализирани функции са отбелязани vkCmdDraw, vkCmdDrawIndexed, vkCmdDrawIndirect, vkCmdDrawIndexedIndirect, vkCmdDispatch и vkCmdDispatchIndirect. Ape обхваща не само основната инфраструктура на Vulkan, но и два ключови сценария на API: визуализация и изчислителни пайплайни.Поддържат се swapchain и изход през Wayland.
В статуса на реализацията са отбелязани vkCreateSwapchainKHR, vkQueuePresentKHR, vkCreateWaylandSurfaceKHR, както и проверки за поддръжка на презентацията на Wayland. Наличието на swapchain и Wayland повърхност означава, че драйверът е насочен не само към офлайн тестове, но и към извеждане на изображение в реална графична среда на Linux.Части от WSI за X11 и Windows все още са в работа.
vkCreateXcbSurfaceKHR, vkCreateXlibSurfaceKHR, vkCreateWin32SurfaceKHR и съответстващите функции за проверка на поддръжката на презентацията са обозначени като WIP. Wayland вече е наличен, а поддръжката за X11/Windows все още не е доведена до завършено състояние.Някои елементи от Vulkan 1.0 все още не са готови или не се поддържат.
В статуса WIP са указани, например, vkCreatePipelineCache, vkCreateSemaphore, vkGetQueryPoolResults, vkMergePipelineCaches, част от динамичните състояния и timestamp командите. Sparse функциите като vkQueueBindSparse и vkGetImageSparseMemoryRequirements са обозначени като unsupported. Ape е близо до Vulkan 1.0 по обхват, но все още не е универсална замяна на нормалния Vulkan драйвер.Появиха се свежи доработки по визуализацията и синхронизацията.
В историята на проекта на 5–6 юни са отбелязани промени като добавяне на primitive restart, integer texture sampling, управление на mip/lod при избор и реализиране на бинарни семафори. Проектът активно се развива именно в посока практическа съвместимост с тестовете на Vulkan и реалните графични сценарии.Проектът не цели производителността.
Авторът ясно посочва, че Ape е създаден за изучаване на Vulkan и не цели да бъде производителен или готов за производствени среди драйвер. Струва си да се възприема Ape като изследователски проект, учебна реализация на Vulkan и експеримент с Zig, а не като конкурент на Mesa RADV, ANV, NVK или Lavapipe.
В крайна сметка Ape е интересен не защото утре ще може да замени Mesa, а заради това, че представлява самостоятелна реализация на Vulkan ICD на Zig с вътрешен SPIR-V интерпретатор, софтуерен рендерер и вече забележимо покритие на Vulkan 1.0. За обикновените потребители ползата е малко, но за разработчиците на драйвери, авторите на рантаймове и хората, изучаващи вътрешното устройство на Vulkan, проектът изглежда като любопитен жив полигон.
Източник: linux.org.ru
