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 (1).

iOS and macOS support added to the Vulkan examples

Vulkan Hardware Capability Viewer 1.4 released

A new version of the Vulkan Hardware Capability Viewer is now available for all platforms (Windows, Linux, Android). This is the biggest update since I released this tool, including lots of new features that also brought along a few changes to the online database. I also decided to drop the “beta” tag now that more than 1,300 reports have been uploaded, making this the first non-beta release of the Vulkan Hardware Capability viewer.

New features

  • Added support for new features and properties provided via VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2
    • Currently supported:
      • VK_KHR_push_descriptor
      • VK_EXT_discard_rectangles
      • VK_KHX_multiview
      • VK_NVX_multiview_per_view_attributes
  • Reports can now be saved to disk via command line using the -s argument (without invoking the UI)
    • Example : vulkanCapsViewer -s my_device.json
  • Added pipeline cache UUID
  • Exported JSON is now compatible with vkjson_info from LunarG SDK
  • Added Android platform info
    • Device model and manufacturer
    • Build information
  • UI improvements 
    • Updated layout and UI scaling 
    • Support for high DPI scaling
    • Touch scrolling for mobile devices (Android)


  • Fixed unauthorized access to SSL libraries message on Android 6.0 and newer

Continue reading “Vulkan Hardware Capability Viewer 1.4 released”

Vulkan Hardware Capability Viewer 1.4 released

Updates to the Vulkan hardware database

Server-side processing (performance)

In preparation for the next release of the Vulkan Hardware Capability Viewer I published a major change to the Vulkan online hardware database at

Up until now all data was handled client-side, so when loading up the report listing all reports were fetched and displayed by the client. While this was more or less fine in the beginning, delivering all reports to the client even if only the 25 newest ones were visible now takes several seconds (even on a fast connection) and fetching all rows for each visitor is also putting strain on the database.

So I updated the report listing page (that does pretty much all the heavy lifting) to use server-side processing. So instead of the client fetching all data and handling paging, ordering, sorting and filtering this is now done by the database (that’s what databases are best at after all).

Continue reading “Updates to the Vulkan hardware database”

Updates to the Vulkan hardware database

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. They quickly bloat the size of the repository and once a binary asset is there you won’t be able to completely remove it (to shrink the repo again) unless you actually rewrite the history. But with the repository being public with almost 400 forks and numerous pull requests this pretty much a no-go.

Continue reading “Physically based rendering and moving (hdr) assets out of the repository”

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

Updated Android vkQuake binaries

For those that want to test out my Android port of of Axel Gneiting’s vkQuake, I have released updates binaries at

Please note that the .apk does not contain any game files, so you need to get the .pak files from the shareware or registered version in order to play this. See the page above for details on this.

This release is based on vkQuake’s latest version and is pretty much feature complete. The only big thing missing for the Android port is sound, but other than that everything is there including multiplayer.

Also note that this version requires a gamepad to play and an Android device that supports Vulkan.


Updated Android vkQuake binaries

Vulkan Hardware Capability Viewer 1.2 released

I have released an update to the Vulkan Hardware Capability Viewer. The new version (1.2) adds support for os-specific surface capabilities that are added to the reports and online database.

This adds a new category to the tool and reports at the online database (for example this one) containing:

  • Surface properties (extents, usage flags, transforms, etc.)
  • Surface Formats (incl. color spaces)
  • Present modes

You can download the new version from, downloads are available for Windows, Linux and Android (arm and x86).

The Android version (for now arm only) is now also available at the google playstore.

Vulkan Hardware Capability Viewer 1.2 released

SPIR-V Extension for Visual Studio


Source (C#) and download (VSIX for VS2015) can be found at

With the launch of Vulkan, SPIR-V has been introduced as it’s binary shader format, replacing text based shader formats in favor of an intermediate representation. To make life a bit easier I have just released a Visual Studio (2015) extension that adds SPIR-V related commands to the context menu of shader files (and folders containing shader files):


This allows you got generate binary SPIR-V files from GLSL right out of your IDE. The commands use the glslang reference compiler for this and work on all file extensions supported by it.

The extension also parses errors generated if the shader does not compile and adds them to the error list of Visual Studio, so you can double click to jump to the file and line that the error occurred:


The extension supports Vulkan and OpenGL semantics for generating the SPIR-V binary files, so if you happen to have a GPU and driver that supports SPIR-V for OpenGL you can generate binary shaders for OpenGL too. To get you started with SPIR-V for OpenGL I have released a simple C++ example that shows how to use SPIR-V with OpenGL.

As for Vulkan, SPIR-V is the only official (i.e. non-extension) source for loading shaders and is used in all of my C++ open source Vulkan examples.

SPIR-V Extension for Visual Studio