Нова реалізація OpenCL (rusticl), що розвивається для проекту Mesa, написана мовою Rust, успішно пройшла набір тестів CTS (Kronos Conformance Test Suite), що використовуються консорціумом Khronos для оцінки сумісності зі специфікаціями OpenCL 3.0. Проект розвиває Керол Хербст (Karol Herbst) із компанії Red Hat, що бере участь у розробці Mesa, драйвера Nouveau та відкритого стека OpenCL. Зазначається, що Керол зв'язався з Khronos щодо офіційної сертифікації підтримки OpenCL 3.0 в rusticl.
Тести пройдені на системі з 12 поколінням GPU Intel (Alder Lake). Робота проведена з використанням Mesa-драйвера Iris, але проект має працювати і з іншими драйверами Mesa, які використовують безтипове проміжне уявлення (IR) шейдерів NIR. Запит на злиття Rusticl з Mesa поки що знаходиться на стадії розгляду і рішення про включення коду мовою Rust в Mesa поки що не прийнято. До прийняття Rusticl в основний склад Mesa для складання можна використовувати окрему гілку, при компіляції якої слід вказати складальні параметри "-Dgallium-rusticl=true -Dopencl-spirv=true -Dshader-cache=true -Dllvm=true".
Rusticl виступає в ролі аналога присутнього в Mesa OpenCL-фронтенду Clover і також розроблений з використанням інтерфейсу Gallium, що надається в Mesa. Кол Clover вже давно перебуває у занедбаному стані та rusticl позиціонується як його майбутня заміна. Крім досягнення сумісності з OpenCL 3.0, проект Rusticl відрізняється від Clover підтримкою розширень OpenCL для обробки зображень, але поки не підтримує формат FP16.
Для генерації біндингу для Mesa і OpenCL, що дозволяють викликати Rust-функції з коду на Сі і навпаки, Rusticl задіяний rust-bindgen. Можливість використання мови Rust у проекті Mesa обговорюється з 2020 року. З плюсів підтримки Rust згадується підвищення безпеки та якості драйверів за рахунок порятунку від типових проблем при роботі з пам'яттю, а також можливість включення до складу Mesa сторонніх напрацювань, таких як Kazan (реалізація Vulkan на Rust). З недоліків відзначається ускладнення системи складання, небажання прив'язуватися до пакетної системи cargo, розширення вимог до складального оточення та необхідність включення компілятора Rust у складальні залежності, обов'язкові для побудови ключових компонентів робочого столу Linux.
Джерело: opennet.ru
