feat(vulkan): add depth attachment pipeline support
Docs Deploy / Build and Deploy MkDocs (push) Successful in 35s
Test / Lint (push) Failing after 1m58s
Test / Test (push) Skipped
Test / Render parity (push) Skipped

This commit is contained in:
2026-07-18 08:31:19 +04:00
parent 645eca5510
commit 4b741fb19c
7 changed files with 268 additions and 29 deletions
+10 -7
View File
@@ -845,20 +845,23 @@ swapchain resources, создаёт один `vk::Pipeline` на уникаль
созданные 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: их
`SourceAlpha`, front/back culling и depth modes имеют Vulkan mapping в этом
кэше. При создании swapchain resources renderer выбирает capability-approved
depth/stencil format, выделяет device-local attachment, очищает его в render
pass и прикрепляет к каждому framebuffer. `TestWrite` включает depth test и
write; `TestReadOnly` включает test без write. Alpha-test пока завершается
явной ошибкой: shader variant ещё не существует, поэтому renderer не должен
молча подменять state. Также не установлен источник значений для Batch20/MAT0: их
поля нельзя объявлять blend/depth/cull mapping без dynamic capture или
дополнительного дизассемблирования. Это частично реализованная compatibility
boundary, а не заявление о готовой parity fixed-function state.
Выбор будущего depth/stencil attachment уже отделён от renderer lifetime:
Выбор depth/stencil attachment отделён от renderer lifetime:
`select_depth_stencil_attachment_format` применяет тот же фиксированный порядок
форматов, что и capability gate, к фактически поддерживаемому списку GPU.
Это исключает ситуацию, когда admission принимает один совместимый формат, а
allocation позднее выбирает другой; сам attachment и render-pass integration
остаются следующей отдельной задачей.
allocation позднее выбирает другой; resource уничтожается после framebuffer и
render pass при recreate/teardown.
После последнего world pass renderer закрывает сцену и выводит back buffer.
World3D снимает `in_render`, восстанавливает временный viewport state и вызывает