After two years of work, the Khronos consortium, which develops graphics standards, has published the Vulkan 1.3 specification, defining an API for accessing the graphics and computational capabilities of GPUs. This new specification incorporates corrections and extensions accumulated over two years. It is noted that the requirements of the Vulkan 1.3 specification are aimed at graphics hardware of the OpenGL ES 3.1 class, which will ensure support for the new graphics API on all GPUs that support Vulkan 1.2. The Vulkan SDK toolkit is expected to be published in mid-February. In addition to the main specification, additional extensions for mid-range and high-end mobile and desktop devices are planned to be offered under the "Vulkan Milestone" edition.
At the same time, a plan for implementing support for the new specification and additional extensions in graphics cards and device drivers has been presented. Products with Vulkan 1.3 support are being prepared for release by Intel, AMD, ARM, and NVIDIA. For example, AMD has announced the imminent support of Vulkan 1.3 in its AMD Radeon RX Vega series of graphics cards, as well as in all cards based on the AMD RDNA architecture. NVIDIA is preparing to release drivers with Vulkan 1.3 support for Linux and Windows. ARM will add Vulkan 1.3 support to its Mali GPUs.
Key innovations:
- Support for streamlined rendering passes (Streamlining Render Passes, VK_KHR_dynamic_rendering) has been implemented, allowing rendering to start without creating render passes and framebuffer objects.
- New extensions have been added to simplify management of graphics pipeline compilation (pipeline, a set of operations that transforms vector graphic primitives and textures into pixel representation).
- VK_EXT_extended_dynamic_state, VK_EXT_extended_dynamic_state2 — add additional dynamic states to reduce the number of compiled and attached state objects.
- VK_EXT_pipeline_creation_cache_control — provides advanced tools for managing when and how to compile pipelines.
- VK_EXT_pipeline_creation_feedback — provides information about compiled pipelines to simplify profiling and debugging.
- A number of features have been transitioned from optional to mandatory. For instance, the implementation of buffer addresses (VK_KHR_buffer_device_address) and the Vulkan memory model, which defines how concurrently executing threads can access shared data and synchronization operations, are now mandatory.
- Tools for precise control over subgroups (VK_EXT_subgroup_size_control) have been provided, allowing manufacturers to support multiple subgroup sizes and developers to choose the desired size.
- The VK_KHR_shader_integer_dot_product extension has been introduced, which can be used to optimize machine learning frameworks through hardware acceleration of dot product operations.
- In total, 23 new extensions have been included:
- VK_KHR_copy_commands2
- VK_KHR_dynamic_rendering
- VK_KHR_format_feature_flags2
- VK_KHR_maintenance4
- VK_KHR_shader_integer_dot_product
- VK_KHR_shader_non_semantic_info
- VK_KHR_shader_terminate_invocation
- VK_KHR_synchronization2
- VK_KHR_zero_initialize_workgroup_memory
- VK_EXT_4444_formats
- VK_EXT_extended_dynamic_state
- VK_EXT_extended_dynamic_state2
- VK_EXT_image_robustness
- VK_EXT_inline_uniform_block
- VK_EXT_pipeline_creation_cache_control
- VK_EXT_pipeline_creation_feedback
- VK_EXT_private_data
- VK_EXT_shader_demote_to_helper_invocation
- VK_EXT_subgroup_size_control
- VK_EXT_texel_buffer_alignment
- VK_EXT_texture_compression_astc_hdr
- VK_EXT_tooling_info
- VK_EXT_ycbcr_2plane_444_formats
- A new type of object, VkPrivateDataSlot, has been added. A total of 37 new commands and over 60 structures have been implemented.
- The SPIR-V 1.6 specification has been updated, defining a universal intermediate representation for shaders that can be used for both graphics and parallel computing. SPIR-V implies a separate shading compilation phase into an intermediate representation, enabling the creation of frontends for various high-level languages. A unified intermediate code is generated separately from various high-level implementations, which can be used by OpenGL, Vulkan, and OpenCL drivers without the need for a built-in shader compiler.
- The concept of compatibility profiles has been proposed. Google has prepared a baseline profile for the Android platform, which will simplify the determination of the level of support for extended Vulkan capabilities that go beyond the Vulkan 1.0 specification on devices. For most devices, support for the profile can be provided without the need for OTA updates.
It is worth noting that the Vulkan API is notable for its radical simplification of drivers, offloading GPU command generation to the application side, enabling the integration of debugging layers, unifying the API across different platforms, and applying a precompiled intermediate representation of code for execution on the GPU. To ensure high performance and predictability, Vulkan provides applications with means for direct control over GPU operations and built-in support for multithreaded processing of GPU commands, thereby minimizing the overhead introduced by the driver, while the capabilities implemented on the driver side are noticeably simplified and become more predictable. For instance, operations such as memory management and error handling, implemented in OpenGL on the driver side, are moved to the application level in Vulkan.
Vulkan encompasses all available platforms and provides a unified API for desktop, mobile systems, and the Web, allowing the use of a single common API for various graphics processors and application areas. Thanks to Vulkan's layered architecture, which implies the creation of tools that work with any GPU, hardware manufacturers can utilize standard tools for code verification, debugging, and profiling during development. A new portable intermediate representation, SPIR-V, based on LLVM and utilizing common foundational technologies with OpenCL, is proposed for shader creation. For device and screen management in Vulkan, a WSI (Window System Integration) interface is offered, addressing roughly the same tasks as EGL in OpenGL ES. WSI support is available out of the box in Wayland—all applications using Vulkan can run in the environment of unmodified systems. servers Wayland. Support for WSI is also provided for Android, X11 (with DRI3), Windows, Tizen, macOS, and iOS.
Source: opennet.ru
