diff options
| author | Valentin Popov <valentin@popov.link> | 2026-07-18 07:59:28 +0300 |
|---|---|---|
| committer | Valentin Popov <valentin@popov.link> | 2026-07-18 07:59:28 +0300 |
| commit | 9f6b21638d396783809bbd941d4cf0d548122995 (patch) | |
| tree | 629ee6db9d2ac1d822b5c30177d50ca4927dde66 /adapters/fparkan-render-vulkan/src/policy.rs | |
| parent | b500e32ca2b35fbefbdd5c94a1cf782e309ed20a (diff) | |
| download | fparkan-9f6b21638d396783809bbd941d4cf0d548122995.tar.xz fparkan-9f6b21638d396783809bbd941d4cf0d548122995.zip | |
feat(vulkan): select readback-capable swapchains
Diffstat (limited to 'adapters/fparkan-render-vulkan/src/policy.rs')
| -rw-r--r-- | adapters/fparkan-render-vulkan/src/policy.rs | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/adapters/fparkan-render-vulkan/src/policy.rs b/adapters/fparkan-render-vulkan/src/policy.rs index bb26aee..c79b8dc 100644 --- a/adapters/fparkan-render-vulkan/src/policy.rs +++ b/adapters/fparkan-render-vulkan/src/policy.rs @@ -96,6 +96,8 @@ pub struct VulkanSwapchainPlan { pub present_mode: i32, /// Selected image count. pub image_count: u32, + /// Selected image-usage flags as raw Vulkan bits. + pub image_usage: u32, } /// Swapchain planning error. @@ -425,6 +427,7 @@ pub fn plan_vulkan_swapchain( format, present_mode, image_count: select_image_count(request.capabilities), + image_usage: select_swapchain_image_usage(request.capabilities), }) } @@ -521,6 +524,7 @@ pub fn render_swapchain_plan_json(plan: &VulkanSwapchainPlan) -> String { color_space: i32, present_mode: i32, image_count: u32, + image_usage: u32, } serialize_json_or_fallback( @@ -531,8 +535,9 @@ pub fn render_swapchain_plan_json(plan: &VulkanSwapchainPlan) -> String { color_space: plan.format.color_space, present_mode: plan.present_mode, image_count: plan.image_count, + image_usage: plan.image_usage, }, - "{\"schema\":0,\"extent\":[0,0],\"format\":0,\"color_space\":0,\"present_mode\":0,\"image_count\":0}", + "{\"schema\":0,\"extent\":[0,0],\"format\":0,\"color_space\":0,\"present_mode\":0,\"image_count\":0,\"image_usage\":0}", ) } @@ -809,6 +814,15 @@ fn supports_depth_stencil_request( select_depth_stencil_attachment_format(&device.supported_depth_stencil_formats, depth).is_some() } +fn select_swapchain_image_usage(capabilities: VulkanSwapchainSurfaceCapabilities) -> u32 { + let mut usage = vk::ImageUsageFlags::COLOR_ATTACHMENT; + let supported = vk::ImageUsageFlags::from_raw(capabilities.supported_usage_flags); + if supported.contains(vk::ImageUsageFlags::TRANSFER_SRC) { + usage |= vk::ImageUsageFlags::TRANSFER_SRC; + } + usage.as_raw() +} + /// Selects the first canonical depth/stencil attachment format supported by a device. /// /// The order is part of the Windows Vulkan compatibility contract and is shared |
