uidev: fix crash when PRE_MULTIPLIED is not in supportedCompositeAlpha
This commit is contained in:
@@ -1,26 +1,26 @@
|
|||||||
use glam::{Vec2, vec2};
|
use glam::{vec2, Vec2};
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
use testbed::{Testbed, testbed_any::TestbedAny};
|
use testbed::{testbed_any::TestbedAny, Testbed};
|
||||||
use timestep::Timestep;
|
use timestep::Timestep;
|
||||||
use tracing_subscriber::EnvFilter;
|
|
||||||
use tracing_subscriber::filter::LevelFilter;
|
use tracing_subscriber::filter::LevelFilter;
|
||||||
use tracing_subscriber::layer::SubscriberExt;
|
use tracing_subscriber::layer::SubscriberExt;
|
||||||
use tracing_subscriber::util::SubscriberInitExt;
|
use tracing_subscriber::util::SubscriberInitExt;
|
||||||
|
use tracing_subscriber::EnvFilter;
|
||||||
use vulkan::init_window;
|
use vulkan::init_window;
|
||||||
use vulkano::{
|
use vulkano::{
|
||||||
Validated, VulkanError,
|
|
||||||
command_buffer::CommandBufferUsage,
|
command_buffer::CommandBufferUsage,
|
||||||
format::Format,
|
format::Format,
|
||||||
image::{ImageUsage, view::ImageView},
|
image::{view::ImageView, ImageUsage},
|
||||||
swapchain::{
|
swapchain::{
|
||||||
CompositeAlpha, PresentMode, Surface, SurfaceInfo, Swapchain, SwapchainCreateInfo,
|
acquire_next_image, CompositeAlpha, PresentMode, Surface, SurfaceInfo, Swapchain,
|
||||||
SwapchainPresentInfo, acquire_next_image,
|
SwapchainCreateInfo, SwapchainPresentInfo,
|
||||||
},
|
},
|
||||||
sync::GpuFuture,
|
sync::GpuFuture,
|
||||||
|
Validated, VulkanError,
|
||||||
};
|
};
|
||||||
use wgui::{
|
use wgui::{
|
||||||
event::{MouseButtonIndex, MouseDownEvent, MouseMotionEvent, MouseUpEvent, MouseWheelEvent},
|
event::{MouseButtonIndex, MouseDownEvent, MouseMotionEvent, MouseUpEvent, MouseWheelEvent},
|
||||||
gfx::{WGfx, cmd::WGfxClearMode},
|
gfx::{cmd::WGfxClearMode, WGfx},
|
||||||
renderer_vk::{self},
|
renderer_vk::{self},
|
||||||
};
|
};
|
||||||
use winit::{
|
use winit::{
|
||||||
@@ -32,7 +32,7 @@ use winit::{
|
|||||||
use crate::{
|
use crate::{
|
||||||
rate_limiter::RateLimiter,
|
rate_limiter::RateLimiter,
|
||||||
testbed::{
|
testbed::{
|
||||||
TestbedUpdateParams, testbed_dashboard::TestbedDashboard, testbed_generic::TestbedGeneric,
|
testbed_dashboard::TestbedDashboard, testbed_generic::TestbedGeneric, TestbedUpdateParams,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -400,13 +400,27 @@ fn swapchain_create_info(
|
|||||||
surface: Arc<Surface>,
|
surface: Arc<Surface>,
|
||||||
extent: [u32; 2],
|
extent: [u32; 2],
|
||||||
) -> SwapchainCreateInfo {
|
) -> SwapchainCreateInfo {
|
||||||
let mut surface_capabilities = graphics
|
let surface_capabilities = graphics
|
||||||
.device
|
.device
|
||||||
.physical_device()
|
.physical_device()
|
||||||
.surface_capabilities(&surface, SurfaceInfo::default())
|
.surface_capabilities(&surface, SurfaceInfo::default())
|
||||||
.unwrap(); // want panic
|
.unwrap(); // want panic
|
||||||
|
|
||||||
surface_capabilities.supported_composite_alpha = CompositeAlpha::PreMultiplied.into();
|
let composite_alpha = if surface_capabilities
|
||||||
|
.supported_composite_alpha
|
||||||
|
.contains_enum(CompositeAlpha::PreMultiplied)
|
||||||
|
{
|
||||||
|
CompositeAlpha::PreMultiplied
|
||||||
|
} 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.");
|
||||||
|
surface_capabilities
|
||||||
|
.supported_composite_alpha
|
||||||
|
.into_iter()
|
||||||
|
.next()
|
||||||
|
.expect(
|
||||||
|
"No supported_composite_alpha available on VkSurfaceCapabilitiesKHR. Possible GPU driver issue?",
|
||||||
|
)
|
||||||
|
};
|
||||||
|
|
||||||
SwapchainCreateInfo {
|
SwapchainCreateInfo {
|
||||||
min_image_count: surface_capabilities.min_image_count.max(2),
|
min_image_count: surface_capabilities.min_image_count.max(2),
|
||||||
@@ -414,11 +428,7 @@ fn swapchain_create_info(
|
|||||||
image_format: format,
|
image_format: format,
|
||||||
image_extent: extent,
|
image_extent: extent,
|
||||||
image_usage: ImageUsage::COLOR_ATTACHMENT,
|
image_usage: ImageUsage::COLOR_ATTACHMENT,
|
||||||
composite_alpha: surface_capabilities
|
composite_alpha,
|
||||||
.supported_composite_alpha
|
|
||||||
.into_iter()
|
|
||||||
.next()
|
|
||||||
.unwrap(), // want panic
|
|
||||||
..Default::default()
|
..Default::default()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user