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 init = VkInit::new(Some(&displayh), Some(&windowh), Some(size), createinfo).unwrap(); ```

Swapchain recreation:

```rust,no_run

use vku::*;

use ash::vk::*;

let eventloop: winit::eventloop::EventLoop<()> = winit::event_loop::EventLoopBuilder::default().build();

let size = [800u32, 600u32];

let window = winit::window::WindowBuilder::new().withinnersize(winit::dpi::LogicalSize{width: size[0], height: size[1]}).build(&event_loop).unwrap();

let displayh = rawwindowhandle::HasRawDisplayHandle::rawdisplay_handle(&window);

let windowh = rawwindowhandle::HasRawWindowHandle::rawwindow_handle(&window);

let create_info = VkInitCreateInfo::default();

let mut init = VkInit::new(Some(&displayh), Some(&windowh), Some(size), createinfo).unwrap(); let newsize = [1200u32, 900u32]; init.recreateswapchain(newsize).unwrap(); ## VMA Image allocation and layout transition: rust,no_run

use vku::*;

use ash::vk::*;

let eventloop: winit::eventloop::EventLoop<()> = winit::event_loop::EventLoopBuilder::default().build();

let size = [800u32, 600u32];

let window = winit::window::WindowBuilder::new().withinnersize(winit::dpi::LogicalSize{width: size[0], height: size[1]}).build(&event_loop).unwrap();

let displayh = rawwindowhandle::HasRawDisplayHandle::rawdisplay_handle(&window);

let windowh = rawwindowhandle::HasRawWindowHandle::rawwindow_handle(&window);

let create_info = VkInitCreateInfo::default();

let init = VkInit::new(Some(&displayh), Some(&windowh), Some(size), create_info).unwrap();

let setupcmdbufferpool = init.createcmd_pool(CmdType::Any).unwrap();

let setupcmdbuffer = init.createcommandbuffers(&setupcmdbuffer_pool, 1).unwrap()[0];

let setupfence = init.createfence().unwrap();

init.begincmdbuffer(&setupcmdbuffer).unwrap();

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

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

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

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

Shader compilation with #include directives:

```rust,no_run

use std::path::Path;

use vku::VkInit;

let srcdirpath = Path::new("./assets/shaders/src/"); let targetdirpath = Path::new("./assets/shaders/compiledshaders/"); let debugtext_result = true;

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

More examples

For more examples check the examples folder.