perf(render): share identical material texture images
Docs Deploy / Build and Deploy MkDocs (push) Successful in 39s

This commit is contained in:
Valentin Popov committed 2026-11-01 01:18:03 +04:00
1 parent 5890416fd7
commit 3aa9493a02
4 files changed
+127 -76

No files matched your search

+13 -2
View File
@@ -1151,6 +1151,17 @@ WEAR и MAT0 до объединения геометрии. Индексы GPU
`u16`. Terrain передаёт в shader базовый, detail и overlay stages, lightmap и
animation phase; object batches сохраняют их legacy blend/depth/alpha state.
При первоначальной загрузке одинаковые текстуры разных material slots
используют один GPU image. Ключ включает размеры, RGBA8 и всю авторскую
mip-цепочку: совпадения только базового изображения недостаточно. Хеш ускоряет
поиск, а полное сравнение данных исключает ошибочное объединение при коллизии.
Слоты сохраняют собственные descriptors, UV и параметры материала. При первой
смене общей текстуры renderer создаёт отдельный image только для изменяемого
слота; следующие фазы обновляют его на месте. Поэтому анимация одного материала
не меняет соседний. Строка `render_texture_upload` показывает число слотов,
начальных GPU images и отделений при обновлении. CPU-копии исходных пикселей
в материалах эта оптимизация не объединяет.
Рельеф образует неизменяемое начало общего vertex buffer. Control-анимация,
FX и окружение обновляют следующие вершины, а новые индексы нужны только
геометрии проекционных теней в конце index buffer. Поэтому кадр записывает
@@ -1160,8 +1171,8 @@ FX и окружение обновляют следующие вершины,
Перед записью общих ресурсов renderer ждёт fences всех отправленных кадров.
Одного fence текущего кадрового слота недостаточно: другой кадр ещё может
читать ту же память. Ожидание всего устройства остаётся на пересоздании
swapchain, диагностическом readback и завершении работы. Загрузка изменённых
читать ту же память. Ожидание всего устройства пока остаётся на пересоздании
swapchain и набора pipelines, диагностическом readback и завершении работы. Загрузка изменённых
текстур пока использует отдельную синхронную transfer-команду. Строка
`render_geometry_upload` показывает записанные vertex/index bytes и объём,
который потребовался бы при полной перезаливке, без начальной загрузки.