Vulkan, the graphics and compute API that provides high-efficiency, cross-platform access to modern GPUs expands further with Vulkan Video and some provisional extensions. What is it? A new expansion years in the making to add in seamless hardware accelerated video compression and decompression into the Vulkan API. It comes with these new extensions:
- VK_KHR_video_queue
- VK_KHR_video_decode_queue
- VK_KHR_video_encode_queue
- VK_EXT_video_decode_h264
- VK_EXT_video_encode_h264
- VK_EXT_video_decode_h265
The Khronos Group say they plan to "add support in the Vulkan SDK with layers for validation and higher-level abstractions that will speed the development of video applications where simple frame-in-frame-out and black-box decoding and encoding is sufficient" along with open source Vulkan Video samples for Windows and Linux. All of this closely integrates "hardware accelerated video processing with Vulkan’s existing graphics, compute and display functionality".
Since this major new feature set for Vulkan is only provisional, it means it is subject to change. The Khronos Group are taking on feedback which you can follow on the GitHub issue. See the full announcement for more.
In addition to the new extensions for Vulkan Video, the Vulkan 1.2.175 release also added these new extensions:
- VK_EXT_color_write_enable - This extension allows for selectively enabling and disabling writes to output color attachments via a pipeline dynamic state.
- VK_EXT_vertex_input_dynamic_state - This extension adds dynamic state support for what is normally static state in VkPipelineVertexInputStateCreateInfo.
- VK_EXT_ycbcr_2plane_444_format - This extension adds some Y′CBCR formats that are in common use for video encode and decode, but were not part of the VK_KHR_sampler_ycbcr_conversion extension.
- VK_NV_inherited_viewport_scissor - This extension adds the ability for a secondary command buffer to inherit the dynamic viewport and scissor state from a primary command buffer, or a previous secondary command buffer executed within the same vkCmdExecuteCommands call.
no encode 265?According to Phoronix, it's on its way.
I wonder whether those will be of any use for those that make professional video editing apps.
Well, most of profession app on Windows use Windows implementation for Intel, NVIDIA and AMD. As example on Linux we use VAAPI for Intel and AMD, while on Windows there is much better AMD AMF. Some apps use it. AMD developers, in last years release it too Linux but only with Vulkan support (no OpenGL) and only for AMDGPU-PRO - because only closed-source AMD driver contains Vulkan implementation to allow Vulkan ENCODE/DECODE (that short story). So it works only on AMDGPU-PRO. They open for add support AMDVLK or maybe even RADV but only when they implement Khronos extensions with opensource Vulkan Video API. As you can see now, API is almost done (provisional for now). So, now we need wait for AMDVLK or/and RADV to impelement it and then for AMF to implement it on top this drivers.
Then we can see apps that use it. I know that FFMPEG support AMF, same with HandBrake.
See more from me