Multiview rendering in Vulkan using VK_KHR_multiview

I have added a new example to my open source C++ Vulkan examples that demonstrates the use of multiview rendering. Multiview enables rendering to multiple views simultaneously instead of having to use multiple passes. Esp. with stereoscopic rendering (e.g. for VR related applications) there’s usually little change between two views, like different matrices, and having to do multiple passes for such small differences is inefficient. With multiview an implementation can now render different views simultaneously in a single pass and the Vulkan extension even adds hints for the implementation to even further improve performance (see correlation mask down below). [Read More]

Conservative rasterization in Vulkan using VK_EXT_conservative_rasterization

I have added a new example to my open source C++ Vulkan examples that demonstrates the basic use of conservative rasterization using the VK_EXT_conservative_rasterization extension. This has been missing from Vulkan some time now (while other APIs already offer this feature) but has recently been added and is already support by at least NVIDIA. Conservative rasterization changes the way fragments are generated, and enabling over estimation generates fragments for every pixel touched instead of only pixels that are fully covered. [Read More]

New Vulkan example: Cascaded shadow mapping

In what is most probably my last Vulkan example for 2017 I have added a cascaded shadow mapping example to my open source Vulkan C++ example repository: One big problem of traditional shadow mapping, esp. with large outdoor scenes is the resolution you get as one single shadow map has to cover the whole camera spectrum. With cascaded shadow maps the frustum is split up into multiple frustums (along scene depth) with each getting it’s own, full-resolution, depth map. [Read More]

Headless Vulkan examples

I have just added two minimal, mostly self-contained cross-platform headless Vulkan examples to my open source C++ Vulkan repository. Unlike the other examples in my repository these two don’t require a surface (created from a window) and as such can be run on systems with no window compositor. The intention behind the two examples is to show how Vulkan can be used for running graphics and compute tasks without the need for an actual user interface to be present i. [Read More]

iOS and macOS support added to the Vulkan examples

Thanks to a contribution from Bill Hollings, one of the developers from MoltenVK , my open source C++ Vulkan examples now also support Apple’s iOS and macOS platforms. MoltenVK is a commercial Vulkan implementation that runs on top of Apple’s Metal api with a free trial available. Details on how to build and run the examples for those platforms can be found in this readme. Note that not all examples will work on iOS or macOS due to the differences in supported features like geometry or tessellation shaders not being available in Metal. [Read More]

Physically based rendering and moving (hdr) assets out of the repository

The last days (and weeks) I’ve been working on a Vulkan example implementing physically based rendering with image based lighting (you can find a nice article with lots of details over at Trent Reed’s blog) and just pushed it to my public github repository. While working on this demo I realized that putting all the binary assets (models and esp. textures) in the repository might not have been a great idea. [Read More]

Updated Vulkan example binaries

Took a bit longer than expected, but I finally got around releasing updated binaries for my open source C++ Vulkan examples. Compared to the last updated (in 2016) there are numerous changes and lots of new examples added. One major addition is touch support on Android. So if you just want to run Vulkan examples (to e.g. test your device) you can grab these pre-built binaries instead of compiling from vulkan. [Read More]

Updated Vulkan example binaries (and vkQuake for Android)

Finally found some time to update the binaries for my open source ++ Vulkan examples. Since the last binaries have been a few months old these contain lots of changes and new examples. So if you just want to run Vulkan examples (to e.g. test your device) you can grab these pre-built binaries instead of compiling from vulkan.gpuinfo.org : Windows Note : The windows binaries require the media pack (see below) to be present for loading shaders, meshes and textures. [Read More]

New Vulkan example: Indirect drawing

I have added another example to my open source C++ Vulkan examples. The new one is about indirect drawing (including multi draw if supported). Contrary to their non-direct counterparts, the indirect drawing commands in Vulkan take their draw calls from a buffer that is ideally stored in device local memory. So instead of running single draw commands that get their index base, index count and instancing numbers passed by the host upon getting called, the indirect commands are backed by a buffer that stores an arbitrary number of draw commands. [Read More]

New Vulkan example: Deferred shading and shadows

Based on the recently updated deferred shading example, I have added a new example to my open source C++ Vulkan samples. This example adds dynamic shadows from multiple light sources, showcasing a few technologies that can be used to make rendering of multiple shadows more efficient. To achieve this, the example uses a layered depth attachment with one layer per light source that is sampled in the final scene composition. Traditionally one would do multiple passes to render the depth maps for the scene’s light source, and to avoid this the example also uses shader instancing by doing multiple invocations in the geometry shader. [Read More]