Begin add use_layers [not work]
Some checks failed
Build legacy Nix package on Ubuntu / build (push) Failing after 0s

This commit is contained in:
Florian RICHER 2024-11-07 22:14:01 +01:00
parent 56ad167b0f
commit 7c072d60e2
Signed by: florian.richer
GPG key ID: C73D37CBED7BFC77
5 changed files with 199 additions and 3 deletions

View file

@ -4,6 +4,8 @@ mod display;
mod vulkan;
fn main() {
env_logger::init();
let event_loop = EventLoop::new().unwrap();
let mut app = display::App::default();

View file

@ -0,0 +1,51 @@
use std::ffi::CStr;
use ash::{vk, Entry};
pub fn use_layers(
entry: &Entry,
layers_to_select: Vec<&str>
) -> Vec<*const std::ffi::c_char> {
let layers_available = unsafe {
entry
.enumerate_instance_layer_properties()
.unwrap_or_default()
};
let mut selected_layers = Vec::<&CStr>::new();
log::info!("Available layers ({}):", layers_available.len());
for l in layers_available {
let layer_name = l.layer_name_as_c_str().unwrap_or_default();
if layers_to_select.iter().any(|ln| (*ln).eq(layer_name)) {
selected_layers.push(layer_name.clone());
}
log::info!(
"\t{:?}\tImplementation version: {}\tVulkan Version: {}\tDescription: {:?}",
l.layer_name_as_c_str().unwrap_or_default(),
l.implementation_version,
print_version(l.spec_version),
l.description_as_c_str().unwrap_or_default()
);
}
log::info!(""); // Add blank line
log::info!("Layers to select ({}):", layers_to_select.len());
for l in layers_to_select {
let selected = selected_layers.contains(&l);
log::info!("\t{:?}\tSelected: {}", l, selected);
}
log::info!(""); // Add blank line
selected_layers.iter().map(|sl| sl.as_ptr()).collect()
}
pub fn print_version(version: u32) -> String {
format!(
"{}.{}.{}.{}",
vk::api_version_major(version),
vk::api_version_minor(version),
vk::api_version_patch(version),
vk::api_version_variant(version)
)
}

View file

@ -1,6 +1,7 @@
use std::ffi::CString;
use ash::{Instance, vk, Entry};
use winit::raw_window_handle::{HasDisplayHandle};
use crate::vulkan::utils::use_layers;
use crate::vulkan::VkPhysicalDevice;
pub struct VkInstance {
@ -13,8 +14,10 @@ impl VkInstance {
let entry = Entry::linked();
// Layers
let layers_available = unsafe { entry.enumerate_instance_layer_properties().unwrap_or_default() };
let layer_names = layers_available.iter().map(|layer| layer.layer_name.as_ptr()).collect::<Vec<_>>();
let layers = use_layers(&entry, vec![
"VK_LAYER_MANGOHUD_overlay_x86_64"
]);
let layer_names = Vec::<*const std::ffi::c_char>::new();
// Extensions
let mut extension_names =