Size: a a a

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

2020 December 28

IL

Ilya Lakhin in Rust GameDev — русскоговорящее сообщество
Ну, он довольно хорошо контролирует, как мне кажется, то что попадает в safe API. Сценарии, при которых его можно сломать, конечно можно придумать при желании. Но в норме такого не происходит, и что-то явно плохое он сделать не даёт.
источник

IL

Ilya Lakhin in Rust GameDev — русскоговорящее сообщество
Честно говоря, я вообще не уверен в том, что безопасный GPU API можно сделать. Можно наверное всё больше покрывать слоями абстракции и/или ограничивать доступ к базовым сценариям оригинального API, и это увеличивает степень безопасности, безусловно, но и создаёт ряд проблем.
источник

IL

Ilya Lakhin in Rust GameDev — русскоговорящее сообщество
На мой взгляд Vulkano в этом плане придерживается некоторого разумного баланса.
источник

MS

Mikola Summer Duck in Rust GameDev — русскоговорящее сообщество
Ilya Lakhin
Честно говоря, я вообще не уверен в том, что безопасный GPU API можно сделать. Можно наверное всё больше покрывать слоями абстракции и/или ограничивать доступ к базовым сценариям оригинального API, и это увеличивает степень безопасности, безусловно, но и создаёт ряд проблем.
Так wgpu же, нет?
источник

IL

Ilya Lakhin in Rust GameDev — русскоговорящее сообщество
Mikola Summer Duck
Так wgpu же, нет?
Ну а он контролирует, например, что ты записываешь в glsl типы в Расте?
источник

MS

Mikola Summer Duck in Rust GameDev — русскоговорящее сообщество
Так логические ошибки это сейф
источник

IL

Ilya Lakhin in Rust GameDev — русскоговорящее сообщество
Ну как сказать... Это то, на чём практически программист будет спотыкаться довольно часто. Причем, как я вижу по примерам, там ещё и паддинги предлагается вычислять вручную
источник

IL

Ilya Lakhin in Rust GameDev — русскоговорящее сообщество
А в Вулкано он все типы вместе с паддингами генерирует прямо в Rust, и в compile-time, то есть с нулевым оверхедом
источник

o

operator in Rust GameDev — русскоговорящее сообщество
kvark: > <@theoraclebot:matrix.org> <code>p0lunin</code><br>Ну это как говорить что биндинги к сишным либам не могут быть сейф потому что в сишном коде могут быть УБ.

Вот есть, скажем, библиотека для растеризации шрифтов. Она говорит, нужно передать корректный шрифт и предоставить память для результата. Если раст обёртка это гарантирует, то она безопасна.
Но вот есть Vulkan, и он говорит, что image store в тексел за пределами изображения в шейдере - это UB. Как Vulkano это гарантирует? Похоже, никак.
Так что Vulkano - не safe API, как бы не старался.
источник

o

operator in Rust GameDev — русскоговорящее сообщество
kvark: > <@theoraclebot:matrix.org> <code>eliah_lakhin</code><br>Ну а он контролирует, например, что ты записываешь в glsl типы в Расте? (re @niksaak: Так wgpu же, нет?)

Он гарантирует, что шейдер не сделает с этими данными ничего страшного, что бы ты туда не положил. Так что всё безопасно.
источник

IL

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

o

operator in Rust GameDev — русскоговорящее сообщество
kvark: > <@theoraclebot:matrix.org> <code>eliah_lakhin</code><br>А в Вулкано он все типы вместе с паддингами генерирует прямо в Rust, и в compile-time, то есть с нулевым оверхедом

wgpu работает с массивами байтов, а преобразование твоих структур в массив байт и обратно оставляет для других библиотек (типа bytemuck и zerocopy)
источник

o

operator in Rust GameDev — русскоговорящее сообщество
kvark: > <@theoraclebot:matrix.org> <code>eliah_lakhin</code><br>А что страшного шейдер может сделать с данными? )

Использовать как индексы для записи за границы массива, например?
источник

IL

Ilya Lakhin in Rust GameDev — русскоговорящее сообщество
Ну да, понятно, что можно всё вручную делать аккуратно и правильно, только это снижает эргономичность API, которую по идее обычный пользователь ожидает.
источник

o

operator in Rust GameDev — русскоговорящее сообщество
kvark: я так понимаю, цена этой эргономики - все шейдера в Вулкано должны быть известны на момент сборки, так?
источник

o

operator in Rust GameDev — русскоговорящее сообщество
kvark: то есть подгружать шейдера динамически, компоновать на лету, принимать пользовательские шейдера - всё это за бортом?
источник

IL

Ilya Lakhin in Rust GameDev — русскоговорящее сообщество
operator
kvark: я так понимаю, цена этой эргономики - все шейдера в Вулкано должны быть известны на момент сборки, так?
Совершенно верно. А чем это плохо?
источник

o

operator in Rust GameDev — русскоговорящее сообщество
kvark: Это сильно ограничивает, что ты можешь в принципе сделать. Плюс неудобно пересобирать проект после каждой правки шейдера.
источник

IL

Ilya Lakhin in Rust GameDev — русскоговорящее сообщество
Конечно, но оно и предполагалось всё это за борт выкинуть в самой философии Vulkan
источник

IL

Ilya Lakhin in Rust GameDev — русскоговорящее сообщество
Каким образом оно ограничивает?
источник