aboutsummaryrefslogtreecommitdiff
path: root/docs
diff options
context:
space:
mode:
authorValentin Popov <valentin@popov.link>2026-07-18 07:18:39 +0300
committerValentin Popov <valentin@popov.link>2026-07-18 07:18:39 +0300
commit1afe1698db5e9b3378f5087890c8177201a84789 (patch)
tree8891ff54e9758c276c0a105ea962880df0351ba0 /docs
parent2745b938d81b56805626f737da067d31d82e95d3 (diff)
downloadfparkan-1afe1698db5e9b3378f5087890c8177201a84789.tar.xz
fparkan-1afe1698db5e9b3378f5087890c8177201a84789.zip
feat(render): add deterministic pipeline state keys
Diffstat (limited to 'docs')
-rw-r--r--docs/tomes/05-render.md18
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. Только после этого допустимо освобождать