aboutsummaryrefslogtreecommitdiff
path: root/docs/tomes
diff options
context:
space:
mode:
authorValentin Popov <valentin@popov.link>2026-07-18 08:05:20 +0300
committerValentin Popov <valentin@popov.link>2026-07-18 08:05:20 +0300
commitf9a13298c0d5ef9bc0df968d178983506c24c0a6 (patch)
tree48a5e08d3f3dc614d9345fd937c6601eb8005518 /docs/tomes
parent9f6b21638d396783809bbd941d4cf0d548122995 (diff)
downloadfparkan-f9a13298c0d5ef9bc0df968d178983506c24c0a6.tar.xz
fparkan-f9a13298c0d5ef9bc0df968d178983506c24c0a6.zip
feat(vulkan): capture swapchain pixels
Diffstat (limited to 'docs/tomes')
-rw-r--r--docs/tomes/05-render.md20
1 files changed, 20 insertions, 0 deletions
diff --git a/docs/tomes/05-render.md b/docs/tomes/05-render.md
index e2f3b88..3e0a149 100644
--- a/docs/tomes/05-render.md
+++ b/docs/tomes/05-render.md
@@ -875,6 +875,26 @@ events, 2 swapchain recreations, Vulkan validation warnings/errors `0/0`.
Следующий шаг должен выполнить явный image-to-buffer copy и сравнить полученные
bytes с зафиксированным reference capture.
+### First synchronized Vulkan pixel-readback artifact
+
+Stage 3 static viewer теперь выполняет фактический readback для surface с
+`TRANSFER_SRC`: на каждый swapchain image создаётся host-visible coherent
+`TRANSFER_DST` buffer. После render pass command buffer переводит image из
+`PRESENT_SRC_KHR` в `TRANSFER_SRC_OPTIMAL`, выполняет `vkCmdCopyImageToBuffer`
+и возвращает image в `PRESENT_SRC_KHR`. CPU отображает memory только после
+`vkDeviceWaitIdle` during shutdown; это исключает чтение GPU work in flight.
+Smoke JSON фиксирует число записанных copy-команд, final byte count и FNV-1a-64
+hash всех current-swapchain readback buffers, не сохраняя игровые pixels в
+репозитории.
+
+На GOG `MTCHECK.MSH`/`DEFAULT.0` AMD Radeon Pro WX 3200 Series выполнил 300
+copy-команд, final artifact 4,147,200 bytes и hash `2184179010340020629` при
+validation warnings/errors `0/0`. Повторный идентичный запуск дал тот же
+размер и hash. Это доказывает Vulkan copy/readback path только для нашего
+static viewer. Он ещё не захватывает original DirectDraw frame, не задаёт
+fixed original camera и не сравнивает два изображения, поэтому pixel-parity
+acceptance остаётся blocked.
+
`Land.msh` использует отдельный geometry-only bridge: validated `TerrainFace28`
сохраняет source triangle order, а его positions и packed UV0 попадают в тот же
static vertex/index upload path. Для текущего диагностического viewer XZ bounds