VKU

Work in progress utility crate for kickstarting vulkan development with shaderc, ash and the VMA allocator.

Center module is Vkinit, created from RawHandles and VkInitCreateInfo.

Warning

This is mostly a personal utility crate and no guarentees are made in terms of stability until 1.0.0.

Initialization

```rust,norun use winit::window::WindowBuilder; use winit::eventloop::{EventLoop, EventLoopBuilder}; use winit::dpi::LogicalSize; use rawwindowhandle::{HasRawDisplayHandle, HasRawWindowHandle}; use vku::{VkInitCreateInfo, VkInit};

let eventloop: EventLoop<()> = EventLoopBuilder::default().build(); let size = [800u32, 600u32]; let window = WindowBuilder::new() .withinnersize(LogicalSize{width: size[0], height: size[1]}) .build(&eventloop).unwrap();

let displayh = window.rawdisplayhandle(); let windowh = window.rawwindowhandle();

let createinfo = VkInitCreateInfo::default(); let vkinit = VkInit::new(Some(&displayh), Some(&windowh), Some(size), create_info).unwrap(); ```

Swapchain recreation:

```rust,norun use rawwindow_handle::{RawDisplayHandle, RawWindowHandle}; use vku::VkInit;

let mut vkinit: VkInit = todo!(); let displayh: RawDisplayHandle = todo!(); let window_h: RawWindowHandle = todo!();

let newsize = [1200u32, 900_u32];

vkinit.onresize(&displayh, &windowh, new_size).unwrap(); ```

## VMA Image allocation and tracked layout transitions: ```rust,no_run use vku::{VkInit, CmdType}; use ash::vk::{Extent3D, Format, ImageAspectFlags, ImageLayout};

let vk_init: VkInit = todo!();

let setupcmdbufferpool = vkinit.createcmdpool(CmdType::Any).unwrap(); let setupcmdbuffer = vkinit.createcommandbuffers(&setupcmdbufferpool, 1).unwrap()[0]; let setupfence = vkinit.create_fence().unwrap();

vkinit.begincmdbuffer(&setupcmd_buffer).unwrap();

let extent = Extent3D{width: 100, height: 100, depth: 1}; let format = Format::R8G8B8A8UNORM; let aspectflags = ImageAspectFlags::COLOR; let mut image = vkinit.createemptyimage(extent, format, aspectflags).unwrap();

let imagebarrier = image.getimagelayouttransitionbarrier2( ImageLayout::TRANSFERDST_OPTIMAL, None, None).unwrap(); // No queue family ownership transfer

vkinit.cmdpipelinebarrier2( &setupcmdbuffer, &[imagebarrier], &[]); // Only this image barrier, no BufferMemoryBarriers

vkinit.endandsubmitcmdbuffer( &setupcmdbuffer, CmdType::Any, &setupfence, &[], &[], &[]).unwrap(); // Wait on setup fence, wait/signal no semaphores ```

Shader compilation with #include directives:

```rust,norun let srcdirpath = std::path::Path::new("./assets/shaders/src/"); let targetdirpath = std::path::Path::new("./assets/shaders/compiledshaders/"); let debugtextresult = true;

vku::compileallshaders(&srcdirpath, &targetdirpath, debugtextresult).unwrap(); ```

More examples

For more examples check the examples repo.