VK_KHR_synchronization2 extension support in our latest developer driver

Our latest Radeon Software Adrenalin developer driver has just been released, providing initial support for the VK_KHR_synchronization2 extension.

This extension revises the original core synchronization APIs to simplify the interface and improve usability of these APIs. It also adds new pipeline stage and access flag types that extend into the 64-bit range; new flags are identical to the old values within the 32-bit range, new stages and bits will be added beyond that.

Whilst the overall shape of synchronization in the new API is similar to the original, there are a number of useful changes which should make developer’s lives simpler:

  • Of particular note is that VkEvent APIs have changed to include access and layout change information when signalling an event. Our driver will now use this information to perform cache maintenance operations and image layout changes asynchronously to other operations – something that was only possible in limited circumstances in the original event APIs. 
  • In a similar vein, a new “GPU-only” flag on events allows additional optimisations when CPU interactions are not required – which we take advantage of to reduce latency and system memory traffic.

Other changes are primarily focused on making the API more intuitive, particularly with the relation between access masks, image layouts, and pipeline stages: far more information can now be provided contextually.

For example: 

  • Pipeline stages are now provided per memory barrier, and using VK_ACCESS_MEMORY_READ_BIT is now guaranteed to only flush caches affecting the pipeline stages in the same memory barrier. 
  • The new VK_IMAGE_LAYOUT_ATTACHMENT_OPTIMAL_KHR layout. This works the same as VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_ONLY_KHR for color images, but as VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL for depth/stencil images.

Full details of the exact changes are available in the Vulkan specification, and are summarised in the man page for VK_KHR_synchronization2 .

We’re looking forward to seeing how developers are able to use the new APIs to improve performance on AMD GPUs, and hope it will help simplify synchronization API usage in their engines.

More GPUOpen Vulkan® content

AMD GPUOpen Vulkan Memory Allocator

Vulkan® Memory Allocator

VMA is our single-header, MIT-licensed, C++ library for easily and efficiently managing memory allocation for your Vulkan® games and applications.

Vulkan®

Vulkan® gives software developers control over the performance, efficiency, and capabilities of AMD Radeon™ GPUs and multi-core CPUs.