diff options
| author | Valentin Popov <valentin@popov.link> | 2026-11-01 00:18:03 +0300 |
|---|---|---|
| committer | Valentin Popov <valentin@popov.link> | 2026-11-01 00:18:03 +0300 |
| commit | 3aa9493a02abd27f4f0c803f594047d37ff9058b (patch) | |
| tree | e71a98772a9cb136754038214734d8b757985ba0 /docs | |
| parent | 5890416fd74f4868d16814bd87221370e34062db (diff) | |
| download | fparkan-3aa9493a02abd27f4f0c803f594047d37ff9058b.tar.xz fparkan-3aa9493a02abd27f4f0c803f594047d37ff9058b.zip | |
perf(render): share identical material texture images
Diffstat (limited to 'docs')
| -rw-r--r-- | docs/tomes/05-render.md | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/docs/tomes/05-render.md b/docs/tomes/05-render.md index 8f9dd11..c1563fc 100644 --- a/docs/tomes/05-render.md +++ b/docs/tomes/05-render.md @@ -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 и объём, который потребовался бы при полной перезаливке, без начальной загрузки. |
