aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorValentin Popov <valentin@popov.link>2026-07-18 08:11:43 +0300
committerValentin Popov <valentin@popov.link>2026-07-18 08:11:43 +0300
commitd4aa7a223fee241f9acc64b0f7d8d7e994e9a7d4 (patch)
tree65018c2ab2c5e2b2d317c50565f7a811f1b53562
parentb24594c6a20e43b8080a368ad9a20708caddcde6 (diff)
downloadfparkan-d4aa7a223fee241f9acc64b0f7d8d7e994e9a7d4.tar.xz
fparkan-d4aa7a223fee241f9acc64b0f7d8d7e994e9a7d4.zip
fix(vulkan): label readback image formats
-rw-r--r--adapters/fparkan-render-vulkan/src/ffi/smoke.rs3
-rw-r--r--adapters/fparkan-render-vulkan/src/ffi/smoke_types.rs2
-rw-r--r--apps/fparkan-vulkan-smoke/src/main.rs8
-rw-r--r--docs/tomes/05-render.md4
4 files changed, 14 insertions, 3 deletions
diff --git a/adapters/fparkan-render-vulkan/src/ffi/smoke.rs b/adapters/fparkan-render-vulkan/src/ffi/smoke.rs
index 5ddfae6..11c3377 100644
--- a/adapters/fparkan-render-vulkan/src/ffi/smoke.rs
+++ b/adapters/fparkan-render-vulkan/src/ffi/smoke.rs
@@ -242,6 +242,7 @@ impl VulkanSmokeRenderer {
enabled_extension_count: 0,
swapchain_extent: (0, 0),
swapchain_image_count: 0,
+ swapchain_image_format: 0,
swapchain_image_usage: 0,
readback_copy_count: 0,
readback_byte_count: 0,
@@ -273,6 +274,7 @@ impl VulkanSmokeRenderer {
.unwrap_or(u32::MAX),
swapchain_extent: swapchain_ref.report.plan.extent,
swapchain_image_count: swapchain_ref.report.image_count,
+ swapchain_image_format: swapchain_ref.report.plan.format.format,
swapchain_image_usage: swapchain_ref.report.plan.image_usage,
readback_copy_count: 0,
readback_byte_count: 0,
@@ -589,6 +591,7 @@ impl VulkanSmokeRenderer {
self.frame_sync = frame_sync;
self.report.swapchain_extent = swapchain_extent;
self.report.swapchain_image_count = swapchain_image_count;
+ self.report.swapchain_image_format = self.swapchain_ref()?.report.plan.format.format;
self.report.swapchain_image_usage = swapchain_image_usage;
self.swapchain_resources = Some(resources);
Ok(())
diff --git a/adapters/fparkan-render-vulkan/src/ffi/smoke_types.rs b/adapters/fparkan-render-vulkan/src/ffi/smoke_types.rs
index 60f86e2..b94e460 100644
--- a/adapters/fparkan-render-vulkan/src/ffi/smoke_types.rs
+++ b/adapters/fparkan-render-vulkan/src/ffi/smoke_types.rs
@@ -457,6 +457,8 @@ pub struct VulkanSmokeRendererReport {
pub swapchain_extent: (u32, u32),
/// Current swapchain image count.
pub swapchain_image_count: u32,
+ /// Current swapchain image format as a raw Vulkan enum value.
+ pub swapchain_image_format: i32,
/// Current swapchain image-usage flags as raw Vulkan bits.
pub swapchain_image_usage: u32,
/// Number of submitted swapchain image-to-buffer copy commands.
diff --git a/apps/fparkan-vulkan-smoke/src/main.rs b/apps/fparkan-vulkan-smoke/src/main.rs
index 0fbd843..95a19d7 100644
--- a/apps/fparkan-vulkan-smoke/src/main.rs
+++ b/apps/fparkan-vulkan-smoke/src/main.rs
@@ -639,7 +639,7 @@ impl SmokeApp {
let path = self
.options
.out
- .with_file_name(format!("{stem}.readback-b8g8r8a8.raw"));
+ .with_file_name(format!("{stem}.readback-vkformat-{}.raw", artifact.format));
std::fs::write(&path, &artifact.bytes).map_err(|err| format!("{}: {err}", path.display()))
}
@@ -795,6 +795,9 @@ impl SmokeApp {
vulkan_swapchain_image_count: renderer
.as_ref()
.map_or(0, |snapshot| snapshot.report.swapchain_image_count),
+ vulkan_swapchain_image_format: renderer
+ .as_ref()
+ .map_or(0, |snapshot| snapshot.report.swapchain_image_format),
vulkan_swapchain_image_usage: renderer
.as_ref()
.map_or(0, |snapshot| snapshot.report.swapchain_image_usage),
@@ -1020,6 +1023,7 @@ fn render_timeout_failure_report(
vulkan_swapchain_width: 0,
vulkan_swapchain_height: 0,
vulkan_swapchain_image_count: 0,
+ vulkan_swapchain_image_format: 0,
vulkan_swapchain_image_usage: 0,
vulkan_readback_copy_count: 0,
vulkan_readback_byte_count: 0,
@@ -1244,6 +1248,7 @@ struct SmokeReport<'a> {
vulkan_swapchain_width: u32,
vulkan_swapchain_height: u32,
vulkan_swapchain_image_count: u32,
+ vulkan_swapchain_image_format: i32,
vulkan_swapchain_image_usage: u32,
vulkan_readback_copy_count: u64,
vulkan_readback_byte_count: u64,
@@ -1751,6 +1756,7 @@ mod tests {
vulkan_swapchain_width: 960,
vulkan_swapchain_height: 540,
vulkan_swapchain_image_count: 3,
+ vulkan_swapchain_image_format: 50,
vulkan_swapchain_image_usage: 17,
vulkan_readback_copy_count: 300,
vulkan_readback_byte_count: 4_147_200,
diff --git a/docs/tomes/05-render.md b/docs/tomes/05-render.md
index 6bc1915..3b96351 100644
--- a/docs/tomes/05-render.md
+++ b/docs/tomes/05-render.md
@@ -895,10 +895,10 @@ static viewer. Он ещё не захватывает original DirectDraw frame
fixed original camera и не сравнивает два изображения, поэтому pixel-parity
acceptance остаётся blocked.
-Smoke также сохраняет raw artifact рядом с JSON: `<report-stem>.readback-b8g8r8a8.raw`.
+Smoke также сохраняет raw artifact рядом с JSON: `<report-stem>.readback-vkformat-<raw>.raw`.
Это concatenated current-swapchain images in Vulkan order, каждый с dimensions
из JSON и четырьмя bytes per pixel; format намеренно указан в имени файла,
-потому что bytes не перекодируются. GOG proof produced a 4,147,200-byte file
+потому что bytes не перекодируются; JSON содержит actual raw enum. GOG selected `50` and produced a 4,147,200-byte file
for two 960x540 images. Артефакт остаётся локальным output и не попадает в Git.
`Land.msh` использует отдельный geometry-only bridge: validated `TerrainFace28`