diff options
| author | Valentin Popov <valentin@popov.link> | 2026-07-18 07:22:29 +0300 |
|---|---|---|
| committer | Valentin Popov <valentin@popov.link> | 2026-07-18 07:22:29 +0300 |
| commit | e7c16641716b41b8682b05bb96f74f25707d9d93 (patch) | |
| tree | f1f1221a9e5b271908fae71f628deb66c310aaca /docs/tomes/05-render.md | |
| parent | 1afe1698db5e9b3378f5087890c8177201a84789 (diff) | |
| download | fparkan-e7c16641716b41b8682b05bb96f74f25707d9d93.tar.xz fparkan-e7c16641716b41b8682b05bb96f74f25707d9d93.zip | |
feat(vulkan): cache pipeline variants by state key
Diffstat (limited to 'docs/tomes/05-render.md')
| -rw-r--r-- | docs/tomes/05-render.md | 22 |
1 files changed, 14 insertions, 8 deletions
diff --git a/docs/tomes/05-render.md b/docs/tomes/05-render.md index a508334..ccbc578 100644 --- a/docs/tomes/05-render.md +++ b/docs/tomes/05-render.md @@ -838,14 +838,20 @@ draw_indexed(item.batch.base_vertex, от версии Rust или процесса. Alpha reference намеренно не входит в key: это dynamic material constant, а не структурный вариант graphics pipeline. -Пока текущий статический Vulkan viewer создаёт только базовое состояние -`opaque + depth disabled + cull disabled + alpha-test disabled`; ключ уже -передаётся через render command и canonical capture, но Vulkan pipeline cache -ещё не выбирает variants по нему. Также не установлен источник значений для -Batch20/MAT0: их поля нельзя объявлять blend/depth/cull mapping без dynamic -capture или дополнительного дизассемблирования. Поэтому этот контракт — -подготовленная граница совместимости, а не заявление о готовой parity -fixed-function state. +Текущий static Vulkan viewer дедуплицирует состояния ranges при каждой сборке +swapchain resources, создаёт один `vk::Pipeline` на уникальный `PipelineKey` и +выбирает его непосредственно перед соответствующим `vkCmdDrawIndexed`. +Кэш корректно уничтожается при recreate/teardown; setup failure откатывает уже +созданные variants. Baseline оригинального MSH подтверждён с состоянием +`opaque + depth disabled + cull disabled + alpha-test disabled`. + +`SourceAlpha` и front/back culling имеют Vulkan mapping в этом кэше. Запрос +depth или alpha-test сейчас завершается явной ошибкой: renderer ещё не имеет +depth attachment либо alpha-test shader variant, поэтому он не должен молча +подменять state. Также не установлен источник значений для Batch20/MAT0: их +поля нельзя объявлять blend/depth/cull mapping без dynamic capture или +дополнительного дизассемблирования. Это частично реализованная compatibility +boundary, а не заявление о готовой parity fixed-function state. После последнего world pass renderer закрывает сцену и выводит back buffer. World3D снимает `in_render`, восстанавливает временный viewport state и вызывает |
