From 0b9a68c906f1bab812a04e1e96ca288b06045927 Mon Sep 17 00:00:00 2001 From: Skye Terran Date: Thu, 3 Mar 2022 23:09:46 -0800 Subject: [PATCH 1/2] Adding shader test --- src/shader.rs | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/shader.rs b/src/shader.rs index 7494932..f4db914 100644 --- a/src/shader.rs +++ b/src/shader.rs @@ -67,4 +67,22 @@ pub fn add_includes(source: &String) -> String { } combined +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn preprocess_file() { + // Generate a shader and preprocess it + let mut source = read_to_string("src/shader.wgsl").unwrap(); + source = add_includes(&source); + + // Parse the WGSL into a usable module + let module = parse_wgsl(&source); + + // Generate a valid WGSL string from the module + let gen_wgsl = generate_wgsl(&module); + } } \ No newline at end of file From f88e3e71584852365668e0538ea8167afa691ae1 Mon Sep 17 00:00:00 2001 From: Skye Terran Date: Thu, 3 Mar 2022 23:40:52 -0800 Subject: [PATCH 2/2] Setting up test, logging and example basics for shader preprocessor dev --- examples/shader_includes.rs | 20 ++++++++++++++++++++ examples/shader_namespace.rs | 16 ++++++++++++++++ src/lib.rs | 2 ++ src/logger.rs | 19 +++++++++++++++++++ src/renderer.rs | 2 +- 5 files changed, 58 insertions(+), 1 deletion(-) create mode 100644 examples/shader_includes.rs create mode 100644 examples/shader_namespace.rs create mode 100644 src/lib.rs create mode 100644 src/logger.rs diff --git a/examples/shader_includes.rs b/examples/shader_includes.rs new file mode 100644 index 0000000..51692eb --- /dev/null +++ b/examples/shader_includes.rs @@ -0,0 +1,20 @@ +use cyborg::shader::{parse_wgsl, generate_wgsl, add_includes}; +use cyborg::logger::Timer; + +fn main() { + let comp_timer = Timer::start("Shader compilation"); + + // Generate a shader and preprocess it + let mut source = std::fs::read_to_string("src/shader.wgsl").unwrap(); + source = add_includes(&source); + + // Parse the WGSL into a usable module + let module = parse_wgsl(&source); + + // Generate a valid WGSL string from the module + let gen_wgsl = generate_wgsl(&module); + + println!("Generated WGSL:\n\n{}", gen_wgsl); + + comp_timer.print_status(); +} \ No newline at end of file diff --git a/examples/shader_namespace.rs b/examples/shader_namespace.rs new file mode 100644 index 0000000..5bb5407 --- /dev/null +++ b/examples/shader_namespace.rs @@ -0,0 +1,16 @@ +use std::fs::read_to_string; +use cyborg::shader::{parse_wgsl, generate_wgsl, add_includes}; + +fn main() { + // Generate a shader and preprocess it + let mut source = read_to_string("src/shader.wgsl").unwrap(); + source = add_includes(&source); + + // Parse the WGSL into a usable module + let module = parse_wgsl(&source); + + // Generate a valid WGSL string from the module + let gen_wgsl = generate_wgsl(&module); + + println!("{:?}", module); +} \ No newline at end of file diff --git a/src/lib.rs b/src/lib.rs new file mode 100644 index 0000000..3e8d196 --- /dev/null +++ b/src/lib.rs @@ -0,0 +1,2 @@ +pub mod logger; +pub mod shader; \ No newline at end of file diff --git a/src/logger.rs b/src/logger.rs new file mode 100644 index 0000000..65c6a14 --- /dev/null +++ b/src/logger.rs @@ -0,0 +1,19 @@ +use std::time::{Instant}; + +pub struct Timer<'a> { + name: &'a str, + start_time: Instant +} + +impl<'a> Timer<'a> { + pub fn start(name: &'a str) -> Timer { + Timer { + name: name, + start_time: Instant::now() + } + } + + pub fn print_status(&self) { + println!("{}: {}ms", self.name, Instant::now().duration_since(self.start_time).as_nanos() as f32 / 1_000_000.0) + } +} \ No newline at end of file diff --git a/src/renderer.rs b/src/renderer.rs index c0b5655..c98e051 100644 --- a/src/renderer.rs +++ b/src/renderer.rs @@ -7,7 +7,7 @@ use super::shader::{parse_wgsl, generate_wgsl, add_includes}; use crate::handle::*; use crate::model::OnLoad; use wgpu::util::DeviceExt; -use std::fs::{File, read_to_string}; +use std::fs::read_to_string; pub struct Renderer { pub device: wgpu::Device,