Well this is a fair bit unexpected. As happens quite often there was a specification update to the Vulkan API, and with it came a brand new extension to help with shaders — which Nintendo contributed towards.
Mentioned in a blog post from driver developer Mike Blumenkrantz, and also a full announcement from The Khronos Group who oversee the Vulkan API. The official Vulkan announcement post was even written by a developer from Nintendo. Notes from the announcement:
Today, Khronos® is releasing a new multi-vendor Vulkan® extension that aims to radically simplify how applications specify shaders and shader state while maintaining Vulkan’s ethos of being a highly performant “API without secrets.”
This extension is VK_EXT_shader_object. It introduces a new VkShaderEXT object type which represents a single compiled shader stage, along with 4 new functions to manipulate and use VkShaderEXT objects.
Shader objects serve a role similar to pipelines but expose a simpler, more flexible interface designed to empower applications whose architectures and/or needs for “dynamism” might have previously made the use of pipelines difficult. In environments where VK_EXT_shader_object is supported, applications can choose to use only pipelines, only shader objects, or an arbitrary mix of the two.
The post goes into details on what it does, and how it's the "culmination of years of work to bring Vulkan developers ever more powerful and easier-to-use ways to manage shaders and state". They're urging developers who overlooked Vulkan in the past due to being intimidated by it to perhaps give it another look.
And according to the blog post from Blumenkrantz:
It’s a very cool extension for Zink. Effectively, it means (unoptimized) shader variants can be generated very fast. So fast that the extension should solve all the remaining issues with shader compilation and stuttering by enabling applications (zink) to create and bind shaders directly without the need for pipeline objects.
Seems like it's going to be a big win overall, and could result in performance gains in some cases and less stuttering.
To go along with it, NVIDIA already have a new Vulkan Beta Driver available with support added.
From my understanding Nintendo use Vulkan API on the Switch to squeeze as much performance out of the platform as they can, for example I heard Skyrim runs on vulkan on the Switch.
Nintendo supports both Vulkan and their own API. However pretty much no one uses Vulkan on Switch because it's not as fast as their own API (understandably, because their API is tailored to their specific hardware (which is nvidia based) while Vulkan is abstract).
This extension came as an effort to solve a major problem with Vulkan and hopes to entice Switch developers to use Vulkan instead.
That said, the extension works extremely well on Nvidia, where every state is dynamic and shader stages are pretty much independent. On other hardware, draw calls using shader objects won't be as fast as pipelines (as Mike puts it, they are unoptimized). So, it's going to take a hardware iteration or two before this is really helpful on anything that is not Nvidia.
" They're urging developers who overlooked Vulkan in the past due to being intimidated by it to perhaps give it another look."
maybe they tried to support vulkan but also compete with their own proprietary api exclusively for their console, just like sony did suporting openGL but also competing with...
https://en.wikipedia.org/wiki/PlayStation_4_system_software#System
but in this case, maybe they failed and prefer vulkan to thrive than to see directX12 being the standard...
Too bad Sony didn't decide to do it yet.
Last edited by Shmerl on 2 April 2023 at 6:51 pm UTC
See more from me