Stroll Vulkan ICD

A driver as slow as Lance Stroll.

Here lies the source code of a rather calamitous attempt at the Vulkan specification, shaped into an Installable Client Driver for a software-based renderer, all written in Zig.

It was forged for my own learning and amusement alone. Pray, do not wield it in any earnest project, lest thy hopes and frame rates both find themselves entombed.

Purpose

To understand Vulkan — not as a humble API mere mortals call upon, but as a labyrinthine system where one may craft a driver by hand. It does not seek to produce a performant or production-worthy driver.
The gods are merciful, but not that merciful.

Build

If thou art truly determined:

zig build

Then ensure thy Vulkan loader is pointed toward the ICD manifest. The precise ritual varies by system — consult the tomes of your operating system, or wander the webs endless mausoleum of documentation.

Use at your own risk. If thy machine shudders, weeps, or attempts to flee — know that it was warned.

Thou may also conjure forth a tome of compile commands by doing thus:

zig build cdb

Vulkan 1.0 specification

The present standing of thy Vulkan 1.0 specification's implementation


⚠️ Implemented, yet perchance not fully tested nor proven conformant, but rather working in a manner most general to thee and thine.

Name Status
vkAllocateCommandBuffers Implemented
vkAllocateDescriptorSets ⚙️ WIP
vkAllocateMemory Implemented
vkBeginCommandBuffer Implemented
vkBindBufferMemory Implemented
vkBindImageMemory Implemented
vkCmdBeginQuery ⚙️ WIP
vkCmdBeginRenderPass ⚙️ WIP
vkCmdBindDescriptorSets ⚙️ WIP
vkCmdBindIndexBuffer ⚙️ WIP
vkCmdBindPipeline ⚙️ WIP
vkCmdBindVertexBuffers ⚙️ WIP
vkCmdBlitImage ⚙️ WIP
vkCmdClearAttachments ⚙️ WIP
vkCmdClearColorImage ⚙️ WIP
vkCmdClearDepthStencilImage ⚙️ WIP
vkCmdCopyBuffer Implemented
vkCmdCopyBufferToImage ⚙️ WIP
vkCmdCopyImage ⚙️ WIP
vkCmdCopyImageToBuffer Not implemented
vkCmdCopyQueryPoolResults Not implemented
vkCmdDispatch Not implemented
vkCmdDispatchIndirect Not implemented
vkCmdDraw Not implemented
vkCmdDrawIndexed Not implemented
vkCmdDrawIndexedIndirect Not implemented
vkCmdDrawIndirect Not implemented
vkCmdEndQuery Not implemented
vkCmdEndRenderPass Not implemented
vkCmdExecuteCommands Not implemented
vkCmdFillBuffer Implemented
vkCmdNextSubpass Not implemented
vkCmdPipelineBarrier Not implemented
vkCmdPushConstants Not implemented
vkCmdResetEvent Not implemented
vkCmdResetQueryPool Not implemented
vkCmdResolveImage Not implemented
vkCmdSetBlendConstants Not implemented
vkCmdSetDepthBias Not implemented
vkCmdSetDepthBounds Not implemented
vkCmdSetEvent Not implemented
vkCmdSetLineWidth Not implemented
vkCmdSetScissor Not implemented
vkCmdSetStencilCompareMask Not implemented
vkCmdSetStencilReference Not implemented
vkCmdSetStencilWriteMask Not implemented
vkCmdSetViewport Not implemented
vkCmdUpdateBuffer Not implemented
vkCmdWaitEvents Not implemented
vkCmdWriteTimestamp Not implemented
vkCreateBuffer Implemented
vkCreateBufferView Not implemented
vkCreateCommandPool Implemented
vkCreateComputePipelines Not implemented
vkCreateDescriptorPool ⚙️ WIP
vkCreateDescriptorSetLayout ⚙️ WIP
vkCreateDevice Implemented
vkCreateEvent Not implemented
vkCreateFence Implemented
vkCreateFramebuffer Not implemented
vkCreateGraphicsPipelines Not implemented
vkCreateImage Implemented
vkCreateImageView Implemented
vkCreateInstance Implemented
vkCreatePipelineCache Not implemented
vkCreatePipelineLayout Not implemented
vkCreateQueryPool Not implemented
vkCreateRenderPass Not implemented
vkCreateSampler Not implemented
vkCreateSemaphore Not implemented
vkCreateShaderModule Not implemented
vkDestroyBuffer Implemented
vkDestroyBufferView Not implemented
vkDestroyCommandPool Implemented
vkDestroyDescriptorPool ⚙️ WIP
vkDestroyDescriptorSetLayout ⚙️ WIP
vkDestroyDevice Implemented
vkDestroyEvent Not implemented
vkDestroyFence Implemented
vkDestroyFramebuffer Not implemented
vkDestroyImage Implemented
vkDestroyImageView Implemented
vkDestroyInstance Implemented
vkDestroyPipeline Not implemented
vkDestroyPipelineCache Not implemented
vkDestroyPipelineLayout Not implemented
vkDestroyQueryPool Not implemented
vkDestroyRenderPass Not implemented
vkDestroySampler Not implemented
vkDestroySemaphore Not implemented
vkDestroyShaderModule Not implemented
vkDeviceWaitIdle Not implemented
vkEndCommandBuffer Implemented
vkEnumerateDeviceExtensionProperties ⚙️ WIP
vkEnumerateDeviceLayerProperties ⚙️ WIP
vkEnumerateInstanceExtensionProperties ⚙️ WIP
vkEnumerateInstanceLayerProperties ⚙️ WIP
vkEnumeratePhysicalDevices Implemented
vkFlushMappedMemoryRanges Not implemented
vkFreeCommandBuffers Implemented
vkFreeDescriptorSets ⚙️ WIP
vkFreeMemory Implemented
vkGetBufferMemoryRequirements Implemented
vkGetDeviceMemoryCommitment Not implemented
vkGetDeviceProcAddr Implemented
vkGetDeviceQueue Implemented
vkGetEventStatus Not implemented
vkGetFenceStatus Implemented
vkGetImageMemoryRequirements Implemented
vkGetImageSparseMemoryRequirements Not implemented
vkGetImageSubresourceLayout Not implemented
vkGetInstanceProcAddr Implemented
vkGetPhysicalDeviceFeatures Implemented
vkGetPhysicalDeviceFormatProperties ⚙️ WIP
vkGetPhysicalDeviceImageFormatProperties ⚙️ WIP
vkGetPhysicalDeviceMemoryProperties Implemented
vkGetPhysicalDeviceProperties Implemented
vkGetPhysicalDeviceQueueFamilyProperties Implemented
vkGetPhysicalDeviceSparseImageFormatProperties ⚙️ WIP
vkGetPipelineCacheData Not implemented
vkGetQueryPoolResults Not implemented
vkGetRenderAreaGranularity Not implemented
vkInvalidateMappedMemoryRanges Not implemented
vkMapMemory Implemented
vkMergePipelineCaches Not implemented
vkQueueBindSparse Not implemented
vkQueueSubmit Implemented
vkQueueWaitIdle Implemented
vkResetCommandBuffer Implemented
vkResetCommandPool Not implemented
vkResetDescriptorPool Not implemented
vkResetEvent Not implemented
vkResetFences Implemented
vkSetEvent Not implemented
vkUnmapMemory Implemented
vkUpdateDescriptorSets Not implemented
vkWaitForFences Implemented

License

Released unto the world as MIT for study, experimentation, and the occasional horrified whisper. Do with it as thou wilt, but accept the consequences as thine own.

Description
A rather calamitous endeavor upon the Vulkan specification, fashioned into an Installable Client Driver for my own learning… and a touch of personal amusement.
https://vulkan-driver-docs.kbz8.me/ Readme MIT 444 KiB
Languages
Zig 95.7%
C 4.3%