Files
VulkanDriver/README.md
T
kbz_8 e68d78cccc
Mirror Gitea refs to GitHub / mirror (push) Successful in 39s
Test / build_and_test (push) Successful in 5m15s
Build / build (push) Successful in 7m20s
[Phi] adding basic host emulation for development without access to a
Xeon Phi
2026-08-02 12:46:59 +02:00

665 lines
42 KiB
Markdown

# Ape 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" width="250px" src="./logo.png"/>
For I feel as an ape, smiting sticks together in the vain hope of forging a driver.
Here lies the source code of a rather calamitous attempt at the Vulkan specification, shaped into an Installable Client Driver 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._
## Soft [software]
Soft be a software implementation of the Vulkan specification, abiding within this driver's own codebase.\
It maketh use of a bespoke [SPIR-V interpreter](https://git.kbz8.me/kbz_8/SPIRV-Interpreter) and renderer, by whose workings its labours are carried forth.
### Build
If thou art truly determined:
```
zig build soft --release=[fast|safe|small]
```
And should thou seek additional build options with:
```
zig build --help
```
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.
#### 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.\
Assume thou that functions lacking in this array are, for now, not intended to be wrought.
| Name | Status |
| ------------------------------------------------ | -------------- |
| vkAcquireNextImage2KHR | ✅ Implemented |
| vkAcquireNextImageKHR | ✅ Implemented |
| vkAllocateCommandBuffers | ✅ Implemented |
| vkAllocateDescriptorSets | ✅ Implemented |
| vkAllocateMemory | ✅ Implemented |
| vkBeginCommandBuffer | ✅ Implemented |
| vkBindBufferMemory | ✅ Implemented |
| vkBindImageMemory | ✅ Implemented |
| vkCmdBeginQuery | ✅ Implemented |
| vkCmdBeginRenderPass | ✅ Implemented |
| vkCmdBindDescriptorSets | ✅ Implemented |
| vkCmdBindIndexBuffer | ✅ Implemented |
| vkCmdBindPipeline | ✅ Implemented |
| vkCmdBindVertexBuffers | ✅ Implemented |
| vkCmdBlitImage | ✅ Implemented |
| vkCmdClearAttachments | ✅ Implemented |
| vkCmdClearColorImage | ✅ Implemented |
| vkCmdClearDepthStencilImage | ✅ Implemented |
| vkCmdCopyBuffer | ✅ Implemented |
| vkCmdCopyBufferToImage | ✅ Implemented |
| vkCmdCopyImage | ✅ Implemented |
| vkCmdCopyImageToBuffer | ✅ Implemented |
| vkCmdCopyQueryPoolResults | ✅ Implemented |
| vkCmdDispatch | ✅ Implemented |
| vkCmdDispatchBaseKHR | ✅ Implemented |
| vkCmdDispatchIndirect | ✅ Implemented |
| vkCmdDraw | ✅ Implemented |
| vkCmdDrawIndexed | ✅ Implemented |
| vkCmdDrawIndexedIndirect | ✅ Implemented |
| vkCmdDrawIndirect | ✅ Implemented |
| vkCmdEndQuery | ✅ Implemented |
| vkCmdEndRenderPass | ✅ Implemented |
| vkCmdExecuteCommands | ✅ Implemented |
| vkCmdFillBuffer | ✅ Implemented |
| vkCmdNextSubpass | ✅ Implemented |
| vkCmdPipelineBarrier | ✅ Implemented |
| vkCmdPushConstants | ✅ Implemented |
| vkCmdResetEvent | ✅ Implemented |
| vkCmdResetQueryPool | ✅ Implemented |
| vkCmdResolveImage | ✅ Implemented |
| vkCmdSetBlendConstants | ✅ Implemented |
| vkCmdSetDepthBias | ✅ Implemented |
| vkCmdSetDepthBounds | ✅ Implemented |
| vkCmdSetDeviceMaskKHR | ✅ Implemented |
| vkCmdSetEvent | ✅ Implemented |
| vkCmdSetLineWidth | ✅ Implemented |
| vkCmdSetScissor | ✅ Implemented |
| vkCmdSetStencilCompareMask | ✅ Implemented |
| vkCmdSetStencilReference | ✅ Implemented |
| vkCmdSetStencilWriteMask | ✅ Implemented |
| vkCmdSetViewport | ✅ Implemented |
| vkCmdUpdateBuffer | ✅ Implemented |
| vkCmdWaitEvents | ✅ Implemented |
| vkCmdWriteTimestamp | ✅ Implemented |
| vkCreateBuffer | ✅ Implemented |
| vkCreateBufferView | ✅ Implemented |
| vkCreateCommandPool | ✅ Implemented |
| vkCreateComputePipelines | ✅ Implemented |
| vkCreateDescriptorPool | ✅ Implemented |
| vkCreateDescriptorSetLayout | ✅ Implemented |
| vkCreateDevice | ✅ Implemented |
| vkCreateEvent | ✅ Implemented |
| vkCreateFence | ✅ Implemented |
| vkCreateFramebuffer | ✅ Implemented |
| vkCreateGraphicsPipelines | ✅ Implemented |
| vkCreateImage | ✅ Implemented |
| vkCreateImageView | ✅ Implemented |
| vkCreateInstance | ✅ Implemented |
| vkCreatePipelineCache | ✅ Implemented |
| vkCreatePipelineLayout | ✅ Implemented |
| vkCreateQueryPool | ✅ Implemented |
| vkCreateRenderPass | ✅ Implemented |
| vkCreateSampler | ✅ Implemented |
| vkCreateSemaphore | ✅ Implemented |
| vkCreateShaderModule | ✅ Implemented |
| vkCreateSwapchainKHR | ✅ Implemented |
| vkCreateWaylandSurfaceKHR | ✅ Implemented |
| vkCreateWin32SurfaceKHR | ⚙️ WIP |
| vkCreateXcbSurfaceKHR | ⚙️ WIP |
| vkCreateXlibSurfaceKHR | ⚙️ WIP |
| vkDestroyBuffer | ✅ Implemented |
| vkDestroyBufferView | ✅ Implemented |
| vkDestroyCommandPool | ✅ Implemented |
| vkDestroyDescriptorPool | ✅ Implemented |
| vkDestroyDescriptorSetLayout | ✅ Implemented |
| vkDestroyDevice | ✅ Implemented |
| vkDestroyEvent | ✅ Implemented |
| vkDestroyFence | ✅ Implemented |
| vkDestroyFramebuffer | ✅ Implemented |
| vkDestroyImage | ✅ Implemented |
| vkDestroyImageView | ✅ Implemented |
| vkDestroyInstance | ✅ Implemented |
| vkDestroyPipeline | ✅ Implemented |
| vkDestroyPipelineCache | ✅ Implemented |
| vkDestroyPipelineLayout | ✅ Implemented |
| vkDestroyQueryPool | ✅ Implemented |
| vkDestroyRenderPass | ✅ Implemented |
| vkDestroySampler | ✅ Implemented |
| vkDestroySemaphore | ✅ Implemented |
| vkDestroyShaderModule | ✅ Implemented |
| vkDestroySurfaceKHR | ✅ Implemented |
| vkDestroySwapchainKHR | ✅ Implemented |
| vkDeviceWaitIdle | ✅ Implemented |
| vkEndCommandBuffer | ✅ Implemented |
| vkEnumerateDeviceExtensionProperties | ✅ Implemented |
| vkEnumerateDeviceLayerProperties | ✅ Implemented |
| vkEnumerateInstanceExtensionProperties | ✅ Implemented |
| vkEnumerateInstanceLayerProperties | ✅ Implemented |
| vkEnumeratePhysicalDeviceGroupsKHR | ✅ Implemented |
| vkEnumeratePhysicalDevices | ✅ Implemented |
| vkFlushMappedMemoryRanges | ✅ Implemented |
| vkFreeCommandBuffers | ✅ Implemented |
| vkFreeDescriptorSets | ✅ Implemented |
| vkFreeMemory | ✅ Implemented |
| vkGetBufferDeviceAddress | ✅ Implemented |
| vkGetBufferDeviceAddressEXT | ✅ Implemented |
| vkGetBufferDeviceAddressKHR | ✅ Implemented |
| vkGetBufferMemoryRequirements | ✅ Implemented |
| vkGetDeviceGroupPeerMemoryFeaturesKHR | ✅ Implemented |
| vkGetDeviceGroupPresentCapabilitiesKHR | ✅ Implemented |
| vkGetDeviceGroupSurfacePresentModesKHR | ✅ Implemented |
| vkGetDeviceMemoryCommitment | ✅ Implemented |
| vkGetDeviceProcAddr | ✅ Implemented |
| vkGetDeviceQueue | ✅ Implemented |
| vkGetEventStatus | ✅ Implemented |
| vkGetFenceStatus | ✅ Implemented |
| vkGetImageMemoryRequirements | ✅ Implemented |
| vkGetImageSparseMemoryRequirements | ❎ Unsupported |
| vkGetImageSubresourceLayout | ✅ Implemented |
| vkGetInstanceProcAddr | ✅ Implemented |
| vkGetPhysicalDeviceFeatures | ✅ Implemented |
| vkGetPhysicalDeviceFormatProperties | ✅ Implemented |
| vkGetPhysicalDeviceImageFormatProperties | ✅ Implemented |
| vkGetPhysicalDeviceMemoryProperties | ✅ Implemented |
| vkGetPhysicalDeviceProperties | ✅ Implemented |
| vkGetPhysicalDeviceQueueFamilyProperties | ✅ Implemented |
| vkGetPhysicalDeviceSparseImageFormatProperties | ❎ Unsupported |
| vkGetPhysicalDeviceSurfaceCapabilitiesKHR | ✅ Implemented |
| vkGetPhysicalDeviceSurfaceFormatsKHR | ✅ Implemented |
| vkGetPhysicalDeviceSurfacePresentModesKHR | ✅ Implemented |
| vkGetPhysicalDeviceSurfaceSupportKHR | ✅ Implemented |
| vkGetPhysicalDeviceWaylandPresentationSupportKHR | ✅ Implemented |
| vkGetPhysicalDeviceWin32PresentationSupportKHR | ⚙️ WIP |
| vkGetPhysicalDeviceXcbPresentationSupportKHR | ⚙️ WIP |
| vkGetPhysicalDeviceXlibPresentationSupportKHR | ⚙️ WIP |
| vkGetPipelineCacheData | ✅ Implemented |
| vkGetQueryPoolResults | ✅ Implemented |
| vkGetRenderAreaGranularity | ✅ Implemented |
| vkGetSwapchainImagesKHR | ✅ Implemented |
| vkInvalidateMappedMemoryRanges | ✅ Implemented |
| vkMapMemory | ✅ Implemented |
| vkMergePipelineCaches | ✅ Implemented |
| vkQueueBindSparse | ❎ Unsupported |
| vkQueuePresentKHR | ✅ Implemented |
| vkQueueSubmit | ✅ Implemented |
| vkQueueWaitIdle | ✅ Implemented |
| vkResetCommandBuffer | ✅ Implemented |
| vkResetCommandPool | ✅ Implemented |
| vkResetDescriptorPool | ✅ Implemented |
| vkResetEvent | ✅ Implemented |
| vkResetFences | ✅ Implemented |
| vkResetQueryPool | ✅ Implemented |
| vkSetEvent | ✅ Implemented |
| vkUnmapMemory | ✅ Implemented |
| vkUpdateDescriptorSets | ✅ Implemented |
| vkWaitForFences | ✅ Implemented |
</details>
[Here](https://vulkan-driver.kbz8.me/cts/soft/) shalt thou find a most meticulous account of the Vulkan 1.0 conformance trials, set forth for thy scrutiny.
## Phi [Xeon Phi KNC]
Phi be an implementation of the Vulkan specification, wrought for the Xeon Phi Knights Corner cards.
Whether the Knights Landing cards shall one day receive the same providence remaineth to be seen.
### Build
To bring forth the driver:
```
zig build phi --release=[fast|safe|small]
```
To build Phi without a Xeon Phi card, enable host emulation:
```
zig build phi -Dphi-host-emulation=true --release=[fast|safe|small]
```
In this mode the daemon is compiled natively through Zig's `std.Build` C compilation support and installed as `zig-out/bin/phi_device-host`. The driver exposes one synthetic Phi physical device and communicates with the daemon over an IPv4 TCP socket bound only to `127.0.0.1`. The client socket is implemented directly with Zig's `std.Io.net` API; it does not reuse daemon C transport functions or load `libmicmgmt` or `libscif`.
The driver first connects to an already-running daemon. If none is listening, it launches its embedded daemon locally and retries the connection. The temporary embedded executable removes its own filesystem entry after launch. The daemon may also be started manually:
```
./zig-out/bin/phi_device-host
```
The loopback port defaults to `43616` and may be selected at build time for both the driver and daemon:
```
zig build phi -Dphi-host-emulation=true -Dphi-emulation-port=43617
```
Builds without `-Dphi-host-emulation=true` retain the real Xeon Phi path: the daemon is cross-compiled with the configured `k1om-mpss-linux-gcc`, deployed over SSH/SCP, and communicates through SCIF.
And for those who seek another manner of building:
```
zig build --help
```
The same rites apply as for the Soft build.
#### Vulkan 1.0 specification
<details>
<summary>
Here standeth the present reckoning of thy Vulkan 1.0 implementation
</summary>
\
⚠️ Implemented, yet perchance not fully tested nor proven conformant, but rather working in a manner most general to thee and thine.\
Assume thou that functions lacking in this array are, for now, not intended to be wrought.
| Name | Status |
| ------------------------------------------------ | -------------- |
| vkAcquireNextImage2KHR | ⚙️ WIP |
| vkAcquireNextImageKHR | ⚙️ WIP |
| vkAllocateCommandBuffers | ✅ Implemented |
| vkAllocateDescriptorSets | ⚙️ WIP |
| vkAllocateMemory | ✅ Implemented |
| vkBeginCommandBuffer | ✅ Implemented |
| vkBindBufferMemory | ⚙️ WIP |
| vkBindImageMemory | ✅ Implemented |
| vkCmdBeginQuery | ⚙️ WIP |
| vkCmdBeginRenderPass | ⚙️ WIP |
| vkCmdBindDescriptorSets | ⚙️ WIP |
| vkCmdBindIndexBuffer | ⚙️ WIP |
| vkCmdBindPipeline | ⚙️ WIP |
| vkCmdBindVertexBuffers | ⚙️ WIP |
| vkCmdBlitImage | ✅ Implemented |
| vkCmdClearAttachments | ⚙️ WIP |
| vkCmdClearColorImage | ⚙️ WIP |
| vkCmdClearDepthStencilImage | ⚙️ WIP |
| vkCmdCopyBuffer | ✅ Implemented |
| vkCmdCopyBufferToImage | ✅ Implemented |
| vkCmdCopyImage | ⚙️ WIP |
| vkCmdCopyImageToBuffer | ✅ Implemented |
| vkCmdCopyQueryPoolResults | ⚙️ WIP |
| vkCmdDispatch | ⚙️ WIP |
| vkCmdDispatchBaseKHR | ⚙️ 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 |
| vkCmdSetDeviceMaskKHR | ⚙️ WIP |
| vkCmdSetEvent | ⚙️ WIP |
| vkCmdSetLineWidth | ⚙️ WIP |
| vkCmdSetScissor | ⚙️ WIP |
| vkCmdSetStencilCompareMask | ⚙️ WIP |
| vkCmdSetStencilReference | ⚙️ WIP |
| vkCmdSetStencilWriteMask | ⚙️ WIP |
| vkCmdSetViewport | ⚙️ WIP |
| vkCmdUpdateBuffer | ⚙️ WIP |
| vkCmdWaitEvents | ⚙️ WIP |
| vkCmdWriteTimestamp | ⚙️ WIP |
| vkCreateBuffer | ⚙️ WIP |
| vkCreateBufferView | ⚙️ WIP |
| vkCreateCommandPool | ✅ Implemented |
| vkCreateComputePipelines | ⚙️ WIP |
| vkCreateDescriptorPool | ⚙️ WIP |
| vkCreateDescriptorSetLayout | ⚙️ WIP |
| vkCreateDevice | ✅ Implemented |
| vkCreateEvent | ⚙️ WIP |
| vkCreateFence | ⚙️ WIP |
| vkCreateFramebuffer | ⚙️ WIP |
| vkCreateGraphicsPipelines | ⚙️ WIP |
| vkCreateImage | ✅ Implemented |
| vkCreateImageView | ⚙️ WIP |
| vkCreateInstance | ✅ Implemented |
| vkCreatePipelineCache | ⚙️ WIP |
| vkCreatePipelineLayout | ⚙️ WIP |
| vkCreateQueryPool | ⚙️ WIP |
| vkCreateRenderPass | ⚙️ WIP |
| vkCreateSampler | ⚙️ WIP |
| vkCreateSemaphore | ⚙️ WIP |
| vkCreateShaderModule | ⚙️ WIP |
| vkCreateSwapchainKHR | ⚙️ WIP |
| vkCreateWaylandSurfaceKHR | ⚙️ WIP |
| vkCreateWin32SurfaceKHR | ⚙️ WIP |
| vkCreateXcbSurfaceKHR | ⚙️ WIP |
| vkCreateXlibSurfaceKHR | ⚙️ WIP |
| vkDestroyBuffer | ⚙️ WIP |
| vkDestroyBufferView | ⚙️ WIP |
| vkDestroyCommandPool | ✅ Implemented |
| vkDestroyDescriptorPool | ⚙️ WIP |
| vkDestroyDescriptorSetLayout | ⚙️ WIP |
| vkDestroyDevice | ✅ Implemented |
| vkDestroyEvent | ⚙️ WIP |
| vkDestroyFence | ⚙️ WIP |
| vkDestroyFramebuffer | ⚙️ WIP |
| vkDestroyImage | ✅ Implemented |
| vkDestroyImageView | ⚙️ WIP |
| vkDestroyInstance | ✅ Implemented |
| vkDestroyPipeline | ⚙️ WIP |
| vkDestroyPipelineCache | ⚙️ WIP |
| vkDestroyPipelineLayout | ⚙️ WIP |
| vkDestroyQueryPool | ⚙️ WIP |
| vkDestroyRenderPass | ⚙️ WIP |
| vkDestroySampler | ⚙️ WIP |
| vkDestroySemaphore | ⚙️ WIP |
| vkDestroyShaderModule | ⚙️ WIP |
| vkDestroySurfaceKHR | ⚙️ WIP |
| vkDestroySwapchainKHR | ⚙️ WIP |
| vkDeviceWaitIdle | ⚙️ WIP |
| vkEndCommandBuffer | ✅ Implemented |
| vkEnumerateDeviceExtensionProperties | ⚙️ WIP |
| vkEnumerateDeviceLayerProperties | ⚙️ WIP |
| vkEnumerateInstanceExtensionProperties | ⚙️ WIP |
| vkEnumerateInstanceLayerProperties | ⚙️ WIP |
| vkEnumeratePhysicalDeviceGroupsKHR | ⚙️ WIP |
| vkEnumeratePhysicalDevices | ✅ Implemented |
| vkFlushMappedMemoryRanges | ⚙️ WIP |
| vkFreeCommandBuffers | ⚙️ WIP |
| vkFreeDescriptorSets | ⚙️ WIP |
| vkFreeMemory | ✅ Implemented |
| vkGetBufferDeviceAddress | ⚙️ WIP |
| vkGetBufferDeviceAddressEXT | ⚙️ WIP |
| vkGetBufferDeviceAddressKHR | ⚙️ WIP |
| vkGetBufferMemoryRequirements | ⚙️ WIP |
| vkGetDeviceGroupPeerMemoryFeaturesKHR | ⚙️ WIP |
| vkGetDeviceGroupPresentCapabilitiesKHR | ⚙️ WIP |
| vkGetDeviceGroupSurfacePresentModesKHR | ⚙️ WIP |
| vkGetDeviceMemoryCommitment | ⚙️ WIP |
| vkGetDeviceProcAddr | ⚙️ WIP |
| vkGetDeviceQueue | ⚙️ WIP |
| vkGetEventStatus | ⚙️ WIP |
| vkGetFenceStatus | ⚙️ WIP |
| vkGetImageMemoryRequirements | ✅ Implemented |
| vkGetImageSparseMemoryRequirements | ⚙️ WIP |
| vkGetImageSubresourceLayout | ✅ Implemented |
| vkGetInstanceProcAddr | ⚙️ WIP |
| vkGetPhysicalDeviceFeatures | ✅ Implemented |
| vkGetPhysicalDeviceFormatProperties | ⚙️ WIP |
| vkGetPhysicalDeviceImageFormatProperties | ✅ Implemented |
| vkGetPhysicalDeviceMemoryProperties | ✅ Implemented |
| vkGetPhysicalDeviceProperties | ✅ Implemented |
| vkGetPhysicalDeviceQueueFamilyProperties | ⚙️ WIP |
| vkGetPhysicalDeviceSparseImageFormatProperties | ⚙️ WIP |
| vkGetPhysicalDeviceSurfaceCapabilitiesKHR | ⚙️ WIP |
| vkGetPhysicalDeviceSurfaceFormatsKHR | ⚙️ WIP |
| vkGetPhysicalDeviceSurfacePresentModesKHR | ⚙️ WIP |
| vkGetPhysicalDeviceSurfaceSupportKHR | ⚙️ WIP |
| vkGetPhysicalDeviceWaylandPresentationSupportKHR | ⚙️ WIP |
| vkGetPhysicalDeviceWin32PresentationSupportKHR | ⚙️ WIP |
| vkGetPhysicalDeviceXcbPresentationSupportKHR | ⚙️ WIP |
| vkGetPhysicalDeviceXlibPresentationSupportKHR | ⚙️ WIP |
| vkGetPipelineCacheData | ⚙️ WIP |
| vkGetQueryPoolResults | ⚙️ WIP |
| vkGetRenderAreaGranularity | ⚙️ WIP |
| vkGetSwapchainImagesKHR | ⚙️ WIP |
| vkInvalidateMappedMemoryRanges | ⚙️ WIP |
| vkMapMemory | ⚙️ WIP |
| vkMergePipelineCaches | ⚙️ WIP |
| vkQueueBindSparse | ⚙️ WIP |
| vkQueuePresentKHR | ⚙️ WIP |
| vkQueueSubmit | ✅ Implemented |
| vkQueueWaitIdle | ⚙️ WIP |
| vkResetCommandBuffer | ⚙️ WIP |
| vkResetCommandPool | ✅ Implemented |
| vkResetDescriptorPool | ⚙️ WIP |
| vkResetEvent | ⚙️ WIP |
| vkResetFences | ⚙️ WIP |
| vkResetQueryPool | ⚙️ WIP |
| vkSetEvent | ⚙️ WIP |
| vkUnmapMemory | ⚙️ WIP |
| vkUpdateDescriptorSets | ⚙️ WIP |
| vkWaitForFences | ⚙️ WIP |
</details>
[The present reckoning](https://vulkan-driver.kbz8.me/cts/phi/) of thy Vulkan 1.0 implementation standeth thus.
## Flint [Intel]
Flint be an implementation of the Vulkan specification, fashioned for the elder Intel iGPUs of generations 9 through 11.
Whether Haswell and those that followed-even the Xe kindred-shall one day partake of its workings remaineth unwritten.
### Build
The rite of forging the driver:
```
zig build flint --release=[fast|safe|small]
```
Should the foregoing not suffice, further build options await thee:
```
zig build --help
```
The same rites apply as for the Soft and Phi build.
#### Vulkan 1.0 specification
<details>
<summary>
Behold the present state of thy Vulkan 1.0 implementation
</summary>
\
⚠️ Implemented, yet perchance not fully tested nor proven conformant, but rather working in a manner most general to thee and thine.\
Assume thou that functions lacking in this array are, for now, not intended to be wrought.
| Name | Status |
| ------------------------------------------------ | -------------- |
| vkAcquireNextImage2KHR | ⚙️ WIP |
| vkAcquireNextImageKHR | ⚙️ WIP |
| 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 | ✅ Implemented |
| vkCmdCopyImage | ✅ Implemented |
| vkCmdCopyImageToBuffer | ✅ Implemented |
| vkCmdCopyQueryPoolResults | ⚙️ WIP |
| vkCmdDispatch | ⚙️ WIP |
| vkCmdDispatchBaseKHR | ⚙️ WIP |
| vkCmdDispatchIndirect | ⚙️ WIP |
| vkCmdDraw | ⚙️ WIP |
| vkCmdDrawIndexed | ⚙️ WIP |
| vkCmdDrawIndexedIndirect | ⚙️ WIP |
| vkCmdDrawIndirect | ⚙️ WIP |
| vkCmdEndQuery | ⚙️ WIP |
| vkCmdEndRenderPass | ⚙️ WIP |
| vkCmdExecuteCommands | ✅ Implemented |
| vkCmdFillBuffer | ✅ Implemented |
| vkCmdNextSubpass | ⚙️ WIP |
| vkCmdPipelineBarrier | ⚙️ WIP |
| vkCmdPushConstants | ⚙️ WIP |
| vkCmdResetEvent | ⚙️ WIP |
| vkCmdResetQueryPool | ⚙️ WIP |
| vkCmdResolveImage | ⚙️ WIP |
| vkCmdSetBlendConstants | ⚙️ WIP |
| vkCmdSetDepthBias | ⚙️ WIP |
| vkCmdSetDepthBounds | ⚙️ WIP |
| vkCmdSetDeviceMaskKHR | ⚙️ 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 | ⚙️ WIP |
| vkCreateInstance | ✅ Implemented |
| vkCreatePipelineCache | ⚙️ WIP |
| vkCreatePipelineLayout | ⚙️ WIP |
| vkCreateQueryPool | ⚙️ WIP |
| vkCreateRenderPass | ⚙️ WIP |
| vkCreateSampler | ⚙️ WIP |
| vkCreateSemaphore | ✅ Implemented |
| vkCreateShaderModule | ⚙️ WIP |
| vkCreateSwapchainKHR | ⚙️ WIP |
| vkCreateWaylandSurfaceKHR | ⚙️ WIP |
| vkCreateWin32SurfaceKHR | ⚙️ WIP |
| vkCreateXcbSurfaceKHR | ⚙️ WIP |
| vkCreateXlibSurfaceKHR | ⚙️ WIP |
| vkDestroyBuffer | ✅ Implemented |
| vkDestroyBufferView | ⚙️ WIP |
| vkDestroyCommandPool | ✅ Implemented |
| vkDestroyDescriptorPool | ⚙️ WIP |
| vkDestroyDescriptorSetLayout | ⚙️ WIP |
| vkDestroyDevice | ✅ Implemented |
| vkDestroyEvent | ⚙️ WIP |
| vkDestroyFence | ✅ Implemented |
| vkDestroyFramebuffer | ⚙️ WIP |
| vkDestroyImage | ✅ Implemented |
| vkDestroyImageView | ⚙️ WIP |
| vkDestroyInstance | ✅ Implemented |
| vkDestroyPipeline | ⚙️ WIP |
| vkDestroyPipelineCache | ⚙️ WIP |
| vkDestroyPipelineLayout | ⚙️ WIP |
| vkDestroyQueryPool | ⚙️ WIP |
| vkDestroyRenderPass | ⚙️ WIP |
| vkDestroySampler | ⚙️ WIP |
| vkDestroySemaphore | ✅ Implemented |
| vkDestroyShaderModule | ⚙️ WIP |
| vkDestroySurfaceKHR | ⚙️ WIP |
| vkDestroySwapchainKHR | ⚙️ WIP |
| vkDeviceWaitIdle | ✅ Implemented |
| vkEndCommandBuffer | ✅ Implemented |
| vkEnumerateDeviceExtensionProperties | ✅ Implemented |
| vkEnumerateDeviceLayerProperties | ⚙️ WIP |
| vkEnumerateInstanceExtensionProperties | ⚙️ WIP |
| vkEnumerateInstanceLayerProperties | ⚙️ WIP |
| vkEnumeratePhysicalDeviceGroupsKHR | ⚙️ WIP |
| vkEnumeratePhysicalDevices | ✅ Implemented |
| vkFlushMappedMemoryRanges | ✅ Implemented |
| vkFreeCommandBuffers | ✅ Implemented |
| vkFreeDescriptorSets | ⚙️ WIP |
| vkFreeMemory | ✅ Implemented |
| vkGetBufferDeviceAddress | ⚙️ WIP |
| vkGetBufferDeviceAddressEXT | ⚙️ WIP |
| vkGetBufferDeviceAddressKHR | ⚙️ WIP |
| vkGetBufferMemoryRequirements | ⚙️ WIP |
| vkGetDeviceGroupPeerMemoryFeaturesKHR | ⚙️ WIP |
| vkGetDeviceGroupPresentCapabilitiesKHR | ⚙️ WIP |
| vkGetDeviceGroupSurfacePresentModesKHR | ⚙️ WIP |
| vkGetDeviceMemoryCommitment | ⚙️ WIP |
| vkGetDeviceProcAddr | ✅ Implemented |
| vkGetDeviceQueue | ✅ Implemented |
| vkGetEventStatus | ⚙️ WIP |
| vkGetFenceStatus | ✅ Implemented |
| vkGetImageMemoryRequirements | ⚙️ WIP |
| vkGetImageSparseMemoryRequirements | ⚙️ WIP |
| vkGetImageSubresourceLayout | ⚙️ WIP |
| vkGetInstanceProcAddr | ⚙️ WIP |
| vkGetPhysicalDeviceFeatures | ✅ Implemented |
| vkGetPhysicalDeviceFormatProperties | ⚙️ WIP |
| vkGetPhysicalDeviceImageFormatProperties | ⚙️ WIP |
| vkGetPhysicalDeviceMemoryProperties | ✅ Implemented |
| vkGetPhysicalDeviceProperties | ✅ Implemented |
| vkGetPhysicalDeviceQueueFamilyProperties | ⚙️ WIP |
| vkGetPhysicalDeviceSparseImageFormatProperties | ⚙️ WIP |
| vkGetPhysicalDeviceSurfaceCapabilitiesKHR | ⚙️ WIP |
| vkGetPhysicalDeviceSurfaceFormatsKHR | ⚙️ WIP |
| vkGetPhysicalDeviceSurfacePresentModesKHR | ⚙️ WIP |
| vkGetPhysicalDeviceSurfaceSupportKHR | ⚙️ WIP |
| vkGetPhysicalDeviceWaylandPresentationSupportKHR | ⚙️ WIP |
| vkGetPhysicalDeviceWin32PresentationSupportKHR | ⚙️ WIP |
| vkGetPhysicalDeviceXcbPresentationSupportKHR | ⚙️ WIP |
| vkGetPhysicalDeviceXlibPresentationSupportKHR | ⚙️ WIP |
| vkGetPipelineCacheData | ⚙️ WIP |
| vkGetQueryPoolResults | ⚙️ WIP |
| vkGetRenderAreaGranularity | ⚙️ WIP |
| vkGetSwapchainImagesKHR | ⚙️ WIP |
| vkInvalidateMappedMemoryRanges | ✅ Implemented |
| vkMapMemory | ✅ Implemented |
| vkMergePipelineCaches | ⚙️ WIP |
| vkQueueBindSparse | ⚙️ WIP |
| vkQueuePresentKHR | ⚙️ WIP |
| vkQueueSubmit | ✅ Implemented |
| vkQueueWaitIdle | ✅ Implemented |
| vkResetCommandBuffer | ✅ Implemented |
| vkResetCommandPool | ✅ Implemented |
| vkResetDescriptorPool | ⚙️ WIP |
| vkResetEvent | ⚙️ WIP |
| vkResetFences | ✅ Implemented |
| vkResetQueryPool | ⚙️ WIP |
| vkSetEvent | ⚙️ WIP |
| vkUnmapMemory | ✅ Implemented |
| vkUpdateDescriptorSets | ⚙️ WIP |
| vkWaitForFences | ✅ Implemented |
</details>
[herein](https://vulkan-driver.kbz8.me/cts/flint/) is the reckoning of the vulkan 1.0 conformance trials laid bare. judge it as thou wilt.
## 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.
## Mirrors
This codebase is maintained chiefly upon [mine own Git forge](https://git.kbz8.me/kbz_8/VulkanDriver), though thou may also find an active mirror upon [GitHub](https://github.com/Kbz-8/VulkanDriver).