Vulkan 1.4.325 получил поддержку нетипизированных указателей в шейдерах для более гибкой работы с памятью
Вышла новая версия Vulkan 1.4.325, в которой главным нововведением стала поддержка расширения VK_KHR_shader_untyped_pointers. Эта технология реализует работу с нетипизированными указателями в шейдерах, являясь альтернативой строго типизированным указателям. Теперь разработчики смогут интерпретировать данные в памяти и при атомарных операциях иначе, чем это определено в типе переменной, без дополнительных инструкций преобразования.
Нетипизированные указатели позволяют эффективно переносить операции загрузки и записи из шаблонных функций высокоуровневых языков, а также упрощают шейдеры, которые поддерживают операции, но не хранят данные в малых типах, например, 16-битных числах с плавающей точкой. Это расширяет возможности оптимизации и облегчает разработку сложных графических и вычислительных алгоритмов.
Работа над расширением велась инженерами из Google, Arm, LunarG и AMD. В регистре SPIR-V аналогичное расширение SPV_KHR_untyped_pointers описывает возможность объявления указателей без строгого типа данных, а также их использование для переинтерпретации содержимого памяти. Например, это даёт возможность загрузить вектор чисел с плавающей точкой из переменной, которая формально объявлена как массив целых чисел.
Кроме внедрения VK_KHR_shader_untyped_pointers, обновление Vulkan 1.4.325 включает ряд мелких исправлений и уточнений спецификации. После релиза новое расширение уже получило поддержку в драйверах Mesa NVK и ANV, а в RADV соответствующий патч находится на стадии подготовки и ожидается в ближайшие дни.