uidev: query surface format + color space from gpu
This commit is contained in:
@@ -1,25 +1,25 @@
|
|||||||
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 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, ColorSpace, 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 wlx_common::{audio, timestep::Timestep};
|
|||||||
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,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -74,13 +74,18 @@ fn load_testbed(audio_sample_player: &mut audio::SamplePlayer) -> anyhow::Result
|
|||||||
fn main() -> Result<(), Box<dyn std::error::Error>> {
|
fn main() -> Result<(), Box<dyn std::error::Error>> {
|
||||||
init_logging();
|
init_logging();
|
||||||
|
|
||||||
let (gfx, event_loop, window, surface) =
|
let (gfx, event_loop, window, surface, color_space) =
|
||||||
init_window("[-/=]: gui scale, F10: debug draw, F11: print tree")?;
|
init_window("[-/=]: gui scale, F10: debug draw, F11: print tree")?;
|
||||||
let inner_size = window.inner_size();
|
let inner_size = window.inner_size();
|
||||||
let mut swapchain_size = [inner_size.width, inner_size.height];
|
let mut swapchain_size = [inner_size.width, inner_size.height];
|
||||||
|
|
||||||
let mut swapchain_create_info =
|
let mut swapchain_create_info = swapchain_create_info(
|
||||||
swapchain_create_info(&gfx, gfx.surface_format, surface.clone(), swapchain_size);
|
&gfx,
|
||||||
|
gfx.surface_format,
|
||||||
|
color_space,
|
||||||
|
surface.clone(),
|
||||||
|
swapchain_size,
|
||||||
|
);
|
||||||
|
|
||||||
let (mut swapchain, mut images) = {
|
let (mut swapchain, mut images) = {
|
||||||
let (swapchain, images) = Swapchain::new(
|
let (swapchain, images) = Swapchain::new(
|
||||||
@@ -400,6 +405,7 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
|
|||||||
fn swapchain_create_info(
|
fn swapchain_create_info(
|
||||||
graphics: &WGfx,
|
graphics: &WGfx,
|
||||||
format: Format,
|
format: Format,
|
||||||
|
color_space: ColorSpace,
|
||||||
surface: Arc<Surface>,
|
surface: Arc<Surface>,
|
||||||
extent: [u32; 2],
|
extent: [u32; 2],
|
||||||
) -> SwapchainCreateInfo {
|
) -> SwapchainCreateInfo {
|
||||||
@@ -453,6 +459,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,
|
||||||
|
image_color_space: color_space,
|
||||||
composite_alpha,
|
composite_alpha,
|
||||||
..Default::default()
|
..Default::default()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,10 +1,12 @@
|
|||||||
|
use anyhow::Context;
|
||||||
use std::sync::{Arc, OnceLock};
|
use std::sync::{Arc, OnceLock};
|
||||||
use vulkano::{
|
use vulkano::{
|
||||||
device::{
|
device::{
|
||||||
Device, DeviceCreateInfo, DeviceExtensions, DeviceFeatures, Queue, QueueCreateInfo, QueueFlags,
|
|
||||||
physical::{PhysicalDevice, PhysicalDeviceType},
|
physical::{PhysicalDevice, PhysicalDeviceType},
|
||||||
|
Device, DeviceCreateInfo, DeviceExtensions, DeviceFeatures, Queue, QueueCreateInfo, QueueFlags,
|
||||||
},
|
},
|
||||||
instance::{Instance, InstanceCreateInfo},
|
instance::{Instance, InstanceCreateInfo},
|
||||||
|
swapchain::ColorSpace,
|
||||||
};
|
};
|
||||||
use wgui::gfx::WGfx;
|
use wgui::gfx::WGfx;
|
||||||
|
|
||||||
@@ -21,6 +23,7 @@ pub fn init_window(
|
|||||||
winit::event_loop::EventLoop<()>,
|
winit::event_loop::EventLoop<()>,
|
||||||
Arc<winit::window::Window>,
|
Arc<winit::window::Window>,
|
||||||
Arc<vulkano::swapchain::Surface>,
|
Arc<vulkano::swapchain::Surface>,
|
||||||
|
ColorSpace,
|
||||||
)> {
|
)> {
|
||||||
use vulkano::{instance::InstanceCreateFlags, swapchain::Surface};
|
use vulkano::{instance::InstanceCreateFlags, swapchain::Surface};
|
||||||
use winit::{event_loop::EventLoop, window::Window};
|
use winit::{event_loop::EventLoop, window::Window};
|
||||||
@@ -90,6 +93,12 @@ pub fn init_window(
|
|||||||
log::info!("img_filter_cubic!");
|
log::info!("img_filter_cubic!");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let (format, color_space) = physical_device
|
||||||
|
.surface_formats(&surface, vulkano::swapchain::SurfaceInfo::default())?
|
||||||
|
.into_iter()
|
||||||
|
.next()
|
||||||
|
.context("Could not read surface formats for PhysicalDevice")?;
|
||||||
|
|
||||||
let (device, queues) = Device::new(
|
let (device, queues) = Device::new(
|
||||||
physical_device,
|
physical_device,
|
||||||
DeviceCreateInfo {
|
DeviceCreateInfo {
|
||||||
@@ -113,14 +122,8 @@ pub fn init_window(
|
|||||||
|
|
||||||
let (queue_gfx, queue_xfer, _) = unwrap_queues(queues.collect());
|
let (queue_gfx, queue_xfer, _) = unwrap_queues(queues.collect());
|
||||||
|
|
||||||
let me = WGfx::new_from_raw(
|
let me = WGfx::new_from_raw(instance, device, queue_gfx, queue_xfer, format);
|
||||||
instance,
|
Ok((me, event_loop, window, surface, color_space))
|
||||||
device,
|
|
||||||
queue_gfx,
|
|
||||||
queue_xfer,
|
|
||||||
vulkano::format::Format::R8G8B8A8_SRGB,
|
|
||||||
);
|
|
||||||
Ok((me, event_loop, window, surface))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
|
|||||||
Reference in New Issue
Block a user