LINUX.ORG.RU

DirectX backend в LLVM получил статус официально поддерживаемой архитектурной цели

 ,

DirectX backend в LLVM получил статус официально поддерживаемой архитектурной цели

0

1

В LLVM завершён перевод DirectX backend из экспериментального в официальный статус. Соответствующий pull request #214066 был влит в основную ветку llvm-project 31 августа. DirectX перенесён из LLVM_ALL_EXPERIMENTAL_TARGETS в обычный LLVM_ALL_TARGETS, поэтому теперь backend будет собираться по умолчанию вместе с другими штатными целями LLVM.

Ранее для его включения требовалось явно добавлять DirectX через CMake-параметр LLVM_EXPERIMENTAL_TARGETS_TO_BUILD. В принятом изменении DirectX добавлен в стандартный список targets и удалён из экспериментального.

Речь идёт не о реализации Direct3D или графическом драйвере. DirectX backend преобразует LLVM IR в DXIL — DirectX Intermediate Language, используемый DirectX 12 для представления скомпилированных шейдеров. Согласно документации LLVM, DXIL основан на bitcode старого LLVM 3.7, дополненного специфичными для DirectX операциями, ограничениями и метаданными. Результат помещается в контейнер DXContainer, содержащий DXIL и дополнительную информацию о шейдере.

Одновременно с повышением статуса backend поддержка HLSL и clang-dxc включается при сборке Clang по умолчанию. Отдельный переключатель CLANG_ENABLE_HLSL удалён. clang-dxc фактически запускает Clang в режиме --driver-mode=dxc, предоставляя интерфейс командной строки, ориентированный на совместимость с Microsoft DirectX Shader Compiler. (изменение в LLVM)

Долгосрочная цель проекта ещё масштабнее. В документации HLSL в Clang разработчики заявляют о намерении сделать Clang заменой DXC во всех поддерживаемых сценариях, сохранив совместимость с существующим HLSL-кодом. При этом HLSL toolchain не ограничивается DirectX: предусмотрена генерация как DXIL, так и SPIR-V, используемого в Vulkan.

Работа над DirectX backend в основном дереве LLVM ведётся примерно четыре года. 4 августа инженер Microsoft Farzon Lotfi опубликовал RFC с предложением перевести его в официальный статус. Разработчики посчитали backend достаточно зрелым с точки зрения архитектуры, стабильности, тестирования и наличия сопровождающих. В качестве наиболее готового сценария сейчас называется компиляция compute shaders.

Официальный статус имеет практическое значение и для самого LLVM. Experimental backend не обязан собираться по умолчанию, а его поломки в первую очередь исправляют собственные сопровождающие. Штатный target становится частью обычной сборочной и тестовой инфраструктуры LLVM и должен оставаться работоспособным при изменениях общих компонентов проекта.

Особенность DirectX backend — необходимость преобразовывать современный LLVM IR в формат, совместимый с LLVM 3.7. Этот вопрос отдельно обсуждался при рассмотрении RFC. Разработчики решили изолировать такую совместимость внутри backend: специальные проходы адаптируют IR к требованиям DXIL, а ограничения старого формата не должны мешать развитию современного LLVM. (обсуждение RFC)

Например, стадия DXILPrepare преобразует конструкции, которые нельзя непосредственно представить в DXIL, а DXILOpLowering заменяет LLVM intrinsics операциями DirectX. После этого DXILTranslateMetadata формирует требуемые метаданные. Архитектура этой цепочки описана в документации LLVM.

Получение официального статуса пока не означает полной готовности замены DXC. Наиболее зрелым направлением остаются compute shaders, тогда как поддержка полного набора графических стадий, ray tracing и новых Shader Model продолжает развиваться. Сам backend первоначально ориентирован на DirectX 12; поддержку DirectX 11 разработчики планируют расширять позднее. (DirectX Usage)

>>> Источник

★★★★★

Проверено: cetjs2 ()

Ну ладно ИИ за тебя прочитал и написал, но своих-то хоть пара мыслей забрезжило? Это для LLM? Для игр?

zabbal ★★★☆☆
()
Ответ на: комментарий от zabbal

вот и расскажи зачем оно, я поэтому и притащил

а про номерные релизы по расписанию чего-то-там сам пиши

unclestephen ★★★★★
() автор топика
Ответ на: комментарий от Radjah

Да. Точнее, в LLVM теперь штатный backend, который умеет превращать LLVM IR в DXIL — промежуточное представление шейдеров для DirectX 12.

unclestephen ★★★★★
() автор топика

Е-мое, неужели теперь шейдер-файлы можно будет компилировать тем же компилятором, что и саму игрушку? Годнота.

Если в vendor-specific shader extensions не лезть (а как туда не лезть, если ты тяжесть какую-то делаешь, типа Киберпанк2077 или как он там называется)

Хорошая новость :0)

vvb333007
()
Ответ на: комментарий от Radjah

Да. Если на DirectX пишешь, то бинго. Если на OpenGL то ой. Один хрен для серьезного чего-то нужны экстеншны - а это означает, компилятор от Нвидиа, компилятор от АМД, :))

vvb333007
()
Ответ на: комментарий от cetjs2

В качестве наиболее готового сценария сейчас называется компиляция compute shaders.

Вроде нет. Впрочем мясной прокси, притащивший этот нейрослоп, и сам не в курсе :)

zabbal ★★★☆☆
()
Ответ на: комментарий от zabbal

Для игр. Идея в том, что LLVM теперь умеет компилировать шейдер-файлы, такие микропрограммы на птичьем языке, которые GPU умеет выполнять per-pixel или per-vertex. Эффекты в видеоиграх делаются на этом. Выпуклые текстуры, которые своими пупырышками тень отбрасывают правильную, хотя сама модель - абсолютно плоская.

Обычно для их компиляции используется сторонний софт.

Минутка ностальгии: первые шейдеры, которые я увидел на ПК - это были софтварные шейдеры игры Quake 3 Arena (хороший образчик того, как надо писать на Си :))))) ).

Там тоже свой синтаксис был, но, конечно, не per-pixel. С текстурами они там игрались: растягивали, поворачивали, полупрозрачнили и т.п. Железо тех лет про шейдеры вообще ничего не знало, ну , может, кроме специализированного какого-нибудь. И реализовано все это дело было в софте.

vvb333007
()
Последнее исправление: vvb333007 (всего исправлений: 1)
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.