The Northmen say that at Ragnarok, the sons of Muspell will travel to battle in the ship called Naglfar: the corpse ship; and when the sons of Muspell leave the ship and ride to battle, it will be as though the sky had split open, and Surtur will lead them. Wherever he goes, flame will erupt before him, and fires will burn behind him....
- Druth, Hellblade I: Senua's Sacrifice
surtur is a high level library that aims to make Vulkan development in Haskell as painless and safe as possible, without detracting from the API's power. To this end, surtur introduces monads, arrows, and static types that limit incorrect usage of Vulkan. surtur does not try to be overly-restricting---unlike GPipe, it does not dictate how shaders should be written, and provides an escape hatch to ignore type-level constraints on extensions and core versioning. End users are free to write regular GLSL, however they are strongly encouraged to give fir a try as it more strongly aligns with surtur's strongly-typed philosophy.
Vulkan (u :: Nat) (l :: Nat) emonad- Type level extension list
- Type level core versioning
- Multi-backend surface initialization
sdl2andGLFW-bsupported- Compile your project with
surtur:sdl2orsurtur:GLFW-brespectively - Interface exposed for supporting other backends
- Streamlined device intialization
- Via custom
rateDevicefunction - Sane default
rateDeviceincluded (with MSAA enabled)
- Via custom
CommandRecordermonadCommandBuffer t stype where t ∈ {Compute, Graphics, Transfer}, s ∈ {Recording, Executing, Idle}vkCmdfunctions can only be called on the correct command buffer type- Buffer queueing protected by
sparameter
RenderPassgraph notation- Specify relation between subpasses and external commands symbolically
surtur will not support individual AMD or NV extensions. That said, it will support the following KHR and EXT extensions deemed useful:
- TBA
Library: cabal build