perf(render): prewarm pipeline variants with a Vulkan cache
Docs Deploy / Build and Deploy MkDocs (push) Successful in 35s

This commit is contained in:
Valentin Popov committed 2026-11-01 01:31:26 +04:00
1 parent 3aa9493a02
commit 15aadf7f47
5 files changed
+135 -61

No files matched your search

+12 -2
View File
@@ -1144,6 +1144,16 @@ lightmap state передаются в `VulkanStaticMaterial`, а shader пос
получается ключ Vulkan pipeline. Alpha reference передаётся отдельно через
push constant; он не требует нового pipeline.
Набор pipelines создаётся до первого draw. Для каждого исходного состояния
готовятся его авторский вариант, прозрачный вариант с сохранённым alpha-test
и пять категорий MAT0 с обеими политиками глубины. Cull и decal bias остаются
исходными; одинаковые ключи объединяются. Смена категории материала или
прозрачности диапазона выбирает готовый ключ, сохраняя descriptors, buffers и
framebuffers. Vulkan `VkPipelineCache` принадлежит renderer, используется всеми
созданиями pipelines и переживает пересоздание swapchain. На диск он пока не
сохраняется. Счётчик `render_pipeline_cache` показывает число созданных
pipelines, включая новые наборы после resize.
Рабочий путь `fparkan-game` загружает terrain и все выбранные mission roots
(по умолчанию весь список объектов), разрешая локальные material slots через
WEAR и MAT0 до объединения геометрии. Индексы GPU имеют тип `u32`: вся карта
@@ -1171,8 +1181,8 @@ FX и окружение обновляют следующие вершины,
Перед записью общих ресурсов renderer ждёт fences всех отправленных кадров.
Одного fence текущего кадрового слота недостаточно: другой кадр ещё может
читать ту же память. Ожидание всего устройства пока остаётся на пересоздании
swapchain и набора pipelines, диагностическом readback и завершении работы. Загрузка изменённых
читать ту же память. Ожидание всего устройства остаётся на пересоздании
swapchain, диагностическом readback и завершении работы. Загрузка изменённых
текстур пока использует отдельную синхронную transfer-команду. Строка
`render_geometry_upload` показывает записанные vertex/index bytes и объём,
который потребовался бы при полной перезаливке, без начальной загрузки.