diff options
| author | Valentin Popov <valentin@popov.link> | 2026-07-18 07:18:39 +0300 |
|---|---|---|
| committer | Valentin Popov <valentin@popov.link> | 2026-07-18 07:18:39 +0300 |
| commit | 1afe1698db5e9b3378f5087890c8177201a84789 (patch) | |
| tree | 8891ff54e9758c276c0a105ea962880df0351ba0 /docs/tomes/05-render.md | |
| parent | 2745b938d81b56805626f737da067d31d82e95d3 (diff) | |
| download | fparkan-1afe1698db5e9b3378f5087890c8177201a84789.tar.xz fparkan-1afe1698db5e9b3378f5087890c8177201a84789.zip | |
feat(render): add deterministic pipeline state keys
Diffstat (limited to 'docs/tomes/05-render.md')
| -rw-r--r-- | docs/tomes/05-render.md | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/docs/tomes/05-render.md b/docs/tomes/05-render.md index 6804fa6..a508334 100644 --- a/docs/tomes/05-render.md +++ b/docs/tomes/05-render.md @@ -829,6 +829,24 @@ draw_indexed(item.batch.base_vertex, item.batch.index_count); ``` +## Текущий контракт pipeline key + +`fparkan-render` теперь переносит вместе с каждым backend-neutral draw +`LegacyPipelineState` и детерминированный `PipelineKey`. Ключ не хешируется: +он явно упаковывает blend mode, depth mode, cull mode и флаг alpha-test, поэтому +одинаковые snapshots дают одинаковый capture и будущий Vulkan cache не зависит +от версии 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. + После последнего world pass renderer закрывает сцену и выводит back buffer. World3D снимает `in_render`, восстанавливает временный viewport state и вызывает `on_end_render` у active objects. Только после этого допустимо освобождать |
