reflect/preprocess/presets: use SmallString where it makes sense

Most use cases are internal so at least for the runtime consumers there's no API change, but preset parsing
and reflection items are public API so might as well put this as part of 0.4.0
This commit is contained in:
chyyran 2024-09-04 01:53:48 -04:00 committed by Ronny Chan
parent c447e40583
commit 40a56bf165
19 changed files with 182 additions and 167 deletions

168
Cargo.lock generated
View file

@ -137,7 +137,7 @@ checksum = "0ae92a5119aa49cdbcf6b9f893fe4e1d98b04ccbf82ee0584ad948a44a734dea"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.75", "syn 2.0.77",
] ]
[[package]] [[package]]
@ -192,13 +192,13 @@ dependencies = [
[[package]] [[package]]
name = "async-trait" name = "async-trait"
version = "0.1.81" version = "0.1.82"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6e0c28dcc82d7c8ead5cb13beb15405b57b8546e93215673ff8ca0349a028107" checksum = "a27b8a3a6e1a44fa4c8baf1f653e4172e81486d4941f2237e20dc2d0cf4ddff1"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.75", "syn 2.0.77",
] ]
[[package]] [[package]]
@ -313,9 +313,9 @@ checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de"
[[package]] [[package]]
name = "bitstream-io" name = "bitstream-io"
version = "2.5.2" version = "2.5.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5b80895c12b34217892edc4718b2293748796b6570c6ff9f0935df8e10e26534" checksum = "b81e1519b0d82120d2fd469d5bfb2919a9361c48b02d82d04befc1cdd2002452"
[[package]] [[package]]
name = "bitvec" name = "bitvec"
@ -411,9 +411,9 @@ checksum = "5ce89b21cab1437276d2650d57e971f9d548a2d9037cc231abdc0562b97498ce"
[[package]] [[package]]
name = "bytemuck" name = "bytemuck"
version = "1.17.0" version = "1.17.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6fd4c6dcc3b0aea2f5c0b4b82c2b15fe39ddbc76041a310848f4706edf76bb31" checksum = "773d90827bc3feecfb67fab12e24de0749aad83c74b9504ecde46237b5cd24e2"
dependencies = [ dependencies = [
"bytemuck_derive", "bytemuck_derive",
] ]
@ -426,7 +426,7 @@ checksum = "0cc8b54b395f2fcfbb3d90c47b01c7f444d94d05bdeb775811dec868ac3bbc26"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.75", "syn 2.0.77",
] ]
[[package]] [[package]]
@ -494,9 +494,9 @@ dependencies = [
[[package]] [[package]]
name = "cc" name = "cc"
version = "1.1.13" version = "1.1.16"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "72db2f7947ecee9b03b510377e8bb9077afa27176fdbff55c51027e976fdcc48" checksum = "e9d013ecb737093c0e86b151a7b837993cf9ec6c502946cfb44bedc392421e0b"
dependencies = [ dependencies = [
"jobserver", "jobserver",
"libc", "libc",
@ -718,9 +718,9 @@ dependencies = [
[[package]] [[package]]
name = "constant_time_eq" name = "constant_time_eq"
version = "0.3.0" version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f7144d30dcf0fafbce74250a3963025d8d52177934239851c917d29f1df280c2" checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6"
[[package]] [[package]]
name = "core-foundation" name = "core-foundation"
@ -1006,9 +1006,9 @@ dependencies = [
[[package]] [[package]]
name = "fastrand" name = "fastrand"
version = "2.1.0" version = "2.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a" checksum = "e8c02a5121d4ea3eb16a80748c74f5549a5665e4c21333c6098f283870fbdea6"
[[package]] [[package]]
name = "fdeflate" name = "fdeflate"
@ -1027,9 +1027,9 @@ checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80"
[[package]] [[package]]
name = "flate2" name = "flate2"
version = "1.0.32" version = "1.0.33"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9c0596c1eac1f9e04ed902702e9878208b336edc9d6fddc8a48387349bab3666" checksum = "324a1be68054ef05ad64b861cc9eaf1d623d2d8cb25b4bf2cb9cdd902b4bf253"
dependencies = [ dependencies = [
"crc32fast", "crc32fast",
"miniz_oxide 0.8.0", "miniz_oxide 0.8.0",
@ -1062,7 +1062,7 @@ checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.75", "syn 2.0.77",
] ]
[[package]] [[package]]
@ -1460,9 +1460,9 @@ dependencies = [
[[package]] [[package]]
name = "indexmap" name = "indexmap"
version = "2.4.0" version = "2.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "93ead53efc7ea8ed3cfb0c79fc8023fbb782a5432b52830b6518941cebe6505c" checksum = "68b900aa2f7301e21c36462b170ee99994de34dff39a4a6a528e80e7376d07e5"
dependencies = [ dependencies = [
"equivalent", "equivalent",
"hashbrown 0.14.5", "hashbrown 0.14.5",
@ -1476,7 +1476,7 @@ checksum = "c34819042dc3d3971c46c2190835914dfbe0c3c13f61449b2997f4e9722dfa60"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.75", "syn 2.0.77",
] ]
[[package]] [[package]]
@ -1698,6 +1698,7 @@ dependencies = [
"num-traits", "num-traits",
"objc2-metal", "objc2-metal",
"rustc-hash 2.0.0", "rustc-hash 2.0.0",
"smartstring",
"wgpu-types", "wgpu-types",
"windows 0.58.0", "windows 0.58.0",
] ]
@ -1736,7 +1737,7 @@ dependencies = [
"bitflags 2.6.0", "bitflags 2.6.0",
"bytemuck", "bytemuck",
"glslang", "glslang",
"indexmap 2.4.0", "indexmap 2.5.0",
"librashader-common", "librashader-common",
"librashader-preprocess", "librashader-preprocess",
"librashader-presets", "librashader-presets",
@ -2090,7 +2091,7 @@ dependencies = [
"cfg_aliases", "cfg_aliases",
"codespan-reporting", "codespan-reporting",
"hexf-parse", "hexf-parse",
"indexmap 2.4.0", "indexmap 2.5.0",
"log", "log",
"petgraph", "petgraph",
"pp-rs", "pp-rs",
@ -2205,7 +2206,7 @@ checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.75", "syn 2.0.77",
] ]
[[package]] [[package]]
@ -2266,7 +2267,7 @@ dependencies = [
"proc-macro-crate", "proc-macro-crate",
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.75", "syn 2.0.77",
] ]
[[package]] [[package]]
@ -2468,7 +2469,7 @@ dependencies = [
"pest_meta", "pest_meta",
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.75", "syn 2.0.77",
] ]
[[package]] [[package]]
@ -2489,7 +2490,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db"
dependencies = [ dependencies = [
"fixedbitset", "fixedbitset",
"indexmap 2.4.0", "indexmap 2.5.0",
] ]
[[package]] [[package]]
@ -2573,11 +2574,11 @@ checksum = "e8cf8e6a8aa66ce33f63993ffc4ea4271eb5b0530a9002db8455ea6050c77bfa"
[[package]] [[package]]
name = "proc-macro-crate" name = "proc-macro-crate"
version = "3.1.0" version = "3.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6d37c51ca738a55da99dc0c4a34860fd675453b8b36209178c2249bb13651284" checksum = "8ecf48c7ca261d60b74ab1a7b20da18bede46776b2e55535cb958eb595c5fa7b"
dependencies = [ dependencies = [
"toml_edit 0.21.1", "toml_edit",
] ]
[[package]] [[package]]
@ -2629,7 +2630,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8021cf59c8ec9c432cfc2526ac6b8aa508ecaf29cd415f271b8406c1b851c3fd" checksum = "8021cf59c8ec9c432cfc2526ac6b8aa508ecaf29cd415f271b8406c1b851c3fd"
dependencies = [ dependencies = [
"quote", "quote",
"syn 2.0.75", "syn 2.0.77",
] ]
[[package]] [[package]]
@ -2649,18 +2650,18 @@ checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3"
[[package]] [[package]]
name = "quick-xml" name = "quick-xml"
version = "0.34.0" version = "0.36.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6f24d770aeca0eacb81ac29dfbc55ebcc09312fdd1f8bbecdc7e4a84e000e3b4" checksum = "96a05e2e8efddfa51a84ca47cec303fac86c8541b686d37cac5efc0e094417bc"
dependencies = [ dependencies = [
"memchr", "memchr",
] ]
[[package]] [[package]]
name = "quote" name = "quote"
version = "1.0.36" version = "1.0.37"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
] ]
@ -2884,9 +2885,9 @@ checksum = "19b30a45b0cd0bcca8037f3d0dc3421eaf95327a17cad11964fb8179b4fc4832"
[[package]] [[package]]
name = "rgb" name = "rgb"
version = "0.8.48" version = "0.8.50"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0f86ae463694029097b846d8f99fd5536740602ae00022c0c50c5600720b2f71" checksum = "57397d16646700483b67d2dd6511d79318f9d057fdbd21a4066aeac8b41d310a"
dependencies = [ dependencies = [
"bytemuck", "bytemuck",
] ]
@ -2936,9 +2937,9 @@ checksum = "583034fd73374156e66797ed8e5b0d5690409c9226b22d87cb7f19821c05d152"
[[package]] [[package]]
name = "rustix" name = "rustix"
version = "0.38.34" version = "0.38.35"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" checksum = "a85d50532239da68e9addb745ba38ff4612a242c1c7ceea689c4bc7c2f43c36f"
dependencies = [ dependencies = [
"bitflags 2.6.0", "bitflags 2.6.0",
"errno", "errno",
@ -2989,29 +2990,29 @@ dependencies = [
[[package]] [[package]]
name = "serde" name = "serde"
version = "1.0.208" version = "1.0.209"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cff085d2cb684faa248efb494c39b68e522822ac0de72ccf08109abde717cfb2" checksum = "99fce0ffe7310761ca6bf9faf5115afbc19688edd00171d81b1bb1b116c63e09"
dependencies = [ dependencies = [
"serde_derive", "serde_derive",
] ]
[[package]] [[package]]
name = "serde_derive" name = "serde_derive"
version = "1.0.208" version = "1.0.209"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "24008e81ff7613ed8e5ba0cfaf24e2c2f1e5b8a0495711e44fcd4882fca62bcf" checksum = "a5831b979fd7b5439637af1752d535ff49f4860c0f341d1baeb6faf0f4242170"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.75", "syn 2.0.77",
] ]
[[package]] [[package]]
name = "serde_json" name = "serde_json"
version = "1.0.125" version = "1.0.128"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "83c8e735a073ccf5be70aa8066aa984eaf2fa000db6c8d0100ae605b366d31ed" checksum = "6ff5456707a1de34e7e37f2a6fd3d3f808c318259cbd01ab6377795054b483d8"
dependencies = [ dependencies = [
"itoa", "itoa",
"memchr", "memchr",
@ -3084,6 +3085,17 @@ version = "1.13.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67"
[[package]]
name = "smartstring"
version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3fb72c633efbaa2dd666986505016c32c3044395ceaf881518399d2f4127ee29"
dependencies = [
"autocfg",
"static_assertions",
"version_check",
]
[[package]] [[package]]
name = "smithay-client-toolkit" name = "smithay-client-toolkit"
version = "0.18.1" version = "0.18.1"
@ -3196,9 +3208,9 @@ dependencies = [
[[package]] [[package]]
name = "syn" name = "syn"
version = "2.0.75" version = "2.0.77"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f6af063034fc1935ede7be0122941bafa9bacb949334d090b77ca98b5817c7d9" checksum = "9f35bcdf61fd8e7be6caf75f429fdca8beb3ed76584befb503b1569faee373ed"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
@ -3275,7 +3287,7 @@ checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.75", "syn 2.0.77",
] ]
[[package]] [[package]]
@ -3347,7 +3359,7 @@ dependencies = [
"serde", "serde",
"serde_spanned", "serde_spanned",
"toml_datetime", "toml_datetime",
"toml_edit 0.22.20", "toml_edit",
] ]
[[package]] [[package]]
@ -3359,28 +3371,17 @@ dependencies = [
"serde", "serde",
] ]
[[package]]
name = "toml_edit"
version = "0.21.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1"
dependencies = [
"indexmap 2.4.0",
"toml_datetime",
"winnow 0.5.40",
]
[[package]] [[package]]
name = "toml_edit" name = "toml_edit"
version = "0.22.20" version = "0.22.20"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "583c44c02ad26b0c3f3066fe629275e50627026c51ac2e595cca4c230ce1ce1d" checksum = "583c44c02ad26b0c3f3066fe629275e50627026c51ac2e595cca4c230ce1ce1d"
dependencies = [ dependencies = [
"indexmap 2.4.0", "indexmap 2.5.0",
"serde", "serde",
"serde_spanned", "serde_spanned",
"toml_datetime", "toml_datetime",
"winnow 0.6.18", "winnow",
] ]
[[package]] [[package]]
@ -3520,7 +3521,7 @@ dependencies = [
"once_cell", "once_cell",
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.75", "syn 2.0.77",
"wasm-bindgen-shared", "wasm-bindgen-shared",
] ]
@ -3554,7 +3555,7 @@ checksum = "afc340c74d9005395cf9dd098506f7f44e38f2b4a21c6aaacf9a105ea5e1e836"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.75", "syn 2.0.77",
"wasm-bindgen-backend", "wasm-bindgen-backend",
"wasm-bindgen-shared", "wasm-bindgen-shared",
] ]
@ -3567,9 +3568,9 @@ checksum = "c62a0a307cb4a311d3a07867860911ca130c3494e8c2719593806c08bc5d0484"
[[package]] [[package]]
name = "wayland-backend" name = "wayland-backend"
version = "0.3.6" version = "0.3.7"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f90e11ce2ca99c97b940ee83edbae9da2d56a08f9ea8158550fd77fa31722993" checksum = "056535ced7a150d45159d3a8dc30f91a2e2d588ca0b23f70e56033622b8016f6"
dependencies = [ dependencies = [
"cc", "cc",
"downcast-rs", "downcast-rs",
@ -3581,9 +3582,9 @@ dependencies = [
[[package]] [[package]]
name = "wayland-client" name = "wayland-client"
version = "0.31.5" version = "0.31.6"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7e321577a0a165911bdcfb39cf029302479d7527b517ee58ab0f6ad09edf0943" checksum = "e3f45d1222915ef1fd2057220c1d9d9624b7654443ea35c3877f7a52bd0a5a2d"
dependencies = [ dependencies = [
"bitflags 2.6.0", "bitflags 2.6.0",
"rustix", "rustix",
@ -3604,9 +3605,9 @@ dependencies = [
[[package]] [[package]]
name = "wayland-cursor" name = "wayland-cursor"
version = "0.31.5" version = "0.31.6"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6ef9489a8df197ebf3a8ce8a7a7f0a2320035c3743f3c1bd0bdbccf07ce64f95" checksum = "3a94697e66e76c85923b0d28a0c251e8f0666f58fc47d316c0f4da6da75d37cb"
dependencies = [ dependencies = [
"rustix", "rustix",
"wayland-client", "wayland-client",
@ -3653,9 +3654,9 @@ dependencies = [
[[package]] [[package]]
name = "wayland-scanner" name = "wayland-scanner"
version = "0.31.4" version = "0.31.5"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d7b56f89937f1cf2ee1f1259cf2936a17a1f45d8f0aa1019fae6d470d304cfa6" checksum = "597f2001b2e5fc1121e3d5b9791d3e78f05ba6bfa4641053846248e3a13661c3"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quick-xml", "quick-xml",
@ -3664,9 +3665,9 @@ dependencies = [
[[package]] [[package]]
name = "wayland-sys" name = "wayland-sys"
version = "0.31.4" version = "0.31.5"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "43676fe2daf68754ecf1d72026e4e6c15483198b5d24e888b74d3f22f887a148" checksum = "efa8ac0d8e8ed3e3b5c9fc92c7881406a268e11555abe36493efabe649a29e09"
dependencies = [ dependencies = [
"dlib", "dlib",
"log", "log",
@ -3736,7 +3737,7 @@ dependencies = [
"bitflags 2.6.0", "bitflags 2.6.0",
"cfg_aliases", "cfg_aliases",
"document-features", "document-features",
"indexmap 2.4.0", "indexmap 2.5.0",
"log", "log",
"naga", "naga",
"once_cell", "once_cell",
@ -3893,7 +3894,7 @@ checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.75", "syn 2.0.77",
] ]
[[package]] [[package]]
@ -3904,7 +3905,7 @@ checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.75", "syn 2.0.77",
] ]
[[package]] [[package]]
@ -4188,15 +4189,6 @@ dependencies = [
"xkbcommon-dl", "xkbcommon-dl",
] ]
[[package]]
name = "winnow"
version = "0.5.40"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876"
dependencies = [
"memchr",
]
[[package]] [[package]]
name = "winnow" name = "winnow"
version = "0.6.18" version = "0.6.18"
@ -4305,7 +4297,7 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.75", "syn 2.0.77",
] ]
[[package]] [[package]]

View file

@ -205,7 +205,7 @@ extern_fn! {
let iter = librashader::presets::get_parameter_meta(preset)?; let iter = librashader::presets::get_parameter_meta(preset)?;
let mut values = Vec::new(); let mut values = Vec::new();
for param in iter { for param in iter {
let name = CString::new(param.id) let name = CString::new(param.id.to_string())
.map_err(|err| LibrashaderError::UnknownError(Box::new(err)))?; .map_err(|err| LibrashaderError::UnknownError(Box::new(err)))?;
let description = CString::new(param.description) let description = CString::new(param.description)
.map_err(|err| LibrashaderError::UnknownError(Box::new(err)))?; .map_err(|err| LibrashaderError::UnknownError(Box::new(err)))?;

View file

@ -29,6 +29,7 @@ wgpu-types = { version = "22", optional = true }
num-traits = "0.2.15" num-traits = "0.2.15"
rustc-hash = "2.0.0" rustc-hash = "2.0.0"
halfbrown = "0.2.4" halfbrown = "0.2.4"
smartstring = "1.0"
[target.'cfg(windows)'.dependencies.windows] [target.'cfg(windows)'.dependencies.windows]
optional = true optional = true

View file

@ -2,4 +2,7 @@
pub type FastHashMap<K, V> = pub type FastHashMap<K, V> =
halfbrown::SizedHashMap<K, V, core::hash::BuildHasherDefault<rustc_hash::FxHasher>, 32>; halfbrown::SizedHashMap<K, V, core::hash::BuildHasherDefault<rustc_hash::FxHasher>, 32>;
/// A string with small string optimizations up to 23 bytes.
pub type ShortString = smartstring::SmartString<smartstring::LazyCompact>;
pub use halfbrown; pub use halfbrown;

View file

@ -1,3 +1,4 @@
use librashader_common::map::ShortString;
use std::convert::Infallible; use std::convert::Infallible;
use std::path::PathBuf; use std::path::PathBuf;
use thiserror::Error; use thiserror::Error;
@ -27,7 +28,7 @@ pub enum PreprocessError {
PragmaParseError(String), PragmaParseError(String),
/// The given pragma was declared multiple times with differing values. /// The given pragma was declared multiple times with differing values.
#[error("duplicate pragma found")] #[error("duplicate pragma found")]
DuplicatePragmaError(String), DuplicatePragmaError(ShortString),
/// The image format requested by the shader was unknown or not supported. /// The image format requested by the shader was unknown or not supported.
#[error("shader format is unknown or not found")] #[error("shader format is unknown or not found")]
UnknownImageFormat, UnknownImageFormat,

View file

@ -15,7 +15,7 @@ mod stage;
use crate::include::read_source; use crate::include::read_source;
pub use error::*; pub use error::*;
use librashader_common::map::FastHashMap; use librashader_common::map::{FastHashMap, ShortString};
use librashader_common::ImageFormat; use librashader_common::ImageFormat;
use std::path::Path; use std::path::Path;
@ -29,10 +29,10 @@ pub struct ShaderSource {
pub fragment: String, pub fragment: String,
/// The alias of the shader if available. /// The alias of the shader if available.
pub name: Option<String>, pub name: Option<ShortString>,
/// The list of shader parameters found in the shader source. /// The list of shader parameters found in the shader source.
pub parameters: FastHashMap<String, ShaderParameter>, pub parameters: FastHashMap<ShortString, ShaderParameter>,
/// The image format the shader expects. /// The image format the shader expects.
pub format: ImageFormat, pub format: ImageFormat,
@ -42,7 +42,7 @@ pub struct ShaderSource {
#[derive(Debug, Clone, PartialEq)] #[derive(Debug, Clone, PartialEq)]
pub struct ShaderParameter { pub struct ShaderParameter {
/// The name of the parameter. /// The name of the parameter.
pub id: String, pub id: ShortString,
/// The description of the parameter. /// The description of the parameter.
pub description: String, pub description: String,
/// The initial value the parameter is set to. /// The initial value the parameter is set to.

View file

@ -2,6 +2,7 @@ use crate::{PreprocessError, ShaderParameter};
use librashader_common::ImageFormat; use librashader_common::ImageFormat;
use nom::bytes::complete::{is_not, tag, take_while}; use nom::bytes::complete::{is_not, tag, take_while};
use librashader_common::map::ShortString;
use nom::character::complete::multispace1; use nom::character::complete::multispace1;
use nom::number::complete::float; use nom::number::complete::float;
use nom::sequence::delimited; use nom::sequence::delimited;
@ -12,7 +13,7 @@ use std::str::FromStr;
pub(crate) struct ShaderMeta { pub(crate) struct ShaderMeta {
pub(crate) format: ImageFormat, pub(crate) format: ImageFormat,
pub(crate) parameters: Vec<ShaderParameter>, pub(crate) parameters: Vec<ShaderParameter>,
pub(crate) name: Option<String>, pub(crate) name: Option<ShortString>,
} }
fn parse_parameter_string(input: &str) -> Result<ShaderParameter, PreprocessError> { fn parse_parameter_string(input: &str) -> Result<ShaderParameter, PreprocessError> {
@ -40,7 +41,7 @@ fn parse_parameter_string(input: &str) -> Result<ShaderParameter, PreprocessErro
Ok(( Ok((
input, input,
ShaderParameter { ShaderParameter {
id: name.to_string(), id: name.into(),
description: description.to_string(), description: description.to_string(),
initial, initial,
minimum, minimum,
@ -60,7 +61,7 @@ fn parse_parameter_string(input: &str) -> Result<ShaderParameter, PreprocessErro
Ok(param) Ok(param)
} else { } else {
Ok(ShaderParameter { Ok(ShaderParameter {
id: name.to_string(), id: name.into(),
description: description.to_string(), description: description.to_string(),
initial: 0f32, initial: 0f32,
minimum: 0f32, minimum: 0f32,
@ -89,7 +90,7 @@ pub(crate) fn parse_pragma_meta(source: impl AsRef<str>) -> Result<ShaderMeta, P
if let Some(format_string) = line.strip_prefix("#pragma format ") { if let Some(format_string) = line.strip_prefix("#pragma format ") {
if format != ImageFormat::Unknown { if format != ImageFormat::Unknown {
return Err(PreprocessError::DuplicatePragmaError(line.to_string())); return Err(PreprocessError::DuplicatePragmaError(line.into()));
} }
let format_string = format_string.trim(); let format_string = format_string.trim();
@ -102,10 +103,10 @@ pub(crate) fn parse_pragma_meta(source: impl AsRef<str>) -> Result<ShaderMeta, P
if line.starts_with("#pragma name ") { if line.starts_with("#pragma name ") {
if name.is_some() { if name.is_some() {
return Err(PreprocessError::DuplicatePragmaError(line.to_string())); return Err(PreprocessError::DuplicatePragmaError(line.into()));
} }
name = Some(line.trim().to_string()) name = Some(ShortString::from(line.trim()))
} }
} }
@ -124,7 +125,7 @@ mod test {
#[test] #[test]
fn parses_parameter_pragma() { fn parses_parameter_pragma() {
assert_eq!(ShaderParameter { assert_eq!(ShaderParameter {
id: "exc".to_string(), id: "exc".into(),
description: "orizontal correction hack (games where players stay at center)".to_string(), description: "orizontal correction hack (games where players stay at center)".to_string(),
initial: 0.0, initial: 0.0,
minimum: -10.0, minimum: -10.0,
@ -136,7 +137,7 @@ mod test {
#[test] #[test]
fn parses_parameter_pragma_test() { fn parses_parameter_pragma_test() {
assert_eq!(ShaderParameter { assert_eq!(ShaderParameter {
id: "HSM_CORE_RES_SAMPLING_MULT_SCANLINE_DIR".to_string(), id: "HSM_CORE_RES_SAMPLING_MULT_SCANLINE_DIR".into(),
description: " Scanline Dir Multiplier".to_string(), description: " Scanline Dir Multiplier".to_string(),
initial: 100.0, initial: 100.0,
minimum: 25.0, minimum: 25.0,

View file

@ -117,7 +117,7 @@ pub fn resolve_values(mut values: Vec<Value>) -> ShaderPreset {
id, id,
name, name,
alias: shader_values.iter().find_map(|f| match f { alias: shader_values.iter().find_map(|f| match f {
Value::Alias(_, value) => Some(value.to_string()), Value::Alias(_, value) => Some(value.clone()),
_ => None, _ => None,
}), }),
filter: shader_values filter: shader_values

View file

@ -10,7 +10,7 @@ use nom::IResult;
use num_traits::cast::ToPrimitive; use num_traits::cast::ToPrimitive;
use crate::parse::token::do_lex; use crate::parse::token::do_lex;
use librashader_common::map::FastHashMap; use librashader_common::map::{FastHashMap, ShortString};
use librashader_common::{FilterMode, WrapMode}; use librashader_common::{FilterMode, WrapMode};
use std::fs::File; use std::fs::File;
use std::io::Read; use std::io::Read;
@ -37,10 +37,10 @@ pub enum Value {
FloatFramebuffer(i32, bool), FloatFramebuffer(i32, bool),
SrgbFramebuffer(i32, bool), SrgbFramebuffer(i32, bool),
MipmapInput(i32, bool), MipmapInput(i32, bool),
Alias(i32, String), Alias(i32, ShortString),
Parameter(String, f32), Parameter(ShortString, f32),
Texture { Texture {
name: String, name: ShortString,
filter_mode: FilterMode, filter_mode: FilterMode,
wrap_mode: WrapMode, wrap_mode: WrapMode,
mipmap: bool, mipmap: bool,
@ -389,7 +389,7 @@ pub fn parse_values(
.map_or(None, |(_, v)| Some(FilterMode::from_str(&v.value).unwrap())); .map_or(None, |(_, v)| Some(FilterMode::from_str(&v.value).unwrap()));
values.push(Value::Texture { values.push(Value::Texture {
name: texture.to_string(), name: ShortString::from(*texture.fragment()),
filter_mode: filter.unwrap_or(if linear { filter_mode: filter.unwrap_or(if linear {
FilterMode::Linear FilterMode::Linear
} else { } else {
@ -412,7 +412,7 @@ pub fn parse_values(
// params (god help me), it would be pretty bad because we lose texture path fallback. // params (god help me), it would be pretty bad because we lose texture path fallback.
.unwrap_or(0.0); .unwrap_or(0.0);
values.push(Value::Parameter( values.push(Value::Parameter(
token.key.fragment().to_string(), ShortString::from(*token.key.fragment()),
param_val, param_val,
)); ));
continue; continue;
@ -493,7 +493,10 @@ pub fn parse_values(
} }
if let Ok((_, idx)) = parse_indexed_key("alias", token.key) { if let Ok((_, idx)) = parse_indexed_key("alias", token.key) {
values.push(Value::Alias(idx, token.value.to_string())); values.push(Value::Alias(
idx,
ShortString::from(*token.value.fragment()),
));
continue; continue;
} }
if let Ok((_, idx)) = parse_indexed_key("scale_type", token.key) { if let Ok((_, idx)) = parse_indexed_key("scale_type", token.key) {
@ -556,7 +559,7 @@ pub fn parse_values(
// handle undeclared parameters after parsing everything else as a last resort. // handle undeclared parameters after parsing everything else as a last resort.
if let Ok(param_val) = from_float(token.value) { if let Ok(param_val) = from_float(token.value) {
values.push(Value::Parameter( values.push(Value::Parameter(
token.key.fragment().to_string(), ShortString::from(*token.key.fragment()),
param_val, param_val,
)); ));
} }
@ -605,7 +608,7 @@ pub fn parse_values(
}); });
values.push(Value::Texture { values.push(Value::Texture {
name: texture.to_string(), name: ShortString::from(*texture.fragment()),
filter_mode: if linear { filter_mode: if linear {
FilterMode::Linear FilterMode::Linear
} else { } else {

View file

@ -1,4 +1,5 @@
use crate::error::ParsePresetError; use crate::error::ParsePresetError;
use librashader_common::map::ShortString;
use librashader_common::{FilterMode, ImageFormat, WrapMode}; use librashader_common::{FilterMode, ImageFormat, WrapMode};
use std::ops::Mul; use std::ops::Mul;
use std::path::PathBuf; use std::path::PathBuf;
@ -12,7 +13,7 @@ pub struct ShaderPassConfig {
/// The fully qualified path to the shader pass source file. /// The fully qualified path to the shader pass source file.
pub name: PathBuf, pub name: PathBuf,
/// The alias of the shader pass if available. /// The alias of the shader pass if available.
pub alias: Option<String>, pub alias: Option<ShortString>,
/// The filtering mode that this shader pass should expect. /// The filtering mode that this shader pass should expect.
pub filter: FilterMode, pub filter: FilterMode,
/// The texture addressing (wrap) mode that this shader pass expects. /// The texture addressing (wrap) mode that this shader pass expects.
@ -151,7 +152,7 @@ pub struct Scale2D {
#[derive(Debug, Clone)] #[derive(Debug, Clone)]
pub struct TextureConfig { pub struct TextureConfig {
/// The name of the texture. /// The name of the texture.
pub name: String, pub name: ShortString,
/// The fully qualified path to the texture. /// The fully qualified path to the texture.
pub path: PathBuf, pub path: PathBuf,
/// The wrap (addressing) mode to use when sampling the texture. /// The wrap (addressing) mode to use when sampling the texture.
@ -166,7 +167,7 @@ pub struct TextureConfig {
#[derive(Debug, Clone)] #[derive(Debug, Clone)]
pub struct ParameterConfig { pub struct ParameterConfig {
/// The name of the parameter. /// The name of the parameter.
pub name: String, pub name: ShortString,
/// The value it is set to in the preset. /// The value it is set to in the preset.
pub value: f32, pub value: f32,
} }

View file

@ -36,7 +36,7 @@ mod test {
use crate::reflect::semantics::{Semantic, ShaderSemantics, UniformSemantic, UniqueSemantics}; use crate::reflect::semantics::{Semantic, ShaderSemantics, UniformSemantic, UniqueSemantics};
use crate::reflect::ReflectShader; use crate::reflect::ReflectShader;
use bitflags::Flags; use bitflags::Flags;
use librashader_common::map::FastHashMap; use librashader_common::map::{FastHashMap, ShortString};
use librashader_preprocess::ShaderSource; use librashader_preprocess::ShaderSource;
#[test] #[test]
@ -45,7 +45,7 @@ mod test {
// let result = ShaderSource::load("../test/shaders_slang/crt/shaders/crt-royale/src/crt-royale-scanlines-horizontal-apply-mask.slang").unwrap(); // let result = ShaderSource::load("../test/shaders_slang/crt/shaders/crt-royale/src/crt-royale-scanlines-horizontal-apply-mask.slang").unwrap();
let result = ShaderSource::load("../test/basic.slang").unwrap(); let result = ShaderSource::load("../test/basic.slang").unwrap();
let mut uniform_semantics: FastHashMap<String, UniformSemantic> = Default::default(); let mut uniform_semantics: FastHashMap<ShortString, UniformSemantic> = Default::default();
for (_index, param) in result.parameters.iter().enumerate() { for (_index, param) in result.parameters.iter().enumerate() {
uniform_semantics.insert( uniform_semantics.insert(

View file

@ -19,11 +19,11 @@ use crate::reflect::{align_uniform_size, ReflectShader};
use std::fmt::Debug; use std::fmt::Debug;
use std::ops::Deref; use std::ops::Deref;
use crate::reflect::helper::{SemanticErrorBlame, TextureData, UboData};
use librashader_common::map::ShortString;
use spirv_cross::spirv::{Ast, Decoration, Module, Resource, ShaderResources, Type}; use spirv_cross::spirv::{Ast, Decoration, Module, Resource, ShaderResources, Type};
use spirv_cross::ErrorCode; use spirv_cross::ErrorCode;
use crate::reflect::helper::{SemanticErrorBlame, TextureData, UboData};
/// Reflect shaders under SPIRV-Cross semantics. /// Reflect shaders under SPIRV-Cross semantics.
/// ///
/// SPIRV-Cross supports GLSL, HLSL, SPIR-V, and MSL targets. /// SPIRV-Cross supports GLSL, HLSL, SPIR-V, and MSL targets.
@ -342,7 +342,7 @@ where
match &parameter.semantics { match &parameter.semantics {
UniqueSemantics::FloatParameter => { UniqueSemantics::FloatParameter => {
let offset = range.offset; let offset = range.offset;
if let Some(meta) = meta.parameter_meta.get_mut(&name) { if let Some(meta) = meta.parameter_meta.get_mut::<str>(&name.as_ref()) {
if let Some(expected) = meta.offset.offset(offset_type) if let Some(expected) = meta.offset.offset(offset_type)
&& expected != offset && expected != offset
{ {
@ -365,6 +365,7 @@ where
*meta.offset.offset_mut(offset_type) = Some(offset); *meta.offset.offset_mut(offset_type) = Some(offset);
} else { } else {
let name = ShortString::from(name);
meta.parameter_meta.insert( meta.parameter_meta.insert(
name.clone(), name.clone(),
VariableMeta { VariableMeta {
@ -403,7 +404,7 @@ where
meta.unique_meta.insert( meta.unique_meta.insert(
*semantics, *semantics,
VariableMeta { VariableMeta {
id: name, id: name.into(),
offset: MemberOffset::new(offset, offset_type), offset: MemberOffset::new(offset, offset_type),
size: typeinfo.size * typeinfo.columns, size: typeinfo.size * typeinfo.columns,
}, },
@ -454,7 +455,7 @@ where
SemanticErrorBlame::Vertex => BindingStage::VERTEX, SemanticErrorBlame::Vertex => BindingStage::VERTEX,
SemanticErrorBlame::Fragment => BindingStage::FRAGMENT, SemanticErrorBlame::Fragment => BindingStage::FRAGMENT,
}, },
id: name, id: ShortString::from(name),
}, },
); );
} }
@ -753,7 +754,7 @@ mod test {
use crate::back::{CompileShader, ShaderCompilerOutput}; use crate::back::{CompileShader, ShaderCompilerOutput};
use crate::front::{Glslang, ShaderInputCompiler}; use crate::front::{Glslang, ShaderInputCompiler};
use crate::reflect::semantics::{Semantic, ShaderSemantics, UniformSemantic, UniqueSemantics}; use crate::reflect::semantics::{Semantic, ShaderSemantics, UniformSemantic, UniqueSemantics};
use librashader_common::map::FastHashMap; use librashader_common::map::{FastHashMap, ShortString};
use librashader_preprocess::ShaderSource; use librashader_preprocess::ShaderSource;
use spirv_cross::glsl::{CompilerOptions, Version}; use spirv_cross::glsl::{CompilerOptions, Version};
use spirv_cross::hlsl::ShaderModel; use spirv_cross::hlsl::ShaderModel;
@ -762,7 +763,7 @@ mod test {
#[test] #[test]
pub fn test_into() { pub fn test_into() {
let result = ShaderSource::load("../test/basic.slang").unwrap(); let result = ShaderSource::load("../test/basic.slang").unwrap();
let mut uniform_semantics: FastHashMap<String, UniformSemantic> = Default::default(); let mut uniform_semantics: FastHashMap<ShortString, UniformSemantic> = Default::default();
for (_index, param) in result.parameters.iter().enumerate() { for (_index, param) in result.parameters.iter().enumerate() {
uniform_semantics.insert( uniform_semantics.insert(

View file

@ -110,7 +110,7 @@ mod test {
use crate::reflect::semantics::{Semantic, ShaderSemantics, UniformSemantic, UniqueSemantics}; use crate::reflect::semantics::{Semantic, ShaderSemantics, UniformSemantic, UniqueSemantics};
use crate::reflect::ReflectShader; use crate::reflect::ReflectShader;
use bitflags::Flags; use bitflags::Flags;
use librashader_common::map::FastHashMap; use librashader_common::map::{FastHashMap, ShortString};
use librashader_preprocess::ShaderSource; use librashader_preprocess::ShaderSource;
use rustc_hash::FxHashMap; use rustc_hash::FxHashMap;
use spirv_cross::msl; use spirv_cross::msl;
@ -122,7 +122,7 @@ mod test {
// let result = ShaderSource::load("../test/shaders_slang/crt/shaders/crt-royale/src/crt-royale-scanlines-horizontal-apply-mask.slang").unwrap(); // let result = ShaderSource::load("../test/shaders_slang/crt/shaders/crt-royale/src/crt-royale-scanlines-horizontal-apply-mask.slang").unwrap();
let result = ShaderSource::load("../test/basic.slang").unwrap(); let result = ShaderSource::load("../test/basic.slang").unwrap();
let mut uniform_semantics: FastHashMap<String, UniformSemantic> = Default::default(); let mut uniform_semantics: FastHashMap<ShortString, UniformSemantic> = Default::default();
for (_index, param) in result.parameters.iter().enumerate() { for (_index, param) in result.parameters.iter().enumerate() {
uniform_semantics.insert( uniform_semantics.insert(

View file

@ -10,16 +10,8 @@ pub mod wgsl;
use crate::error::{SemanticsErrorKind, ShaderReflectError}; use crate::error::{SemanticsErrorKind, ShaderReflectError};
use std::fmt::Debug; use std::fmt::Debug;
use crate::front::SpirvCompilation;
use naga::{
AddressSpace, Binding, Expression, GlobalVariable, Handle, ImageClass, Module, ResourceBinding,
Scalar, ScalarKind, StructMember, TypeInner, VectorSize,
};
use rspirv::binary::Assemble;
use rspirv::dr::Builder;
use rustc_hash::FxHashSet;
use crate::front::spirv_passes::lower_samplers; use crate::front::spirv_passes::lower_samplers;
use crate::front::SpirvCompilation;
use crate::reflect::helper::{SemanticErrorBlame, TextureData, UboData}; use crate::reflect::helper::{SemanticErrorBlame, TextureData, UboData};
use crate::reflect::semantics::{ use crate::reflect::semantics::{
BindingMeta, BindingStage, BufferReflection, MemberOffset, ShaderSemantics, TextureBinding, BindingMeta, BindingStage, BufferReflection, MemberOffset, ShaderSemantics, TextureBinding,
@ -28,6 +20,14 @@ use crate::reflect::semantics::{
MAX_PUSH_BUFFER_SIZE, MAX_PUSH_BUFFER_SIZE,
}; };
use crate::reflect::{align_uniform_size, ReflectShader, ShaderReflection}; use crate::reflect::{align_uniform_size, ReflectShader, ShaderReflection};
use librashader_common::map::ShortString;
use naga::{
AddressSpace, Binding, Expression, GlobalVariable, Handle, ImageClass, Module, ResourceBinding,
Scalar, ScalarKind, StructMember, TypeInner, VectorSize,
};
use rspirv::binary::Assemble;
use rspirv::dr::Builder;
use rustc_hash::FxHashSet;
/// Reflect under Naga semantics /// Reflect under Naga semantics
/// ///
@ -678,7 +678,7 @@ impl NagaReflect {
match &parameter.semantics { match &parameter.semantics {
UniqueSemantics::FloatParameter => { UniqueSemantics::FloatParameter => {
let offset = member.offset; let offset = member.offset;
if let Some(meta) = meta.parameter_meta.get_mut(&name) { if let Some(meta) = meta.parameter_meta.get_mut::<str>(name.as_ref()) {
if let Some(expected) = meta.offset.offset(offset_type) if let Some(expected) = meta.offset.offset(offset_type)
&& expected != offset as usize && expected != offset as usize
{ {
@ -701,6 +701,7 @@ impl NagaReflect {
*meta.offset.offset_mut(offset_type) = Some(offset as usize); *meta.offset.offset_mut(offset_type) = Some(offset as usize);
} else { } else {
let name = ShortString::from(name);
meta.parameter_meta.insert( meta.parameter_meta.insert(
name.clone(), name.clone(),
VariableMeta { VariableMeta {
@ -739,7 +740,7 @@ impl NagaReflect {
meta.unique_meta.insert( meta.unique_meta.insert(
*semantics, *semantics,
VariableMeta { VariableMeta {
id: name, id: ShortString::from(name),
offset: MemberOffset::new(offset as usize, offset_type), offset: MemberOffset::new(offset as usize, offset_type),
size: typeinfo.size * typeinfo.columns, size: typeinfo.size * typeinfo.columns,
}, },
@ -790,7 +791,7 @@ impl NagaReflect {
SemanticErrorBlame::Vertex => BindingStage::VERTEX, SemanticErrorBlame::Vertex => BindingStage::VERTEX,
SemanticErrorBlame::Fragment => BindingStage::FRAGMENT, SemanticErrorBlame::Fragment => BindingStage::FRAGMENT,
}, },
id: name, id: ShortString::from(name),
}, },
); );
} }

View file

@ -166,7 +166,7 @@ mod test {
use crate::reflect::semantics::{Semantic, ShaderSemantics, UniformSemantic, UniqueSemantics}; use crate::reflect::semantics::{Semantic, ShaderSemantics, UniformSemantic, UniqueSemantics};
use crate::reflect::ReflectShader; use crate::reflect::ReflectShader;
use bitflags::Flags; use bitflags::Flags;
use librashader_common::map::FastHashMap; use librashader_common::map::{FastHashMap, ShortString};
use librashader_preprocess::ShaderSource; use librashader_preprocess::ShaderSource;
use spirv_cross::msl; use spirv_cross::msl;
@ -174,7 +174,7 @@ mod test {
pub fn test_into() { pub fn test_into() {
let result = ShaderSource::load("../test/basic.slang").unwrap(); let result = ShaderSource::load("../test/basic.slang").unwrap();
let mut uniform_semantics: FastHashMap<String, UniformSemantic> = Default::default(); let mut uniform_semantics: FastHashMap<ShortString, UniformSemantic> = Default::default();
for (_index, param) in result.parameters.iter().enumerate() { for (_index, param) in result.parameters.iter().enumerate() {
uniform_semantics.insert( uniform_semantics.insert(

View file

@ -5,7 +5,7 @@ use crate::front::{ShaderInputCompiler, ShaderReflectObject};
use crate::reflect::semantics::{ use crate::reflect::semantics::{
Semantic, ShaderSemantics, TextureSemantics, UniformSemantic, UniqueSemantics, Semantic, ShaderSemantics, TextureSemantics, UniformSemantic, UniqueSemantics,
}; };
use librashader_common::map::FastHashMap; use librashader_common::map::{FastHashMap, ShortString};
use librashader_preprocess::{PreprocessError, ShaderSource}; use librashader_preprocess::{PreprocessError, ShaderSource};
use librashader_presets::{ShaderPassConfig, TextureConfig}; use librashader_presets::{ShaderPassConfig, TextureConfig};
@ -80,8 +80,9 @@ where
E: From<ShaderReflectError>, E: From<ShaderReflectError>,
E: From<ShaderCompileError>, E: From<ShaderCompileError>,
{ {
let mut uniform_semantics: FastHashMap<String, UniformSemantic> = Default::default(); let mut uniform_semantics: FastHashMap<ShortString, UniformSemantic> = Default::default();
let mut texture_semantics: FastHashMap<String, Semantic<TextureSemantics>> = Default::default(); let mut texture_semantics: FastHashMap<ShortString, Semantic<TextureSemantics>> =
Default::default();
let passes = passes let passes = passes
.into_iter() .into_iter()
@ -119,8 +120,8 @@ where
/// Insert the available semantics for the input pass config into the provided semantic maps. /// Insert the available semantics for the input pass config into the provided semantic maps.
fn insert_pass_semantics( fn insert_pass_semantics(
uniform_semantics: &mut FastHashMap<String, UniformSemantic>, uniform_semantics: &mut FastHashMap<ShortString, UniformSemantic>,
texture_semantics: &mut FastHashMap<String, Semantic<TextureSemantics>>, texture_semantics: &mut FastHashMap<ShortString, Semantic<TextureSemantics>>,
config: &ShaderPassConfig, config: &ShaderPassConfig,
) { ) {
let Some(alias) = &config.alias else { let Some(alias) = &config.alias else {
@ -142,24 +143,32 @@ fn insert_pass_semantics(
index, index,
}, },
); );
let mut alias_size = alias.clone();
alias_size.push_str("Size");
uniform_semantics.insert( uniform_semantics.insert(
format!("{alias}Size"), alias_size,
UniformSemantic::Texture(Semantic { UniformSemantic::Texture(Semantic {
semantics: TextureSemantics::PassOutput, semantics: TextureSemantics::PassOutput,
index, index,
}), }),
); );
let mut alias_feedback = alias.clone();
alias_feedback.push_str("Feedback");
// PassFeedback // PassFeedback
texture_semantics.insert( texture_semantics.insert(
format!("{alias}Feedback"), alias_feedback,
Semantic { Semantic {
semantics: TextureSemantics::PassFeedback, semantics: TextureSemantics::PassFeedback,
index, index,
}, },
); );
let mut alias_feedback_size = alias.clone();
alias_feedback_size.push_str("FeedbackSize");
uniform_semantics.insert( uniform_semantics.insert(
format!("{alias}FeedbackSize"), alias_feedback_size,
UniformSemantic::Texture(Semantic { UniformSemantic::Texture(Semantic {
semantics: TextureSemantics::PassFeedback, semantics: TextureSemantics::PassFeedback,
index, index,
@ -170,10 +179,13 @@ fn insert_pass_semantics(
/// Insert the available semantics for the input texture config into the provided semantic maps. /// Insert the available semantics for the input texture config into the provided semantic maps.
fn insert_lut_semantics( fn insert_lut_semantics(
textures: &[TextureConfig], textures: &[TextureConfig],
uniform_semantics: &mut FastHashMap<String, UniformSemantic>, uniform_semantics: &mut FastHashMap<ShortString, UniformSemantic>,
texture_semantics: &mut FastHashMap<String, Semantic<TextureSemantics>>, texture_semantics: &mut FastHashMap<ShortString, Semantic<TextureSemantics>>,
) { ) {
for (index, texture) in textures.iter().enumerate() { for (index, texture) in textures.iter().enumerate() {
let mut size_semantic = texture.name.clone();
size_semantic.push_str("Size");
texture_semantics.insert( texture_semantics.insert(
texture.name.clone(), texture.name.clone(),
Semantic { Semantic {
@ -183,7 +195,7 @@ fn insert_lut_semantics(
); );
uniform_semantics.insert( uniform_semantics.insert(
format!("{}Size", texture.name), size_semantic,
UniformSemantic::Texture(Semantic { UniformSemantic::Texture(Semantic {
semantics: TextureSemantics::User, semantics: TextureSemantics::User,
index, index,

View file

@ -1,5 +1,5 @@
use bitflags::bitflags; use bitflags::bitflags;
use librashader_common::map::FastHashMap; use librashader_common::map::{FastHashMap, ShortString};
use std::str::FromStr; use std::str::FromStr;
/// The maximum number of bindings allowed in a shader. /// The maximum number of bindings allowed in a shader.
@ -255,7 +255,7 @@ pub struct VariableMeta {
/// The size of the uniform. /// The size of the uniform.
pub size: u32, pub size: u32,
/// The name of the uniform. /// The name of the uniform.
pub id: String, pub id: ShortString,
} }
/// Reflection information about a texture size uniform variable. /// Reflection information about a texture size uniform variable.
@ -267,7 +267,7 @@ pub struct TextureSizeMeta {
/// The mask indicating for which stages the texture size uniform should be bound. /// The mask indicating for which stages the texture size uniform should be bound.
pub stage_mask: BindingStage, pub stage_mask: BindingStage,
/// The name of the uniform. /// The name of the uniform.
pub id: String, pub id: ShortString,
} }
/// Reflection information about texture samplers. /// Reflection information about texture samplers.
@ -321,7 +321,7 @@ pub trait TextureSemanticMap {
fn get_texture_semantic(&self, name: &str) -> Option<Semantic<TextureSemantics>>; fn get_texture_semantic(&self, name: &str) -> Option<Semantic<TextureSemantics>>;
} }
impl TextureSemanticMap for FastHashMap<String, UniformSemantic> { impl TextureSemanticMap for FastHashMap<ShortString, UniformSemantic> {
fn get_texture_semantic(&self, name: &str) -> Option<Semantic<TextureSemantics>> { fn get_texture_semantic(&self, name: &str) -> Option<Semantic<TextureSemantics>> {
match self.get(name) { match self.get(name) {
None => { None => {
@ -353,7 +353,7 @@ impl TextureSemanticMap for FastHashMap<String, UniformSemantic> {
} }
} }
impl TextureSemanticMap for FastHashMap<String, Semantic<TextureSemantics>> { impl TextureSemanticMap for FastHashMap<ShortString, Semantic<TextureSemantics>> {
fn get_texture_semantic(&self, name: &str) -> Option<Semantic<TextureSemantics>> { fn get_texture_semantic(&self, name: &str) -> Option<Semantic<TextureSemantics>> {
match self.get(name) { match self.get(name) {
None => { None => {
@ -390,7 +390,7 @@ pub trait UniqueSemanticMap {
fn get_unique_semantic(&self, name: &str) -> Option<Semantic<UniqueSemantics, ()>>; fn get_unique_semantic(&self, name: &str) -> Option<Semantic<UniqueSemantics, ()>>;
} }
impl UniqueSemanticMap for FastHashMap<String, UniformSemantic> { impl UniqueSemanticMap for FastHashMap<ShortString, UniformSemantic> {
fn get_unique_semantic(&self, name: &str) -> Option<Semantic<UniqueSemantics, ()>> { fn get_unique_semantic(&self, name: &str) -> Option<Semantic<UniqueSemantics, ()>> {
match self.get(name) { match self.get(name) {
// existing uniforms in the semantic map have priority // existing uniforms in the semantic map have priority
@ -448,9 +448,9 @@ pub enum UniformSemantic {
#[derive(Debug, Clone)] #[derive(Debug, Clone)]
pub struct ShaderSemantics { pub struct ShaderSemantics {
/// A map of uniform names to filter chain semantics. /// A map of uniform names to filter chain semantics.
pub uniform_semantics: FastHashMap<String, UniformSemantic>, pub uniform_semantics: FastHashMap<ShortString, UniformSemantic>,
/// A map of texture names to filter chain semantics. /// A map of texture names to filter chain semantics.
pub texture_semantics: FastHashMap<String, Semantic<TextureSemantics>>, pub texture_semantics: FastHashMap<ShortString, Semantic<TextureSemantics>>,
} }
/// The binding of a uniform after the shader has been linked. /// The binding of a uniform after the shader has been linked.
@ -460,7 +460,7 @@ pub struct ShaderSemantics {
#[derive(Debug, Clone, Eq, Hash, PartialEq)] #[derive(Debug, Clone, Eq, Hash, PartialEq)]
pub enum UniformBinding { pub enum UniformBinding {
/// A user parameter (`float`) binding. /// A user parameter (`float`) binding.
Parameter(String), Parameter(ShortString),
/// A known semantic binding. /// A known semantic binding.
SemanticVariable(UniqueSemantics), SemanticVariable(UniqueSemantics),
/// A texture size (`float4`) binding. /// A texture size (`float4`) binding.
@ -483,7 +483,7 @@ impl From<Semantic<TextureSemantics>> for UniformBinding {
#[derive(Debug, Default)] #[derive(Debug, Default)]
pub struct BindingMeta { pub struct BindingMeta {
/// A map of parameter names to uniform binding metadata. /// A map of parameter names to uniform binding metadata.
pub parameter_meta: FastHashMap<String, VariableMeta>, pub parameter_meta: FastHashMap<ShortString, VariableMeta>,
/// A map of unique semantics to uniform binding metadata. /// A map of unique semantics to uniform binding metadata.
pub unique_meta: FastHashMap<UniqueSemantics, VariableMeta>, pub unique_meta: FastHashMap<UniqueSemantics, VariableMeta>,
/// A map of texture semantics to texture binding points. /// A map of texture semantics to texture binding points.

View file

@ -1,6 +1,6 @@
use crate::parameters::RuntimeParameters; use crate::parameters::RuntimeParameters;
use crate::uniforms::{BindUniform, NoUniformBinder, UniformStorage}; use crate::uniforms::{BindUniform, NoUniformBinder, UniformStorage};
use librashader_common::map::FastHashMap; use librashader_common::map::{FastHashMap, ShortString};
use librashader_common::Size; use librashader_common::Size;
use librashader_preprocess::ShaderParameter; use librashader_preprocess::ShaderParameter;
use librashader_reflect::reflect::semantics::{ use librashader_reflect::reflect::semantics::{
@ -120,7 +120,7 @@ where
pass_feedback: impl Iterator<Item = Option<impl AsRef<Self::InputTexture>>>, pass_feedback: impl Iterator<Item = Option<impl AsRef<Self::InputTexture>>>,
original_history: impl Iterator<Item = Option<impl AsRef<Self::InputTexture>>>, original_history: impl Iterator<Item = Option<impl AsRef<Self::InputTexture>>>,
lookup_textures: impl Iterator<Item = (usize, impl AsRef<Self::InputTexture>)>, lookup_textures: impl Iterator<Item = (usize, impl AsRef<Self::InputTexture>)>,
parameter_defaults: &FastHashMap<String, ShaderParameter>, parameter_defaults: &FastHashMap<ShortString, ShaderParameter>,
runtime_parameters: &RuntimeParameters, runtime_parameters: &RuntimeParameters,
) { ) {
let runtime_parameters = runtime_parameters.parameters.load(); let runtime_parameters = runtime_parameters.parameters.load();

View file

@ -1,6 +1,5 @@
use std::ops::Deref;
use arc_swap::ArcSwap; use arc_swap::ArcSwap;
use librashader_common::map::FastHashMap; use librashader_common::map::{FastHashMap, ShortString};
use librashader_presets::ParameterConfig; use librashader_presets::ParameterConfig;
use std::sync::atomic::{AtomicUsize, Ordering}; use std::sync::atomic::{AtomicUsize, Ordering};
use std::sync::Arc; use std::sync::Arc;
@ -17,7 +16,7 @@ pub trait FilterChainParameters {
/// any thread. /// any thread.
pub struct RuntimeParameters { pub struct RuntimeParameters {
passes_enabled: AtomicUsize, passes_enabled: AtomicUsize,
pub(crate) parameters: ArcSwap<FastHashMap<String, f32>>, pub(crate) parameters: ArcSwap<FastHashMap<ShortString, f32>>,
} }
impl RuntimeParameters { impl RuntimeParameters {
@ -59,7 +58,7 @@ impl RuntimeParameters {
} }
/// Get a reference to the runtime parameters. /// Get a reference to the runtime parameters.
pub fn parameters(&self) -> Arc<FastHashMap<String, f32>> { pub fn parameters(&self) -> Arc<FastHashMap<ShortString, f32>> {
self.parameters.load_full() self.parameters.load_full()
} }