uidev: fix when MAILBOX is not supported
This commit is contained in:
@@ -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,
|
||||||
|
|||||||
Reference in New Issue
Block a user