uidev: fix when MAILBOX is not supported

This commit is contained in:
galister
2025-12-11 10:34:29 +09:00
parent 60ff340445
commit d2a3b7cc63

View File

@@ -1,3 +1,4 @@
use anyhow::Context;
use glam::{vec2, Vec2}; use glam::{vec2, Vec2};
use std::sync::Arc; use std::sync::Arc;
use testbed::{testbed_any::TestbedAny, Testbed}; use testbed::{testbed_any::TestbedAny, Testbed};
@@ -406,25 +407,43 @@ fn swapchain_create_info(
.surface_capabilities(&surface, SurfaceInfo::default()) .surface_capabilities(&surface, SurfaceInfo::default())
.unwrap(); // want panic .unwrap(); // want panic
let composite_alpha = if surface_capabilities let mut composite_alpha = None;
.supported_composite_alpha for c in [
.contains_enum(CompositeAlpha::PreMultiplied) CompositeAlpha::PreMultiplied,
{ CompositeAlpha::PostMultiplied,
CompositeAlpha::PreMultiplied CompositeAlpha::Opaque,
} else { ] {
log::warn!("Possible GPU driver issue: VkSurfaceCapabilitiesKHR supported_composite_alpha doesn't have PRE_MULTIPLIED! Desktop window will be blended using a fallback method and may look different."); if surface_capabilities
surface_capabilities
.supported_composite_alpha .supported_composite_alpha
.into_iter() .contains_enum(c)
.next() {
.expect( composite_alpha = Some(c);
"No supported_composite_alpha available on VkSurfaceCapabilitiesKHR. Possible GPU driver issue?", break;
) }
}; log::warn!("GPU driver doesn't support {c:?} compositeAlpha! Desktop window will be blended using a fallback method and may look different than in VR.");
}
let composite_alpha = composite_alpha
.expect("GPU driver issue: VkSurfaceCapabilitiesKHR has empty supportedCompositeAlpha.");
let present_modes = graphics
.device
.physical_device()
.surface_present_modes(&surface, SurfaceInfo::default())
.expect("Could not get GPU present modes for VKSurface.");
let mut present_mode = None;
for pm in [PresentMode::Mailbox, PresentMode::Fifo] {
if present_modes.contains(&pm) {
present_mode = Some(pm);
break;
}
log::warn!("GPU driver doesn't support {pm:?} presentMode! Desktop window may have a higher latency and/or glitch during grab/resize.");
}
let present_mode = present_mode.expect("GPU driver issue: VkPresentModeKHR FIFO is not supported even though it's required by Vulkan spec.");
SwapchainCreateInfo { SwapchainCreateInfo {
min_image_count: surface_capabilities.min_image_count.max(2), min_image_count: surface_capabilities.min_image_count.max(2),
present_mode: PresentMode::Mailbox, present_mode,
image_format: format, image_format: format,
image_extent: extent, image_extent: extent,
image_usage: ImageUsage::COLOR_ATTACHMENT, image_usage: ImageUsage::COLOR_ATTACHMENT,