Это довольно неожиданно. Как это часто бывает, произошло обновление спецификации API Vulkan, и вместе с ним появилось совершенно новое расширение для улучшения шейдеров, в создании которого участвовала Nintendo.
Об этом упоминается в сообщении в блоге разработчика драйверов Майка Блюменкранца, а также в полном анонсе от The Khronos Group, которая курирует API Vulkan. Официальный анонс Vulkan был даже написан разработчиком из Nintendo. Заметки из анонса:
Сегодня компания Khronos® выпускает новое расширение Vulkan® для различных производителей, которое призвано радикально упростить процесс определения шейдеров и состояния шейдеров в приложениях, сохраняя при этом принцип Vulkan как высокопроизводительного «API без секретов».
Это расширение — VK_EXT_shader_object. Оно вводит новый тип объекта VkShaderEXT, который представляет собой один скомпилированный шейдерный этап, а также 4 новые функции для манипулирования и использования объектов VkShaderEXT.
Объекты шейдеров выполняют роль, аналогичную конвейерам, но предоставляют более простой и гибкий интерфейс, предназначенный для расширения возможностей приложений, чьи архитектуры и/или потребности в «динамичности» ранее могли затруднять использование конвейеров. В средах, где поддерживается VK_EXT_shader_object, приложения могут выбрать использование только конвейеров, только шейдерных объектов или произвольное сочетание этих двух вариантов.
В сообщении подробно рассказывается о том, что он делает, и что это «кульминация многолетней работы по предоставлению разработчикам Vulkan все более мощных и простых в использовании способов управления шейдерами и состоянием». Они призывают разработчиков, которые в прошлом игнорировали Vulkan из-за того, что были напуганы им, возможно, взглянуть на него еще раз.
Согласно сообщению в блоге Блюменкранца:
Это очень крутое расширение для Zink. По сути, это означает, что (неоптимизированные) варианты шейдеров могут генерироваться очень быстро. Настолько быстро, что расширение должно решить все оставшиеся проблемы с компиляцией шейдеров и заиканием, позволяя приложениям (zink) создавать и связывать шейдеры напрямую, без необходимости использования объектов конвейера.
Похоже, что это будет большим выигрышем в целом, и может привести к росту производительности в некоторых случаях и уменьшению заикания.
В дополнение к этому NVIDIA уже выпустила новый бета-драйвер Vulkan с добавленной поддержкой.