I recently gave a talk on texture compression in Vulkan using Basis Universal and the KTX 2.0 format during this years Vulkanised online event.
The short (15 minutes) talk contains some information on texture compression general, using texture compression in Vulkan and why a universal supercompressed format like Basis Universal is important.
The presentation and a video recording of all the presentations from day 2, including mine, are now available:
[Read More]
Vulkan Samples and hardware capability viewer updated to final ray tracing extensions
Vulkan ray tracing extensions final specifications have been released The finalized specifications for the cross-vendor hardware accelerated ray tracing extensions have finally been released, after being available as a provisional extension for some time now. So Vulkan now has official cross-vendor, cross-os support for accessing hardware accelerated ray tracing features. A great overview can be found on the Khronos blog, along with a great article on how ray tracing works.
[Read More]
New Vulkan glTF examples
Moving to glTF When I started writing my first Vulkan samples glTF was still in it’s infancy, esp. in terms of tooling. So I went with more common formats and went with the Open Asset importer library (Assimp) for loading these.
But things rapidly changed with glTF 2.0, which is now pretty much and industry standard and supported by many DCC tools. And since both Vulkan and glTF are both Khronos standards this is a perfect match.
[Read More]
Shaders for Vulkan samples now also available in HLSL
One of Vulkan’s biggest additions (compared to OpenGL) was the introduction of the SPIR-V intermediate representation for shaders. This makes it possible to use different shader language front-ends for writing your shaders, with the only requirement being to be able to compile that language to valid SPIR-V with Vulkan semantics. Unlike OpenGL (except for GL_ARB_gl_spirv) this no longer confines you to use GLSL for writing Vulkan shaders.
And while GLSL is still the primary language for my C++ Vulkan samples, SPIR-V opens up options for different shader languages.
[Read More]
Vulkan debug utilities sample and tutorial
I have contributed a new sample to the official Khronos Vulkan Samples repository that shows usage of the VK_EXT_debug_utils for adding debugging information to your Vulkan application.
This extension combines the old VK_EXT_debug_marker and VK_EXT_debug_report into a new extension that also implements some changes and additions based on developer feedback for the old extensions.
For example it’s now possible to debug instance creation and destruction with this new extension.
[Read More]
Vulkan examples for ray traced shadows and reflections using VK_NV_ray_tracing
After adding a basic Nvidia RTX ray tracing example last week, I spent some more time with Vulkan and the VK_NV_ray_tracing extension. The result are two new, more advanced examples that I just uploaded to my Vulkan C++ example repository. As with the basic example I tried to keep them as straight forward as possible with all the relevant code parts put into one source file, so that following and building upon is as easy as possible.
[Read More]
New Vulkan example on raytracing using VK_NV_ray_tracing
With all the new Turing extensions that NVIDIA has released alongside it’s new GPU architecture, I decided to replace my GTX 980 with a RTX 2060, mainly for the purpose of doing RTX ray-tracing related Vulkan stuff and also checking out things like mesh and task shaders.
Getting my first RTX accelerated ray tracing example up and running was pretty easy, thanks to tutorials like the one from NVIDIA and iOrange.
[Read More]
Flipping the Vulkan viewport
Introduction This short tutorial deals with Vulkan’s viewport setup, which differs from the one in OpenGL and other APIs. I’ll try to explain what it takes to get your (OpenGL) scene rendered properly, and how e.g. VK_KHR_MAINTENANCE1 can help you deal with differences across the APIs, something that’s esp. helpful if you try to add Vulkan as a backend to you renderer without wanting to alter your actual scene data.
[Read More]
Vulkan conditional rendering
Introduction Note: Source code that demonstrates this feature can be found in this new example at my open source C++ Vulkan examples repository.
With the new VK_EXT_conditional_rendering extension, Vulkan gains the possibility to execute certain rendering and dispatch commands conditionally, based on values stored in a dedicated buffer.
So instead of having to rebuild command buffers if the visibility of objects change, it’s now to possible to just change a single buffer value to control if the rendering commands for that object are executed without the need to touch any command buffers.
[Read More]
Vulkan input attachments and sub passes
Introduction I have added a new example to my open source C++ Vulkan examples that demonstrates the use of input attachments and subpasses within a single render pass.
Input attachments are image views that can be used for pixel local load operations inside a fragment shader. This basically means that framebuffer attachments written in one subpass can be read from at the exact same pixel (that they have been written) in subsequent subpasses.
[Read More]