Size: a a a

Rust GameDev — русскоговорящее сообщество

2020 December 28

IL

Ilya Lakhin in Rust GameDev — русскоговорящее сообщество
Смотрите, переключение расширений - это действительно проблемное место. Это недописанная фича на текущий момент. Но её можно уложить в концепцию предварительной кодогенерации, если в этом есть потребность. Например, с помощью glsl макросов, которые shaderc вроде бы поддерживает.
источник

R

Roman in Rust GameDev — русскоговорящее сообщество
Суть в том что обычно хочется наоборот. Посмотреть что умеет видеокарта и сгенерировать пайплайн на основе этих данных
источник

R

Roman in Rust GameDev — русскоговорящее сообщество
Выдать ошибку если вообще никак не получается пайплайн из того что поддерживается железкой
источник

R

Roman in Rust GameDev — русскоговорящее сообщество
А не зашить один шейдер и печалиться что железка тупая
источник

IL

Ilya Lakhin in Rust GameDev — русскоговорящее сообщество
Я думаю, что это можно сделать в рамках сущеествующей конепции, усовершенствовав систему так, чтобы при инициализации пайплайна он, возможно, модифицировал spir-v метаданные под возможности девайса. Для этого совсем не обязательно вводить динамическую загрузку шейдеров для конечного пользователя.

Я понимаю, что это теоретические рассуждения, но мы ведь обсуждаем сам подход.
источник

IL

Ilya Lakhin in Rust GameDev — русскоговорящее сообщество
Но есть и альтернативы, впрочем
источник

R

Roman in Rust GameDev — русскоговорящее сообщество
Ну так метаданные там не просто так прописаны. Если ты из метаданных уберешь non-uniform-array-index, а потом в коде будешь индексировать, получишь UB
источник

R

Roman in Rust GameDev — русскоговорящее сообщество
Конечно если Vulkano мне на лету модифицирует алгоритм, то нафига я вообще нужен тут?
источник

IL

Ilya Lakhin in Rust GameDev — русскоговорящее сообщество
Ну как бы с динамическими шейдерами вы бы сгенерировали два варианта, и загружали бы подходящий. Кто мешает в Vulkano так же подготовить два шейдера, и загружать подходящий, предварительно проверив capabilities?
источник

IL

Ilya Lakhin in Rust GameDev — русскоговорящее сообщество
Кроме того, у вас есть specialization constants, которые могут специализировать алгоритм.
источник

R

Roman in Rust GameDev — русскоговорящее сообщество
Два? Там может быть комбинаторный взрыв и вариантов внезапно будет тысяча
источник

R

Roman in Rust GameDev — русскоговорящее сообщество
Тут кусочек шейдера имет 2-3 варианта. Вот тут еще кусочек имет несколько вариантов и так далее
источник

IL

Ilya Lakhin in Rust GameDev — русскоговорящее сообщество
operator
kvark: Нет ничего неправильного в динамически подгружаемых шейдерах. Это реальный use case, который многие используют, и рабочая группа знала это при создании Вулкана
Это реальный use-case, который многие используют, но я думаю, это не то, что хотели разработчики спецификации, иначе бы они не ввели specialization constants. Они не на пустом месте были введены. И с кодогенерацией в них пропадал бы смысл.
источник

R

Roman in Rust GameDev — русскоговорящее сообщество
Смысл specialization constants в том что создать 2 пайплайна с разными константами из одного модуля дешевле
источник

R

Roman in Rust GameDev — русскоговорящее сообщество
И, что более важно, переключать между ними дешевле
источник

R

Roman in Rust GameDev — русскоговорящее сообщество
А не в том что б все шейдеры во время компиляции подготовить
источник

IL

Ilya Lakhin in Rust GameDev — русскоговорящее сообщество
А каким образом оно дешевле выходит?
источник

IL

Ilya Lakhin in Rust GameDev — русскоговорящее сообщество
Все константы инлайнятся ведь
источник

R

Roman in Rust GameDev — русскоговорящее сообщество
Это вы спросите у разработчиков железа, мои познания на этом все
источник

R

Roman in Rust GameDev — русскоговорящее сообщество
Кстати, я так и не нашел каким же образом вулкано проверяет что я нужные структуры засунул в юниформ буфер
источник