192 lines
10 KiB
Markdown
192 lines
10 KiB
Markdown
# Stroll Vulkan ICD <a href="https://git.kbz8.me/kbz_8/VulkanDriver/actions?workflows=Build.yml"><img src="https://git.kbz8.me/kbz_8/VulkanDriver/actions/workflows/Build.yml/badge.svg"></a> <a href="https://git.kbz8.me/kbz_8/VulkanDriver/actions?workflows=Test.yml"><img src="https://git.kbz8.me/kbz_8/VulkanDriver/actions/workflows/Test.yml/badge.svg"></a>
|
|
|
|
<img align="right" src="https://matthew.kerwin.net.au/blog_files/kappa"/>
|
|
|
|
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 web's 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
|
|
|
|
<details>
|
|
<summary>
|
|
The present standing of thy Vulkan 1.0 specification's implementation
|
|
</summary>
|
|
|
|
\
|
|
⚠️ 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 | ⚙️ WIP
|
|
vkCmdCopyQueryPoolResults | ⚙️ WIP
|
|
vkCmdDispatch | ⚙️ WIP
|
|
vkCmdDispatchIndirect | ⚙️ WIP
|
|
vkCmdDraw | ⚙️ WIP
|
|
vkCmdDrawIndexed | ⚙️ WIP
|
|
vkCmdDrawIndexedIndirect | ⚙️ WIP
|
|
vkCmdDrawIndirect | ⚙️ WIP
|
|
vkCmdEndQuery | ⚙️ WIP
|
|
vkCmdEndRenderPass | ⚙️ WIP
|
|
vkCmdExecuteCommands | ⚙️ WIP
|
|
vkCmdFillBuffer | ✅ Implemented
|
|
vkCmdNextSubpass | ⚙️ WIP
|
|
vkCmdPipelineBarrier | ⚙️ WIP
|
|
vkCmdPushConstants | ⚙️ WIP
|
|
vkCmdResetEvent | ⚙️ WIP
|
|
vkCmdResetQueryPool | ⚙️ WIP
|
|
vkCmdResolveImage | ⚙️ WIP
|
|
vkCmdSetBlendConstants | ⚙️ WIP
|
|
vkCmdSetDepthBias | ⚙️ WIP
|
|
vkCmdSetDepthBounds | ⚙️ WIP
|
|
vkCmdSetEvent | ⚙️ WIP
|
|
vkCmdSetLineWidth | ⚙️ WIP
|
|
vkCmdSetScissor | ⚙️ WIP
|
|
vkCmdSetStencilCompareMask | ⚙️ WIP
|
|
vkCmdSetStencilReference | ⚙️ WIP
|
|
vkCmdSetStencilWriteMask | ⚙️ WIP
|
|
vkCmdSetViewport | ⚙️ WIP
|
|
vkCmdUpdateBuffer | ⚙️ WIP
|
|
vkCmdWaitEvents | ⚙️ WIP
|
|
vkCmdWriteTimestamp | ⚙️ WIP
|
|
vkCreateBuffer | ✅ Implemented
|
|
vkCreateBufferView | ⚙️ WIP
|
|
vkCreateCommandPool | ✅ Implemented
|
|
vkCreateComputePipelines | ⚙️ WIP
|
|
vkCreateDescriptorPool | ⚙️ WIP
|
|
vkCreateDescriptorSetLayout | ⚙️ WIP
|
|
vkCreateDevice | ✅ Implemented
|
|
vkCreateEvent | ⚙️ WIP
|
|
vkCreateFence | ✅ Implemented
|
|
vkCreateFramebuffer | ⚙️ WIP
|
|
vkCreateGraphicsPipelines | ⚙️ WIP
|
|
vkCreateImage | ✅ Implemented
|
|
vkCreateImageView | ✅ Implemented
|
|
vkCreateInstance | ✅ Implemented
|
|
vkCreatePipelineCache | ⚙️ WIP
|
|
vkCreatePipelineLayout | ⚙️ WIP
|
|
vkCreateQueryPool | ⚙️ WIP
|
|
vkCreateRenderPass | ⚙️ WIP
|
|
vkCreateSampler | ⚙️ WIP
|
|
vkCreateSemaphore | ⚙️ WIP
|
|
vkCreateShaderModule | ⚙️ WIP
|
|
vkDestroyBuffer | ✅ Implemented
|
|
vkDestroyBufferView | ⚙️ WIP
|
|
vkDestroyCommandPool | ✅ Implemented
|
|
vkDestroyDescriptorPool | ⚙️ WIP
|
|
vkDestroyDescriptorSetLayout | ⚙️ WIP
|
|
vkDestroyDevice | ✅ Implemented
|
|
vkDestroyEvent | ⚙️ WIP
|
|
vkDestroyFence | ✅ Implemented
|
|
vkDestroyFramebuffer | ⚙️ WIP
|
|
vkDestroyImage | ✅ Implemented
|
|
vkDestroyImageView | ✅ Implemented
|
|
vkDestroyInstance | ✅ Implemented
|
|
vkDestroyPipeline | ⚙️ WIP
|
|
vkDestroyPipelineCache | ⚙️ WIP
|
|
vkDestroyPipelineLayout | ⚙️ WIP
|
|
vkDestroyQueryPool | ⚙️ WIP
|
|
vkDestroyRenderPass | ⚙️ WIP
|
|
vkDestroySampler | ⚙️ WIP
|
|
vkDestroySemaphore | ⚙️ WIP
|
|
vkDestroyShaderModule | ⚙️ WIP
|
|
vkDeviceWaitIdle | ⚙️ WIP
|
|
vkEndCommandBuffer | ✅ Implemented
|
|
vkEnumerateDeviceExtensionProperties | ⚙️ WIP
|
|
vkEnumerateDeviceLayerProperties | ⚙️ WIP
|
|
vkEnumerateInstanceExtensionProperties | ⚙️ WIP
|
|
vkEnumerateInstanceLayerProperties | ⚙️ WIP
|
|
vkEnumeratePhysicalDevices | ✅ Implemented
|
|
vkFlushMappedMemoryRanges | ⚙️ WIP
|
|
vkFreeCommandBuffers | ✅ Implemented
|
|
vkFreeDescriptorSets | ⚙️ WIP
|
|
vkFreeMemory | ✅ Implemented
|
|
vkGetBufferMemoryRequirements | ✅ Implemented
|
|
vkGetDeviceMemoryCommitment | ⚙️ WIP
|
|
vkGetDeviceProcAddr | ✅ Implemented
|
|
vkGetDeviceQueue | ✅ Implemented
|
|
vkGetEventStatus | ⚙️ WIP
|
|
vkGetFenceStatus | ✅ Implemented
|
|
vkGetImageMemoryRequirements | ✅ Implemented
|
|
vkGetImageSparseMemoryRequirements | ⚙️ WIP
|
|
vkGetImageSubresourceLayout | ⚙️ WIP
|
|
vkGetInstanceProcAddr | ✅ Implemented
|
|
vkGetPhysicalDeviceFeatures | ✅ Implemented
|
|
vkGetPhysicalDeviceFormatProperties | ⚙️ WIP
|
|
vkGetPhysicalDeviceImageFormatProperties | ⚙️ WIP
|
|
vkGetPhysicalDeviceMemoryProperties | ✅ Implemented
|
|
vkGetPhysicalDeviceProperties | ✅ Implemented
|
|
vkGetPhysicalDeviceQueueFamilyProperties | ✅ Implemented
|
|
vkGetPhysicalDeviceSparseImageFormatProperties | ⚙️ WIP
|
|
vkGetPipelineCacheData | ⚙️ WIP
|
|
vkGetQueryPoolResults | ⚙️ WIP
|
|
vkGetRenderAreaGranularity | ⚙️ WIP
|
|
vkInvalidateMappedMemoryRanges | ⚙️ WIP
|
|
vkMapMemory | ✅ Implemented
|
|
vkMergePipelineCaches | ⚙️ WIP
|
|
vkQueueBindSparse | ⚙️ WIP
|
|
vkQueueSubmit | ✅ Implemented
|
|
vkQueueWaitIdle | ✅ Implemented
|
|
vkResetCommandBuffer | ✅ Implemented
|
|
vkResetCommandPool | ⚙️ WIP
|
|
vkResetDescriptorPool | ⚙️ WIP
|
|
vkResetEvent | ⚙️ WIP
|
|
vkResetFences | ✅ Implemented
|
|
vkSetEvent | ⚙️ WIP
|
|
vkUnmapMemory | ✅ Implemented
|
|
vkUpdateDescriptorSets | ⚙️ WIP
|
|
vkWaitForFences | ✅ Implemented
|
|
</details>
|
|
|
|
[Here](https://vulkan-driver-cts-report.kbz8.me/) shalt thou find a most meticulous account of the Vulkan 1.0 conformance trials, set forth for thy scrutiny.
|
|
|
|
## 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.
|