This commit is contained in:
2019-07-23 22:12:04 +02:00
parent 1f980e7c12
commit 20066091ea

View File

@@ -3,7 +3,7 @@ use vulkano::command_buffer::{AutoCommandBufferBuilder, DynamicState};
use vulkano::device::{Device, DeviceExtensions}; use vulkano::device::{Device, DeviceExtensions};
use vulkano::framebuffer::{Framebuffer, FramebufferAbstract, Subpass, RenderPassAbstract}; use vulkano::framebuffer::{Framebuffer, FramebufferAbstract, Subpass, RenderPassAbstract};
use vulkano::image::SwapchainImage; use vulkano::image::SwapchainImage;
use vulkano::instance::{Instance, PhysicalDevice, ApplicationInfo, Version, RawInstanceExtensions}; use vulkano::instance::{Instance, PhysicalDevice, ApplicationInfo, Version, InstanceExtensions};
use vulkano::pipeline::{GraphicsPipeline}; use vulkano::pipeline::{GraphicsPipeline};
use vulkano::pipeline::shader::{GraphicsShaderType, ShaderModule}; use vulkano::pipeline::shader::{GraphicsShaderType, ShaderModule};
use vulkano::pipeline::viewport::Viewport; use vulkano::pipeline::viewport::Viewport;
@@ -21,7 +21,7 @@ use winit::{EventsLoop, Window, WindowBuilder, Event, WindowEvent};
use std::sync::Arc; use std::sync::Arc;
use std::time::SystemTime; use std::time::SystemTime;
use std::path::PathBuf; use std::path::PathBuf;
use std::ffi::{CStr, CString}; use std::ffi::{CStr};
use shade_runner; use shade_runner;
use shade_runner::{CompiledShaders, Entry}; use shade_runner::{CompiledShaders, Entry};
@@ -58,8 +58,10 @@ pub fn init(mut game: GameData) {
} }
let instance = { let instance = {
// let mut extensions = RawInstanceExtensions::from(&vulkano_win::required_extensions()); let extensions = InstanceExtensions {
let mut extensions = vulkano_win::required_extensions(); ext_debug_report: true,
..vulkano_win::required_extensions()
};
let app_info = ApplicationInfo { let app_info = ApplicationInfo {
application_name: Some("Asuro Editor".into()), application_name: Some("Asuro Editor".into()),
@@ -77,19 +79,36 @@ pub fn init(mut game: GameData) {
} }
}); });
extensions.ext_debug_report = true;
// extensions.insert(CString::new("VK_EXT_debug_utils").unwrap());
Instance::new(Some(&app_info), &extensions, VALIDATION_LAYERS.iter().cloned()).expect("failed to create Vulkan instance") Instance::new(Some(&app_info), &extensions, VALIDATION_LAYERS.iter().cloned()).expect("failed to create Vulkan instance")
} else { } else {
Instance::new(Some(&app_info), &extensions, None).expect("failed to create Vulkan instance") Instance::new(Some(&app_info), &extensions, None).expect("failed to create Vulkan instance")
} }
}; };
// lifetime of this is important, even tho it isn't used!
let mut _debug_callback = None;
if ENABLE_VALIDATION_LAYERS { if ENABLE_VALIDATION_LAYERS {
let debug_callback = setup_debug_callback(&instance); let msg_types = MessageTypes {
assert!(debug_callback.is_some()); error: true,
println!("Debug callback created."); warning: true,
performance_warning: true,
information: true,
debug: true,
};
_debug_callback = DebugCallback::new(&instance, msg_types, |msg| {
let type_str = match (msg.ty.error, msg.ty.warning, msg.ty.performance_warning, msg.ty.information, msg.ty.debug) {
(true, _, _, _, _) => "!!",
(_, true, _, _, _) => "!",
(_, _, true, _, _) => "p",
(_, _, _, true, _) => "i",
_ => " "
};
let layer_str = msg.layer_prefix;
println!("[{}][{}]: {}", type_str, layer_str, msg.description);
}).ok();
} }
let physical = PhysicalDevice::enumerate(&instance).next().unwrap(); let physical = PhysicalDevice::enumerate(&instance).next().unwrap();
@@ -514,21 +533,3 @@ fn read_shader(vert_path_relative: &str, frag_path_relative: &str) -> (CompiledS
Err(error) => panic!("Shader compilation error: {:?}", error) Err(error) => panic!("Shader compilation error: {:?}", error)
} }
} }
fn setup_debug_callback(instance: &Arc<Instance>) -> Option<DebugCallback> {
if !ENABLE_VALIDATION_LAYERS {
return None;
}
let msg_types = MessageTypes {
error: true,
warning: true,
performance_warning: true,
information: true,
debug: true,
};
DebugCallback::new(&instance, msg_types, |msg| {
println!("validation layer: {:?}", msg.description);
}).ok()
}