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::framebuffer::{Framebuffer, FramebufferAbstract, Subpass, RenderPassAbstract};
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::shader::{GraphicsShaderType, ShaderModule};
use vulkano::pipeline::viewport::Viewport;
@@ -21,7 +21,7 @@ use winit::{EventsLoop, Window, WindowBuilder, Event, WindowEvent};
use std::sync::Arc;
use std::time::SystemTime;
use std::path::PathBuf;
use std::ffi::{CStr, CString};
use std::ffi::{CStr};
use shade_runner;
use shade_runner::{CompiledShaders, Entry};
@@ -58,8 +58,10 @@ pub fn init(mut game: GameData) {
}
let instance = {
// let mut extensions = RawInstanceExtensions::from(&vulkano_win::required_extensions());
let mut extensions = vulkano_win::required_extensions();
let extensions = InstanceExtensions {
ext_debug_report: true,
..vulkano_win::required_extensions()
};
let app_info = ApplicationInfo {
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")
} else {
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 {
let debug_callback = setup_debug_callback(&instance);
assert!(debug_callback.is_some());
println!("Debug callback created.");
let msg_types = MessageTypes {
error: true,
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();
@@ -514,21 +533,3 @@ fn read_shader(vert_path_relative: &str, frag_path_relative: &str) -> (CompiledS
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()
}