Vulkan

There where no volcanic eruptions at long peaks in 2008

Vulkan is a low level API like DirectX12 and Metal. It is made by Khronos that also handle OpenGL.


The Basic Stuff

Vulkan is a C API and it use the prefix vk on it's functions. Constants begin with VK_ and use all capital letters. Vulkan objects are created with vkCreate* and take a Vk*CreateInfo structure with the parameters to create the object. The objects are destroyed with a vkDestroy* command. The create commands also takes a pAllocator structure that can be set to non-NULL if the application wish to handle host side memory allocation for objects.


Guide

    • Startup - How to startup vulkan and create all the basic objects needed.

      • Layers - What layers exist and can be helpful in development.

      • Extensions - What extensions exist.

    • Memory - How to get memory on the device.

    • Assets - All the type of things you need to create to put textures and meshes in.

    • Binding - Select what buffers or textures to use.

    • Command - How to create and use the command buffers.

    • Drawing - Use draw command in the command buffer.

    • Synchronize - Synchronize things.

    • Compute - Computer buffers and commands.

    • SPIR-V -


Tutorials


Links


IHV Blogs


Larger Code Examples


Games/Engines

Porting your engine to Vulkan or DX12 - 2018 : Video

Efficient use of Vulkan on UE4 Mobile - 2018

Vulkanised! Vulkanising Mad Max (notes) - 2017

Bringing Galaxy on Fire 3 to Vulkan - 2017 Part1, Part2, Part3, Part4 and Part5.

Halcyon + Vulkan - 2018


Videos

GDC 2018 - Getting explicit: How Hard is Vulkan really? - 2018

GDC 2018 - What's New in Vulkan - 2018

2018 Vulkanised - 2018

Vulkan 2017 GDC - 2017

2017 Vancouver DevU Vulkan - 2017


Reference

vk_mini_path_tracer - 2021

Writing Shader Code in Universal RP (v2) - 2021

Vulkan Memory Types on PC and How to Use Them - 2021

Understanding Vulkan Synchronization - 2021

An Introduction to Vulkan Video - 2021

Using Debug Printf - 2021

SPIR-V Guide - 2021

How to use debugPrintf in Vulkan - 2021

What is Vulkan Compute? - 2021

Vulkan Hardware Database updates - 2021

GPU architecture types explained - 2021

Vulkanised 2021 - Fall - 2021

ALL IT TAKES... A Vulkan Story - 2021

Streamlining Render Passes - 2021

VK_KHR_dynamic_rendering - 2021

Vulkan Pills 1: Bindless Textures - 2021


Ray Tracing In Vulkan - 2020

NVIDIA Vulkan Ray Tracing Tutorials - 2020

Bringing HLSL Ray Tracing to Vulkan - 2020

Vulkan NV Ray Tracing with HLSL

SPIR-V Guide - 2020

Virtual machine for executing SPIR-V - 2020

Guide to Vulkan Synchronization Validation - 2020

Resource uniformity & bindless access in Vulkan - 2020

Fundamentals of the Vulkan Graphics API: Why Rendering a Triangle is Complicated - 2020

Introduction to the Vulkan Computer Graphics API - 2020

Rendering Roblox: Vulkan Optimisations on Imagination PowerVR GPUs - 2020

Optimizing Roblox: Vulkan Best Practices for Mobile Developers - 2020

Vulkan synchronisation and graphics-compute-graphics hazards: Part I - 2020

Jet Set Vulkan : Reflecting on the move to Vulkan - 2020

Fighting Fragmentation: Vulkan Portability Extension Released and Implementations Shipping - 2020

SuperRT - 2020

Radeon Memory Visualizer - 2020

OpenGL to Vulkan - 2020

Constant data in Vulkan - 2020

Vulkan Mobile Best Practices: Frequently Asked Questions - Part 1 - 2020

Vulkan-Guide - 2020

ARM-software /vulkan_best_practice_for_mobile_developers - 2020

Writing an efficient Vulkan renderer - 2020

Vulkan Mobile Best Practices - Descriptor and Buffer Management - 2020

[Video] Optimizing Roblox: Vulkan Best Practices for Mobile Developers - 2020

Prefix sum on Vulkan - 2020

Vulkan Mobile Best Practices - Management of Command Buffers and Multi-Threaded Recording - 2020

New: Vulkan Device Generated Commands - 2020

Vulkan Best Practices: Frequently Asked Questions - Part 2 - 2020

Tips and Tricks: Vulkan Dos and Don’ts - 2020

optimising a aaa vulkan title on desktop - 2020

Vulkan Textures Unbound - 2020

Vulkan: Bad Practices - 2020

Writing an efficient Vulkan renderer - 2020

Handling Device Orientation Efficiently in Vulkan With Pre-Rotation - 2020

Guide to Vulkan SynchronizationValidation - 2020

Constant data in Vulkan - 2020

Introduction to the Vulkan Computer Graphics API - 2020

Intro to gfx-hal - 2020 • Drawing a triangle, Push constants, Vertex buffers

LunarG releases GFXReconstruct, a new Vulkan Capture/Replay Tool, with SDK 1.2.141 - 2020

Vulkan synchronisation and graphics-compute-graphics hazards: Part I & Part 2 - 2020

Fundamentals of the Vulkan Graphics API: Why Rendering a Triangle is Complicated - 2020


How Magnum does GFX API enum mapping - 2019

Differences in memory management between Direct3D 12 and Vulkan - 2019

Robust pipeline cache serialization - 2019

Vulkan: Long way to access data - 2019

Flax Facts #25 – Vulkan - 2019

Vulkan Releases Unified Samples Repository - 2019

How to design API of a library for Vulkan? - 2019

Flipping the Vulkan viewport - 2019

A tour of Granite’s Vulkan backend – Part 1, part 2, part 3, part 4 and part 5. Part 6 - 2019

optimising a aaa vulkan title on desktop - 2019

Thoughts on graphics APIs and libraries - 2019

Turn your Frame Rate up to 60 with Vulkan on the Nintendo Switch: – Reboot Develop Blue 2019

Vulkan: Long way to access data - 2019

Shader games with Vulkan - 2019

World War Z – Using Vulkan® to Tame the Zombie Swarm - 2019

Arm Releases Vulkan Best Practices for Mobile Developers - 2019

Debugging VK_ERROR_DEVICE_LOST with Nvidia Device Diagnostics - 2019

Tips and Tricks: Vulkan Dos and Don’ts - 2019

Pipeline Management - 2019

GPU-Assisted Validation - 2019

Optimising a AAA Vulkan Title on Desktop - 2019


How to Learn Vulkan - 2018

Vulkan Synchronization Primer - 2018 - Part I & Part II

Vulkan sparse binding - a quick overview - 2018

There is a way to query GPU memory usage in Vulkan - use DXGI - 2018

Multi-GPU Rendering with Vulkan API - 2018

niagara - A Vulkan renderer written from scratch on stream - 2018

V-EZ - 2018

Introduction to the Vulkan Graphics API - 2018


Understanding Vulkan objects - 2017

A Tour of sokol_gfx.h - 2017

I Am Graphics And So Can You - 2017

vkFX: Effect’ive Approach for Vulkan API – nvidia - 2017

Improving Vulkan Breakout - Comparing Uniform Data Transfer Methods In Vulkan - 2017


Migrating from OpenGL to Vulkan - 2016

Vulkan Graphics - 2016

Vulkan in 30 minutes - 2016

Vulkan at FOSDEM - 2016


Vulkan Webinars

1: Scaling to multiple threads - Youtube / Blog - 2015

2: High efficiency on mobile - Youtube / Blog - 2015

3: Scaling to multiple threads - Youtube / Blog - 2015


VK_KHR_dynamic_rendering tutorial

Vulkan: Why some GPUs expose a dozen of identical memory types?

Vulkan Pills 1: Bindless Textures

VK_KHR_dynamic_rendering

Vulkan 1.3 and Roadmap 2022

Modern (Bindless) Sprite Batch for Vulkan (and more!)

Streamlining Render Passes

https://www.khronos.org/blog/streamlining-render-passes


Announcing Vulkan Memory Allocator 3.0.0 and Direct3D 12 Memory Allocator 2.0.0

Vulkan SC: Overview - and how it is different from the Vulkan you already know

Exploring the Vulkan 1.3 Software Development Kit


1.3 Vulkan Loader Improvements