diff --git a/Cargo.lock b/Cargo.lock index 4e9413c..01be67f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -8,56 +8,12 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" -[[package]] -name = "aho-corasick" -version = "0.7.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4f55bd91a0978cbfd91c457a164bab8b4001c833b7f323132c0a4e1922dd44e" -dependencies = [ - "memchr", -] - -[[package]] -name = "arbitrary" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29d47fbf90d5149a107494b15a7dc8d69b351be2db3bb9691740e88ec17fd880" -dependencies = [ - "derive_arbitrary", -] - -[[package]] -name = "atty" -version = "0.2.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" -dependencies = [ - "hermit-abi", - "libc", - "winapi", -] - [[package]] name = "autocfg" version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" -[[package]] -name = "base64" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" - -[[package]] -name = "bincode" -version = "1.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" -dependencies = [ - "serde", -] - [[package]] name = "bit-set" version = "0.5.3" @@ -85,18 +41,6 @@ version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" -[[package]] -name = "bstr" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba3569f383e8f1598449f1a423e72e99569137b47740b1da11ef19af3d5c3223" -dependencies = [ - "lazy_static", - "memchr", - "regex-automata", - "serde", -] - [[package]] name = "bumpalo" version = "3.11.1" @@ -121,12 +65,6 @@ version = "1.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" -[[package]] -name = "cast" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" - [[package]] name = "cc" version = "1.0.73" @@ -142,17 +80,6 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" -[[package]] -name = "clap" -version = "2.34.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c" -dependencies = [ - "bitflags", - "textwrap", - "unicode-width", -] - [[package]] name = "cmake" version = "0.1.48" @@ -162,16 +89,6 @@ dependencies = [ "cc", ] -[[package]] -name = "codespan-reporting" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e" -dependencies = [ - "termcolor", - "unicode-width", -] - [[package]] name = "color_quant" version = "1.1.0" @@ -187,42 +104,6 @@ dependencies = [ "cfg-if", ] -[[package]] -name = "criterion" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b01d6de93b2b6c65e17c634a26653a29d107b3c98c607c765bf38d041531cd8f" -dependencies = [ - "atty", - "cast", - "clap", - "criterion-plot", - "csv", - "itertools", - "lazy_static", - "num-traits", - "oorandom", - "plotters", - "rayon", - "regex", - "serde", - "serde_cbor", - "serde_derive", - "serde_json", - "tinytemplate", - "walkdir", -] - -[[package]] -name = "criterion-plot" -version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2673cc8207403546f45f5fd319a974b1e6983ad1a3ee7e6041650013be041876" -dependencies = [ - "cast", - "itertools", -] - [[package]] name = "crossbeam-channel" version = "0.5.6" @@ -272,70 +153,18 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" -[[package]] -name = "csv" -version = "1.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22813a6dc45b335f9bade10bf7271dc477e81113e89eb251a0bc2a8a81c536e1" -dependencies = [ - "bstr", - "csv-core", - "itoa 0.4.8", - "ryu", - "serde", -] - -[[package]] -name = "csv-core" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b2466559f260f48ad25fe6317b3c8dac77b5bdb5763ac7d9d6103530663bc90" -dependencies = [ - "memchr", -] - [[package]] name = "cty" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b365fabc795046672053e29c954733ec3b05e4be654ab130fe8f1f94d7051f35" -[[package]] -name = "derive_arbitrary" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4903dff04948f22033ca30232ab8eca2c3fc4c913a8b6a34ee5199699814817f" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "diff" -version = "0.1.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8" - [[package]] name = "either" version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "90e5c1c8368803113bf0c9584fc495a58b86dc8a29edbf8fe877d21d9507e797" -[[package]] -name = "env_logger" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c90bf5f19754d10198ccb95b70664fc925bd1fc090a0fd9a6ebc54acc8cd6272" -dependencies = [ - "atty", - "humantime", - "log", - "regex", - "termcolor", -] - [[package]] name = "exr" version = "1.5.2" @@ -344,7 +173,7 @@ checksum = "8eb5f255b5980bb0c8cf676b675d1a99be40f316881444f44e0462eaf5df5ded" dependencies = [ "bit_field", "flume", - "half 2.1.0", + "half", "lebe", "miniz_oxide 0.6.2", "smallvec", @@ -466,12 +295,6 @@ dependencies = [ "cmake", ] -[[package]] -name = "half" -version = "1.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eabb4a44450da02c90444cf74558da904edde8fb4e9035a9a6a4e15445af0bd7" - [[package]] name = "half" version = "2.1.0" @@ -496,18 +319,6 @@ dependencies = [ "libc", ] -[[package]] -name = "hexf-parse" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfa686283ad6dd069f105e5ab091b04c62850d3e4cf5d67debad1933f55023df" - -[[package]] -name = "humantime" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" - [[package]] name = "image" version = "0.24.5" @@ -535,30 +346,8 @@ checksum = "10a35a97730320ffe8e2d410b5d3b69279b98d2c14bdb8b70ea89ecf7888d41e" dependencies = [ "autocfg", "hashbrown", - "serde", ] -[[package]] -name = "itertools" -version = "0.10.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" -dependencies = [ - "either", -] - -[[package]] -name = "itoa" -version = "0.4.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4" - -[[package]] -name = "itoa" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4217ad341ebadf8d8e724e264f13e593e0648f5b3e94b3896a5df283be015ecc" - [[package]] name = "jobserver" version = "0.1.25" @@ -592,12 +381,6 @@ version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc" -[[package]] -name = "lazy_static" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" - [[package]] name = "lebe" version = "0.5.2" @@ -751,29 +534,19 @@ dependencies = [ [[package]] name = "naga" version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "262d2840e72dbe250e8cf2f522d080988dfca624c4112c096238a4845f591707" dependencies = [ - "arbitrary", - "bincode", "bit-set", "bitflags", - "codespan-reporting", - "criterion", - "diff", - "env_logger", - "hexf-parse", "indexmap", "log", "num-traits", "petgraph", "pp-rs", - "ron", - "rspirv", "rustc-hash", - "serde", "spirv", - "termcolor", "thiserror", - "unicode-xid", ] [[package]] @@ -861,12 +634,6 @@ version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e82dad04139b71a90c080c8463fe0dc7902db5192d939bd0950f074d014339e1" -[[package]] -name = "oorandom" -version = "11.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ab1bc2a289d34bd04a330323ac98a1b4bc82c9d9fcb1e66b63caa84da26b575" - [[package]] name = "petgraph" version = "0.6.2" @@ -897,34 +664,6 @@ dependencies = [ "syn", ] -[[package]] -name = "plotters" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2538b639e642295546c50fcd545198c9d64ee2a38620a628724a3b266d5fbf97" -dependencies = [ - "num-traits", - "plotters-backend", - "plotters-svg", - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "plotters-backend" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "193228616381fecdc1224c62e96946dfbc73ff4384fba576e052ff8c1bea8142" - -[[package]] -name = "plotters-svg" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9a81d2759aae1dae668f783c308bc5c8ebd191ff4184aaa1b37f65a6ae5a56f" -dependencies = [ - "plotters-backend", -] - [[package]] name = "png" version = "0.17.7" @@ -997,40 +736,6 @@ dependencies = [ "num_cpus", ] -[[package]] -name = "regex" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c4eb3267174b8c6c2f654116623910a0fef09c4753f8dd83db29c48a0df988b" -dependencies = [ - "aho-corasick", - "memchr", - "regex-syntax", -] - -[[package]] -name = "regex-automata" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" - -[[package]] -name = "regex-syntax" -version = "0.6.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3f87b73ce11b1619a3c6332f45341e0047173771e8b8b73f87bfeefb7b56244" - -[[package]] -name = "ron" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88073939a61e5b7680558e6be56b419e208420c2adb92be54921fa6b72283f1a" -dependencies = [ - "base64", - "bitflags", - "serde", -] - [[package]] name = "roxmltree" version = "0.14.1" @@ -1066,21 +771,6 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" -[[package]] -name = "ryu" -version = "1.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4501abdff3ae82a1c1b477a17252eb69cee9e66eb915c1abaa4f44d873df9f09" - -[[package]] -name = "same-file" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" -dependencies = [ - "winapi-util", -] - [[package]] name = "scoped_threadpool" version = "0.1.9" @@ -1093,47 +783,6 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" -[[package]] -name = "serde" -version = "1.0.147" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d193d69bae983fc11a79df82342761dfbf28a99fc8d203dca4c3c1b590948965" -dependencies = [ - "serde_derive", -] - -[[package]] -name = "serde_cbor" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bef2ebfde456fb76bbcf9f59315333decc4fda0b2b44b420243c11e0f5ec1f5" -dependencies = [ - "half 1.8.2", - "serde", -] - -[[package]] -name = "serde_derive" -version = "1.0.147" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f1d362ca8fc9c3e3a7484440752472d68a6caa98f1ab81d99b5dfe517cec852" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "serde_json" -version = "1.0.87" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ce777b7b150d76b9cf60d28b55f5847135a003f7d7350c6be7a773508ce7d45" -dependencies = [ - "itoa 1.0.4", - "ryu", - "serde", -] - [[package]] name = "shaderc" version = "0.8.0" @@ -1178,7 +827,6 @@ checksum = "246bfa38fe3db3f1dfc8ca5a2cdeb7348c78be2112740cc0ec8ef18b6d94f830" dependencies = [ "bitflags", "num-traits", - "serde", ] [[package]] @@ -1203,24 +851,6 @@ dependencies = [ "unicode-ident", ] -[[package]] -name = "termcolor" -version = "1.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755" -dependencies = [ - "winapi-util", -] - -[[package]] -name = "textwrap" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060" -dependencies = [ - "unicode-width", -] - [[package]] name = "thiserror" version = "1.0.37" @@ -1261,45 +891,18 @@ dependencies = [ "weezl", ] -[[package]] -name = "tinytemplate" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be4d6b5f19ff7664e8c98d03e2139cb510db9b0a60b55f8e8709b689d939b6bc" -dependencies = [ - "serde", - "serde_json", -] - [[package]] name = "unicode-ident" version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6ceab39d59e4c9499d4e5a8ee0e2735b891bb7308ac83dfb4e80cad195c9f6f3" -[[package]] -name = "unicode-width" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b" - [[package]] name = "unicode-xid" version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" -[[package]] -name = "walkdir" -version = "2.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56" -dependencies = [ - "same-file", - "winapi", - "winapi-util", -] - [[package]] name = "wasi" version = "0.11.0+wasi-snapshot-preview1" @@ -1360,16 +963,6 @@ version = "0.2.83" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1c38c045535d93ec4f0b4defec448e4291638ee608530863b1e2ba115d4fff7f" -[[package]] -name = "web-sys" -version = "0.3.60" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bcda906d8be16e728fd5adc5b729afad4e444e106ab28cd1c7256e54fa61510f" -dependencies = [ - "js-sys", - "wasm-bindgen", -] - [[package]] name = "weezl" version = "0.1.7" @@ -1392,15 +985,6 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" -[[package]] -name = "winapi-util" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" -dependencies = [ - "winapi", -] - [[package]] name = "winapi-x86_64-pc-windows-gnu" version = "0.4.0" diff --git a/Cargo.toml b/Cargo.toml index 0a97ec7..e2a51a6 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,5 +6,4 @@ members = [ "librashader-reflect", "librashader-runtime-dx11", "librashader-runtime-gl", - "naga" ] \ No newline at end of file diff --git a/librashader-common/src/gl.rs b/librashader-common/src/gl.rs index a7e2da6..b0039fb 100644 --- a/librashader-common/src/gl.rs +++ b/librashader-common/src/gl.rs @@ -33,7 +33,7 @@ impl From for gl::types::GLenum { ShaderFormat::R32G32Sfloat => gl::RG32F, ShaderFormat::R32G32B32A32Uint => gl::RGBA32UI, ShaderFormat::R32G32B32A32Sint => gl::RGBA32I, - ShaderFormat::R32G32B32A32Sfloat => gl::RGBA32F + ShaderFormat::R32G32B32A32Sfloat => gl::RGBA32F, } } } @@ -44,7 +44,7 @@ impl From for gl::types::GLenum { WrapMode::ClampToBorder => gl::CLAMP_TO_BORDER, WrapMode::ClampToEdge => gl::CLAMP_TO_EDGE, WrapMode::Repeat => gl::REPEAT, - WrapMode::MirroredRepeat => gl::MIRRORED_REPEAT + WrapMode::MirroredRepeat => gl::MIRRORED_REPEAT, } } } @@ -53,7 +53,7 @@ impl From for gl::types::GLenum { fn from(value: FilterMode) -> Self { match value { FilterMode::Linear => gl::LINEAR, - _ => gl::NEAREST + _ => gl::NEAREST, } } } @@ -64,7 +64,7 @@ impl FilterMode { (FilterMode::Linear, FilterMode::Linear) => gl::LINEAR_MIPMAP_LINEAR, (FilterMode::Linear, FilterMode::Nearest) => gl::LINEAR_MIPMAP_NEAREST, (FilterMode::Nearest, FilterMode::Linear) => gl::NEAREST_MIPMAP_LINEAR, - _ => gl::NEAREST_MIPMAP_NEAREST + _ => gl::NEAREST_MIPMAP_NEAREST, } } -} \ No newline at end of file +} diff --git a/librashader-common/src/image.rs b/librashader-common/src/image.rs index 1462ec6..9a7b8d1 100644 --- a/librashader-common/src/image.rs +++ b/librashader-common/src/image.rs @@ -7,16 +7,16 @@ pub struct Image { } impl Image { - pub fn load(path: impl AsRef) -> Result{ + pub fn load(path: impl AsRef) -> Result { let image = image::open(path.as_ref())?.flipv().to_rgba8(); let height = image.height(); let width = image.width(); - + Ok(Image { bytes: image.to_vec(), height, - width + width, }) } -} \ No newline at end of file +} diff --git a/librashader-common/src/lib.rs b/librashader-common/src/lib.rs index fbded0a..3b37de6 100644 --- a/librashader-common/src/lib.rs +++ b/librashader-common/src/lib.rs @@ -73,7 +73,6 @@ impl FromStr for WrapMode { } } - #[repr(i32)] #[derive(Copy, Clone, Default, Debug, Eq, PartialEq)] pub enum WrapMode { @@ -135,11 +134,8 @@ pub struct Size { pub height: T, } -impl Size { +impl Size { pub fn new(width: T, height: T) -> Self { - Size { - width, - height - } + Size { width, height } } -} \ No newline at end of file +} diff --git a/librashader-preprocess/src/error.rs b/librashader-preprocess/src/error.rs index 5e634dc..6ab20c1 100644 --- a/librashader-preprocess/src/error.rs +++ b/librashader-preprocess/src/error.rs @@ -1,4 +1,3 @@ -use crate::ShaderParameter; use std::convert::Infallible; use std::path::PathBuf; use thiserror::Error; diff --git a/librashader-preprocess/src/include.rs b/librashader-preprocess/src/include.rs index 88a1d30..89c9110 100644 --- a/librashader-preprocess/src/include.rs +++ b/librashader-preprocess/src/include.rs @@ -5,7 +5,7 @@ use std::path::Path; use std::str::Lines; #[cfg(feature = "line_directives")] -const GL_GOOGLE_CPP_STYLE_LINE_DIRECTIVE: &'static str = +const GL_GOOGLE_CPP_STYLE_LINE_DIRECTIVE: &str = "#extension GL_GOOGLE_cpp_style_line_directive : require"; fn read_file(path: impl AsRef) -> Result { diff --git a/librashader-preprocess/src/lib.rs b/librashader-preprocess/src/lib.rs index 46a0c06..61dceae 100644 --- a/librashader-preprocess/src/lib.rs +++ b/librashader-preprocess/src/lib.rs @@ -95,4 +95,3 @@ mod test { eprintln!("{params:?}") } } - diff --git a/librashader-preprocess/src/pragma.rs b/librashader-preprocess/src/pragma.rs index 0557380..e6d7da5 100644 --- a/librashader-preprocess/src/pragma.rs +++ b/librashader-preprocess/src/pragma.rs @@ -1,12 +1,12 @@ use crate::{PreprocessError, ShaderParameter}; use librashader_common::ShaderFormat; -use nom::bytes::complete::{is_not, tag, take_until, take_while}; -use nom::combinator::map_res; +use nom::bytes::complete::{is_not, tag, take_while}; + +use nom::character::complete::multispace1; use nom::number::complete::float; use nom::sequence::delimited; use nom::IResult; use std::str::FromStr; -use nom::character::complete::multispace1; #[derive(Debug)] pub(crate) struct ShaderMeta { @@ -22,13 +22,14 @@ fn parse_parameter_string(input: &str) -> Result(name: &'a str, description: &'a str, input: &'b str) -> IResult<&'b str, ShaderParameter> { + fn parse_parameter_string_inner<'a, 'b>( + name: &'a str, + description: &'a str, + input: &'b str, + ) -> IResult<&'b str, ShaderParameter> { let (input, initial) = float(input)?; let (input, _) = multispace1(input)?; let (input, minimum) = float(input)?; @@ -49,7 +50,6 @@ fn parse_parameter_string(input: &str) -> Result Result) -> Result { @@ -94,7 +93,7 @@ pub(crate) fn parse_pragma_meta(source: impl AsRef) -> Result IResult { fn parse_key_value(input: Span) -> IResult { let (input, (key, _)) = take_up_to(parse_assignment)(input)?; let (input, (_, value)) = map_res(not_line_ending, optional_quotes)(input)?; - let (_, value) = take_until::<_, _, nom::error::Error>("//")(value) - .unwrap_or((input, value)); - let (_, value) = take_until::<_, _, nom::error::Error>("#")(value) - .unwrap_or((input, value)); + let (_, value) = + take_until::<_, _, nom::error::Error>("//")(value).unwrap_or((input, value)); + let (_, value) = + take_until::<_, _, nom::error::Error>("#")(value).unwrap_or((input, value)); let (_, (_, value)) = map_res(not_line_ending, optional_quotes)(value)?; Ok((input, Token { key, value })) @@ -167,12 +167,12 @@ mod test { } // todo: fix - const TEST2: &'static str = r#" + const TEST2: &str = r#" // Color Correction with Dogway's awesome Grade shader // Grade is after Afterglow so that brightening the black level does not break the afterglow shader9 = ../../shaders/dogway/hsm-grade.slang "#; - const TEST: &'static str = r#" + const TEST: &str = r#" #reference "../../alt" shaders = 54 diff --git a/librashader-presets/src/parse/value.rs b/librashader-presets/src/parse/value.rs index 36facdb..66a1906 100644 --- a/librashader-presets/src/parse/value.rs +++ b/librashader-presets/src/parse/value.rs @@ -8,13 +8,12 @@ use nom::combinator::{eof, map_res}; use nom::IResult; use num_traits::cast::ToPrimitive; - use crate::parse::token::do_lex; +use librashader_common::{FilterMode, WrapMode}; use std::fs::File; use std::io::Read; use std::path::{Path, PathBuf}; use std::str::FromStr; -use librashader_common::{FilterMode, WrapMode}; #[derive(Debug)] pub enum Value { @@ -67,29 +66,28 @@ impl Value { } fn from_int(input: Span) -> Result { - i32::from_str(input.trim()).map_err(|_| { - ParsePresetError::ParserError { + i32::from_str(input.trim()) + .map_err(|_| ParsePresetError::ParserError { offset: input.location_offset(), row: input.location_line(), col: input.get_column(), kind: ParseErrorKind::Int, - } - }).or_else(|e| { - let result = f32::from_str(input.trim()) - .map_err(|_| e)?; - let result = result.trunc().to_i32() - .ok_or(ParsePresetError::ParserError { - offset: input.location_offset(), - row: input.location_line(), - col: input.get_column(), - kind: ParseErrorKind::Int, - })?; - - eprintln!("falling back to float trunc {result}"); - Ok(result) - }) - + }) + .or_else(|e| { + let result = f32::from_str(input.trim()).map_err(|_| e)?; + let result = result + .trunc() + .to_i32() + .ok_or(ParsePresetError::ParserError { + offset: input.location_offset(), + row: input.location_line(), + col: input.get_column(), + kind: ParseErrorKind::Int, + })?; + eprintln!("falling back to float trunc {result}"); + Ok(result) + }) } fn from_ul(input: Span) -> Result { @@ -494,7 +492,7 @@ mod test { pub fn parse_basic() { let root = PathBuf::from("../test/slang-shaders/bezel/Mega_Bezel/Presets/Base_CRT_Presets/MBZ__3__STD__MEGATRON-NTSC.slangp"); - let basic = parse_preset(&root); + let basic = parse_preset(root); eprintln!("{:?}", basic); assert!(basic.is_ok()); } diff --git a/librashader-presets/src/preset.rs b/librashader-presets/src/preset.rs index 077740c..61f35a7 100644 --- a/librashader-presets/src/preset.rs +++ b/librashader-presets/src/preset.rs @@ -1,8 +1,8 @@ use crate::error::ParsePresetError; +use librashader_common::{FilterMode, WrapMode}; use std::ops::Mul; use std::path::PathBuf; use std::str::FromStr; -use librashader_common::{FilterMode, WrapMode}; #[derive(Debug, Clone)] pub struct ShaderPassConfig { @@ -54,7 +54,7 @@ impl Mul for f32 { fn mul(self, rhs: ScaleFactor) -> Self::Output { match rhs { ScaleFactor::Float(f) => f * self, - ScaleFactor::Absolute(f) => f as f32 * self + ScaleFactor::Absolute(f) => f as f32 * self, } } } @@ -65,7 +65,7 @@ impl Mul for u32 { fn mul(self, rhs: ScaleFactor) -> Self::Output { match rhs { ScaleFactor::Float(f) => f * self as f32, - ScaleFactor::Absolute(f) => (f as u32 * self) as f32 + ScaleFactor::Absolute(f) => (f as u32 * self) as f32, } } } diff --git a/librashader-reflect/Cargo.toml b/librashader-reflect/Cargo.toml index b2f5785..c493da7 100644 --- a/librashader-reflect/Cargo.toml +++ b/librashader-reflect/Cargo.toml @@ -6,7 +6,6 @@ edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -naga = { version = "0.10.0", path = "../naga", features = ["glsl-in", "spv-in", "spv-out", "glsl-out", "wgsl-out"] } shaderc = { version = "0.8.0" } spirv_cross = { version = "0.23.1", features = [ "glsl", "hlsl" ] } @@ -14,11 +13,16 @@ spirv_cross = { version = "0.23.1", features = [ "glsl", "hlsl" ] } thiserror = "1.0.37" bitflags = "1.3.2" rustc-hash = "1.1.0" -rspirv = "0.11.0+1.5.4" - -rspirv-reflect = { git = "https://github.com/Traverse-Research/rspirv-reflect" } librashader-common = { path = "../librashader-common" } librashader-preprocess = { path = "../librashader-preprocess" } +naga = { version = "0.10.0", features = ["glsl-in", "spv-in", "spv-out", "glsl-out", "wgsl-out"], optional = true } +rspirv = { version = "0.11.0+1.5.4", optional = true } +rspirv-reflect = { git = "https://github.com/Traverse-Research/rspirv-reflect", optional = true } + +[features] +default = [] +unstable-rust-pipeline = [ "naga", "rspirv", "rspirv-reflect" ] + [dev-dependencies] diff --git a/librashader-reflect/src/back/cross.rs b/librashader-reflect/src/back/cross.rs index 8560af8..ee87b3e 100644 --- a/librashader-reflect/src/back/cross.rs +++ b/librashader-reflect/src/back/cross.rs @@ -2,13 +2,13 @@ use crate::back::targets::{CompilerBackend, FromCompilation, GLSL, HLSL}; use crate::back::CompileShader; use crate::error::ShaderReflectError; use crate::front::shaderc::GlslangCompilation; -use crate::reflect::cross::{CompiledAst, CrossReflect, GlslReflect, HlslReflect}; +use crate::reflect::cross::{CompiledAst, GlslReflect, HlslReflect}; use crate::reflect::ReflectShader; pub type GlVersion = spirv_cross::glsl::Version; pub struct GlslangGlslContext { pub sampler_bindings: Vec, - pub compiler: CompiledAst + pub compiler: CompiledAst, } impl FromCompilation for GLSL { type Target = GLSL; @@ -18,7 +18,10 @@ impl FromCompilation for GLSL { fn from_compilation( compile: GlslangCompilation, ) -> Result< - CompilerBackend + ReflectShader>, + CompilerBackend< + impl CompileShader + + ReflectShader, + >, ShaderReflectError, > { Ok(CompilerBackend { @@ -35,7 +38,10 @@ impl FromCompilation for HLSL { fn from_compilation( compile: GlslangCompilation, ) -> Result< - CompilerBackend + ReflectShader>, + CompilerBackend< + impl CompileShader + + ReflectShader, + >, ShaderReflectError, > { Ok(CompilerBackend { diff --git a/librashader-reflect/src/back/targets.rs b/librashader-reflect/src/back/targets.rs index a79f321..7ae9e7a 100644 --- a/librashader-reflect/src/back/targets.rs +++ b/librashader-reflect/src/back/targets.rs @@ -32,7 +32,10 @@ pub trait FromCompilation { fn from_compilation( compile: T, - ) -> Result + ReflectShader>, ShaderReflectError>; + ) -> Result< + CompilerBackend + ReflectShader>, + ShaderReflectError, + >; } pub trait CompileShader { diff --git a/librashader-reflect/src/error.rs b/librashader-reflect/src/error.rs index 4224a26..117abc4 100644 --- a/librashader-reflect/src/error.rs +++ b/librashader-reflect/src/error.rs @@ -3,6 +3,7 @@ use thiserror::Error; #[derive(Error, Debug)] pub enum ShaderCompileError { + #[cfg(feature = "unstable-rust-pipeline")] #[error("shader")] NagaCompileError(Vec), @@ -33,12 +34,14 @@ pub enum SemanticsErrorKind { #[derive(Error, Debug)] pub enum ShaderReflectError { + #[cfg(feature = "unstable-rust-pipeline")] #[error("shader")] NagaCompileError(#[from] naga::front::spv::Error), - #[error("spirv")] - SpirvCrossError(#[from] spirv_cross::ErrorCode), + #[cfg(feature = "unstable-rust-pipeline")] #[error("rspirv")] RspirvParseError(#[from] rspirv::binary::ParseState), + #[error("spirv")] + SpirvCrossError(#[from] spirv_cross::ErrorCode), #[error("error when verifying vertex semantics")] VertexSemanticError(SemanticsErrorKind), #[error("error when verifying texture semantics")] @@ -63,6 +66,7 @@ pub enum ShaderReflectError { BindingInUse(u32), } +#[cfg(feature = "unstable-rust-pipeline")] impl From> for ShaderCompileError { fn from(err: Vec) -> Self { ShaderCompileError::NagaCompileError(err) diff --git a/librashader-reflect/src/front/mod.rs b/librashader-reflect/src/front/mod.rs index 33bd746..1962b4d 100644 --- a/librashader-reflect/src/front/mod.rs +++ b/librashader-reflect/src/front/mod.rs @@ -1,2 +1,4 @@ +#[cfg(feature = "unstable-rust-pipeline")] pub mod naga; + pub mod shaderc; diff --git a/librashader-reflect/src/front/shaderc.rs b/librashader-reflect/src/front/shaderc.rs index 329333f..721fd72 100644 --- a/librashader-reflect/src/front/shaderc.rs +++ b/librashader-reflect/src/front/shaderc.rs @@ -124,9 +124,10 @@ pub fn compile_spirv(source: &ShaderSource) -> Result where @@ -27,12 +27,12 @@ where pub struct CompiledAst where -T: spirv_cross::spirv::Target { + T: spirv_cross::spirv::Target, +{ pub vertex: Ast, pub fragment: Ast, } - pub(crate) type HlslReflect = CrossReflect; pub(crate) type GlslReflect = CrossReflect; @@ -408,7 +408,7 @@ where SemanticErrorBlame::Vertex => BindingStage::VERTEX, SemanticErrorBlame::Fragment => BindingStage::FRAGMENT, }, - id: name + id: name, }, ); } @@ -739,7 +739,7 @@ impl CompileShader for CrossReflect { } // todo: options - let flatten = false; + let _flatten = false; if vertex_resources.uniform_buffers.len() > 1 { return Err(ShaderCompileError::SpirvCrossCompileError( @@ -814,8 +814,8 @@ impl CompileShader for CrossReflect { sampler_bindings: texture_fixups, compiler: CompiledAst { vertex: self.vertex, - fragment: self.fragment - } + fragment: self.fragment, + }, }, }) } @@ -851,15 +851,16 @@ mod test { use crate::back::CompileShader; use crate::reflect::semantics::{SemanticMap, VariableSemantics}; + use librashader_preprocess::ShaderSource; + use spirv_cross::glsl; use spirv_cross::glsl::{CompilerOptions, Version}; - use spirv_cross::{glsl, hlsl}; #[test] pub fn test_into() { - let result = librashader_preprocess::load_shader_source("../test/basic.slang").unwrap(); + let result = ShaderSource::load("../test/basic.slang").unwrap(); let mut uniform_semantics: FxHashMap = Default::default(); - for (index, param) in result.parameters.iter().enumerate() { + for (_index, param) in result.parameters.iter().enumerate() { uniform_semantics.insert( param.id.clone(), UniformSemantic::Variable(SemanticMap { @@ -870,7 +871,7 @@ mod test { } let spirv = crate::front::shaderc::compile_spirv(&result).unwrap(); let mut reflect = CrossReflect::::try_from(spirv).unwrap(); - let shader_reflection = reflect + let _shader_reflection = reflect .reflect( 0, &ReflectSemantics { @@ -882,7 +883,7 @@ mod test { let mut opts = CompilerOptions::default(); opts.version = Version::V4_60; opts.enable_420_pack_extension = false; - let compiled = reflect.compile(&opts, &shader_reflection).unwrap(); + let compiled = reflect.compile(Version::V3_30).unwrap(); // eprintln!("{shader_reflection:#?}"); eprintln!("{:#}", compiled.fragment) // let mut loader = rspirv::dr::Loader::new(); diff --git a/librashader-reflect/src/reflect/mod.rs b/librashader-reflect/src/reflect/mod.rs index e5ae912..fef2dc5 100644 --- a/librashader-reflect/src/reflect/mod.rs +++ b/librashader-reflect/src/reflect/mod.rs @@ -1,4 +1,3 @@ -use std::ops::Index; use crate::error::ShaderReflectError; use crate::reflect::semantics::{ SemanticMap, TextureImage, TextureSemantics, TextureSizeMeta, VariableMeta, VariableSemantics, @@ -7,10 +6,14 @@ use rustc_hash::FxHashMap; use std::str::FromStr; pub mod cross; -mod naga; -mod rspirv; + pub mod semantics; +#[cfg(feature = "unstable-rust-pipeline")] +mod naga; +#[cfg(feature = "unstable-rust-pipeline")] +mod rspirv; + pub trait ReflectShader { fn reflect( &mut self, @@ -98,9 +101,7 @@ impl TextureSemanticMap for FxHashMap { if let Some(semantics) = TextureSemantics::TEXTURE_SEMANTICS .iter() - .find(|f| { - name.starts_with(f.texture_name()) - }) + .find(|f| name.starts_with(f.texture_name())) { if semantics.is_array() { let index = &name[semantics.texture_name().len()..]; diff --git a/librashader-reflect/src/reflect/semantics.rs b/librashader-reflect/src/reflect/semantics.rs index 5d80532..dcc7205 100644 --- a/librashader-reflect/src/reflect/semantics.rs +++ b/librashader-reflect/src/reflect/semantics.rs @@ -11,7 +11,7 @@ pub enum UniformType { Size, Unsigned, Signed, - Float + Float, } #[derive(Debug, Ord, PartialOrd, Eq, PartialEq, Copy, Clone, Hash)] @@ -35,7 +35,7 @@ impl VariableSemantics { pub const fn semantics(self) -> SemanticMap { SemanticMap { semantics: self, - index: () + index: (), } } @@ -46,7 +46,7 @@ impl VariableSemantics { VariableSemantics::FinalViewport => UniformType::Size, VariableSemantics::FrameCount => UniformType::Unsigned, VariableSemantics::FrameDirection => UniformType::Signed, - VariableSemantics::FloatParameter => UniformType::Float + VariableSemantics::FloatParameter => UniformType::Float, } } } @@ -104,7 +104,7 @@ impl TextureSemantics { pub const fn semantics(self, index: usize) -> SemanticMap { SemanticMap { semantics: self, - index + index, } } } @@ -118,7 +118,7 @@ pub trait ValidateTypeSemantics { } #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] -pub struct SemanticMap { +pub struct SemanticMap { pub semantics: T, pub index: I, } @@ -207,4 +207,4 @@ impl UniformMeta for TextureSizeMeta { fn id(&self) -> &str { &self.id } -} \ No newline at end of file +} diff --git a/librashader-runtime-dx11/src/lib.rs b/librashader-runtime-dx11/src/lib.rs index 18826be..f148d88 100644 --- a/librashader-runtime-dx11/src/lib.rs +++ b/librashader-runtime-dx11/src/lib.rs @@ -1,19 +1,19 @@ -use std::collections::HashMap; -use std::error::Error; -use std::path::Path; -use rustc_hash::FxHashMap; use librashader_preprocess::ShaderSource; use librashader_presets::ShaderPassConfig; -use librashader_reflect::back::{CompileShader}; use librashader_reflect::back::targets::{FromCompilation, HLSL}; -use librashader_reflect::front::shaderc::GlslangCompilation; -use librashader_reflect::reflect::cross::{CrossReflect}; -use librashader_reflect::reflect::{ReflectSemantics, ReflectShader, UniformSemantic}; +use librashader_reflect::back::CompileShader; +use rustc_hash::FxHashMap; +use std::error::Error; +use std::path::Path; + use librashader_reflect::reflect::semantics::{SemanticMap, TextureSemantics, VariableSemantics}; +use librashader_reflect::reflect::{ReflectSemantics, ReflectShader, UniformSemantic}; - -pub fn load_pass_semantics(uniform_semantics: &mut FxHashMap, texture_semantics: &mut FxHashMap>, - config: &ShaderPassConfig) { +pub fn load_pass_semantics( + uniform_semantics: &mut FxHashMap, + texture_semantics: &mut FxHashMap>, + config: &ShaderPassConfig, +) { let Some(alias) = &config.alias else { return; }; @@ -26,77 +26,94 @@ pub fn load_pass_semantics(uniform_semantics: &mut FxHashMap) -> Result<(), Box>{ +pub fn load(path: impl AsRef) -> Result<(), Box> { let preset = librashader_presets::ShaderPreset::try_parse(path)?; - let mut passes: Vec<(&ShaderPassConfig, ShaderSource, _)> = preset.shaders.iter() + let passes: Vec<(&ShaderPassConfig, ShaderSource, _)> = preset + .shaders + .iter() .map(|shader| { - let source = librashader_preprocess::load_shader_source(&shader.name) - .unwrap(); - let spirv = librashader_reflect::front::shaderc::compile_spirv(&source) - .unwrap(); - let mut reflect = HLSL::from_compilation(spirv).unwrap(); + let source = ShaderSource::load(&shader.name).unwrap(); + let spirv = librashader_reflect::front::shaderc::compile_spirv(&source).unwrap(); + let reflect = HLSL::from_compilation(spirv).unwrap(); (shader, source, reflect) - }).collect(); + }) + .collect(); // todo: this can probably be extracted out. let mut uniform_semantics: FxHashMap = Default::default(); - let mut texture_semantics: FxHashMap> = Default::default(); + let mut texture_semantics: FxHashMap> = + Default::default(); for details in &passes { load_pass_semantics(&mut uniform_semantics, &mut texture_semantics, details.0) } // add float params - for (index, parameter) in preset.parameters.iter().enumerate() { - uniform_semantics.insert(parameter.name.clone(), UniformSemantic::Variable(SemanticMap { - semantics: VariableSemantics::FloatParameter, - index: () - })); + for (_index, parameter) in preset.parameters.iter().enumerate() { + uniform_semantics.insert( + parameter.name.clone(), + UniformSemantic::Variable(SemanticMap { + semantics: VariableSemantics::FloatParameter, + index: (), + }), + ); } // add lut params for (index, texture) in preset.textures.iter().enumerate() { - texture_semantics.insert(texture.name.clone(), SemanticMap { - semantics: TextureSemantics::User, - index - }); + texture_semantics.insert( + texture.name.clone(), + SemanticMap { + semantics: TextureSemantics::User, + index, + }, + ); } let semantics = ReflectSemantics { uniform_semantics, - non_uniform_semantics: texture_semantics + non_uniform_semantics: texture_semantics, }; let mut reflections = Vec::new(); let mut compiled = Vec::new(); for (index, (_, _, mut reflect)) in passes.into_iter().enumerate() { - let reflection = reflect.reflect(index, &semantics) - .unwrap(); + let reflection = reflect.reflect(index, &semantics).unwrap(); - let hlsl = reflect.compile(None) - .unwrap(); + let hlsl = reflect.compile(None).unwrap(); eprintln!("{:#}", hlsl.vertex); @@ -104,13 +121,10 @@ pub fn load(path: impl AsRef) -> Result<(), Box>{ compiled.push(hlsl); reflections.push(reflection); - } - eprintln!("{:#?}", reflections); - // //todo: add the semantics for other shit (slang_process:68) // eprintln!("{:?}", preset); // eprintln!("{:?}", reflect.reflect(&ReflectOptions { @@ -128,8 +142,6 @@ mod tests { #[test] fn load_preset() { - - load("../test/basic.slangp") - .unwrap(); + load("../test/basic.slangp").unwrap(); } } diff --git a/librashader-runtime-gl/src/filter_chain.rs b/librashader-runtime-gl/src/filter_chain.rs index 15e0095..fbf6424 100644 --- a/librashader-runtime-gl/src/filter_chain.rs +++ b/librashader-runtime-gl/src/filter_chain.rs @@ -1,15 +1,16 @@ -use std::collections::VecDeque; use crate::binding::{UniformBinding, UniformLocation, VariableLocation}; use crate::filter_pass::FilterPass; use crate::framebuffer::{Framebuffer, GlImage, Viewport}; +use crate::quad_render::DrawQuad; use crate::render_target::RenderTarget; use crate::util; use crate::util::{InlineRingBuffer, Texture}; use gl::types::{GLenum, GLint, GLsizei, GLsizeiptr, GLuint}; use librashader_common::image::Image; use librashader_common::{FilterMode, Size, WrapMode}; -use librashader_presets::{ScaleType, ShaderPassConfig, ShaderPreset, TextureConfig}; -use librashader_reflect::back::cross::{GlslangGlslContext, GlVersion}; +use librashader_preprocess::ShaderSource; +use librashader_presets::{ShaderPassConfig, ShaderPreset, TextureConfig}; +use librashader_reflect::back::cross::{GlVersion, GlslangGlslContext}; use librashader_reflect::back::targets::{CompilerBackend, FromCompilation, GLSL}; use librashader_reflect::back::CompileShader; use librashader_reflect::reflect::semantics::{ @@ -18,10 +19,9 @@ use librashader_reflect::reflect::semantics::{ use librashader_reflect::reflect::{ReflectSemantics, ReflectShader, UniformSemantic}; use rustc_hash::FxHashMap; use spirv_cross::spirv::Decoration; +use std::collections::VecDeque; use std::error::Error; use std::path::Path; -use librashader_preprocess::ShaderSource; -use crate::quad_render::DrawQuad; pub struct FilterChain { passes: Box<[FilterPass]>, @@ -42,7 +42,6 @@ pub struct FilterCommon { pub(crate) draw_quad: DrawQuad, } - impl FilterChain { fn load_pass_semantics( uniform_semantics: &mut FxHashMap, @@ -125,8 +124,7 @@ type ShaderPassMeta<'a> = ( &'a ShaderPassConfig, ShaderSource, CompilerBackend< - impl CompileShader - + ReflectShader + impl CompileShader + ReflectShader, >, ); @@ -139,7 +137,10 @@ impl FilterChain { let filters = FilterChain::init_passes(passes, &semantics)?; let default_filter = filters.first().map(|f| f.config.filter).unwrap_or_default(); - let default_wrap = filters.first().map(|f| f.config.wrap_mode).unwrap_or_default(); + let default_wrap = filters + .first() + .map(|f| f.config.wrap_mode) + .unwrap_or_default(); // initialize output framebuffers let mut output_framebuffers = Vec::new(); @@ -147,7 +148,6 @@ impl FilterChain { let mut output_textures = Vec::new(); output_textures.resize_with(filters.len(), Texture::default); - // initialize feedback framebuffers let mut feedback_framebuffers = Vec::new(); feedback_framebuffers.resize_with(filters.len(), || Framebuffer::new(1)); @@ -193,7 +193,9 @@ impl FilterChain { Self::load_from_preset(preset) } - fn load_preset(preset: &ShaderPreset) -> Result<(Vec, ReflectSemantics), Box> { + fn load_preset( + preset: &ShaderPreset, + ) -> Result<(Vec, ReflectSemantics), Box> { let mut uniform_semantics: FxHashMap = Default::default(); let mut texture_semantics: FxHashMap> = Default::default(); @@ -203,8 +205,7 @@ impl FilterChain { .iter() .map(|shader| { eprintln!("[gl] loading {}", &shader.name.display()); - let source: ShaderSource = - ShaderSource::load(&shader.name)?; + let source: ShaderSource = ShaderSource::load(&shader.name)?; let spirv = librashader_reflect::front::shaderc::compile_spirv(&source)?; let reflect = GLSL::from_compilation(spirv)?; @@ -221,9 +222,7 @@ impl FilterChain { Ok::<_, Box>((shader, source, reflect)) }) .into_iter() - .collect::)>, _>>()?; + .collect::)>, _>>()?; for details in &passes { FilterChain::load_pass_semantics( @@ -529,7 +528,11 @@ impl FilterChain { Ok(filters.into_boxed_slice()) } - fn init_history(filters: &[FilterPass], filter: FilterMode, wrap_mode: WrapMode) -> (VecDeque, Box<[Texture]>) { + fn init_history( + filters: &[FilterPass], + filter: FilterMode, + wrap_mode: WrapMode, + ) -> (VecDeque, Box<[Texture]>) { let mut required_images = 0; for pass in filters { @@ -556,7 +559,7 @@ impl FilterChain { // not using frame history; if required_images <= 1 { println!("[history] not using frame history"); - return (VecDeque::new(), Box::new([])) + return (VecDeque::new(), Box::new([])); } // history0 is aliased with the original @@ -570,7 +573,7 @@ impl FilterChain { image: Default::default(), filter, mip_filter: filter, - wrap_mode + wrap_mode, }); (framebuffers, history_textures.into_boxed_slice()) @@ -578,14 +581,12 @@ impl FilterChain { fn push_history(&mut self, input: &GlImage) { if let Some(mut back) = self.history_framebuffers.pop_back() { - - if back.size != input.size - || (input.format != 0 && input.format != back.format) { + if back.size != input.size || (input.format != 0 && input.format != back.format) { eprintln!("[history] resizing"); back.init(input.size, input.format); } - back.copy_from(&input); + back.copy_from(input); self.history_framebuffers.push_front(back) } @@ -598,7 +599,6 @@ impl FilterChain { } } - if self.passes.is_empty() { return; } @@ -612,15 +612,25 @@ impl FilterChain { let wrap_mode = self.passes[0].config.wrap_mode; // update history - for (texture, fbo) in self.common.history_textures.iter_mut().zip(self.history_framebuffers.iter()) { + for (texture, fbo) in self + .common + .history_textures + .iter_mut() + .zip(self.history_framebuffers.iter()) + { texture.image = fbo.as_texture(filter, wrap_mode).image; } - for ((texture, fbo), pass) in self.common.feedback_textures.iter_mut() + for ((texture, fbo), pass) in self + .common + .feedback_textures + .iter_mut() .zip(self.feedback_framebuffers.iter()) .zip(self.passes.iter()) { - texture.image = fbo.as_texture(pass.config.filter, pass.config.wrap_mode).image; + texture.image = fbo + .as_texture(pass.config.filter, pass.config.wrap_mode) + .image; } // shader_gl3: 2067 @@ -675,7 +685,6 @@ impl FilterChain { let target = target.as_texture(pass.config.filter, pass.config.wrap_mode); self.common.output_textures[index] = target; source = target; - } assert_eq!(last.len(), 1); @@ -697,19 +706,21 @@ impl FilterChain { &source, RenderTarget::new(viewport.output, viewport.mvp), ); - } // swap feedback framebuffers with output - for (output, feedback) in self.output_framebuffers.iter_mut().zip(self.feedback_framebuffers.iter_mut()) { + for (output, feedback) in self + .output_framebuffers + .iter_mut() + .zip(self.feedback_framebuffers.iter_mut()) + { std::mem::swap(output, feedback); } - self.push_history(&input); + self.push_history(input); unsafe { gl::BindFramebuffer(gl::FRAMEBUFFER, 0); gl::BindVertexArray(0); } } - } diff --git a/librashader-runtime-gl/src/filter_pass.rs b/librashader-runtime-gl/src/filter_pass.rs index 758d1b0..aa76161 100644 --- a/librashader-runtime-gl/src/filter_pass.rs +++ b/librashader-runtime-gl/src/filter_pass.rs @@ -4,12 +4,12 @@ use librashader_reflect::back::ShaderCompilerOutput; use librashader_reflect::reflect::ShaderReflection; use librashader_common::{ShaderFormat, Size}; +use librashader_preprocess::ShaderSource; use librashader_presets::ShaderPassConfig; use librashader_reflect::reflect::semantics::{ MemberOffset, TextureImage, TextureSemantics, VariableSemantics, }; use rustc_hash::FxHashMap; -use librashader_preprocess::ShaderSource; use crate::binding::{UniformBinding, UniformLocation, VariableLocation}; use crate::filter_chain::FilterCommon; @@ -392,8 +392,12 @@ impl FilterPass { ); } - - if let Some(binding) = self.reflection.meta.texture_meta.get(&TextureSemantics::OriginalHistory.semantics(0)) { + if let Some(binding) = self + .reflection + .meta + .texture_meta + .get(&TextureSemantics::OriginalHistory.semantics(0)) + { FilterPass::bind_texture(binding, original); } if let Some((location, offset)) = self @@ -421,10 +425,11 @@ impl FilterPass { FilterPass::bind_texture(binding, output); } - if let Some((location, offset)) = self - .variable_bindings - .get(&TextureSemantics::OriginalHistory.semantics(index + 1).into()) - { + if let Some((location, offset)) = self.variable_bindings.get( + &TextureSemantics::OriginalHistory + .semantics(index + 1) + .into(), + ) { let (buffer, offset) = match offset { MemberOffset::Ubo(offset) => (&mut self.uniform_buffer, *offset), MemberOffset::PushConstant(offset) => (&mut self.push_buffer, *offset), diff --git a/librashader-runtime-gl/src/framebuffer.rs b/librashader-runtime-gl/src/framebuffer.rs index 6b49afc..6e4ae12 100644 --- a/librashader-runtime-gl/src/framebuffer.rs +++ b/librashader-runtime-gl/src/framebuffer.rs @@ -34,7 +34,7 @@ impl Framebuffer { max_levels, levels: 0, handle: framebuffer, - is_raw: false + is_raw: false, } } @@ -52,7 +52,7 @@ impl Framebuffer { max_levels: miplevels, levels: miplevels, handle, - is_raw: true + is_raw: true, } } @@ -153,30 +153,51 @@ impl Framebuffer { unsafe { gl::BindFramebuffer(gl::FRAMEBUFFER, self.handle); - gl::FramebufferTexture2D(gl::READ_FRAMEBUFFER, - gl::COLOR_ATTACHMENT0, - gl::TEXTURE_2D, - image.handle, 0); + gl::FramebufferTexture2D( + gl::READ_FRAMEBUFFER, + gl::COLOR_ATTACHMENT0, + gl::TEXTURE_2D, + image.handle, + 0, + ); - gl::FramebufferTexture2D(gl::DRAW_FRAMEBUFFER, - gl::COLOR_ATTACHMENT1, - gl::TEXTURE_2D, - self.image, 0); + gl::FramebufferTexture2D( + gl::DRAW_FRAMEBUFFER, + gl::COLOR_ATTACHMENT1, + gl::TEXTURE_2D, + self.image, + 0, + ); gl::DrawBuffer(gl::COLOR_ATTACHMENT1); - gl::BlitFramebuffer(0, 0, self.size.width as GLint, self.size.height as GLint, - 0, 0, self.size.width as GLint, self.size.height as GLint, - gl::COLOR_BUFFER_BIT, gl::NEAREST); + gl::BlitFramebuffer( + 0, + 0, + self.size.width as GLint, + self.size.height as GLint, + 0, + 0, + self.size.width as GLint, + self.size.height as GLint, + gl::COLOR_BUFFER_BIT, + gl::NEAREST, + ); // cleanup after ourselves. - gl::FramebufferTexture2D(gl::READ_FRAMEBUFFER, - gl::COLOR_ATTACHMENT0, - gl::TEXTURE_2D, - 0, 0); + gl::FramebufferTexture2D( + gl::READ_FRAMEBUFFER, + gl::COLOR_ATTACHMENT0, + gl::TEXTURE_2D, + 0, + 0, + ); - gl::FramebufferTexture2D(gl::DRAW_FRAMEBUFFER, - gl::COLOR_ATTACHMENT1, - gl::TEXTURE_2D, - 0, 0); + gl::FramebufferTexture2D( + gl::DRAW_FRAMEBUFFER, + gl::COLOR_ATTACHMENT1, + gl::TEXTURE_2D, + 0, + 0, + ); // set this back to color_attachment 0 gl::FramebufferTexture2D( diff --git a/librashader-runtime-gl/src/hello_triangle.rs b/librashader-runtime-gl/src/hello_triangle.rs index 9b2ed09..e684a9a 100644 --- a/librashader-runtime-gl/src/hello_triangle.rs +++ b/librashader-runtime-gl/src/hello_triangle.rs @@ -414,9 +414,7 @@ pub fn do_loop( } let fullscreen_fbo = [ - -1.0f32, -1.0, 0.0, 1.0, - -1.0, 0.0, -1.0, 1.0, 0.0, - -1.0, 1.0, 0.0, 1.0, -1.0, 0.0, + -1.0f32, -1.0, 0.0, 1.0, -1.0, 0.0, -1.0, 1.0, 0.0, -1.0, 1.0, 0.0, 1.0, -1.0, 0.0, 1.0, 1.0, 0.0, ]; @@ -472,7 +470,6 @@ void main() 1, ); - while !window.should_close() { glfw.poll_events(); for (_, event) in glfw::flush_messages(&events) { @@ -520,14 +517,7 @@ void main() padded_size: Default::default(), }; - unsafe { - filter.frame( - framecount, - &viewport, - &rendered, - false, - ) - } + unsafe { filter.frame(framecount, &viewport, &rendered, false) } unsafe { // texture is done now. @@ -568,9 +558,7 @@ fn glfw_handle_event(window: &mut glfw::Window, event: glfw::WindowEvent) { Event::Key(Key::Escape, _, Action::Press, _) => { window.set_should_close(true); } - Event::Size(width, height) => { - window.set_size(width, height) - } + Event::Size(width, height) => window.set_size(width, height), _ => {} } } diff --git a/librashader-runtime-gl/src/lib.rs b/librashader-runtime-gl/src/lib.rs index 227a4b1..a4937b6 100644 --- a/librashader-runtime-gl/src/lib.rs +++ b/librashader-runtime-gl/src/lib.rs @@ -6,14 +6,14 @@ mod filter_chain; mod filter_pass; mod framebuffer; mod hello_triangle; +mod quad_render; mod render_target; mod util; -mod quad_render; pub use filter_chain::FilterChain; -pub use framebuffer::Viewport; -pub use framebuffer::GlImage; pub use framebuffer::Framebuffer; +pub use framebuffer::GlImage; +pub use framebuffer::Viewport; #[cfg(test)] mod tests { @@ -23,7 +23,9 @@ mod tests { #[test] fn triangle() { let (glfw, window, events, shader, vao) = hello_triangle::setup(); - let mut filter = FilterChain::load_from_path("../test/slang-shaders/crt/crt-royale-fake-bloom.slangp").unwrap(); + let mut filter = + FilterChain::load_from_path("../test/slang-shaders/crt/crt-royale-fake-bloom.slangp") + .unwrap(); // FilterChain::load("../test/slang-shaders/crt/crt-royale.slangp").unwrap(); diff --git a/librashader-runtime-gl/src/quad_render.rs b/librashader-runtime-gl/src/quad_render.rs index b9c59d1..272fd97 100644 --- a/librashader-runtime-gl/src/quad_render.rs +++ b/librashader-runtime-gl/src/quad_render.rs @@ -1,6 +1,5 @@ use gl::types::{GLsizeiptr, GLuint}; - #[rustfmt::skip] static QUAD_VBO_DATA: &[f32; 16] = &[ 0.0f32, 0.0f32, 0.0f32, 0.0f32, @@ -10,7 +9,7 @@ static QUAD_VBO_DATA: &[f32; 16] = &[ ]; pub struct DrawQuad { - pub vbo: GLuint + pub vbo: GLuint, } impl DrawQuad { @@ -28,8 +27,6 @@ impl DrawQuad { gl::BindBuffer(gl::ARRAY_BUFFER, 0); } - DrawQuad { - vbo - } + DrawQuad { vbo } } -} \ No newline at end of file +} diff --git a/librashader-runtime-gl/src/render_target.rs b/librashader-runtime-gl/src/render_target.rs index a32d263..987f9d2 100644 --- a/librashader-runtime-gl/src/render_target.rs +++ b/librashader-runtime-gl/src/render_target.rs @@ -1,5 +1,4 @@ use crate::framebuffer::{Framebuffer, Viewport}; -use crate::util::Texture; #[rustfmt::skip] static DEFAULT_MVP: &[f32] = &[ diff --git a/librashader-runtime-gl/src/util.rs b/librashader-runtime-gl/src/util.rs index bdba4ba..3668f0c 100644 --- a/librashader-runtime-gl/src/util.rs +++ b/librashader-runtime-gl/src/util.rs @@ -1,4 +1,4 @@ -use crate::framebuffer::{Framebuffer, GlImage}; +use crate::framebuffer::GlImage; use gl::types::{GLenum, GLuint}; use librashader_common::{FilterMode, WrapMode};