Уточнить цену замены vk-bootstrap измеренными числами
Было сказано «около сорока строк вызовов» на глаз. Счёт по одним и тем же модулям (Context и Swapchain целиком, код без пустых и комментариев) даёт 301 строку в C++ против 606 в порте. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
+15
-11
@@ -285,13 +285,17 @@ winit забирает его себе и зовёт приложение чер
|
||||
|
||||
**Замены vk-bootstrap нет.** В C++ выбор физического устройства по требуемым
|
||||
возможностям, поиск семейств очередей, проверка наличия слоя валидации и сборка цепочки
|
||||
показа — это `vkb::InstanceBuilder`, `vkb::PhysicalDeviceSelector`, `vkb::SwapchainBuilder`,
|
||||
суммарно около сорока строк вызовов. В порте это `context.rs` и `swapchain.rs`, написанные
|
||||
руками: перебор устройств, чтение `PhysicalDeviceFeatures2` с цепочкой `Vulkan12/13Features`,
|
||||
разбор флагов семейств очередей, проверка поддержки показа на поверхность, выбор формата
|
||||
с откатом, зажим размера и числа образов по возможностям поверхности. Это **самая
|
||||
большая статья расходов порта** и главная причина, по которой `simv-vk` вышел длиннее
|
||||
своего прообраза.
|
||||
показа — это `vkb::InstanceBuilder`, `vkb::PhysicalDeviceSelector` и
|
||||
`vkb::SwapchainBuilder`. В порте всё это написано руками: перебор устройств, чтение
|
||||
`PhysicalDeviceFeatures2` с цепочкой `Vulkan12/13Features` и сверка девяти возможностей,
|
||||
разбор флагов семейств очередей с проверкой поддержки показа на поверхность, выбор
|
||||
формата с откатом на первый доступный, зажим размера и числа образов по возможностям
|
||||
поверхности, создание представлений.
|
||||
|
||||
Счёт по одним и тем же модулям (`Context` и `Swapchain` целиком, строки кода без пустых и
|
||||
комментариев): **301 строка в C++ против 606 в порте**. Эти 305 строк разницы и есть
|
||||
главная причина, по которой `simv-vk` вышел длиннее прообраза, — весь остальной перевес
|
||||
Vulkan-слоя укладывается в четыре десятка строк.
|
||||
|
||||
**Ритм выпусков разный.** `ash` 0.38 вышел в апреле 2024 и с тех пор не обновлялся —
|
||||
это не заброшенность (Vulkan 1.3 он покрывает полностью, а генерируемый API стабилен),
|
||||
@@ -356,10 +360,10 @@ C++ тоже опасен, не притворяясь, что их нет.
|
||||
сводится. Что можно утверждать по итогам порта:
|
||||
|
||||
**Порт занял примерно на пятую часть больше строк**, и почти весь перевес пришёлся на
|
||||
`simv-vk`. Причина одна и она названа выше: замены vk-bootstrap нет, и сорок строк
|
||||
вызовов превратились в двести пятьдесят строк выбора устройства и сборки цепочки показа.
|
||||
Вне Vulkan-слоя объёмы сопоставимы. Если проект растёт дальше именно в Vulkan-часть,
|
||||
перевес разовый: инициализация пишется один раз.
|
||||
`simv-vk`. Причина одна и она названа выше: замены vk-bootstrap нет, и 301 строка
|
||||
`Context` с `Swapchain` превратилась в 606. Остальной Vulkan-слой — запись кадра, барьеры,
|
||||
сборка конвейеров — совпадает почти строка в строку. Если проект растёт дальше именно в
|
||||
Vulkan-часть, перевес разовый: инициализация пишется один раз.
|
||||
|
||||
**Сборка: паритет везде, кроме одной клетки.** Полная сборка release у C++ вдвое быстрее
|
||||
(114 с против 194 с), полная debug — наоборот, медленнее (112 с против 83 с),
|
||||
|
||||
Reference in New Issue
Block a user