From 2f626c5b4c997fd686a59fe9faa44e7de6c4b55a Mon Sep 17 00:00:00 2001 From: Ilya Zlobintsev Date: Fri, 18 Nov 2022 21:16:35 +0200 Subject: [PATCH] feat: proper feature and extension list --- Cargo.lock | 5 ++- lact-daemon/Cargo.toml | 2 +- lact-daemon/src/server/vulkan.rs | 55 ++++++++------------------------ lact-schema/src/lib.rs | 4 +-- 4 files changed, 18 insertions(+), 48 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index a940e31..73e57f8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1262,9 +1262,8 @@ dependencies = [ [[package]] name = "vulkano" -version = "0.32.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eecedd057ea4cd85c0e43ba2ad30e599954bd958c50d0f7849439548cfa573ce" +version = "0.32.0" +source = "git+https://github.com/ilya-zlobintsev/vulkano?branch=arr_features#0c1f4f3bfcc94748ffe25512665f796e4bb6302f" dependencies = [ "ahash", "ash", diff --git a/lact-daemon/Cargo.toml b/lact-daemon/Cargo.toml index 1bdce5a..a822924 100644 --- a/lact-daemon/Cargo.toml +++ b/lact-daemon/Cargo.toml @@ -27,5 +27,5 @@ tokio = { version = "1.21.2", features = [ ] } tracing = "0.1.37" tracing-subscriber = "0.3.16" -vulkano = "0.32.1" +vulkano = { git = "https://github.com/ilya-zlobintsev/vulkano", branch = "arr_features" } lact-schema = { path = "../lact-schema" } diff --git a/lact-daemon/src/server/vulkan.rs b/lact-daemon/src/server/vulkan.rs index 28288d5..0d64da7 100644 --- a/lact-daemon/src/server/vulkan.rs +++ b/lact-daemon/src/server/vulkan.rs @@ -1,3 +1,5 @@ +use std::borrow::Cow; + use crate::fork::run_forked; use lact_schema::VulkanInfo; use vulkano::{ @@ -5,7 +7,7 @@ use vulkano::{ VulkanLibrary, }; -pub fn get_vulkan_info(vendor_id: &str, device_id: &str) -> anyhow::Result { +pub fn get_vulkan_info<'a>(vendor_id: &'a str, device_id: &'a str) -> anyhow::Result { let vendor_id = u32::from_str_radix(vendor_id, 16)?; let device_id = u32::from_str_radix(device_id, 16)?; @@ -26,8 +28,16 @@ pub fn get_vulkan_info(vendor_id: &str, device_id: &str) -> anyhow::Result anyhow::Result(data: D) -> Vec { - let output = format!("{data:?}"); - let trimmed_output = output.trim_start_matches('[').trim_end_matches(']'); - - trimmed_output - .split(',') - .map(|s| s.trim().to_owned()) - .collect() -} - -#[cfg(test)] -mod tests { - use super::vulkano_struct_to_vec; - use vulkano::device::{DeviceExtensions, Features}; - - #[test] - fn features_to_vec() { - let features = Features { - geometry_shader: true, - tessellation_shader: true, - ..Features::empty() - }; - let vec = vulkano_struct_to_vec(features); - assert_eq!(vec, vec!["geometryShader", "tessellationShader"]); - } - - #[test] - fn extensions_to_vec() { - let extensions = DeviceExtensions { - khr_external_fence: true, - khr_video_queue: true, - ..DeviceExtensions::empty() - }; - - let vec = vulkano_struct_to_vec(extensions); - assert_eq!(vec, vec!["VK_KHR_external_fence", "VK_KHR_video_queue"]); - } -} diff --git a/lact-schema/src/lib.rs b/lact-schema/src/lib.rs index 162c58a..21fc78c 100644 --- a/lact-schema/src/lib.rs +++ b/lact-schema/src/lib.rs @@ -42,8 +42,8 @@ pub struct VulkanInfo { pub device_name: String, pub api_version: String, pub driver_name: Option, - pub supported_features: Vec, - pub supported_extensions: Vec, + pub supported_features: HashMap, bool>, + pub supported_extensions: HashMap, bool>, } #[derive(Serialize, Deserialize, Debug, Clone)]