Vulkan 1.0.42 Released With A Slew Of New Extensions: Multi-Device, VR, Semaphores
The "GDC Vulkan update" has arrived with a number of new extensions!
Vulkan 1.0.42 is available this morning and it includes the extensions used by Valve for SteamVR on Linux, cross-device support (multi-GPU), semaphores for synchronized rendering, external memory, targeting native iOS/macOS surfaces for rendering to Apple's Metal, and more. The exciting new Vulkan 1.0.42 extensions include (along with my quick remarks about them):
VK_KHR_descriptor_update_template: The extension provides an easier way to update a fixed set of descriptors.
VK_KHR_push_descriptor: The extension allows descriptors to be written into the command buffer.
VK_KHX_device_group: It allows using a logical device that consists of multiple physical devices.
VK_KHX_device_group_creation: This allows enumerating groups of physical devices and to create a logical device from a subset of those groups. A.k.a. VK_KHX_device_group_creation and VK_KHX_device_group are working on the Vulkan multi-GPU rendering support.
VK_KHX_external_memory: This is used so a game/application can export non-Vulkan handles from Vulkan memory objects so they can be referenced outside of the scope of the Vulkan logical device, used for multiple processes / devices and is one of them used by SteamVR on Linux.
VK_KHX_external_memory_capabilities: This extension provides capability queries and handle definitions so an application can determine information about the external memory handles.
VK_KHX_external_memory_fd: This allows exporting a POSIX file descriptor handle from Vulkan memory objects.
VK_KHX_external_memory_win32: The same as VK_KHX_external_memory_fd basically but for Windows systems.
VK_KHX_external_semaphore: This extension allows synchronizing access to memory using semaphores.
VK_KHX_external_semaphore_capabilities: This is used for querying external semaphore capabilities.
VK_KHX_external_semaphore_fd: This is for an application to export semaphore state and importing it as well from POSIX file descriptors.
VK_KHX_external_semaphore_win32: Ditto the above but for Windows memory usage.
VK_KHX_multiview: This allows rendering to multiple views.
VK_KHX_win32_keyed_mutex: This helps for better interop with D3D11 memory objects.
VK_EXT_discard_rectangles: This allows additional "discard rectangles" in the frame-buffer-space to restrict rasterization of points/lines/triangles.
VK_MVK_ios_surface: This allows for interacting with the native iOS surface type. This allows for rendering to Apple's Metal API.
VK_MVK_macos_surface: This extension allows rendering to the native surface type of macOS and so rendering can be done to Apple's Metal from the macOS desktop.
VK_NVX_multiview_per_view_attributes: This allows a new way to write shaders using multi-view sub-passes.
VK_NV_clip_space_w_scaling: This extension is for VR use-casesd and allows for rendering VR scenes at a non-uniform resolution.
VK_NV_geometry_shader_passthrough: This improves the geometry shader support in SPIR-V.
VK_NV_sample_mask_override_coverage: Adds the SPV_NV_sample_mask_override_coverage SPIR-V extension in Vulkan.
VK_NV_viewport_array2: This allows a single primitive to be broadcast to multiple viewports and/or multiple layers.
VK_NV_viewport_swizzle: This adds a new per-viewport swizzle that can modify the position of primitives for each viewport.
There are also some slight changes for OpenGL/GLSL too:
GL_EXT_device_group: This OpenGL extension is used for adding a built-in input variable containing the device index.
GL_EXT_multiview: Another GLSL change.
The "KHX" denotes the experimental extensions while the others are vendor-created, e.g. NV for NVIDIA. Expect these new extensions to be talked about this week at the Game Developers Conference (GDC 2017).
From the quick dive into it so far this morning, Vulkan 1.0.42 is an exciting update. Hopefully RADV/ANV will be seeing updates shortly, particularly with merging back the changes made for SteamVR now that all of those extensions are public. The Vulkan 1.0.42 specification can be viewed from the Vulkan registry.
NVIDIA has already published their new Vulkan beta drivers with support for the new v1.0.42 extensions. Fun Vulkan times ahead!