Доступен Vcc, C/C++ компилятор для Vulkan

Новости мира unix. Хотите узнать секрет вечного счастья? Откройте страницу 246.
Ответить
acolyte
Аватара пользователя
Сообщения: 3254
Зарегистрирован: 20.08.2022

#

Доступен Vcc, C/C++ компилятор для Vulkan
Дата публикации:Wed, 10 Jan 2024 10:17:08 +0300




После трёх лет разработки представлен исследовательский проект Vcc (Vulkan Clang Compiler), нацеленный на создание компилятора, способного транслировать код на языке С++ в представление, выполняемое на GPU, поддерживающих графический API Vulkan. В отличие от моделей программирования GPU на базе языков шейдеров GLSL и HLSL в Vcc развивается идея полного отказа от использования отдельных языков шейдеров и предоставляется возможность прямой компиляции кода C/C++ для Vulkan. Наработки проекта распространяются под лицензией MIT.



Для компиляции кода задействованы компоненты проекта LLVM и Clang в качестве фронтэнда. Для выполнения на GPU развивается собственное промежуточное представление шейдеров Shady и компилятор для преобразования кода в это представление. По возможности поддерживается компиляция обычного стандартного кода C/C++, а для поддержки специфичных для GPU возможностей предоставляется несколько дополнительных встроенных функций.



В Vcc применяются штатные возможности C/C++ для управления ходом выполнения программы, включая возможность использования оператора "goto". Допускается вызов функций, рекурсивное выполнение функций, использование физических указателей, теггированных указателей и указателей на функции, выполнение арифметических операций над указателями, а также определение раскладки типов в памяти.



Для достижения поддержки возможностей C/C++, таких как функции и указатели, промежуточное представление Shady расширено поддержкой специальных конструкций. В общем виде Shady базируется на промежуточном представлении SPIR-V 3 и использует эмуляцию для реализации расширенных возможностей, которые напрямую невозможно реализовать поверх SPIR-V. Для использования в программах специфичных для шейдеров возможностей предлагаются встроенные функции и аннотации.


#include <shady.h>

descriptor_set(0) descriptor_binding(1) uniform sampler2D texSampler;

location(0) input vec3 vertexColor;
location(1) input vec2 texCoord;

location(0) output vec4 outColor;

fragment_shader void main() {
vec4 fragColor;
fragColor.xyz = vertexColor;
fragColor.w = 1.0f;
outColor = texture2D(texSampler, texCoord) * fragColor;
}




Для работы требуется GPU с поддержкой Vulkan 1.1, расширения VK_KHR_buffer_device_address и типов Int8, Int16 и Int64. Vcc совместим с Vulkan-драйверами radv (AMD Mesa), amdvlk (AMD), nvk (NVIDIA), anv (Intel Mesa) и проприетарными драйвеами AMD, Intel Arc и NVIDIA. Из ограничений реализации упоминается отсутствие поддержки исключений C++, недоступность функций malloc/free и непереносимость функций и указателей между хост-системой и GPU.










Новость позаимствована с opennet.ru
Ссылка на оригинал: https://www.opennet.ru/opennews/art.shtml?num=60413

Жизнь за Нер'зула!

Ответить