Прадстаўлены новы эксперыментальны Vulkan-драйвер Малпа - адкрытая праграмная рэалізацыя Vulkan ICD, напісаная амаль цалкам на зіг і не выкарыстоўвалая код Mesa. Праект пакуль не прэтэндуе на прамысловае ўжыванне: аўтар прама апісвае яго як навучальную спробу "сабраць драйвер рукамі" і папярэджвае не выкарыстоўваць Ape у сур'ёзных праектах. Код апублікаваны пад ліцэнзіяй Масачусецкі тэхналагічны інстытут.
Цікавасць да Ape з'явілася пасля таго, як у спецыфікацыю Vulkan быў дададзены асобны vendor ID для Малпа і driver ID для 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; на асноўнай forge-старонцы праекта мова пазначана як 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"-эксперыменту, але да статуту паўнавартаснага сумяшчальнага драйвера яму яшчэ трэба мінуць праверку і зачыніць незавершаныя месцы.Ёсць каманды адмалёўкі і compute.
У спісе рэалізаваных функцый адзначаны vkCmdDraw, vkCmdDrawIndexed, vkCmdDrawIndirect, vkCmdDrawIndexedIndirect, vkCmdDispatch і vkCmdDispatchIndirect. Ape пакрывае не толькі базавую інфраструктуру Vulkan, але і два ключавых сцэнара API: графічную адмалёўку і вылічальныя пайплайны.Падтрымліваюцца swapchain і вывад праз Wayland.
У статусе рэалізацыі адзначаны vkCreateSwapchainKHR, vkQueuePresentKHR, vkCreateWaylandSurfaceKHR, а таксама праверкі падтрымкі Wayland presentation. Наяўнасць swapchain і Wayland-паверхні азначае, што драйвер накіраваны не толькі на афлайн-тэсты, але і на выснову малюнка ў рэальнае аконнае асяроддзе Linux.Частка WSI для X11 і Windows пакуль у працы.
vkCreateXcbSurfaceKHR, vkCreateXlibSurfaceKHR, vkCreateWin32SurfaceKHR і адпаведныя функцыі праверкі presentation support пазначаныя як 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 пры выбарцы і рэалізацыі binary semaphores. Праект актыўна развіваецца менавіта ў бок практычнай сумяшчальнасці з тэстамі Vulkan і рэальнымі графічнымі сцэнарыямі.Праект не ставіць за мэту прадукцыйнасць.
Аўтар прама піша, што Ape створаны для вывучэння Vulkan і не імкнецца быць прадукцыйным ці production-ready драйверам. Успрымаць Ape варта як даследчы праект, навучальную рэалізацыю Vulkan і эксперымент з Zig, а не як канкурэнт Mesa RADV, ANV, NVK ці Lavapipe.
У сухім астатку Ape цікавы не тым, што яго можна будзе заўтра паставіць замест Mesa, а тым, што гэта самастойная рэалізацыя Vulkan ICD на Zig з уласным SPIR-V-інтэрпрэтатарам, праграмным рэндэрэрам і ўжо прыкметным пакрыццём Vulkan 1.0. Для звычайных карыстачоў карысці пакуль мала, затое для распрацоўнікаў драйвераў, аўтараў рантаймаў і людзей, якія вывучаюць унутраную прыладу Vulkan, праект выглядае як цікаўны жывы палігон.
Крыніца: linux.org.ru
