From 9e8a9d3d64cb254bb9043eaee1b6573c7f7fc29b Mon Sep 17 00:00:00 2001 From: hodasemi Date: Fri, 27 Jan 2023 14:04:06 +0100 Subject: [PATCH] Apply repr(C) changes --- Cargo.toml | 2 +- .../elements/leaderboard/bg_generator.rs | 33 +++--------------- src/overlay/elements/mod.rs | 27 +++++++++++++++ src/overlay/elements/pedals/pipeline.rs | 34 ++++--------------- src/overlay/elements/radar/mod.rs | 4 ++- src/overlay/elements/radar/pipeline.rs | 34 ++++--------------- 6 files changed, 48 insertions(+), 86 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 0f90ea2..0635ff8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -16,7 +16,7 @@ rfactor_sm_reader = { git = "https://gavania.de/hodasemi/rfactor_sm_reader.git" ui = { git = "https://gavania.de/hodasemi/ui.git" } anyhow = { version = "1.0.68", features = ["backtrace"] } -cgmath = { version = "0.18.0", features = ["swizzle", "serde"] } +safer-ffi = { version = "0.0.10", features = ["proc_macros"] } paste = "1.0.11" serde = "1.0.152" serde_json = "1.0.91" diff --git a/src/overlay/elements/leaderboard/bg_generator.rs b/src/overlay/elements/leaderboard/bg_generator.rs index 9ce6c46..c9860d8 100644 --- a/src/overlay/elements/leaderboard/bg_generator.rs +++ b/src/overlay/elements/leaderboard/bg_generator.rs @@ -3,7 +3,6 @@ use cgmath::{ortho, vec2, Deg}; use vulkan_rs::prelude::*; use std::{ - mem, sync::{Arc, Mutex}, time::Duration, }; @@ -21,16 +20,10 @@ impl BackgroundGenerator { ) -> Result<[Arc; N]> { let max_supported_sample_count = device.max_supported_sample_count(VK_SAMPLE_COUNT_16_BIT); - let vertex_shader = ShaderModule::from_slice( - device.clone(), - include_bytes!("generator.vert.spv"), - ShaderType::Vertex, - )?; - let fragment_shader = ShaderModule::from_slice( - device.clone(), - include_bytes!("generator.frag.spv"), - ShaderType::Fragment, - )?; + let vertex_shader = + ShaderModule::from_slice(device.clone(), include_bytes!("generator.vert.spv"))?; + let fragment_shader = + ShaderModule::from_slice(device.clone(), include_bytes!("generator.frag.spv"))?; Ok(image_infos .iter() @@ -93,23 +86,7 @@ impl BackgroundGenerator { .build(device.clone())?; let pipeline = Pipeline::new_graphics() - .set_vertex_shader( - vertex_shader.clone(), - vec![VkVertexInputBindingDescription { - binding: 0, - stride: mem::size_of::() as u32, - inputRate: VK_VERTEX_INPUT_RATE_VERTEX, - }], - vec![ - // position - VkVertexInputAttributeDescription { - location: 0, - binding: 0, - format: VK_FORMAT_R32G32B32A32_SFLOAT, - offset: 0, - }, - ], - ) + .set_vertex_shader::(vertex_shader.clone()) .set_fragment_shader(fragment_shader.clone()) .input_assembly(VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST, false) .default_depth_stencil(false, false) diff --git a/src/overlay/elements/mod.rs b/src/overlay/elements/mod.rs index df2b82b..4bcc077 100644 --- a/src/overlay/elements/mod.rs +++ b/src/overlay/elements/mod.rs @@ -8,6 +8,11 @@ pub use pedals::*; pub use radar::*; pub use watermark::*; +use std::mem; +use vulkan_rs::prelude::*; + +#[derive_ReprC] +#[repr(C)] #[derive(Clone)] pub struct PositionOnlyVertex { pub position: cgmath::Vector4, @@ -46,3 +51,25 @@ impl PositionOnlyVertex { ] } } + +impl VertexInputDescription for PositionOnlyVertex { + fn bindings() -> Vec { + vec![VkVertexInputBindingDescription { + binding: 0, + stride: mem::size_of::() as u32, + inputRate: VK_VERTEX_INPUT_RATE_VERTEX, + }] + } + + fn attributes() -> Vec { + vec![ + // position + VkVertexInputAttributeDescription { + location: 0, + binding: 0, + format: VK_FORMAT_R32G32B32A32_SFLOAT, + offset: 0, + }, + ] + } +} diff --git a/src/overlay/elements/pedals/pipeline.rs b/src/overlay/elements/pedals/pipeline.rs index 49bfe86..ac511b6 100644 --- a/src/overlay/elements/pedals/pipeline.rs +++ b/src/overlay/elements/pedals/pipeline.rs @@ -1,7 +1,7 @@ use anyhow::Result; use vulkan_rs::prelude::*; -use std::{mem, sync::Arc}; +use std::sync::Arc; use super::super::PositionOnlyVertex; @@ -17,16 +17,10 @@ impl HistoryPipeline { width: u32, height: u32, ) -> Result { - let vertex_shader = ShaderModule::from_slice( - device.clone(), - include_bytes!("history.vert.spv"), - ShaderType::Vertex, - )?; - let fragment_shader = ShaderModule::from_slice( - device.clone(), - include_bytes!("history.frag.spv"), - ShaderType::Fragment, - )?; + let vertex_shader = + ShaderModule::from_slice(device.clone(), include_bytes!("history.vert.spv"))?; + let fragment_shader = + ShaderModule::from_slice(device.clone(), include_bytes!("history.frag.spv"))?; let descriptor_layout = DescriptorSetLayout::builder() .add_layout_binding( @@ -59,23 +53,7 @@ impl HistoryPipeline { }; let pipeline = Pipeline::new_graphics() - .set_vertex_shader( - vertex_shader.clone(), - vec![VkVertexInputBindingDescription { - binding: 0, - stride: mem::size_of::() as u32, - inputRate: VK_VERTEX_INPUT_RATE_VERTEX, - }], - vec![ - // position - VkVertexInputAttributeDescription { - location: 0, - binding: 0, - format: VK_FORMAT_R32G32B32A32_SFLOAT, - offset: 0, - }, - ], - ) + .set_vertex_shader::(vertex_shader.clone()) .set_fragment_shader(fragment_shader.clone()) .input_assembly(VK_PRIMITIVE_TOPOLOGY_LINE_STRIP, false) .default_depth_stencil(false, false) diff --git a/src/overlay/elements/radar/mod.rs b/src/overlay/elements/radar/mod.rs index cdc4193..eb685d2 100644 --- a/src/overlay/elements/radar/mod.rs +++ b/src/overlay/elements/radar/mod.rs @@ -1,9 +1,11 @@ mod pipeline; use anyhow::Result; -use cgmath::{ortho, vec2, vec3, vec4, Deg, InnerSpace, Matrix4, Rad, Vector2, Vector3}; use rfactor_sm_reader::*; use serde::{Deserialize, Serialize}; +use vulkan_rs::prelude::cgmath::{ + ortho, vec2, vec3, vec4, Deg, InnerSpace, Matrix4, Rad, Vector2, Vector3, +}; use vulkan_rs::prelude::*; use std::sync::{Arc, Mutex}; diff --git a/src/overlay/elements/radar/pipeline.rs b/src/overlay/elements/radar/pipeline.rs index dd9c885..0ebb99c 100644 --- a/src/overlay/elements/radar/pipeline.rs +++ b/src/overlay/elements/radar/pipeline.rs @@ -1,7 +1,7 @@ use anyhow::Result; use vulkan_rs::prelude::*; -use std::{mem, sync::Arc}; +use std::sync::Arc; use super::PositionOnlyVertex; @@ -17,16 +17,10 @@ impl SingleColorPipeline { width: u32, height: u32, ) -> Result { - let vertex_shader = ShaderModule::from_slice( - device.clone(), - include_bytes!("single_color.vert.spv"), - ShaderType::Vertex, - )?; - let fragment_shader = ShaderModule::from_slice( - device.clone(), - include_bytes!("single_color.frag.spv"), - ShaderType::Fragment, - )?; + let vertex_shader = + ShaderModule::from_slice(device.clone(), include_bytes!("single_color.vert.spv"))?; + let fragment_shader = + ShaderModule::from_slice(device.clone(), include_bytes!("single_color.frag.spv"))?; let descriptor_layout = DescriptorSetLayout::builder() .add_layout_binding( @@ -59,23 +53,7 @@ impl SingleColorPipeline { }; let pipeline = Pipeline::new_graphics() - .set_vertex_shader( - vertex_shader.clone(), - vec![VkVertexInputBindingDescription { - binding: 0, - stride: mem::size_of::() as u32, - inputRate: VK_VERTEX_INPUT_RATE_VERTEX, - }], - vec![ - // position - VkVertexInputAttributeDescription { - location: 0, - binding: 0, - format: VK_FORMAT_R32G32B32A32_SFLOAT, - offset: 0, - }, - ], - ) + .set_vertex_shader::(vertex_shader.clone()) .set_fragment_shader(fragment_shader.clone()) .input_assembly(VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST, false) .default_depth_stencil(false, false)