From 3aa9493a02abd27f4f0c803f594047d37ff9058b Mon Sep 17 00:00:00 2001 From: Valentin Popov Date: Sun, 1 Nov 2026 01:18:03 +0400 Subject: perf(render): share identical material texture images --- docs/tomes/05-render.md | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) (limited to 'docs') 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 и объём, который потребовался бы при полной перезаливке, без начальной загрузки. -- cgit v1.2.3