fix(vulkan): label readback image formats
Docs Deploy / Build and Deploy MkDocs (push) Successful in 36s
Test / Lint (push) Failing after 2m5s
Test / Test (push) Skipped
Test / Render parity (push) Skipped

This commit is contained in:
2026-07-18 09:11:43 +04:00
parent b24594c6a2
commit d4aa7a223f
4 changed files with 14 additions and 3 deletions
@@ -242,6 +242,7 @@ impl VulkanSmokeRenderer {
enabled_extension_count: 0, enabled_extension_count: 0,
swapchain_extent: (0, 0), swapchain_extent: (0, 0),
swapchain_image_count: 0, swapchain_image_count: 0,
swapchain_image_format: 0,
swapchain_image_usage: 0, swapchain_image_usage: 0,
readback_copy_count: 0, readback_copy_count: 0,
readback_byte_count: 0, readback_byte_count: 0,
@@ -273,6 +274,7 @@ impl VulkanSmokeRenderer {
.unwrap_or(u32::MAX), .unwrap_or(u32::MAX),
swapchain_extent: swapchain_ref.report.plan.extent, swapchain_extent: swapchain_ref.report.plan.extent,
swapchain_image_count: swapchain_ref.report.image_count, 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, swapchain_image_usage: swapchain_ref.report.plan.image_usage,
readback_copy_count: 0, readback_copy_count: 0,
readback_byte_count: 0, readback_byte_count: 0,
@@ -589,6 +591,7 @@ impl VulkanSmokeRenderer {
self.frame_sync = frame_sync; self.frame_sync = frame_sync;
self.report.swapchain_extent = swapchain_extent; self.report.swapchain_extent = swapchain_extent;
self.report.swapchain_image_count = swapchain_image_count; 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.report.swapchain_image_usage = swapchain_image_usage;
self.swapchain_resources = Some(resources); self.swapchain_resources = Some(resources);
Ok(()) Ok(())
@@ -457,6 +457,8 @@ pub struct VulkanSmokeRendererReport {
pub swapchain_extent: (u32, u32), pub swapchain_extent: (u32, u32),
/// Current swapchain image count. /// Current swapchain image count.
pub swapchain_image_count: u32, 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. /// Current swapchain image-usage flags as raw Vulkan bits.
pub swapchain_image_usage: u32, pub swapchain_image_usage: u32,
/// Number of submitted swapchain image-to-buffer copy commands. /// Number of submitted swapchain image-to-buffer copy commands.
+7 -1
View File
@@ -639,7 +639,7 @@ impl SmokeApp {
let path = self let path = self
.options .options
.out .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())) std::fs::write(&path, &artifact.bytes).map_err(|err| format!("{}: {err}", path.display()))
} }
@@ -795,6 +795,9 @@ impl SmokeApp {
vulkan_swapchain_image_count: renderer vulkan_swapchain_image_count: renderer
.as_ref() .as_ref()
.map_or(0, |snapshot| snapshot.report.swapchain_image_count), .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 vulkan_swapchain_image_usage: renderer
.as_ref() .as_ref()
.map_or(0, |snapshot| snapshot.report.swapchain_image_usage), .map_or(0, |snapshot| snapshot.report.swapchain_image_usage),
@@ -1020,6 +1023,7 @@ fn render_timeout_failure_report(
vulkan_swapchain_width: 0, vulkan_swapchain_width: 0,
vulkan_swapchain_height: 0, vulkan_swapchain_height: 0,
vulkan_swapchain_image_count: 0, vulkan_swapchain_image_count: 0,
vulkan_swapchain_image_format: 0,
vulkan_swapchain_image_usage: 0, vulkan_swapchain_image_usage: 0,
vulkan_readback_copy_count: 0, vulkan_readback_copy_count: 0,
vulkan_readback_byte_count: 0, vulkan_readback_byte_count: 0,
@@ -1244,6 +1248,7 @@ struct SmokeReport<'a> {
vulkan_swapchain_width: u32, vulkan_swapchain_width: u32,
vulkan_swapchain_height: u32, vulkan_swapchain_height: u32,
vulkan_swapchain_image_count: u32, vulkan_swapchain_image_count: u32,
vulkan_swapchain_image_format: i32,
vulkan_swapchain_image_usage: u32, vulkan_swapchain_image_usage: u32,
vulkan_readback_copy_count: u64, vulkan_readback_copy_count: u64,
vulkan_readback_byte_count: u64, vulkan_readback_byte_count: u64,
@@ -1751,6 +1756,7 @@ mod tests {
vulkan_swapchain_width: 960, vulkan_swapchain_width: 960,
vulkan_swapchain_height: 540, vulkan_swapchain_height: 540,
vulkan_swapchain_image_count: 3, vulkan_swapchain_image_count: 3,
vulkan_swapchain_image_format: 50,
vulkan_swapchain_image_usage: 17, vulkan_swapchain_image_usage: 17,
vulkan_readback_copy_count: 300, vulkan_readback_copy_count: 300,
vulkan_readback_byte_count: 4_147_200, vulkan_readback_byte_count: 4_147_200,
+2 -2
View File
@@ -895,10 +895,10 @@ static viewer. Он ещё не захватывает original DirectDraw frame
fixed original camera и не сравнивает два изображения, поэтому pixel-parity fixed original camera и не сравнивает два изображения, поэтому pixel-parity
acceptance остаётся blocked. 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 Это concatenated current-swapchain images in Vulkan order, каждый с dimensions
из JSON и четырьмя bytes per pixel; format намеренно указан в имени файла, из 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. for two 960x540 images. Артефакт остаётся локальным output и не попадает в Git.
`Land.msh` использует отдельный geometry-only bridge: validated `TerrainFace28` `Land.msh` использует отдельный geometry-only bridge: validated `TerrainFace28`