Уточнить цену замены 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++ выбор физического устройства по требуемым
|
**Замены vk-bootstrap нет.** В C++ выбор физического устройства по требуемым
|
||||||
возможностям, поиск семейств очередей, проверка наличия слоя валидации и сборка цепочки
|
возможностям, поиск семейств очередей, проверка наличия слоя валидации и сборка цепочки
|
||||||
показа — это `vkb::InstanceBuilder`, `vkb::PhysicalDeviceSelector`, `vkb::SwapchainBuilder`,
|
показа — это `vkb::InstanceBuilder`, `vkb::PhysicalDeviceSelector` и
|
||||||
суммарно около сорока строк вызовов. В порте это `context.rs` и `swapchain.rs`, написанные
|
`vkb::SwapchainBuilder`. В порте всё это написано руками: перебор устройств, чтение
|
||||||
руками: перебор устройств, чтение `PhysicalDeviceFeatures2` с цепочкой `Vulkan12/13Features`,
|
`PhysicalDeviceFeatures2` с цепочкой `Vulkan12/13Features` и сверка девяти возможностей,
|
||||||
разбор флагов семейств очередей, проверка поддержки показа на поверхность, выбор формата
|
разбор флагов семейств очередей с проверкой поддержки показа на поверхность, выбор
|
||||||
с откатом, зажим размера и числа образов по возможностям поверхности. Это **самая
|
формата с откатом на первый доступный, зажим размера и числа образов по возможностям
|
||||||
большая статья расходов порта** и главная причина, по которой `simv-vk` вышел длиннее
|
поверхности, создание представлений.
|
||||||
своего прообраза.
|
|
||||||
|
Счёт по одним и тем же модулям (`Context` и `Swapchain` целиком, строки кода без пустых и
|
||||||
|
комментариев): **301 строка в C++ против 606 в порте**. Эти 305 строк разницы и есть
|
||||||
|
главная причина, по которой `simv-vk` вышел длиннее прообраза, — весь остальной перевес
|
||||||
|
Vulkan-слоя укладывается в четыре десятка строк.
|
||||||
|
|
||||||
**Ритм выпусков разный.** `ash` 0.38 вышел в апреле 2024 и с тех пор не обновлялся —
|
**Ритм выпусков разный.** `ash` 0.38 вышел в апреле 2024 и с тех пор не обновлялся —
|
||||||
это не заброшенность (Vulkan 1.3 он покрывает полностью, а генерируемый API стабилен),
|
это не заброшенность (Vulkan 1.3 он покрывает полностью, а генерируемый API стабилен),
|
||||||
@@ -356,10 +360,10 @@ C++ тоже опасен, не притворяясь, что их нет.
|
|||||||
сводится. Что можно утверждать по итогам порта:
|
сводится. Что можно утверждать по итогам порта:
|
||||||
|
|
||||||
**Порт занял примерно на пятую часть больше строк**, и почти весь перевес пришёлся на
|
**Порт занял примерно на пятую часть больше строк**, и почти весь перевес пришёлся на
|
||||||
`simv-vk`. Причина одна и она названа выше: замены vk-bootstrap нет, и сорок строк
|
`simv-vk`. Причина одна и она названа выше: замены vk-bootstrap нет, и 301 строка
|
||||||
вызовов превратились в двести пятьдесят строк выбора устройства и сборки цепочки показа.
|
`Context` с `Swapchain` превратилась в 606. Остальной Vulkan-слой — запись кадра, барьеры,
|
||||||
Вне Vulkan-слоя объёмы сопоставимы. Если проект растёт дальше именно в Vulkan-часть,
|
сборка конвейеров — совпадает почти строка в строку. Если проект растёт дальше именно в
|
||||||
перевес разовый: инициализация пишется один раз.
|
Vulkan-часть, перевес разовый: инициализация пишется один раз.
|
||||||
|
|
||||||
**Сборка: паритет везде, кроме одной клетки.** Полная сборка release у C++ вдвое быстрее
|
**Сборка: паритет везде, кроме одной клетки.** Полная сборка release у C++ вдвое быстрее
|
||||||
(114 с против 194 с), полная debug — наоборот, медленнее (112 с против 83 с),
|
(114 с против 194 с), полная debug — наоборот, медленнее (112 с против 83 с),
|
||||||
|
|||||||
Reference in New Issue
Block a user