Dx12) Слишком долго компилируется шейдер

Dx12) Слишком долго компилируется шейдер

При профилировании потребовалось около 14 секунд только для компиляции шейдера. (Хотя загрузка всех этих файлов obj заняла всего 7 секунд.)

как я могу это оптимизировать? есть ли у меня возможность предварительно скомпилировать шейдеры hlsl?

Что ж, в Visual Studio есть встроенный компилятор hlsl, вы его пробовали? Но все же 14 секунд кажутся слишком длинными для такого количества шейдеров.

mateeeeeee 16.05.2022 12:57
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
40
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

На самом деле рекомендуется компилировать шейдеры в автономном режиме (во время сборки), а затем загружать полученный двоичный двоичный объект шейдера во время выполнения.

  • Вы можете использовать встроенную интеграцию Visual Studio HLSL, которая будет генерировать файлы .cso (скомпилированный объект шейдера). Подробнее см. в Документы Майкрософт. Примечания по использованию Shader Model 6 DXC с VS см. в статье эта страница.

  • Вы можете использовать пакетный скрипт для вызова FXC или DXC из командной строки и использовать его как часть пользовательской сборки VS или пользовательских целей CMake. См. CompileShaders.cmd из набора инструментов DirectX и этот учебник.

Вам понадобится новый ctor для ваших классов шейдеров, перечисленных во фрагменте кода выше, который принимает двоичный объект шейдера напрямую, а не строку, в исходный код HLSL для компиляции.

For Win32 desktop applications, you need to handle the fact that your .cso files will end up next to your built EXE instead of where you have your project CWD set. See ReadData for an example of this. For UWP and Xbox apps, the .cso files are placed into the appx package automatically.

From your question, it's not clear if you are using the legacy FXC.EXE compiler with Shader Model 5.1 or the current DirectX 12 shader DXC.EXE for Shader Model 6. Still the same advice applies here. FWIW, the DXC compiler is LLVM based so it's a bit more complex and therefore does more analysis than the legacy FXC compiler did.

Другие вопросы по теме