From 7227f8d169cbdab292c348c0bb7c57ad869d642f Mon Sep 17 00:00:00 2001 From: Benjamin Hansen Date: Mon, 30 Jan 2023 11:09:26 -0700 Subject: [PATCH 1/4] changes for 0.15 --- Cargo.lock | 728 +++--------------- Cargo.toml | 2 +- code/beginner/tutorial1-window/Cargo.toml | 4 +- code/beginner/tutorial2-surface/Cargo.toml | 4 +- .../tutorial2-surface/src/challenge.rs | 23 +- code/beginner/tutorial2-surface/src/lib.rs | 25 +- code/beginner/tutorial3-pipeline/Cargo.toml | 4 +- .../tutorial3-pipeline/src/challenge.rs | 23 +- code/beginner/tutorial3-pipeline/src/lib.rs | 23 +- code/beginner/tutorial4-buffer/Cargo.toml | 4 +- .../tutorial4-buffer/src/challenge.rs | 23 +- code/beginner/tutorial4-buffer/src/lib.rs | 23 +- code/beginner/tutorial5-textures/Cargo.toml | 4 +- .../tutorial5-textures/src/challenge.rs | 23 +- code/beginner/tutorial5-textures/src/lib.rs | 23 +- .../tutorial5-textures/src/texture.rs | 4 +- code/beginner/tutorial6-uniforms/Cargo.toml | 4 +- .../tutorial6-uniforms/src/challenge.rs | 23 +- code/beginner/tutorial6-uniforms/src/lib.rs | 23 +- .../tutorial6-uniforms/src/texture.rs | 4 +- code/beginner/tutorial7-instancing/Cargo.toml | 4 +- .../tutorial7-instancing/src/challenge.rs | 23 +- code/beginner/tutorial7-instancing/src/lib.rs | 23 +- .../tutorial7-instancing/src/texture.rs | 4 +- code/beginner/tutorial8-depth/Cargo.toml | 4 +- .../beginner/tutorial8-depth/src/challenge.rs | 23 +- code/beginner/tutorial8-depth/src/lib.rs | 23 +- code/beginner/tutorial8-depth/src/texture.rs | 6 +- code/beginner/tutorial9-models/Cargo.toml | 4 +- code/beginner/tutorial9-models/src/lib.rs | 23 +- code/beginner/tutorial9-models/src/texture.rs | 5 +- .../tutorial10-lighting/Cargo.toml | 4 +- .../tutorial10-lighting/src/lib.rs | 23 +- .../tutorial10-lighting/src/texture.rs | 5 +- .../tutorial11-normals/Cargo.toml | 4 +- .../tutorial11-normals/src/lib.rs | 23 +- .../tutorial11-normals/src/texture.rs | 13 +- .../intermediate/tutorial12-camera/Cargo.toml | 4 +- .../intermediate/tutorial12-camera/src/lib.rs | 23 +- .../tutorial12-camera/src/texture.rs | 13 +- .../tutorial13-terrain/Cargo.toml | 4 +- .../tutorial13-terrain/src/lib.rs | 33 +- .../tutorial13-terrain/src/terrain.rs | 5 +- .../tutorial13-terrain/src/terrain.wgsl | 4 +- .../tutorial13-terrain/src/texture.rs | 13 +- code/showcase/compute/Cargo.toml | 2 +- code/showcase/compute/src/main.rs | 23 +- code/showcase/compute/src/texture.rs | 13 +- code/showcase/framework/Cargo.toml | 2 +- code/showcase/framework/src/lib.rs | 23 +- code/showcase/framework/src/texture.rs | 13 +- code/showcase/gifs/Cargo.toml | 2 +- code/showcase/gifs/src/main.rs | 6 +- code/showcase/imgui-demo/Cargo.toml | 2 +- code/showcase/lost-window/Cargo.toml | 2 +- code/showcase/lost-window/src/main.rs | 7 +- code/showcase/mouse-picking/Cargo.toml | 4 +- code/showcase/mouse-picking/src/lib.rs | 23 +- code/showcase/mouse-picking/src/texture.rs | 13 +- code/showcase/pong/Cargo.toml | 6 +- code/showcase/pong/src/render/mod.rs | 23 +- code/showcase/threading/Cargo.toml | 4 +- code/showcase/threading/src/lib.rs | 23 +- code/showcase/threading/src/texture.rs | 13 +- code/showcase/windowless/Cargo.toml | 2 +- code/showcase/windowless/src/main.rs | 6 +- docs/beginner/tutorial1-window/README.md | 4 +- docs/beginner/tutorial2-surface/README.md | 33 +- docs/beginner/tutorial5-textures/README.md | 2 +- docs/showcase/imgui-demo/README.md | 2 +- docs/showcase/pong/README.md | 4 +- docs/showcase/windowless/README.md | 2 +- 72 files changed, 711 insertions(+), 855 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 3fd598b9..cca2536d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3,21 +3,14 @@ version = 3 [[package]] -name = "ab_glyph" -version = "0.2.19" +name = "addr2line" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5568a4aa5ba8adf5175c5c460b030e27d8893412976cc37bef0e4fbc16cfbba" +checksum = "a76fd60b23679b7d19bd066031410fb7e458ccc5e958eb5c325888ce4baedc97" dependencies = [ - "ab_glyph_rasterizer", - "owned_ttf_parser", + "gimli", ] -[[package]] -name = "ab_glyph_rasterizer" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c71b1793ee61086797f5c80b6efa2b8ffa6d5dd703f118545808a7f2e27f7046" - [[package]] name = "adler" version = "1.0.2" @@ -48,28 +41,6 @@ dependencies = [ name = "alignment" version = "0.1.0" -[[package]] -name = "alsa" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5915f52fe2cf65e83924d037b6c5290b7cee097c6b5c8700746e6168a343fd6b" -dependencies = [ - "alsa-sys", - "bitflags", - "libc", - "nix 0.23.2", -] - -[[package]] -name = "alsa-sys" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db8fee663d06c4e303404ef5f40488a53e062f89ba8bfed81f42325aafad1527" -dependencies = [ - "libc", - "pkg-config", -] - [[package]] name = "android_system_properties" version = "0.1.5" @@ -103,15 +74,6 @@ dependencies = [ "num-traits", ] -[[package]] -name = "approx" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cab112f0a86d568ea0e627cc1d6be74a1e9cd55214684db5561995f6dad897c6" -dependencies = [ - "num-traits", -] - [[package]] name = "arrayref" version = "0.3.6" @@ -132,9 +94,9 @@ checksum = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6" [[package]] name = "ash" -version = "0.37.0+1.3.209" +version = "0.37.2+1.3.238" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "006ca68e0f2b03f22d6fa9f2860f85aed430d257fec20f8879b2145e7c7ae1a6" +checksum = "28bf19c1f0a470be5fbf7522a308a05df06610252c5bcf5143e1b23f629a9a03" dependencies = [ "libloading", ] @@ -253,10 +215,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" [[package]] -name = "base-x" -version = "0.2.11" +name = "backtrace" +version = "0.3.67" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cbbc9d0964165b47557570cce6c952866c2678457aca742aafc9fb771d30270" +checksum = "233d376d6d185f2a3093e58f283f60f880315b6c60075b01f36b3b85154564ca" +dependencies = [ + "addr2line", + "cc", + "cfg-if", + "libc", + "miniz_oxide 0.6.2", + "object", + "rustc-demangle", +] [[package]] name = "base64" @@ -274,26 +245,6 @@ version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" -[[package]] -name = "bindgen" -version = "0.61.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a022e58a142a46fea340d68012b9201c094e93ec3d033a944a24f8fd4a4f09a" -dependencies = [ - "bitflags", - "cexpr", - "clang-sys", - "lazy_static", - "lazycell", - "peeking_take_while", - "proc-macro2", - "quote", - "regex", - "rustc-hash", - "shlex", - "syn", -] - [[package]] name = "bit-set" version = "0.5.3" @@ -392,7 +343,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a22a6a8f622f797120d452c630b0ab12e1331a1a753e2039ce7868d4ac77b4ee" dependencies = [ "log", - "nix 0.24.2", + "nix", "slotmap", "thiserror", "vec_map", @@ -414,24 +365,6 @@ name = "cc" version = "1.0.73" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11" -dependencies = [ - "jobserver", -] - -[[package]] -name = "cesu8" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" - -[[package]] -name = "cexpr" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" -dependencies = [ - "nom", -] [[package]] name = "cfg-if" @@ -439,19 +372,13 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" -[[package]] -name = "cfg_aliases" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e" - [[package]] name = "cgmath" version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1a98d30140e3296250832bbaaff83b27dcd6fa3cc70fb6f1f3e5c9c0023b5317" dependencies = [ - "approx 0.4.0", + "approx", "num-traits", ] @@ -467,17 +394,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "clang-sys" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa2e27ae6ab525c3d369ded447057bca5438d86dc3a68f6faafb8269ba82ebf3" -dependencies = [ - "glob", - "libc", - "libloading", -] - [[package]] name = "cmake" version = "0.1.48" @@ -535,14 +451,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" [[package]] -name = "combine" -version = "4.6.6" +name = "com-rs" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35ed6e9d84f0b51a7f52daf1c7d71dd136fd7a3f41a8462b8cdb8c78d920fad4" -dependencies = [ - "bytes", - "memchr", -] +checksum = "bf43edc576402991846b093a7ca18a3477e0ef9c588cde84964b5d3e43016642" [[package]] name = "compute" @@ -646,50 +558,6 @@ dependencies = [ "libc", ] -[[package]] -name = "coreaudio-rs" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11894b20ebfe1ff903cbdc52259693389eea03b94918a2def2c30c3bf227ad88" -dependencies = [ - "bitflags", - "coreaudio-sys", -] - -[[package]] -name = "coreaudio-sys" -version = "0.2.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a9444b94b8024feecc29e01a9706c69c1e26bfee480221c90764200cfd778fb" -dependencies = [ - "bindgen", -] - -[[package]] -name = "cpal" -version = "0.14.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f342c1b63e185e9953584ff2199726bf53850d96610a310e3aca09e9405a2d0b" -dependencies = [ - "alsa", - "core-foundation-sys", - "coreaudio-rs", - "jni", - "js-sys", - "libc", - "mach", - "ndk 0.7.0", - "ndk-context", - "oboe", - "once_cell", - "parking_lot 0.12.1", - "stdweb", - "thiserror", - "wasm-bindgen", - "web-sys", - "windows", -] - [[package]] name = "crc32fast" version = "1.3.2" @@ -833,9 +701,9 @@ dependencies = [ [[package]] name = "d3d12" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "827914e1f53b1e0e025ecd3d967a7836b7bcb54520f90e21ef8df7b4d88a2759" +checksum = "d8f0de2f5a8e7bd4a9eec0e3c781992a4ce1724f68aec7d7a3715344de8b39da" dependencies = [ "bitflags", "libloading", @@ -883,12 +751,6 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8fb4b71acc1405be2431a93892a79a0d82ed5ba6885649ddbdfc62caa4d67b1c" -[[package]] -name = "discard" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "212d0f5754cb6769937f4501cc0e67f4f4483c8d2c3e1e922ee9edbe4ab4c7c0" - [[package]] name = "dispatch" version = "0.2.0" @@ -1271,6 +1133,12 @@ dependencies = [ "winit", ] +[[package]] +name = "gimli" +version = "0.27.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "221996f774192f0f718773def8201c4ae31f02616a54ccfc2d358bb0e5cefdec" + [[package]] name = "glob" version = "0.3.0" @@ -1291,9 +1159,9 @@ dependencies = [ [[package]] name = "glow" -version = "0.11.2" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8bd5877156a19b8ac83a29b2306fe20537429d318f3ff0a1a2119f8d9c61919" +checksum = "8edf6019dff2d92ad27c1e3ff82ad50a0aea5b01370353cc928bfdc33e95925c" dependencies = [ "js-sys", "slotmap", @@ -1301,45 +1169,6 @@ dependencies = [ "web-sys", ] -[[package]] -name = "glyph_brush" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac02497410cdb5062cc056a33f2e1e19ff69fbf26a4be9a02bf29d6e17ea105b" -dependencies = [ - "glyph_brush_draw_cache", - "glyph_brush_layout", - "log", - "ordered-float", - "rustc-hash", - "twox-hash", -] - -[[package]] -name = "glyph_brush_draw_cache" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6010675390f6889e09a21e2c8b575b3ee25667ea8237a8d59423f73cb8c28610" -dependencies = [ - "ab_glyph", - "crossbeam-channel", - "crossbeam-deque", - "linked-hash-map", - "rayon", - "rustc-hash", -] - -[[package]] -name = "glyph_brush_layout" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc32c2334f00ca5ac3695c5009ae35da21da8c62d255b5b96d56e2597a637a38" -dependencies = [ - "ab_glyph", - "approx 0.5.1", - "xi-unicode", -] - [[package]] name = "gpu-alloc" version = "0.5.3" @@ -1359,6 +1188,19 @@ dependencies = [ "bitflags", ] +[[package]] +name = "gpu-allocator" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "434618454f74b63f9b39328298097256977c41ea0ba9d75a47238b77790b6163" +dependencies = [ + "backtrace", + "log", + "thiserror", + "winapi", + "windows", +] + [[package]] name = "gpu-descriptor" version = "0.2.3" @@ -1416,6 +1258,21 @@ dependencies = [ "ahash", ] +[[package]] +name = "hassle-rs" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90601c6189668c7345fc53842cb3f3a3d872203d523be1b3cb44a36a3e62fb85" +dependencies = [ + "bitflags", + "com-rs", + "libc", + "libloading", + "thiserror", + "widestring", + "winapi", +] + [[package]] name = "heck" version = "0.3.3" @@ -1449,12 +1306,6 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dfa686283ad6dd069f105e5ab091b04c62850d3e4cf5d67debad1933f55023df" -[[package]] -name = "hound" -version = "3.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d13cdbd5dbb29f9c88095bbdc2590c9cba0d0a1269b983fef6b2cdd7e9f4db1" - [[package]] name = "http" version = "0.2.8" @@ -1653,35 +1504,12 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4217ad341ebadf8d8e724e264f13e593e0648f5b3e94b3896a5df283be015ecc" -[[package]] -name = "jni" -version = "0.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6df18c2e3db7e453d3c6ac5b3e9d5182664d28788126d39b91f2d1e22b017ec" -dependencies = [ - "cesu8", - "combine", - "jni-sys", - "log", - "thiserror", - "walkdir", -] - [[package]] name = "jni-sys" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" -[[package]] -name = "jobserver" -version = "0.1.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "068b1ee6743e4d11fb9c6a1e6064b3693a1b600e7f5f5988047d98b3dc9fb90b" -dependencies = [ - "libc", -] - [[package]] name = "jpeg-decoder" version = "0.2.6" @@ -1726,12 +1554,6 @@ version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" -[[package]] -name = "lazycell" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" - [[package]] name = "leb128" version = "0.2.5" @@ -1769,12 +1591,6 @@ dependencies = [ "cc", ] -[[package]] -name = "linked-hash-map" -version = "0.5.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" - [[package]] name = "linux-raw-sys" version = "0.1.4" @@ -1811,15 +1627,6 @@ dependencies = [ "winit", ] -[[package]] -name = "mach" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b823e83b2affd8f40a9ee8c29dbc56404c1e34cd2710921f2801e2cf29527afa" -dependencies = [ - "libc", -] - [[package]] name = "malloc_buf" version = "0.0.6" @@ -1964,9 +1771,9 @@ dependencies = [ [[package]] name = "naga" -version = "0.10.0" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "262d2840e72dbe250e8cf2f522d080988dfca624c4112c096238a4845f591707" +checksum = "5eafe22a23b797c9bc227c6c896419b26b5bb88fa903417a3adaed08778850d5" dependencies = [ "bit-set", "bitflags", @@ -1976,7 +1783,6 @@ dependencies = [ "log", "num-traits", "petgraph", - "pp-rs", "rustc-hash", "spirv", "termcolor", @@ -2011,19 +1817,6 @@ dependencies = [ "tempfile", ] -[[package]] -name = "ndk" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2032c77e030ddee34a6787a64166008da93f6a352b629261d0fee232b8742dd4" -dependencies = [ - "bitflags", - "jni-sys", - "ndk-sys 0.3.0", - "num_enum", - "thiserror", -] - [[package]] name = "ndk" version = "0.7.0" @@ -2032,7 +1825,7 @@ checksum = "451422b7e4718271c8b5b3aadf5adedba43dc76312454b387e98fae0fc951aa0" dependencies = [ "bitflags", "jni-sys", - "ndk-sys 0.4.0", + "ndk-sys", "num_enum", "raw-window-handle 0.5.0", "thiserror", @@ -2052,10 +1845,10 @@ checksum = "0434fabdd2c15e0aab768ca31d5b7b333717f03cf02037d5a0a3ff3c278ed67f" dependencies = [ "libc", "log", - "ndk 0.7.0", + "ndk", "ndk-context", "ndk-macro", - "ndk-sys 0.4.0", + "ndk-sys", "once_cell", "parking_lot 0.12.1", ] @@ -2073,15 +1866,6 @@ dependencies = [ "syn", ] -[[package]] -name = "ndk-sys" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e5a6ae77c8ee183dcbbba6150e2e6b9f3f4196a7666c02a715a95692ec1fa97" -dependencies = [ - "jni-sys", -] - [[package]] name = "ndk-sys" version = "0.4.0" @@ -2091,19 +1875,6 @@ dependencies = [ "jni-sys", ] -[[package]] -name = "nix" -version = "0.23.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f3790c00a0150112de0f4cd161e3d7fc4b2d8a5542ffc35f099a2562aecb35c" -dependencies = [ - "bitflags", - "cc", - "cfg-if", - "libc", - "memoffset", -] - [[package]] name = "nix" version = "0.24.2" @@ -2126,17 +1897,6 @@ dependencies = [ "minimal-lexical", ] -[[package]] -name = "num-derive" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "876a53fff98e03a936a674b29568b0e605f06b29372c2489ff4de23f1949743d" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "num-integer" version = "0.1.45" @@ -2218,26 +1978,12 @@ dependencies = [ ] [[package]] -name = "oboe" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27f63c358b4fa0fbcfefd7c8be5cfc39c08ce2389f5325687e7762a48d30a5c1" -dependencies = [ - "jni", - "ndk 0.6.0", - "ndk-context", - "num-derive", - "num-traits", - "oboe-sys", -] - -[[package]] -name = "oboe-sys" -version = "0.4.5" +name = "object" +version = "0.30.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3370abb7372ed744232c12954d920d1a40f1c4686de9e79e800021ef492294bd" +checksum = "ea86265d3d3dcb6a27fc51bd29a4bf387fae9d2986b823079d4986af253eb439" dependencies = [ - "cc", + "memchr", ] [[package]] @@ -2291,24 +2037,6 @@ dependencies = [ "vcpkg", ] -[[package]] -name = "ordered-float" -version = "3.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d84eb1409416d254e4a9c8fa56cc24701755025b458f0fcd8e59e1f5f40c23bf" -dependencies = [ - "num-traits", -] - -[[package]] -name = "owned_ttf_parser" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a5f3c7ca08b6879e7965fb25e24d1f5eeb32ea73f9ad99b3854778a38c57e93" -dependencies = [ - "ttf-parser", -] - [[package]] name = "parking" version = "2.0.0" @@ -2363,12 +2091,6 @@ dependencies = [ "windows-sys 0.42.0", ] -[[package]] -name = "peeking_take_while" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" - [[package]] name = "percent-encoding" version = "2.2.0" @@ -2461,35 +2183,6 @@ version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5da3b0203fd7ee5720aa0b5e790b591aa5d3f41c3ed2c34a3a393382198af2f7" -[[package]] -name = "pong" -version = "0.1.0" -dependencies = [ - "anyhow", - "bytemuck", - "cfg-if", - "cgmath", - "console_error_panic_hook", - "console_log", - "env_logger", - "fs_extra", - "getrandom", - "glob", - "instant", - "log", - "naga 0.10.0", - "pollster", - "rand", - "rayon", - "rodio", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", - "wgpu", - "wgpu_glyph", - "winit", -] - [[package]] name = "pp-rs" version = "0.2.1" @@ -2499,12 +2192,6 @@ dependencies = [ "unicode-xid", ] -[[package]] -name = "ppv-lite86" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" - [[package]] name = "proc-macro-crate" version = "1.2.1" @@ -2540,36 +2227,6 @@ dependencies = [ "proc-macro2", ] -[[package]] -name = "rand" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" -dependencies = [ - "libc", - "rand_chacha", - "rand_core", -] - -[[package]] -name = "rand_chacha" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" -dependencies = [ - "ppv-lite86", - "rand_core", -] - -[[package]] -name = "rand_core" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" -dependencies = [ - "getrandom", -] - [[package]] name = "range-alloc" version = "0.1.2" @@ -2711,16 +2368,6 @@ dependencies = [ "winreg", ] -[[package]] -name = "rodio" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb10b653d5ec0e9411a2e7d46e2c7f4046fd87d35b9955bd73ba4108d69072b5" -dependencies = [ - "cpal", - "hound", -] - [[package]] name = "roxmltree" version = "0.14.1" @@ -2749,15 +2396,6 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" -[[package]] -name = "rustc_version" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" -dependencies = [ - "semver", -] - [[package]] name = "rustix" version = "0.36.6" @@ -2793,15 +2431,6 @@ version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ef703b7cb59335eae2eb93ceb664c0eb7ea6bf567079d843e09420219668e072" -[[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 = "schannel" version = "0.1.20" @@ -2871,21 +2500,6 @@ dependencies = [ "libc", ] -[[package]] -name = "semver" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" -dependencies = [ - "semver-parser", -] - -[[package]] -name = "semver-parser" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" - [[package]] name = "serde" version = "1.0.145" @@ -2947,21 +2561,6 @@ dependencies = [ "pkg-config", ] -[[package]] -name = "sha1" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1da05c97445caa12d05e848c4a4fcbbea29e748ac28f7e80e9b010392063770" -dependencies = [ - "sha1_smol", -] - -[[package]] -name = "sha1_smol" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae1a47186c03a32177042e55dbc5fd5aee900b8e0069a8d70fba96a9375cd012" - [[package]] name = "shaderc" version = "0.8.0" @@ -2992,12 +2591,6 @@ dependencies = [ "lazy_static", ] -[[package]] -name = "shlex" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43b2853a4d09f215c24cc5489c992ce46052d359b5109343cbafbf26bc62f8a3" - [[package]] name = "slab" version = "0.4.7" @@ -3034,7 +2627,7 @@ dependencies = [ "lazy_static", "log", "memmap2", - "nix 0.24.2", + "nix", "pkg-config", "wayland-client", "wayland-cursor", @@ -3084,55 +2677,6 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" -[[package]] -name = "stdweb" -version = "0.4.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d022496b16281348b52d0e30ae99e01a73d737b2f45d38fed4edf79f9325a1d5" -dependencies = [ - "discard", - "rustc_version", - "stdweb-derive", - "stdweb-internal-macros", - "stdweb-internal-runtime", - "wasm-bindgen", -] - -[[package]] -name = "stdweb-derive" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c87a60a40fccc84bef0652345bbbbbe20a605bf5d0ce81719fc476f5c03b50ef" -dependencies = [ - "proc-macro2", - "quote", - "serde", - "serde_derive", - "syn", -] - -[[package]] -name = "stdweb-internal-macros" -version = "0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58fa5ff6ad0d98d1ffa8cb115892b6e69d67799f6763e162a1c9db421dc22e11" -dependencies = [ - "base-x", - "proc-macro2", - "quote", - "serde", - "serde_derive", - "serde_json", - "sha1", - "syn", -] - -[[package]] -name = "stdweb-internal-runtime" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "213701ba3370744dcd1a12960caa4843b3d68b4d1c0a5d575e0d65b2ee9d16c0" - [[package]] name = "strsim" version = "0.10.0" @@ -3441,12 +2985,6 @@ version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" -[[package]] -name = "ttf-parser" -version = "0.18.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0609f771ad9c6155384897e1df4d948e692667cc0588548b68eb44d052b27633" - [[package]] name = "tutorial1-window" version = "0.1.0" @@ -3737,17 +3275,6 @@ dependencies = [ "winit", ] -[[package]] -name = "twox-hash" -version = "1.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97fee6b57c6a41524a810daee9286c02d7752c4253064d0b05472833a438f675" -dependencies = [ - "cfg-if", - "rand", - "static_assertions", -] - [[package]] name = "unicode-bidi" version = "0.3.8" @@ -3838,17 +3365,6 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca" -[[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 = "walrus" version = "0.19.0" @@ -4064,7 +3580,7 @@ dependencies = [ "bitflags", "downcast-rs", "libc", - "nix 0.24.2", + "nix", "scoped-tls", "wayland-commons", "wayland-scanner", @@ -4077,7 +3593,7 @@ version = "0.29.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8691f134d584a33a6606d9d717b95c4fa20065605f798a3f350d78dced02a902" dependencies = [ - "nix 0.24.2", + "nix", "once_cell", "smallvec", "wayland-sys", @@ -4089,7 +3605,7 @@ version = "0.29.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6865c6b66f13d6257bef1cd40cbfe8ef2f150fb8ebbdb1e8e873455931377661" dependencies = [ - "nix 0.24.2", + "nix", "wayland-client", "xcursor", ] @@ -4155,15 +3671,17 @@ dependencies = [ [[package]] name = "wgpu" -version = "0.14.0" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2272b17bffc8a0c7d53897435da7c1db587c87d3a14e8dae9cdb8d1d210fc0f" +checksum = "d14c6bfcf3b10f4273f522a95994553c0a5f2934976e62e61a720ae4bc2eb8f2" dependencies = [ "arrayvec 0.7.2", + "cfg-if", "js-sys", "log", - "naga 0.10.0", + "naga 0.11.0", "parking_lot 0.12.1", + "profiling", "raw-window-handle 0.5.0", "smallvec", "static_assertions", @@ -4177,18 +3695,17 @@ dependencies = [ [[package]] name = "wgpu-core" -version = "0.14.0" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73d14cad393054caf992ee02b7da6a372245d39a484f7461c1f44f6f6359bd28" +checksum = "be1f61be28e557a6ecb2506cac06c63fae3b6d302a006f38195a7a80995abeb9" dependencies = [ "arrayvec 0.7.2", "bit-vec", "bitflags", - "cfg_aliases", "codespan-reporting", "fxhash", "log", - "naga 0.10.0", + "naga 0.11.0", "parking_lot 0.12.1", "profiling", "raw-window-handle 0.5.0", @@ -4201,9 +3718,9 @@ dependencies = [ [[package]] name = "wgpu-hal" -version = "0.14.0" +version = "0.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdae6a80dbc725343f02f854b310b37190be946aeea65e9d83afaa7d840ebaac" +checksum = "82e95792925fe3d58950b9a5c2a191caa145e2bc570e2d233f0d7320f6a8e814" dependencies = [ "android_system_properties", "arrayvec 0.7.2", @@ -4217,13 +3734,16 @@ dependencies = [ "fxhash", "glow", "gpu-alloc", + "gpu-allocator", "gpu-descriptor", + "hassle-rs", "js-sys", "khronos-egl", + "libc", "libloading", "log", "metal", - "naga 0.10.0", + "naga 0.11.0", "objc", "parking_lot 0.12.1", "profiling", @@ -4253,24 +3773,20 @@ dependencies = [ [[package]] name = "wgpu-types" -version = "0.14.0" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28fb86c1909233c804aa79b7dd1ad06ebd979b2a465e3e980582db0ea9e69f3f" +checksum = "ecf8cfcbf98f94cc8bd5981544c687140cf9d3948e2ab83849367ead2cd737cf" dependencies = [ "bitflags", + "js-sys", + "web-sys", ] [[package]] -name = "wgpu_glyph" -version = "0.18.0" +name = "widestring" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cafb82773e0f124a33674dab5de4dff73175aeb921949047ab014efb58fb446" -dependencies = [ - "bytemuck", - "glyph_brush", - "log", - "wgpu", -] +checksum = "17882f045410753661207383517a6f62ec3dbeb6a4ed2acce01f0728238d1983" [[package]] name = "winapi" @@ -4316,15 +3832,17 @@ dependencies = [ [[package]] name = "windows" -version = "0.37.0" +version = "0.43.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57b543186b344cc61c85b5aab0d2e3adf4e0f99bc076eff9aa5927bcc0b8a647" +checksum = "04662ed0e3e5630dfa9b26e4cb823b817f1a9addda855d973a9458c236556244" dependencies = [ - "windows_aarch64_msvc 0.37.0", - "windows_i686_gnu 0.37.0", - "windows_i686_msvc 0.37.0", - "windows_x86_64_gnu 0.37.0", - "windows_x86_64_msvc 0.37.0", + "windows_aarch64_gnullvm", + "windows_aarch64_msvc 0.42.0", + "windows_i686_gnu 0.42.0", + "windows_i686_msvc 0.42.0", + "windows_x86_64_gnu 0.42.0", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc 0.42.0", ] [[package]] @@ -4367,12 +3885,6 @@ version = "0.36.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47" -[[package]] -name = "windows_aarch64_msvc" -version = "0.37.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2623277cb2d1c216ba3b578c0f3cf9cdebeddb6e66b1b218bb33596ea7769c3a" - [[package]] name = "windows_aarch64_msvc" version = "0.42.0" @@ -4385,12 +3897,6 @@ version = "0.36.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6" -[[package]] -name = "windows_i686_gnu" -version = "0.37.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3925fd0b0b804730d44d4b6278c50f9699703ec49bcd628020f46f4ba07d9e1" - [[package]] name = "windows_i686_gnu" version = "0.42.0" @@ -4403,12 +3909,6 @@ version = "0.36.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024" -[[package]] -name = "windows_i686_msvc" -version = "0.37.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce907ac74fe331b524c1298683efbf598bb031bc84d5e274db2083696d07c57c" - [[package]] name = "windows_i686_msvc" version = "0.42.0" @@ -4421,12 +3921,6 @@ version = "0.36.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1" -[[package]] -name = "windows_x86_64_gnu" -version = "0.37.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2babfba0828f2e6b32457d5341427dcbb577ceef556273229959ac23a10af33d" - [[package]] name = "windows_x86_64_gnu" version = "0.42.0" @@ -4445,12 +3939,6 @@ version = "0.36.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680" -[[package]] -name = "windows_x86_64_msvc" -version = "0.37.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4dd6dc7df2d84cf7b33822ed5b86318fb1781948e9663bacd047fc9dd52259d" - [[package]] name = "windows_x86_64_msvc" version = "0.42.0" @@ -4472,7 +3960,7 @@ dependencies = [ "libc", "log", "mio", - "ndk 0.7.0", + "ndk", "ndk-glue", "objc", "once_cell", @@ -4592,12 +4080,6 @@ dependencies = [ "nom", ] -[[package]] -name = "xi-unicode" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a67300977d3dc3f8034dae89778f502b6ba20b269527b3223ba59c0cf393bb8a" - [[package]] name = "xml-rs" version = "0.8.4" diff --git a/Cargo.toml b/Cargo.toml index e6777b66..562e2ae2 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -14,5 +14,5 @@ members = [ ] exclude = [ "code/showcase/imgui-demo", - #"code/showcase/pong", + "code/showcase/pong", ] \ No newline at end of file diff --git a/code/beginner/tutorial1-window/Cargo.toml b/code/beginner/tutorial1-window/Cargo.toml index d2f041e7..031c0aa9 100644 --- a/code/beginner/tutorial1-window/Cargo.toml +++ b/code/beginner/tutorial1-window/Cargo.toml @@ -16,13 +16,13 @@ cfg-if = "1" winit = "0.27" env_logger = "0.10" log = "0.4" -wgpu = "0.14" +wgpu = "0.15" pollster = "0.2" [target.'cfg(target_arch = "wasm32")'.dependencies] console_error_panic_hook = "0.1.6" console_log = "0.2.0" -wgpu = { version = "0.14", features = ["webgl"]} +wgpu = { version = "0.15", features = ["webgl"]} wasm-bindgen = "0.2.76" wasm-bindgen-futures = "0.4.30" web-sys = { version = "0.3.53", features = [ diff --git a/code/beginner/tutorial2-surface/Cargo.toml b/code/beginner/tutorial2-surface/Cargo.toml index a2d79d51..8dcc9a30 100644 --- a/code/beginner/tutorial2-surface/Cargo.toml +++ b/code/beginner/tutorial2-surface/Cargo.toml @@ -12,13 +12,13 @@ cfg-if = "1" winit = "0.27" env_logger = "0.10" log = "0.4" -wgpu = "0.14" +wgpu = "0.15" pollster = "0.2" [target.'cfg(target_arch = "wasm32")'.dependencies] console_error_panic_hook = "0.1.6" console_log = "0.2.0" -wgpu = { version = "0.14", features = ["webgl"]} +wgpu = { version = "0.15", features = ["webgl"]} wasm-bindgen = "0.2" wasm-bindgen-futures = "0.4" web-sys = { version = "0.3", features = [ diff --git a/code/beginner/tutorial2-surface/src/challenge.rs b/code/beginner/tutorial2-surface/src/challenge.rs index 83ec1e43..36ffc5d5 100644 --- a/code/beginner/tutorial2-surface/src/challenge.rs +++ b/code/beginner/tutorial2-surface/src/challenge.rs @@ -26,13 +26,16 @@ impl State { // The instance is a handle to our GPU // BackendBit::PRIMARY => Vulkan + Metal + DX12 + Browser WebGPU - let instance = wgpu::Instance::new(wgpu::Backends::all()); + let instance = wgpu::Instance::new(wgpu::InstanceDescriptor { + backends: wgpu::Backends::all(), + dx12_shader_compiler: Default::default(), + }); // # Safety // // The surface needs to live as long as the window that created it. // State owns the window so this should be safe. - let surface = unsafe { instance.create_surface(&window) }; + let surface = unsafe { instance.create_surface(&window) }.unwrap(); let adapter = instance .request_adapter(&wgpu::RequestAdapterOptions { @@ -61,13 +64,23 @@ impl State { .await .unwrap(); + let surface_caps = surface.get_capabilities(&adapter); + // Shader code in this tutorial assumes an Srgb surface texture. Using a different + // one will result all the colors comming out darker. If you want to support non + // Srgb surfaces, you'll need to account for that when drawing to the frame. + let surface_format = surface_caps.formats.iter() + .copied() + .filter(|f| f.describe().srgb) + .next() + .unwrap_or(surface_caps.formats[0]); let config = wgpu::SurfaceConfiguration { usage: wgpu::TextureUsages::RENDER_ATTACHMENT, - format: surface.get_supported_formats(&adapter)[0], + format: surface_format, width: size.width, height: size.height, - present_mode: wgpu::PresentMode::Fifo, - alpha_mode: wgpu::CompositeAlphaMode::Auto, + present_mode: surface_caps.present_modes[0], + alpha_mode: surface_caps.alpha_modes[0], + view_formats: vec![surface_format], }; surface.configure(&device, &config); diff --git a/code/beginner/tutorial2-surface/src/lib.rs b/code/beginner/tutorial2-surface/src/lib.rs index fad6941f..b49913e3 100644 --- a/code/beginner/tutorial2-surface/src/lib.rs +++ b/code/beginner/tutorial2-surface/src/lib.rs @@ -24,14 +24,17 @@ impl State { // The instance is a handle to our GPU // BackendBit::PRIMARY => Vulkan + Metal + DX12 + Browser WebGPU - let instance = wgpu::Instance::new(wgpu::Backends::all()); + let instance = wgpu::Instance::new(wgpu::InstanceDescriptor { + backends: wgpu::Backends::all(), + dx12_shader_compiler: Default::default(), + }); // # Safety // // The surface needs to live as long as the window that created it. // State owns the window so this should be safe. - let surface = unsafe { instance.create_surface(&window) }; - + let surface = unsafe { instance.create_surface(&window) }.unwrap(); + let adapter = instance .request_adapter(&wgpu::RequestAdapterOptions { power_preference: wgpu::PowerPreference::default(), @@ -60,13 +63,23 @@ impl State { .await .unwrap(); + let surface_caps = surface.get_capabilities(&adapter); + // Shader code in this tutorial assumes an Srgb surface texture. Using a different + // one will result all the colors comming out darker. If you want to support non + // Srgb surfaces, you'll need to account for that when drawing to the frame. + let surface_format = surface_caps.formats.iter() + .copied() + .filter(|f| f.describe().srgb) + .next() + .unwrap_or(surface_caps.formats[0]); let config = wgpu::SurfaceConfiguration { usage: wgpu::TextureUsages::RENDER_ATTACHMENT, - format: surface.get_supported_formats(&adapter)[0], + format: surface_format, width: size.width, height: size.height, - present_mode: wgpu::PresentMode::Fifo, - alpha_mode: wgpu::CompositeAlphaMode::Auto, + present_mode: surface_caps.present_modes[0], + alpha_mode: surface_caps.alpha_modes[0], + view_formats: vec![surface_format], }; surface.configure(&device, &config); diff --git a/code/beginner/tutorial3-pipeline/Cargo.toml b/code/beginner/tutorial3-pipeline/Cargo.toml index 78f6d62f..9e7a2e2a 100644 --- a/code/beginner/tutorial3-pipeline/Cargo.toml +++ b/code/beginner/tutorial3-pipeline/Cargo.toml @@ -12,13 +12,13 @@ cfg-if = "1" winit = "0.27" env_logger = "0.10" log = "0.4" -wgpu = "0.14" +wgpu = "0.15" pollster = "0.2" [target.'cfg(target_arch = "wasm32")'.dependencies] console_error_panic_hook = "0.1.6" console_log = "0.2.0" -wgpu = { version = "0.14", features = ["webgl"]} +wgpu = { version = "0.15", features = ["webgl"]} wasm-bindgen = "0.2" wasm-bindgen-futures = "0.4" web-sys = { version = "0.3", features = [ diff --git a/code/beginner/tutorial3-pipeline/src/challenge.rs b/code/beginner/tutorial3-pipeline/src/challenge.rs index 08286324..9d331b08 100644 --- a/code/beginner/tutorial3-pipeline/src/challenge.rs +++ b/code/beginner/tutorial3-pipeline/src/challenge.rs @@ -24,13 +24,16 @@ impl State { // The instance is a handle to our GPU // BackendBit::PRIMARY => Vulkan + Metal + DX12 + Browser WebGPU - let instance = wgpu::Instance::new(wgpu::Backends::all()); + let instance = wgpu::Instance::new(wgpu::InstanceDescriptor { + backends: wgpu::Backends::all(), + dx12_shader_compiler: Default::default(), + }); // # Safety // // The surface needs to live as long as the window that created it. // State owns the window so this should be safe. - let surface = unsafe { instance.create_surface(&window) }; + let surface = unsafe { instance.create_surface(&window) }.unwrap(); let adapter = instance .request_adapter(&wgpu::RequestAdapterOptions { @@ -59,13 +62,23 @@ impl State { .await .unwrap(); + let surface_caps = surface.get_capabilities(&adapter); + // Shader code in this tutorial assumes an Srgb surface texture. Using a different + // one will result all the colors comming out darker. If you want to support non + // Srgb surfaces, you'll need to account for that when drawing to the frame. + let surface_format = surface_caps.formats.iter() + .copied() + .filter(|f| f.describe().srgb) + .next() + .unwrap_or(surface_caps.formats[0]); let config = wgpu::SurfaceConfiguration { usage: wgpu::TextureUsages::RENDER_ATTACHMENT, - format: surface.get_supported_formats(&adapter)[0], + format: surface_format, width: size.width, height: size.height, - present_mode: wgpu::PresentMode::Fifo, - alpha_mode: wgpu::CompositeAlphaMode::Auto, + present_mode: surface_caps.present_modes[0], + alpha_mode: surface_caps.alpha_modes[0], + view_formats: vec![surface_format], }; surface.configure(&device, &config); diff --git a/code/beginner/tutorial3-pipeline/src/lib.rs b/code/beginner/tutorial3-pipeline/src/lib.rs index 97c5aeb9..4e3e65d1 100644 --- a/code/beginner/tutorial3-pipeline/src/lib.rs +++ b/code/beginner/tutorial3-pipeline/src/lib.rs @@ -26,13 +26,16 @@ impl State { // The instance is a handle to our GPU // BackendBit::PRIMARY => Vulkan + Metal + DX12 + Browser WebGPU - let instance = wgpu::Instance::new(wgpu::Backends::all()); + let instance = wgpu::Instance::new(wgpu::InstanceDescriptor { + backends: wgpu::Backends::all(), + dx12_shader_compiler: Default::default(), + }); // # Safety // // The surface needs to live as long as the window that created it. // State owns the window so this should be safe. - let surface = unsafe { instance.create_surface(&window) }; + let surface = unsafe { instance.create_surface(&window) }.unwrap(); let adapter = instance .request_adapter(&wgpu::RequestAdapterOptions { @@ -61,13 +64,23 @@ impl State { .await .unwrap(); + let surface_caps = surface.get_capabilities(&adapter); + // Shader code in this tutorial assumes an Srgb surface texture. Using a different + // one will result all the colors comming out darker. If you want to support non + // Srgb surfaces, you'll need to account for that when drawing to the frame. + let surface_format = surface_caps.formats.iter() + .copied() + .filter(|f| f.describe().srgb) + .next() + .unwrap_or(surface_caps.formats[0]); let config = wgpu::SurfaceConfiguration { usage: wgpu::TextureUsages::RENDER_ATTACHMENT, - format: surface.get_supported_formats(&adapter)[0], + format: surface_format, width: size.width, height: size.height, - present_mode: wgpu::PresentMode::Fifo, - alpha_mode: wgpu::CompositeAlphaMode::Auto, + present_mode: surface_caps.present_modes[0], + alpha_mode: surface_caps.alpha_modes[0], + view_formats: vec![surface_format], }; surface.configure(&device, &config); diff --git a/code/beginner/tutorial4-buffer/Cargo.toml b/code/beginner/tutorial4-buffer/Cargo.toml index 5272fa55..5c89c041 100644 --- a/code/beginner/tutorial4-buffer/Cargo.toml +++ b/code/beginner/tutorial4-buffer/Cargo.toml @@ -11,7 +11,7 @@ crate-type = ["cdylib", "rlib"] [dependencies] cfg-if = "1" winit = "0.27" -wgpu = "0.14" +wgpu = "0.15" env_logger = "0.10" log = "0.4" pollster = "0.2" @@ -21,7 +21,7 @@ bytemuck = { version = "1.12", features = [ "derive" ] } [target.'cfg(target_arch = "wasm32")'.dependencies] console_error_panic_hook = "0.1" console_log = "0.2" -wgpu = { version = "0.14", features = ["webgl"]} +wgpu = { version = "0.15", features = ["webgl"]} wasm-bindgen = "0.2" wasm-bindgen-futures = "0.4" web-sys = { version = "0.3", features = [ diff --git a/code/beginner/tutorial4-buffer/src/challenge.rs b/code/beginner/tutorial4-buffer/src/challenge.rs index f540cd68..3f683cc0 100644 --- a/code/beginner/tutorial4-buffer/src/challenge.rs +++ b/code/beginner/tutorial4-buffer/src/challenge.rs @@ -87,13 +87,16 @@ impl State { // The instance is a handle to our GPU // BackendBit::PRIMARY => Vulkan + Metal + DX12 + Browser WebGPU - let instance = wgpu::Instance::new(wgpu::Backends::all()); + let instance = wgpu::Instance::new(wgpu::InstanceDescriptor { + backends: wgpu::Backends::all(), + dx12_shader_compiler: Default::default(), + }); // # Safety // // The surface needs to live as long as the window that created it. // State owns the window so this should be safe. - let surface = unsafe { instance.create_surface(&window) }; + let surface = unsafe { instance.create_surface(&window) }.unwrap(); let adapter = instance .request_adapter(&wgpu::RequestAdapterOptions { @@ -122,13 +125,23 @@ impl State { .await .unwrap(); + let surface_caps = surface.get_capabilities(&adapter); + // Shader code in this tutorial assumes an Srgb surface texture. Using a different + // one will result all the colors comming out darker. If you want to support non + // Srgb surfaces, you'll need to account for that when drawing to the frame. + let surface_format = surface_caps.formats.iter() + .copied() + .filter(|f| f.describe().srgb) + .next() + .unwrap_or(surface_caps.formats[0]); let config = wgpu::SurfaceConfiguration { usage: wgpu::TextureUsages::RENDER_ATTACHMENT, - format: surface.get_supported_formats(&adapter)[0], + format: surface_format, width: size.width, height: size.height, - present_mode: wgpu::PresentMode::Fifo, - alpha_mode: wgpu::CompositeAlphaMode::Auto, + present_mode: surface_caps.present_modes[0], + alpha_mode: surface_caps.alpha_modes[0], + view_formats: vec![surface_format], }; surface.configure(&device, &config); diff --git a/code/beginner/tutorial4-buffer/src/lib.rs b/code/beginner/tutorial4-buffer/src/lib.rs index d3fa5df1..315774ef 100644 --- a/code/beginner/tutorial4-buffer/src/lib.rs +++ b/code/beginner/tutorial4-buffer/src/lib.rs @@ -83,13 +83,16 @@ impl State { // The instance is a handle to our GPU // BackendBit::PRIMARY => Vulkan + Metal + DX12 + Browser WebGPU - let instance = wgpu::Instance::new(wgpu::Backends::all()); + let instance = wgpu::Instance::new(wgpu::InstanceDescriptor { + backends: wgpu::Backends::all(), + dx12_shader_compiler: Default::default(), + }); // # Safety // // The surface needs to live as long as the window that created it. // State owns the window so this should be safe. - let surface = unsafe { instance.create_surface(&window) }; + let surface = unsafe { instance.create_surface(&window) }.unwrap(); let adapter = instance .request_adapter(&wgpu::RequestAdapterOptions { @@ -118,13 +121,23 @@ impl State { .await .unwrap(); + let surface_caps = surface.get_capabilities(&adapter); + // Shader code in this tutorial assumes an Srgb surface texture. Using a different + // one will result all the colors comming out darker. If you want to support non + // Srgb surfaces, you'll need to account for that when drawing to the frame. + let surface_format = surface_caps.formats.iter() + .copied() + .filter(|f| f.describe().srgb) + .next() + .unwrap_or(surface_caps.formats[0]); let config = wgpu::SurfaceConfiguration { usage: wgpu::TextureUsages::RENDER_ATTACHMENT, - format: surface.get_supported_formats(&adapter)[0], + format: surface_format, width: size.width, height: size.height, - present_mode: wgpu::PresentMode::Fifo, - alpha_mode: wgpu::CompositeAlphaMode::Auto, + present_mode: surface_caps.present_modes[0], + alpha_mode: surface_caps.alpha_modes[0], + view_formats: vec![surface_format], }; surface.configure(&device, &config); diff --git a/code/beginner/tutorial5-textures/Cargo.toml b/code/beginner/tutorial5-textures/Cargo.toml index b2205518..69757f7f 100644 --- a/code/beginner/tutorial5-textures/Cargo.toml +++ b/code/beginner/tutorial5-textures/Cargo.toml @@ -14,7 +14,7 @@ bytemuck = { version = "1.12", features = [ "derive" ] } env_logger = "0.10" log = "0.4" pollster = "0.2" -wgpu = "0.14" +wgpu = "0.15" winit = "0.27" [dependencies.image] @@ -25,7 +25,7 @@ features = ["png", "jpeg"] [target.'cfg(target_arch = "wasm32")'.dependencies] console_error_panic_hook = "0.1" console_log = "0.2" -wgpu = { version = "0.14", features = ["webgl"]} +wgpu = { version = "0.15", features = ["webgl"]} wasm-bindgen = "0.2" wasm-bindgen-futures = "0.4" web-sys = { version = "0.3", features = [ diff --git a/code/beginner/tutorial5-textures/src/challenge.rs b/code/beginner/tutorial5-textures/src/challenge.rs index fceea15b..a9571c6b 100644 --- a/code/beginner/tutorial5-textures/src/challenge.rs +++ b/code/beginner/tutorial5-textures/src/challenge.rs @@ -89,13 +89,16 @@ impl State { // The instance is a handle to our GPU // BackendBit::PRIMARY => Vulkan + Metal + DX12 + Browser WebGPU - let instance = wgpu::Instance::new(wgpu::Backends::all()); + let instance = wgpu::Instance::new(wgpu::InstanceDescriptor { + backends: wgpu::Backends::all(), + dx12_shader_compiler: Default::default(), + }); // # Safety // // The surface needs to live as long as the window that created it. // State owns the window so this should be safe. - let surface = unsafe { instance.create_surface(&window) }; + let surface = unsafe { instance.create_surface(&window) }.unwrap(); let adapter = instance .request_adapter(&wgpu::RequestAdapterOptions { @@ -123,13 +126,23 @@ impl State { .await .unwrap(); + let surface_caps = surface.get_capabilities(&adapter); + // Shader code in this tutorial assumes an Srgb surface texture. Using a different + // one will result all the colors comming out darker. If you want to support non + // Srgb surfaces, you'll need to account for that when drawing to the frame. + let surface_format = surface_caps.formats.iter() + .copied() + .filter(|f| f.describe().srgb) + .next() + .unwrap_or(surface_caps.formats[0]); let config = wgpu::SurfaceConfiguration { usage: wgpu::TextureUsages::RENDER_ATTACHMENT, - format: surface.get_supported_formats(&adapter)[0], + format: surface_format, width: size.width, height: size.height, - present_mode: wgpu::PresentMode::Fifo, - alpha_mode: wgpu::CompositeAlphaMode::Auto, + present_mode: surface_caps.present_modes[0], + alpha_mode: surface_caps.alpha_modes[0], + view_formats: vec![surface_format], }; surface.configure(&device, &config); diff --git a/code/beginner/tutorial5-textures/src/lib.rs b/code/beginner/tutorial5-textures/src/lib.rs index f61fd9fe..ba31a75b 100644 --- a/code/beginner/tutorial5-textures/src/lib.rs +++ b/code/beginner/tutorial5-textures/src/lib.rs @@ -89,13 +89,16 @@ impl State { // The instance is a handle to our GPU // BackendBit::PRIMARY => Vulkan + Metal + DX12 + Browser WebGPU - let instance = wgpu::Instance::new(wgpu::Backends::all()); + let instance = wgpu::Instance::new(wgpu::InstanceDescriptor { + backends: wgpu::Backends::all(), + dx12_shader_compiler: Default::default(), + }); // # Safety // // The surface needs to live as long as the window that created it. // State owns the window so this should be safe. - let surface = unsafe { instance.create_surface(&window) }; + let surface = unsafe { instance.create_surface(&window) }.unwrap(); let adapter = instance .request_adapter(&wgpu::RequestAdapterOptions { @@ -123,13 +126,23 @@ impl State { .await .unwrap(); + let surface_caps = surface.get_capabilities(&adapter); + // Shader code in this tutorial assumes an Srgb surface texture. Using a different + // one will result all the colors comming out darker. If you want to support non + // Srgb surfaces, you'll need to account for that when drawing to the frame. + let surface_format = surface_caps.formats.iter() + .copied() + .filter(|f| f.describe().srgb) + .next() + .unwrap_or(surface_caps.formats[0]); let config = wgpu::SurfaceConfiguration { usage: wgpu::TextureUsages::RENDER_ATTACHMENT, - format: surface.get_supported_formats(&adapter)[0], + format: surface_format, width: size.width, height: size.height, - present_mode: wgpu::PresentMode::Fifo, - alpha_mode: wgpu::CompositeAlphaMode::Auto, + present_mode: surface_caps.present_modes[0], + alpha_mode: surface_caps.alpha_modes[0], + view_formats: vec![surface_format], }; surface.configure(&device, &config); diff --git a/code/beginner/tutorial5-textures/src/texture.rs b/code/beginner/tutorial5-textures/src/texture.rs index 00336add..e51c0885 100644 --- a/code/beginner/tutorial5-textures/src/texture.rs +++ b/code/beginner/tutorial5-textures/src/texture.rs @@ -34,14 +34,16 @@ impl Texture { height: dimensions.1, depth_or_array_layers: 1, }; + let format = wgpu::TextureFormat::Rgba8UnormSrgb; let texture = device.create_texture(&wgpu::TextureDescriptor { label, size, mip_level_count: 1, sample_count: 1, dimension: wgpu::TextureDimension::D2, - format: wgpu::TextureFormat::Rgba8UnormSrgb, + format, usage: wgpu::TextureUsages::TEXTURE_BINDING | wgpu::TextureUsages::COPY_DST, + view_formats: &[], }); queue.write_texture( diff --git a/code/beginner/tutorial6-uniforms/Cargo.toml b/code/beginner/tutorial6-uniforms/Cargo.toml index c0c8047c..9e2fdeec 100644 --- a/code/beginner/tutorial6-uniforms/Cargo.toml +++ b/code/beginner/tutorial6-uniforms/Cargo.toml @@ -15,7 +15,7 @@ cgmath = "0.18" env_logger = "0.10" log = "0.4" pollster = "0.2" -wgpu = "0.14" +wgpu = "0.15" winit = "0.27" [dependencies.image] @@ -26,7 +26,7 @@ features = ["png", "jpeg"] [target.'cfg(target_arch = "wasm32")'.dependencies] console_error_panic_hook = "0.1" console_log = "0.2" -wgpu = { version = "0.14", features = ["webgl"]} +wgpu = { version = "0.15", features = ["webgl"]} wasm-bindgen = "0.2" wasm-bindgen-futures = "0.4" web-sys = { version = "0.3", features = [ diff --git a/code/beginner/tutorial6-uniforms/src/challenge.rs b/code/beginner/tutorial6-uniforms/src/challenge.rs index de1656a3..a4151884 100644 --- a/code/beginner/tutorial6-uniforms/src/challenge.rs +++ b/code/beginner/tutorial6-uniforms/src/challenge.rs @@ -239,13 +239,16 @@ impl State { // The instance is a handle to our GPU // BackendBit::PRIMARY => Vulkan + Metal + DX12 + Browser WebGPU - let instance = wgpu::Instance::new(wgpu::Backends::all()); + let instance = wgpu::Instance::new(wgpu::InstanceDescriptor { + backends: wgpu::Backends::all(), + dx12_shader_compiler: Default::default(), + }); // # Safety // // The surface needs to live as long as the window that created it. // State owns the window so this should be safe. - let surface = unsafe { instance.create_surface(&window) }; + let surface = unsafe { instance.create_surface(&window) }.unwrap(); let adapter = instance .request_adapter(&wgpu::RequestAdapterOptions { @@ -273,13 +276,23 @@ impl State { .await .unwrap(); + let surface_caps = surface.get_capabilities(&adapter); + // Shader code in this tutorial assumes an Srgb surface texture. Using a different + // one will result all the colors comming out darker. If you want to support non + // Srgb surfaces, you'll need to account for that when drawing to the frame. + let surface_format = surface_caps.formats.iter() + .copied() + .filter(|f| f.describe().srgb) + .next() + .unwrap_or(surface_caps.formats[0]); let config = wgpu::SurfaceConfiguration { usage: wgpu::TextureUsages::RENDER_ATTACHMENT, - format: surface.get_supported_formats(&adapter)[0], + format: surface_format, width: size.width, height: size.height, - present_mode: wgpu::PresentMode::Fifo, - alpha_mode: wgpu::CompositeAlphaMode::Auto, + present_mode: surface_caps.present_modes[0], + alpha_mode: surface_caps.alpha_modes[0], + view_formats: vec![surface_format], }; surface.configure(&device, &config); diff --git a/code/beginner/tutorial6-uniforms/src/lib.rs b/code/beginner/tutorial6-uniforms/src/lib.rs index 8b2bc021..ff1ddabd 100644 --- a/code/beginner/tutorial6-uniforms/src/lib.rs +++ b/code/beginner/tutorial6-uniforms/src/lib.rs @@ -239,13 +239,16 @@ impl State { // The instance is a handle to our GPU // BackendBit::PRIMARY => Vulkan + Metal + DX12 + Browser WebGPU - let instance = wgpu::Instance::new(wgpu::Backends::all()); + let instance = wgpu::Instance::new(wgpu::InstanceDescriptor { + backends: wgpu::Backends::all(), + dx12_shader_compiler: Default::default(), + }); // # Safety // // The surface needs to live as long as the window that created it. // State owns the window so this should be safe. - let surface = unsafe { instance.create_surface(&window) }; + let surface = unsafe { instance.create_surface(&window) }.unwrap(); let adapter = instance .request_adapter(&wgpu::RequestAdapterOptions { @@ -273,13 +276,23 @@ impl State { .await .unwrap(); + let surface_caps = surface.get_capabilities(&adapter); + // Shader code in this tutorial assumes an Srgb surface texture. Using a different + // one will result all the colors comming out darker. If you want to support non + // Srgb surfaces, you'll need to account for that when drawing to the frame. + let surface_format = surface_caps.formats.iter() + .copied() + .filter(|f| f.describe().srgb) + .next() + .unwrap_or(surface_caps.formats[0]); let config = wgpu::SurfaceConfiguration { usage: wgpu::TextureUsages::RENDER_ATTACHMENT, - format: surface.get_supported_formats(&adapter)[0], + format: surface_format, width: size.width, height: size.height, - present_mode: wgpu::PresentMode::Fifo, - alpha_mode: wgpu::CompositeAlphaMode::Auto, + present_mode: surface_caps.present_modes[0], + alpha_mode: surface_caps.alpha_modes[0], + view_formats: vec![surface_format], }; surface.configure(&device, &config); diff --git a/code/beginner/tutorial6-uniforms/src/texture.rs b/code/beginner/tutorial6-uniforms/src/texture.rs index 00336add..e51c0885 100644 --- a/code/beginner/tutorial6-uniforms/src/texture.rs +++ b/code/beginner/tutorial6-uniforms/src/texture.rs @@ -34,14 +34,16 @@ impl Texture { height: dimensions.1, depth_or_array_layers: 1, }; + let format = wgpu::TextureFormat::Rgba8UnormSrgb; let texture = device.create_texture(&wgpu::TextureDescriptor { label, size, mip_level_count: 1, sample_count: 1, dimension: wgpu::TextureDimension::D2, - format: wgpu::TextureFormat::Rgba8UnormSrgb, + format, usage: wgpu::TextureUsages::TEXTURE_BINDING | wgpu::TextureUsages::COPY_DST, + view_formats: &[], }); queue.write_texture( diff --git a/code/beginner/tutorial7-instancing/Cargo.toml b/code/beginner/tutorial7-instancing/Cargo.toml index 731be0ed..dc6217b1 100644 --- a/code/beginner/tutorial7-instancing/Cargo.toml +++ b/code/beginner/tutorial7-instancing/Cargo.toml @@ -15,7 +15,7 @@ cgmath = "0.18" env_logger = "0.10" log = "0.4" pollster = "0.2" -wgpu = "0.14" +wgpu = "0.15" winit = "0.27" [dependencies.image] @@ -26,7 +26,7 @@ features = ["png", "jpeg"] [target.'cfg(target_arch = "wasm32")'.dependencies] console_error_panic_hook = "0.1" console_log = "0.2" -wgpu = { version = "0.14", features = ["webgl"]} +wgpu = { version = "0.15", features = ["webgl"]} wasm-bindgen = "0.2" wasm-bindgen-futures = "0.4" web-sys = { version = "0.3", features = [ diff --git a/code/beginner/tutorial7-instancing/src/challenge.rs b/code/beginner/tutorial7-instancing/src/challenge.rs index 55f3232b..d0edcb38 100644 --- a/code/beginner/tutorial7-instancing/src/challenge.rs +++ b/code/beginner/tutorial7-instancing/src/challenge.rs @@ -293,13 +293,16 @@ impl State { // The instance is a handle to our GPU // BackendBit::PRIMARY => Vulkan + Metal + DX12 + Browser WebGPU - let instance = wgpu::Instance::new(wgpu::Backends::all()); + let instance = wgpu::Instance::new(wgpu::InstanceDescriptor { + backends: wgpu::Backends::all(), + dx12_shader_compiler: Default::default(), + }); // # Safety // // The surface needs to live as long as the window that created it. // State owns the window so this should be safe. - let surface = unsafe { instance.create_surface(&window) }; + let surface = unsafe { instance.create_surface(&window) }.unwrap(); let adapter = instance .request_adapter(&wgpu::RequestAdapterOptions { @@ -327,13 +330,23 @@ impl State { .await .unwrap(); + let surface_caps = surface.get_capabilities(&adapter); + // Shader code in this tutorial assumes an Srgb surface texture. Using a different + // one will result all the colors comming out darker. If you want to support non + // Srgb surfaces, you'll need to account for that when drawing to the frame. + let surface_format = surface_caps.formats.iter() + .copied() + .filter(|f| f.describe().srgb) + .next() + .unwrap_or(surface_caps.formats[0]); let config = wgpu::SurfaceConfiguration { usage: wgpu::TextureUsages::RENDER_ATTACHMENT, - format: surface.get_supported_formats(&adapter)[0], + format: surface_format, width: size.width, height: size.height, - present_mode: wgpu::PresentMode::Fifo, - alpha_mode: wgpu::CompositeAlphaMode::Auto, + present_mode: surface_caps.present_modes[0], + alpha_mode: surface_caps.alpha_modes[0], + view_formats: vec![surface_format], }; surface.configure(&device, &config); diff --git a/code/beginner/tutorial7-instancing/src/lib.rs b/code/beginner/tutorial7-instancing/src/lib.rs index 7562fcaf..e3c9a925 100644 --- a/code/beginner/tutorial7-instancing/src/lib.rs +++ b/code/beginner/tutorial7-instancing/src/lib.rs @@ -300,13 +300,16 @@ impl State { // The instance is a handle to our GPU // BackendBit::PRIMARY => Vulkan + Metal + DX12 + Browser WebGPU - let instance = wgpu::Instance::new(wgpu::Backends::all()); + let instance = wgpu::Instance::new(wgpu::InstanceDescriptor { + backends: wgpu::Backends::all(), + dx12_shader_compiler: Default::default(), + }); // # Safety // // The surface needs to live as long as the window that created it. // State owns the window so this should be safe. - let surface = unsafe { instance.create_surface(&window) }; + let surface = unsafe { instance.create_surface(&window) }.unwrap(); let adapter = instance .request_adapter(&wgpu::RequestAdapterOptions { @@ -334,13 +337,23 @@ impl State { .await .unwrap(); + let surface_caps = surface.get_capabilities(&adapter); + // Shader code in this tutorial assumes an Srgb surface texture. Using a different + // one will result all the colors comming out darker. If you want to support non + // Srgb surfaces, you'll need to account for that when drawing to the frame. + let surface_format = surface_caps.formats.iter() + .copied() + .filter(|f| f.describe().srgb) + .next() + .unwrap_or(surface_caps.formats[0]); let config = wgpu::SurfaceConfiguration { usage: wgpu::TextureUsages::RENDER_ATTACHMENT, - format: surface.get_supported_formats(&adapter)[0], + format: surface_format, width: size.width, height: size.height, - present_mode: wgpu::PresentMode::Fifo, - alpha_mode: wgpu::CompositeAlphaMode::Auto, + present_mode: surface_caps.present_modes[0], + alpha_mode: surface_caps.alpha_modes[0], + view_formats: vec![surface_format], }; surface.configure(&device, &config); diff --git a/code/beginner/tutorial7-instancing/src/texture.rs b/code/beginner/tutorial7-instancing/src/texture.rs index 00336add..e51c0885 100644 --- a/code/beginner/tutorial7-instancing/src/texture.rs +++ b/code/beginner/tutorial7-instancing/src/texture.rs @@ -34,14 +34,16 @@ impl Texture { height: dimensions.1, depth_or_array_layers: 1, }; + let format = wgpu::TextureFormat::Rgba8UnormSrgb; let texture = device.create_texture(&wgpu::TextureDescriptor { label, size, mip_level_count: 1, sample_count: 1, dimension: wgpu::TextureDimension::D2, - format: wgpu::TextureFormat::Rgba8UnormSrgb, + format, usage: wgpu::TextureUsages::TEXTURE_BINDING | wgpu::TextureUsages::COPY_DST, + view_formats: &[], }); queue.write_texture( diff --git a/code/beginner/tutorial8-depth/Cargo.toml b/code/beginner/tutorial8-depth/Cargo.toml index 5c459bec..3fe536a8 100644 --- a/code/beginner/tutorial8-depth/Cargo.toml +++ b/code/beginner/tutorial8-depth/Cargo.toml @@ -15,7 +15,7 @@ cgmath = "0.18" env_logger = "0.10" pollster = "0.2" log = "0.4" -wgpu = "0.14" +wgpu = "0.15" winit = "0.27" [dependencies.image] @@ -26,7 +26,7 @@ features = ["png", "jpeg"] [target.'cfg(target_arch = "wasm32")'.dependencies] console_error_panic_hook = "0.1" console_log = "0.2" -wgpu = { version = "0.14", features = ["webgl"]} +wgpu = { version = "0.15", features = ["webgl"]} wasm-bindgen = "0.2" wasm-bindgen-futures = "0.4" web-sys = { version = "0.3", features = [ diff --git a/code/beginner/tutorial8-depth/src/challenge.rs b/code/beginner/tutorial8-depth/src/challenge.rs index ad21cf55..00cff25d 100644 --- a/code/beginner/tutorial8-depth/src/challenge.rs +++ b/code/beginner/tutorial8-depth/src/challenge.rs @@ -482,13 +482,16 @@ impl State { // The instance is a handle to our GPU // BackendBit::PRIMARY => Vulkan + Metal + DX12 + Browser WebGPU - let instance = wgpu::Instance::new(wgpu::Backends::all()); + let instance = wgpu::Instance::new(wgpu::InstanceDescriptor { + backends: wgpu::Backends::all(), + dx12_shader_compiler: Default::default(), + }); // # Safety // // The surface needs to live as long as the window that created it. // State owns the window so this should be safe. - let surface = unsafe { instance.create_surface(&window) }; + let surface = unsafe { instance.create_surface(&window) }.unwrap(); let adapter = instance .request_adapter(&wgpu::RequestAdapterOptions { @@ -516,13 +519,23 @@ impl State { .await .unwrap(); + let surface_caps = surface.get_capabilities(&adapter); + // Shader code in this tutorial assumes an Srgb surface texture. Using a different + // one will result all the colors comming out darker. If you want to support non + // Srgb surfaces, you'll need to account for that when drawing to the frame. + let surface_format = surface_caps.formats.iter() + .copied() + .filter(|f| f.describe().srgb) + .next() + .unwrap_or(surface_caps.formats[0]); let config = wgpu::SurfaceConfiguration { usage: wgpu::TextureUsages::RENDER_ATTACHMENT, - format: surface.get_supported_formats(&adapter)[0], + format: surface_format, width: size.width, height: size.height, - present_mode: wgpu::PresentMode::Fifo, - alpha_mode: wgpu::CompositeAlphaMode::Auto, + present_mode: surface_caps.present_modes[0], + alpha_mode: surface_caps.alpha_modes[0], + view_formats: vec![surface_format], }; surface.configure(&device, &config); diff --git a/code/beginner/tutorial8-depth/src/lib.rs b/code/beginner/tutorial8-depth/src/lib.rs index d2315db0..39af8208 100644 --- a/code/beginner/tutorial8-depth/src/lib.rs +++ b/code/beginner/tutorial8-depth/src/lib.rs @@ -310,13 +310,16 @@ impl State { // The instance is a handle to our GPU // BackendBit::PRIMARY => Vulkan + Metal + DX12 + Browser WebGPU - let instance = wgpu::Instance::new(wgpu::Backends::all()); + let instance = wgpu::Instance::new(wgpu::InstanceDescriptor { + backends: wgpu::Backends::all(), + dx12_shader_compiler: Default::default(), + }); // # Safety // // The surface needs to live as long as the window that created it. // State owns the window so this should be safe. - let surface = unsafe { instance.create_surface(&window) }; + let surface = unsafe { instance.create_surface(&window) }.unwrap(); let adapter = instance .request_adapter(&wgpu::RequestAdapterOptions { @@ -344,13 +347,23 @@ impl State { .await .unwrap(); + let surface_caps = surface.get_capabilities(&adapter); + // Shader code in this tutorial assumes an Srgb surface texture. Using a different + // one will result all the colors comming out darker. If you want to support non + // Srgb surfaces, you'll need to account for that when drawing to the frame. + let surface_format = surface_caps.formats.iter() + .copied() + .filter(|f| f.describe().srgb) + .next() + .unwrap_or(surface_caps.formats[0]); let config = wgpu::SurfaceConfiguration { usage: wgpu::TextureUsages::RENDER_ATTACHMENT, - format: surface.get_supported_formats(&adapter)[0], + format: surface_format, width: size.width, height: size.height, - present_mode: wgpu::PresentMode::Fifo, - alpha_mode: wgpu::CompositeAlphaMode::Auto, + present_mode: surface_caps.present_modes[0], + alpha_mode: surface_caps.alpha_modes[0], + view_formats: vec![surface_format], }; surface.configure(&device, &config); diff --git a/code/beginner/tutorial8-depth/src/texture.rs b/code/beginner/tutorial8-depth/src/texture.rs index 7e681e42..490f0541 100644 --- a/code/beginner/tutorial8-depth/src/texture.rs +++ b/code/beginner/tutorial8-depth/src/texture.rs @@ -30,6 +30,7 @@ impl Texture { dimension: wgpu::TextureDimension::D2, format: Self::DEPTH_FORMAT, usage: wgpu::TextureUsages::RENDER_ATTACHMENT | wgpu::TextureUsages::TEXTURE_BINDING, + view_formats: &[Self::DEPTH_FORMAT], }; let texture = device.create_texture(&desc); let view = texture.create_view(&wgpu::TextureViewDescriptor::default()); @@ -71,6 +72,7 @@ impl Texture { dimension: wgpu::TextureDimension::D2, format: Self::DEPTH_FORMAT, usage: wgpu::TextureUsages::RENDER_ATTACHMENT | wgpu::TextureUsages::TEXTURE_BINDING, + view_formats: &[Self::DEPTH_FORMAT], }; let texture = device.create_texture(&desc); let view = texture.create_view(&wgpu::TextureViewDescriptor::default()); @@ -118,14 +120,16 @@ impl Texture { height: dimensions.1, depth_or_array_layers: 1, }; + let format = wgpu::TextureFormat::Rgba8UnormSrgb; let texture = device.create_texture(&wgpu::TextureDescriptor { label, size, mip_level_count: 1, sample_count: 1, dimension: wgpu::TextureDimension::D2, - format: wgpu::TextureFormat::Rgba8UnormSrgb, + format, usage: wgpu::TextureUsages::TEXTURE_BINDING | wgpu::TextureUsages::COPY_DST, + view_formats: &[], }); queue.write_texture( diff --git a/code/beginner/tutorial9-models/Cargo.toml b/code/beginner/tutorial9-models/Cargo.toml index 539ca650..8e5f6d72 100644 --- a/code/beginner/tutorial9-models/Cargo.toml +++ b/code/beginner/tutorial9-models/Cargo.toml @@ -16,7 +16,7 @@ env_logger = "0.10" pollster = "0.2" log = "0.4" tobj = { version = "3.2", features = ["async"]} -wgpu = "0.14" +wgpu = "0.15" winit = "0.27" [dependencies.image] @@ -28,7 +28,7 @@ features = ["png", "jpeg"] reqwest = { version = "0.11" } console_error_panic_hook = "0.1" console_log = "0.2" -wgpu = { version = "0.14", features = ["webgl"]} +wgpu = { version = "0.15", features = ["webgl"]} wasm-bindgen = "0.2" wasm-bindgen-futures = "0.4" web-sys = { version = "0.3", features = [ diff --git a/code/beginner/tutorial9-models/src/lib.rs b/code/beginner/tutorial9-models/src/lib.rs index 01c68b01..d52eefcc 100644 --- a/code/beginner/tutorial9-models/src/lib.rs +++ b/code/beginner/tutorial9-models/src/lib.rs @@ -250,13 +250,16 @@ impl State { // The instance is a handle to our GPU // BackendBit::PRIMARY => Vulkan + Metal + DX12 + Browser WebGPU log::warn!("WGPU setup"); - let instance = wgpu::Instance::new(wgpu::Backends::all()); + let instance = wgpu::Instance::new(wgpu::InstanceDescriptor { + backends: wgpu::Backends::all(), + dx12_shader_compiler: Default::default(), + }); // # Safety // // The surface needs to live as long as the window that created it. // State owns the window so this should be safe. - let surface = unsafe { instance.create_surface(&window) }; + let surface = unsafe { instance.create_surface(&window) }.unwrap(); let adapter = instance .request_adapter(&wgpu::RequestAdapterOptions { @@ -287,13 +290,23 @@ impl State { .unwrap(); log::warn!("Surface"); + let surface_caps = surface.get_capabilities(&adapter); + // Shader code in this tutorial assumes an Srgb surface texture. Using a different + // one will result all the colors comming out darker. If you want to support non + // Srgb surfaces, you'll need to account for that when drawing to the frame. + let surface_format = surface_caps.formats.iter() + .copied() + .filter(|f| f.describe().srgb) + .next() + .unwrap_or(surface_caps.formats[0]); let config = wgpu::SurfaceConfiguration { usage: wgpu::TextureUsages::RENDER_ATTACHMENT, - format: surface.get_supported_formats(&adapter)[0], + format: surface_format, width: size.width, height: size.height, - present_mode: wgpu::PresentMode::Fifo, - alpha_mode: wgpu::CompositeAlphaMode::Auto, + present_mode: surface_caps.present_modes[0], + alpha_mode: surface_caps.alpha_modes[0], + view_formats: vec![surface_format], }; surface.configure(&device, &config); diff --git a/code/beginner/tutorial9-models/src/texture.rs b/code/beginner/tutorial9-models/src/texture.rs index f96dca93..adf2cdbe 100644 --- a/code/beginner/tutorial9-models/src/texture.rs +++ b/code/beginner/tutorial9-models/src/texture.rs @@ -29,6 +29,7 @@ impl Texture { dimension: wgpu::TextureDimension::D2, format: Self::DEPTH_FORMAT, usage: wgpu::TextureUsages::RENDER_ATTACHMENT | wgpu::TextureUsages::TEXTURE_BINDING, + view_formats: &[Self::DEPTH_FORMAT], }; let texture = device.create_texture(&desc); let view = texture.create_view(&wgpu::TextureViewDescriptor::default()); @@ -77,14 +78,16 @@ impl Texture { height: dimensions.1, depth_or_array_layers: 1, }; + let format = wgpu::TextureFormat::Rgba8UnormSrgb; let texture = device.create_texture(&wgpu::TextureDescriptor { label, size, mip_level_count: 1, sample_count: 1, dimension: wgpu::TextureDimension::D2, - format: wgpu::TextureFormat::Rgba8UnormSrgb, + format, usage: wgpu::TextureUsages::TEXTURE_BINDING | wgpu::TextureUsages::COPY_DST, + view_formats: &[], }); queue.write_texture( diff --git a/code/intermediate/tutorial10-lighting/Cargo.toml b/code/intermediate/tutorial10-lighting/Cargo.toml index f95dffdd..9ac6e887 100644 --- a/code/intermediate/tutorial10-lighting/Cargo.toml +++ b/code/intermediate/tutorial10-lighting/Cargo.toml @@ -16,7 +16,7 @@ env_logger = "0.10" pollster = "0.2" log = "0.4" tobj = { version = "3.2", features = ["async"]} -wgpu = { version = "0.14"} +wgpu = { version = "0.15"} winit = "0.27" [dependencies.image] @@ -28,7 +28,7 @@ features = ["png", "jpeg"] reqwest = { version = "0.11" } console_error_panic_hook = "0.1" console_log = "0.2" -wgpu = { version = "0.14", features = ["webgl"]} +wgpu = { version = "0.15", features = ["webgl"]} wasm-bindgen = "0.2" wasm-bindgen-futures = "0.4" web-sys = { version = "0.3", features = [ diff --git a/code/intermediate/tutorial10-lighting/src/lib.rs b/code/intermediate/tutorial10-lighting/src/lib.rs index a9a1a18e..76adcd22 100644 --- a/code/intermediate/tutorial10-lighting/src/lib.rs +++ b/code/intermediate/tutorial10-lighting/src/lib.rs @@ -345,13 +345,16 @@ impl State { // The instance is a handle to our GPU // BackendBit::PRIMARY => Vulkan + Metal + DX12 + Browser WebGPU - let instance = wgpu::Instance::new(wgpu::Backends::all()); + let instance = wgpu::Instance::new(wgpu::InstanceDescriptor { + backends: wgpu::Backends::all(), + dx12_shader_compiler: Default::default(), + }); // # Safety // // The surface needs to live as long as the window that created it. // State owns the window so this should be safe. - let surface = unsafe { instance.create_surface(&window) }; + let surface = unsafe { instance.create_surface(&window) }.unwrap(); let adapter = instance .request_adapter(&wgpu::RequestAdapterOptions { @@ -379,13 +382,23 @@ impl State { .await .unwrap(); + let surface_caps = surface.get_capabilities(&adapter); + // Shader code in this tutorial assumes an Srgb surface texture. Using a different + // one will result all the colors comming out darker. If you want to support non + // Srgb surfaces, you'll need to account for that when drawing to the frame. + let surface_format = surface_caps.formats.iter() + .copied() + .filter(|f| f.describe().srgb) + .next() + .unwrap_or(surface_caps.formats[0]); let config = wgpu::SurfaceConfiguration { usage: wgpu::TextureUsages::RENDER_ATTACHMENT, - format: surface.get_supported_formats(&adapter)[0], + format: surface_format, width: size.width, height: size.height, - present_mode: wgpu::PresentMode::Fifo, - alpha_mode: wgpu::CompositeAlphaMode::Auto, + present_mode: surface_caps.present_modes[0], + alpha_mode: surface_caps.alpha_modes[0], + view_formats: vec![surface_format], }; surface.configure(&device, &config); diff --git a/code/intermediate/tutorial10-lighting/src/texture.rs b/code/intermediate/tutorial10-lighting/src/texture.rs index f96dca93..adf2cdbe 100644 --- a/code/intermediate/tutorial10-lighting/src/texture.rs +++ b/code/intermediate/tutorial10-lighting/src/texture.rs @@ -29,6 +29,7 @@ impl Texture { dimension: wgpu::TextureDimension::D2, format: Self::DEPTH_FORMAT, usage: wgpu::TextureUsages::RENDER_ATTACHMENT | wgpu::TextureUsages::TEXTURE_BINDING, + view_formats: &[Self::DEPTH_FORMAT], }; let texture = device.create_texture(&desc); let view = texture.create_view(&wgpu::TextureViewDescriptor::default()); @@ -77,14 +78,16 @@ impl Texture { height: dimensions.1, depth_or_array_layers: 1, }; + let format = wgpu::TextureFormat::Rgba8UnormSrgb; let texture = device.create_texture(&wgpu::TextureDescriptor { label, size, mip_level_count: 1, sample_count: 1, dimension: wgpu::TextureDimension::D2, - format: wgpu::TextureFormat::Rgba8UnormSrgb, + format, usage: wgpu::TextureUsages::TEXTURE_BINDING | wgpu::TextureUsages::COPY_DST, + view_formats: &[], }); queue.write_texture( diff --git a/code/intermediate/tutorial11-normals/Cargo.toml b/code/intermediate/tutorial11-normals/Cargo.toml index da6956dd..5769bebf 100644 --- a/code/intermediate/tutorial11-normals/Cargo.toml +++ b/code/intermediate/tutorial11-normals/Cargo.toml @@ -16,7 +16,7 @@ env_logger = "0.10" pollster = "0.2" log = "0.4" tobj = { version = "3.2", features = ["async"]} -wgpu = { version = "0.14"} +wgpu = { version = "0.15"} winit = "0.27" [dependencies.image] @@ -28,7 +28,7 @@ features = ["png", "jpeg"] reqwest = { version = "0.11" } console_error_panic_hook = "0.1" console_log = "0.2" -wgpu = { version = "0.14", features = ["webgl"]} +wgpu = { version = "0.15", features = ["webgl"]} wasm-bindgen = "0.2" wasm-bindgen-futures = "0.4" web-sys = { version = "0.3", features = [ diff --git a/code/intermediate/tutorial11-normals/src/lib.rs b/code/intermediate/tutorial11-normals/src/lib.rs index 8540a754..4e9d596e 100644 --- a/code/intermediate/tutorial11-normals/src/lib.rs +++ b/code/intermediate/tutorial11-normals/src/lib.rs @@ -345,13 +345,16 @@ impl State { // The instance is a handle to our GPU // BackendBit::PRIMARY => Vulkan + Metal + DX12 + Browser WebGPU - let instance = wgpu::Instance::new(wgpu::Backends::all()); + let instance = wgpu::Instance::new(wgpu::InstanceDescriptor { + backends: wgpu::Backends::all(), + dx12_shader_compiler: Default::default(), + }); // # Safety // // The surface needs to live as long as the window that created it. // State owns the window so this should be safe. - let surface = unsafe { instance.create_surface(&window) }; + let surface = unsafe { instance.create_surface(&window) }.unwrap(); let adapter = instance .request_adapter(&wgpu::RequestAdapterOptions { @@ -379,13 +382,23 @@ impl State { .await .unwrap(); + let surface_caps = surface.get_capabilities(&adapter); + // Shader code in this tutorial assumes an Srgb surface texture. Using a different + // one will result all the colors comming out darker. If you want to support non + // Srgb surfaces, you'll need to account for that when drawing to the frame. + let surface_format = surface_caps.formats.iter() + .copied() + .filter(|f| f.describe().srgb) + .next() + .unwrap_or(surface_caps.formats[0]); let config = wgpu::SurfaceConfiguration { usage: wgpu::TextureUsages::RENDER_ATTACHMENT, - format: surface.get_supported_formats(&adapter)[0], + format: surface_format, width: size.width, height: size.height, - present_mode: wgpu::PresentMode::Fifo, - alpha_mode: wgpu::CompositeAlphaMode::Auto, + present_mode: surface_caps.present_modes[0], + alpha_mode: surface_caps.alpha_modes[0], + view_formats: vec![surface_format], }; surface.configure(&device, &config); diff --git a/code/intermediate/tutorial11-normals/src/texture.rs b/code/intermediate/tutorial11-normals/src/texture.rs index 24ec29fb..a39c248f 100644 --- a/code/intermediate/tutorial11-normals/src/texture.rs +++ b/code/intermediate/tutorial11-normals/src/texture.rs @@ -29,6 +29,7 @@ impl Texture { dimension: wgpu::TextureDimension::D2, format: Self::DEPTH_FORMAT, usage: wgpu::TextureUsages::RENDER_ATTACHMENT | wgpu::TextureUsages::TEXTURE_BINDING, + view_formats: &[Self::DEPTH_FORMAT], }; let texture = device.create_texture(&desc); let view = texture.create_view(&wgpu::TextureViewDescriptor::default()); @@ -78,18 +79,20 @@ impl Texture { height: dimensions.1, depth_or_array_layers: 1, }; + let format = if is_normal_map { + wgpu::TextureFormat::Rgba8Unorm + } else { + wgpu::TextureFormat::Rgba8UnormSrgb + }; let texture = device.create_texture(&wgpu::TextureDescriptor { label, size, mip_level_count: 1, sample_count: 1, dimension: wgpu::TextureDimension::D2, - format: if is_normal_map { - wgpu::TextureFormat::Rgba8Unorm - } else { - wgpu::TextureFormat::Rgba8UnormSrgb - }, + format, usage: wgpu::TextureUsages::TEXTURE_BINDING | wgpu::TextureUsages::COPY_DST, + view_formats: &[], }); queue.write_texture( diff --git a/code/intermediate/tutorial12-camera/Cargo.toml b/code/intermediate/tutorial12-camera/Cargo.toml index 2511d320..267c2e52 100644 --- a/code/intermediate/tutorial12-camera/Cargo.toml +++ b/code/intermediate/tutorial12-camera/Cargo.toml @@ -16,7 +16,7 @@ env_logger = "0.10" pollster = "0.2" log = "0.4" tobj = { version = "3.2", features = ["async"]} -wgpu = { version = "0.14"} +wgpu = { version = "0.15"} winit = "0.27" instant = "0.1" @@ -29,7 +29,7 @@ features = ["png", "jpeg"] reqwest = { version = "0.11" } console_error_panic_hook = "0.1" console_log = "0.2" -wgpu = { version = "0.14", features = ["webgl"]} +wgpu = { version = "0.15", features = ["webgl"]} wasm-bindgen = "0.2" wasm-bindgen-futures = "0.4" web-sys = { version = "0.3", features = [ diff --git a/code/intermediate/tutorial12-camera/src/lib.rs b/code/intermediate/tutorial12-camera/src/lib.rs index a0effea0..81eb20af 100644 --- a/code/intermediate/tutorial12-camera/src/lib.rs +++ b/code/intermediate/tutorial12-camera/src/lib.rs @@ -225,13 +225,16 @@ impl State { // The instance is a handle to our GPU // BackendBit::PRIMARY => Vulkan + Metal + DX12 + Browser WebGPU - let instance = wgpu::Instance::new(wgpu::Backends::all()); + let instance = wgpu::Instance::new(wgpu::InstanceDescriptor { + backends: wgpu::Backends::all(), + dx12_shader_compiler: Default::default(), + }); // # Safety // // The surface needs to live as long as the window that created it. // State owns the window so this should be safe. - let surface = unsafe { instance.create_surface(&window) }; + let surface = unsafe { instance.create_surface(&window) }.unwrap(); let adapter = instance .request_adapter(&wgpu::RequestAdapterOptions { @@ -259,13 +262,23 @@ impl State { .await .unwrap(); + let surface_caps = surface.get_capabilities(&adapter); + // Shader code in this tutorial assumes an Srgb surface texture. Using a different + // one will result all the colors comming out darker. If you want to support non + // Srgb surfaces, you'll need to account for that when drawing to the frame. + let surface_format = surface_caps.formats.iter() + .copied() + .filter(|f| f.describe().srgb) + .next() + .unwrap_or(surface_caps.formats[0]); let config = wgpu::SurfaceConfiguration { usage: wgpu::TextureUsages::RENDER_ATTACHMENT, - format: surface.get_supported_formats(&adapter)[0], + format: surface_format, width: size.width, height: size.height, - present_mode: wgpu::PresentMode::Fifo, - alpha_mode: wgpu::CompositeAlphaMode::Auto, + present_mode: surface_caps.present_modes[0], + alpha_mode: surface_caps.alpha_modes[0], + view_formats: vec![surface_format], }; surface.configure(&device, &config); diff --git a/code/intermediate/tutorial12-camera/src/texture.rs b/code/intermediate/tutorial12-camera/src/texture.rs index 086d8707..38100184 100644 --- a/code/intermediate/tutorial12-camera/src/texture.rs +++ b/code/intermediate/tutorial12-camera/src/texture.rs @@ -29,6 +29,7 @@ impl Texture { dimension: wgpu::TextureDimension::D2, format: Self::DEPTH_FORMAT, usage: wgpu::TextureUsages::RENDER_ATTACHMENT | wgpu::TextureUsages::TEXTURE_BINDING, + view_formats: &[Self::DEPTH_FORMAT], }; let texture = device.create_texture(&desc); let view = texture.create_view(&wgpu::TextureViewDescriptor::default()); @@ -79,18 +80,20 @@ impl Texture { height: dimensions.1, depth_or_array_layers: 1, }; + let format = if is_normal_map { + wgpu::TextureFormat::Rgba8Unorm + } else { + wgpu::TextureFormat::Rgba8UnormSrgb + }; let texture = device.create_texture(&wgpu::TextureDescriptor { label, size, mip_level_count: 1, sample_count: 1, dimension: wgpu::TextureDimension::D2, - format: if is_normal_map { - wgpu::TextureFormat::Rgba8Unorm - } else { - wgpu::TextureFormat::Rgba8UnormSrgb - }, + format, usage: wgpu::TextureUsages::TEXTURE_BINDING | wgpu::TextureUsages::COPY_DST, + view_formats: &[], }); queue.write_texture( diff --git a/code/intermediate/tutorial13-terrain/Cargo.toml b/code/intermediate/tutorial13-terrain/Cargo.toml index a7ab309d..dd1eed79 100644 --- a/code/intermediate/tutorial13-terrain/Cargo.toml +++ b/code/intermediate/tutorial13-terrain/Cargo.toml @@ -16,7 +16,7 @@ env_logger = "0.10" pollster = "0.2" log = "0.4" tobj = { version = "3.2", features = ["async"]} -wgpu = { version = "0.14"} +wgpu = { version = "0.15"} winit = "0.27" instant = "0.1" @@ -29,7 +29,7 @@ features = ["png", "jpeg"] reqwest = { version = "0.11" } console_error_panic_hook = "0.1" console_log = "0.2" -wgpu = { version = "0.14", features = ["webgl"]} +wgpu = { version = "0.15", features = ["webgl"]} wasm-bindgen = "0.2" wasm-bindgen-futures = "0.4" web-sys = { version = "0.3", features = [ diff --git a/code/intermediate/tutorial13-terrain/src/lib.rs b/code/intermediate/tutorial13-terrain/src/lib.rs index cbb0f55f..608ed6e3 100644 --- a/code/intermediate/tutorial13-terrain/src/lib.rs +++ b/code/intermediate/tutorial13-terrain/src/lib.rs @@ -227,13 +227,16 @@ impl State { // The instance is a handle to our GPU // BackendBit::PRIMARY => Vulkan + Metal + DX12 + Browser WebGPU - let instance = wgpu::Instance::new(wgpu::Backends::all()); + let instance = wgpu::Instance::new(wgpu::InstanceDescriptor { + backends: wgpu::Backends::all(), + dx12_shader_compiler: Default::default(), + }); // # Safety // // The surface needs to live as long as the window that created it. // State owns the window so this should be safe. - let surface = unsafe { instance.create_surface(&window) }; + let surface = unsafe { instance.create_surface(&window) }.unwrap(); let adapter = instance .request_adapter(&wgpu::RequestAdapterOptions { @@ -261,13 +264,23 @@ impl State { .await .unwrap(); + let surface_caps = surface.get_capabilities(&adapter); + // Shader code in this tutorial assumes an Srgb surface texture. Using a different + // one will result all the colors comming out darker. If you want to support non + // Srgb surfaces, you'll need to account for that when drawing to the frame. + let surface_format = surface_caps.formats.iter() + .copied() + .filter(|f| f.describe().srgb) + .next() + .unwrap_or(surface_caps.formats[0]); let config = wgpu::SurfaceConfiguration { usage: wgpu::TextureUsages::RENDER_ATTACHMENT, - format: surface.get_supported_formats(&adapter)[0], + format: surface_format, width: size.width, height: size.height, - present_mode: wgpu::PresentMode::Fifo, - alpha_mode: wgpu::CompositeAlphaMode::Auto, + present_mode: surface_caps.present_modes[0], + alpha_mode: surface_caps.alpha_modes[0], + view_formats: vec![surface_format], }; surface.configure(&device, &config); @@ -527,10 +540,10 @@ impl State { ); let mut terrain = terrain::Terrain::new(chunk_size, min_max_height); - terrain.gen_chunk(&device, &queue, &terrain_hack_pipeline, cgmath::Vector3::zero()); - // terrain.gen_chunk(&device, &queue, &terrain_hack_pipeline, (0.0, 0.0, -(chunk_size.y as f32)).into()); - // terrain.gen_chunk(&device, &queue, &terrain_hack_pipeline, (-(chunk_size.x as f32), 0.0, -(chunk_size.y as f32)).into()); - // terrain.gen_chunk(&device, &queue, &terrain_hack_pipeline, (-(chunk_size.x as f32), 0.0, 0.0).into()); + terrain.gen_chunk(&device, &queue, &terrain_pipeline, cgmath::Vector3::zero()); + terrain.gen_chunk(&device, &queue, &terrain_pipeline, (0.0, 0.0, -(chunk_size.y as f32)).into()); + terrain.gen_chunk(&device, &queue, &terrain_pipeline, (-(chunk_size.x as f32), 0.0, -(chunk_size.y as f32)).into()); + terrain.gen_chunk(&device, &queue, &terrain_pipeline, (-(chunk_size.x as f32), 0.0, 0.0).into()); Self { window, @@ -687,7 +700,7 @@ impl State { // &self.light_bind_group, // ); - self.terrain_hack_pipeline.render(&mut render_pass, &self.terrain, &self.camera_bind_group, &self.light_bind_group); + self.terrain_pipeline.render(&mut render_pass, &self.terrain, &self.camera_bind_group, &self.light_bind_group); } self.queue.submit(iter::once(encoder.finish())); output.present(); diff --git a/code/intermediate/tutorial13-terrain/src/terrain.rs b/code/intermediate/tutorial13-terrain/src/terrain.rs index 53880632..03021a90 100644 --- a/code/intermediate/tutorial13-terrain/src/terrain.rs +++ b/code/intermediate/tutorial13-terrain/src/terrain.rs @@ -205,7 +205,7 @@ impl GenerateChunk for TerrainPipeline { size: (num_vertices * 8 * std::mem::size_of::() as u32) as _, usage: wgpu::BufferUsages::STORAGE | wgpu::BufferUsages::VERTEX - | wgpu::BufferUsages::MAP_READ, + | wgpu::BufferUsages::COPY_SRC, mapped_at_creation: false, }); let num_elements = self.chunk_size.x * self.chunk_size.y * 6; @@ -215,7 +215,7 @@ impl GenerateChunk for TerrainPipeline { size: (num_elements * std::mem::size_of::() as u32) as _, usage: wgpu::BufferUsages::STORAGE | wgpu::BufferUsages::INDEX - | wgpu::BufferUsages::MAP_READ, + | wgpu::BufferUsages::COPY_SRC, mapped_at_creation: false, }); Chunk { @@ -446,6 +446,7 @@ impl TerrainHackPipeline { dimension: wgpu::TextureDimension::D2, format: wgpu::TextureFormat::R32Uint, usage: wgpu::TextureUsages::RENDER_ATTACHMENT | wgpu::TextureUsages::COPY_SRC, + view_formats: &[wgpu::TextureFormat::R32Uint], }) } } diff --git a/code/intermediate/tutorial13-terrain/src/terrain.wgsl b/code/intermediate/tutorial13-terrain/src/terrain.wgsl index 73bde08c..2c85ef2b 100644 --- a/code/intermediate/tutorial13-terrain/src/terrain.wgsl +++ b/code/intermediate/tutorial13-terrain/src/terrain.wgsl @@ -218,8 +218,8 @@ fn gen_terrain_fragment(in: GenVertexOutput) -> GenFragmentOutput { // indices.data[start_index + 4u] = v11; // indices.data[start_index + 5u] = v10; - let vert_component = bitcast(vert_component); - return GenFragmentOutput(vert_component, index); + let ivert_component = bitcast(vert_component); + return GenFragmentOutput(ivert_component, index); } // ============================ diff --git a/code/intermediate/tutorial13-terrain/src/texture.rs b/code/intermediate/tutorial13-terrain/src/texture.rs index 44df967b..13e01fca 100644 --- a/code/intermediate/tutorial13-terrain/src/texture.rs +++ b/code/intermediate/tutorial13-terrain/src/texture.rs @@ -29,6 +29,7 @@ impl Texture { dimension: wgpu::TextureDimension::D2, format: Self::DEPTH_FORMAT, usage: wgpu::TextureUsages::RENDER_ATTACHMENT | wgpu::TextureUsages::TEXTURE_BINDING, + view_formats: &[Self::DEPTH_FORMAT], }; let texture = device.create_texture(&desc); let view = texture.create_view(&wgpu::TextureViewDescriptor::default()); @@ -79,18 +80,20 @@ impl Texture { height: dimensions.1, depth_or_array_layers: 1, }; + let format = if is_normal_map { + wgpu::TextureFormat::Rgba8Unorm + } else { + wgpu::TextureFormat::Rgba8UnormSrgb + }; let texture = device.create_texture(&wgpu::TextureDescriptor { label, size, mip_level_count: 1, sample_count: 1, dimension: wgpu::TextureDimension::D2, - format: if is_normal_map { - wgpu::TextureFormat::Rgba8Unorm - } else { - wgpu::TextureFormat::Rgba8UnormSrgb - }, + format, usage: wgpu::TextureUsages::TEXTURE_BINDING | wgpu::TextureUsages::COPY_DST, + view_formats: &[], }); queue.write_texture( diff --git a/code/showcase/compute/Cargo.toml b/code/showcase/compute/Cargo.toml index 7e7fa638..ea949b26 100644 --- a/code/showcase/compute/Cargo.toml +++ b/code/showcase/compute/Cargo.toml @@ -14,7 +14,7 @@ image = "0.24" log = "0.4" rayon = "1.4" tobj = "2.0" -wgpu = "0.14" +wgpu = "0.15" winit = "0.27" [build-dependencies] diff --git a/code/showcase/compute/src/main.rs b/code/showcase/compute/src/main.rs index 95f4e35c..fb191917 100644 --- a/code/showcase/compute/src/main.rs +++ b/code/showcase/compute/src/main.rs @@ -164,13 +164,16 @@ impl State { // The instance is a handle to our GPU // BackendBit::PRIMARY => Vulkan + Metal + DX12 + Browser WebGPU - let instance = wgpu::Instance::new(wgpu::Backends::all()); + let instance = wgpu::Instance::new(wgpu::InstanceDescriptor { + backends: wgpu::Backends::all(), + dx12_shader_compiler: Default::default(), + }); // # Safety // // The surface needs to live as long as the window that created it. // State owns the window so this should be safe. - let surface = unsafe { instance.create_surface(&window) }; + let surface = unsafe { instance.create_surface(&window) }.unwrap(); let adapter = instance .request_adapter(&wgpu::RequestAdapterOptions { @@ -198,13 +201,23 @@ impl State { .await .unwrap(); + let surface_caps = surface.get_capabilities(&adapter); + // Shader code in this tutorial assumes an Srgb surface texture. Using a different + // one will result all the colors comming out darker. If you want to support non + // Srgb surfaces, you'll need to account for that when drawing to the frame. + let surface_format = surface_caps.formats.iter() + .copied() + .filter(|f| f.describe().srgb) + .next() + .unwrap_or(surface_caps.formats[0]); let config = wgpu::SurfaceConfiguration { usage: wgpu::TextureUsages::RENDER_ATTACHMENT, - format: surface.get_supported_formats(&adapter)[0], + format: surface_format, width: size.width, height: size.height, - present_mode: wgpu::PresentMode::Fifo, - alpha_mode: wgpu::CompositeAlphaMode::Auto, + present_mode: surface_caps.present_modes[0], + alpha_mode: surface_caps.alpha_modes[0], + view_formats: vec![surface_format], }; surface.configure(&device, &config); diff --git a/code/showcase/compute/src/texture.rs b/code/showcase/compute/src/texture.rs index f8950d96..03842c6b 100644 --- a/code/showcase/compute/src/texture.rs +++ b/code/showcase/compute/src/texture.rs @@ -43,6 +43,7 @@ impl Texture { dimension: wgpu::TextureDimension::D2, format: Self::DEPTH_FORMAT, usage: wgpu::TextureUsages::RENDER_ATTACHMENT | wgpu::TextureUsages::TEXTURE_BINDING, + view_formats: &[Self::DEPTH_FORMAT], }; let texture = device.create_texture(&desc); let view = texture.create_view(&wgpu::TextureViewDescriptor::default()); @@ -93,18 +94,20 @@ impl Texture { height: dimensions.1, depth_or_array_layers: 1, }; + let format = if is_normal_map { + wgpu::TextureFormat::Rgba8Unorm + } else { + wgpu::TextureFormat::Rgba8UnormSrgb + }; let texture = device.create_texture(&wgpu::TextureDescriptor { label, size, mip_level_count: 1, sample_count: 1, dimension: wgpu::TextureDimension::D2, - format: if is_normal_map { - wgpu::TextureFormat::Rgba8Unorm - } else { - wgpu::TextureFormat::Rgba8UnormSrgb - }, + format, usage: wgpu::TextureUsages::TEXTURE_BINDING | wgpu::TextureUsages::COPY_DST, + view_formats: &[], }); queue.write_texture( diff --git a/code/showcase/framework/Cargo.toml b/code/showcase/framework/Cargo.toml index 4e94cdef..7b59b2f3 100644 --- a/code/showcase/framework/Cargo.toml +++ b/code/showcase/framework/Cargo.toml @@ -14,7 +14,7 @@ pollster = "0.2" image = "0.24.2" log = "0.4" tobj = "2.0" -wgpu = "0.14" +wgpu = "0.15" wgpu-subscriber = "0.1" winit = "0.27" diff --git a/code/showcase/framework/src/lib.rs b/code/showcase/framework/src/lib.rs index 213208be..cfb4873a 100644 --- a/code/showcase/framework/src/lib.rs +++ b/code/showcase/framework/src/lib.rs @@ -34,8 +34,11 @@ pub struct Display { impl Display { pub async fn new(window: Window) -> Result { let size = window.inner_size(); - let instance = wgpu::Instance::new(wgpu::Backends::all()); - let surface = unsafe { instance.create_surface(&window) }; + let instance = wgpu::Instance::new(wgpu::InstanceDescriptor { + backends: wgpu::Backends::all(), + dx12_shader_compiler: Default::default(), + }); + let surface = unsafe { instance.create_surface(&window) }.unwrap(); let adapter = instance .request_adapter(&wgpu::RequestAdapterOptions { power_preference: wgpu::PowerPreference::default(), @@ -61,13 +64,23 @@ impl Display { ) .await .unwrap(); + let surface_caps = surface.get_capabilities(&adapter); + // Shader code in this tutorial assumes an Srgb surface texture. Using a different + // one will result all the colors comming out darker. If you want to support non + // Srgb surfaces, you'll need to account for that when drawing to the frame. + let surface_format = surface_caps.formats.iter() + .copied() + .filter(|f| f.describe().srgb) + .next() + .unwrap_or(surface_caps.formats[0]); let config = wgpu::SurfaceConfiguration { usage: wgpu::TextureUsages::RENDER_ATTACHMENT, - format: surface.get_supported_formats(&adapter)[0], + format: surface_format, width: size.width, height: size.height, - present_mode: wgpu::PresentMode::Fifo, - alpha_mode: wgpu::CompositeAlphaMode::Auto, + present_mode: surface_caps.present_modes[0], + alpha_mode: surface_caps.alpha_modes[0], + view_formats: vec![surface_format], }; surface.configure(&device, &config); diff --git a/code/showcase/framework/src/texture.rs b/code/showcase/framework/src/texture.rs index 31889d93..5c37f1d8 100644 --- a/code/showcase/framework/src/texture.rs +++ b/code/showcase/framework/src/texture.rs @@ -78,18 +78,20 @@ impl<'a> Texture<'a> { height: dimensions.1, depth_or_array_layers: 1, }; + let format = if is_normal_map { + wgpu::TextureFormat::Rgba8Unorm + } else { + wgpu::TextureFormat::Rgba8UnormSrgb + }; let desc = wgpu::TextureDescriptor { size, mip_level_count: 1, sample_count: 1, dimension: wgpu::TextureDimension::D2, - format: if is_normal_map { - wgpu::TextureFormat::Rgba8Unorm - } else { - wgpu::TextureFormat::Rgba8UnormSrgb - }, + format, usage: wgpu::TextureUsages::TEXTURE_BINDING | wgpu::TextureUsages::COPY_DST, label: None, + view_formats: &[], }; let texture = device.create_texture(&desc); @@ -147,6 +149,7 @@ impl<'a> Texture<'a> { dimension: wgpu::TextureDimension::D2, format: Self::DEPTH_FORMAT, usage: wgpu::TextureUsages::RENDER_ATTACHMENT, + view_formats: &[Self::DEPTH_FORMAT], }; Self::from_descriptor(device, desc) } diff --git a/code/showcase/gifs/Cargo.toml b/code/showcase/gifs/Cargo.toml index e819d42c..5fe7324a 100644 --- a/code/showcase/gifs/Cargo.toml +++ b/code/showcase/gifs/Cargo.toml @@ -14,7 +14,7 @@ pollster = "0.2" image = "0.24.2" log = "0.4" tobj = "3.1" -wgpu = "0.14" +wgpu = "0.15" winit = "0.27" gif = "0.11.4" futures-intrusive = "0.4" diff --git a/code/showcase/gifs/src/main.rs b/code/showcase/gifs/src/main.rs index c231b46f..0daf36ad 100644 --- a/code/showcase/gifs/src/main.rs +++ b/code/showcase/gifs/src/main.rs @@ -4,7 +4,10 @@ extern crate framework; use std::{iter, mem, num::NonZeroU32}; async fn run() { - let instance = wgpu::Instance::new(wgpu::Backends::all()); + let instance = wgpu::Instance::new(wgpu::InstanceDescriptor { + backends: wgpu::Backends::all(), + dx12_shader_compiler: Default::default(), + }); let adapter = instance .request_adapter(&wgpu::RequestAdapterOptions::default()) .await @@ -52,6 +55,7 @@ async fn run() { format: wgpu::TextureFormat::Rgba8UnormSrgb, usage: wgpu::TextureUsages::COPY_SRC | wgpu::TextureUsages::RENDER_ATTACHMENT, label: None, + view_formats: &[], }; let render_target = framework::Texture::from_descriptor(&device, rt_desc); diff --git a/code/showcase/imgui-demo/Cargo.toml b/code/showcase/imgui-demo/Cargo.toml index fb46acdf..12c2f7fc 100644 --- a/code/showcase/imgui-demo/Cargo.toml +++ b/code/showcase/imgui-demo/Cargo.toml @@ -8,7 +8,7 @@ edition = "2018" [dependencies] anyhow = "1.0" -wgpu = "0.14" +wgpu = "0.15" pollster = "0.2" imgui = "0.7" imgui-wgpu = "0.17" diff --git a/code/showcase/lost-window/Cargo.toml b/code/showcase/lost-window/Cargo.toml index 70ecded8..0fe322f2 100644 --- a/code/showcase/lost-window/Cargo.toml +++ b/code/showcase/lost-window/Cargo.toml @@ -7,6 +7,6 @@ edition = "2021" [dependencies] anyhow = "1" -wgpu = "0.14" +wgpu = "0.15" winit = "0.27" pollster = "0.2" \ No newline at end of file diff --git a/code/showcase/lost-window/src/main.rs b/code/showcase/lost-window/src/main.rs index ae1910b7..c6b1cf7f 100644 --- a/code/showcase/lost-window/src/main.rs +++ b/code/showcase/lost-window/src/main.rs @@ -19,8 +19,8 @@ async fn run() -> anyhow::Result<()> { .build(&event_loop)?; let backends = wgpu::Backends::all(); - let instance = wgpu::Instance::new(backends); - let surface = unsafe { instance.create_surface(window.as_ref().unwrap()) }; + let instance = wgpu::Instance::default(); + let surface = unsafe { instance.create_surface(window.as_ref().unwrap()) }.unwrap(); let adapter = instance .enumerate_adapters(backends) .filter(|a| a.is_surface_supported(&surface)) @@ -41,10 +41,11 @@ async fn run() -> anyhow::Result<()> { let mut config = wgpu::SurfaceConfiguration { width: inner_size.width, height: inner_size.height, - format: surface.get_supported_formats(&adapter)[0], + format: surface.get_capabilities(&adapter).formats[0], usage: wgpu::TextureUsages::RENDER_ATTACHMENT, present_mode: Default::default(), alpha_mode: wgpu::CompositeAlphaMode::Auto, + view_formats: vec![], }; surface.configure(&device, &config); diff --git a/code/showcase/mouse-picking/Cargo.toml b/code/showcase/mouse-picking/Cargo.toml index 017b468c..31786404 100644 --- a/code/showcase/mouse-picking/Cargo.toml +++ b/code/showcase/mouse-picking/Cargo.toml @@ -16,7 +16,7 @@ env_logger = "0.10" pollster = "0.2" log = "0.4" tobj = { version = "3.2", features = ["async"]} -wgpu = { version = "0.14"} +wgpu = { version = "0.15"} winit = "0.27" instant = "0.1" @@ -29,7 +29,7 @@ features = ["png", "jpeg"] reqwest = { version = "0.11" } console_error_panic_hook = "0.1" console_log = "0.2" -wgpu = { version = "0.14", features = ["webgl"]} +wgpu = { version = "0.15", features = ["webgl"]} wasm-bindgen = "0.2" wasm-bindgen-futures = "0.4" web-sys = { version = "0.3", features = [ diff --git a/code/showcase/mouse-picking/src/lib.rs b/code/showcase/mouse-picking/src/lib.rs index b26acb82..7a70f2bc 100644 --- a/code/showcase/mouse-picking/src/lib.rs +++ b/code/showcase/mouse-picking/src/lib.rs @@ -230,13 +230,16 @@ impl State { // The instance is a handle to our GPU // BackendBit::PRIMARY => Vulkan + Metal + DX12 + Browser WebGPU - let instance = wgpu::Instance::new(wgpu::Backends::all()); + let instance = wgpu::Instance::new(wgpu::InstanceDescriptor { + backends: wgpu::Backends::all(), + dx12_shader_compiler: Default::default(), + }); // # Safety // // The surface needs to live as long as the window that created it. // State owns the window so this should be safe. - let surface = unsafe { instance.create_surface(&window) }; + let surface = unsafe { instance.create_surface(&window) }.unwrap(); let adapter = instance .request_adapter(&wgpu::RequestAdapterOptions { @@ -264,13 +267,23 @@ impl State { .await .unwrap(); + let surface_caps = surface.get_capabilities(&adapter); + // Shader code in this tutorial assumes an Srgb surface texture. Using a different + // one will result all the colors comming out darker. If you want to support non + // Srgb surfaces, you'll need to account for that when drawing to the frame. + let surface_format = surface_caps.formats.iter() + .copied() + .filter(|f| f.describe().srgb) + .next() + .unwrap_or(surface_caps.formats[0]); let config = wgpu::SurfaceConfiguration { usage: wgpu::TextureUsages::RENDER_ATTACHMENT, - format: surface.get_supported_formats(&adapter)[0], + format: surface_format, width: size.width, height: size.height, - present_mode: wgpu::PresentMode::Fifo, - alpha_mode: wgpu::CompositeAlphaMode::Auto, + present_mode: surface_caps.present_modes[0], + alpha_mode: surface_caps.alpha_modes[0], + view_formats: vec![surface_format], }; surface.configure(&device, &config); diff --git a/code/showcase/mouse-picking/src/texture.rs b/code/showcase/mouse-picking/src/texture.rs index 086d8707..38100184 100644 --- a/code/showcase/mouse-picking/src/texture.rs +++ b/code/showcase/mouse-picking/src/texture.rs @@ -29,6 +29,7 @@ impl Texture { dimension: wgpu::TextureDimension::D2, format: Self::DEPTH_FORMAT, usage: wgpu::TextureUsages::RENDER_ATTACHMENT | wgpu::TextureUsages::TEXTURE_BINDING, + view_formats: &[Self::DEPTH_FORMAT], }; let texture = device.create_texture(&desc); let view = texture.create_view(&wgpu::TextureViewDescriptor::default()); @@ -79,18 +80,20 @@ impl Texture { height: dimensions.1, depth_or_array_layers: 1, }; + let format = if is_normal_map { + wgpu::TextureFormat::Rgba8Unorm + } else { + wgpu::TextureFormat::Rgba8UnormSrgb + }; let texture = device.create_texture(&wgpu::TextureDescriptor { label, size, mip_level_count: 1, sample_count: 1, dimension: wgpu::TextureDimension::D2, - format: if is_normal_map { - wgpu::TextureFormat::Rgba8Unorm - } else { - wgpu::TextureFormat::Rgba8UnormSrgb - }, + format, usage: wgpu::TextureUsages::TEXTURE_BINDING | wgpu::TextureUsages::COPY_DST, + view_formats: &[], }); queue.write_texture( diff --git a/code/showcase/pong/Cargo.toml b/code/showcase/pong/Cargo.toml index 3c7ba014..f6e177ed 100644 --- a/code/showcase/pong/Cargo.toml +++ b/code/showcase/pong/Cargo.toml @@ -15,7 +15,7 @@ anyhow = "1.0" bytemuck = { version = "1.12", features = [ "derive" ] } cgmath = "0.18" pollster = "0.2" -wgpu = { version = "0.14", features = ["spirv"]} +wgpu = { version = "0.15", features = ["spirv"]} wgpu_glyph = "0.18" rand = "0.8" rodio = { version = "0.16", default-features = false, features = ["wav"] } @@ -34,11 +34,11 @@ web-sys = { version = "0.3.53", features = [ "Window", "Element", ]} -wgpu = { version = "0.14", features = ["spirv", "webgl"]} +wgpu = { version = "0.15", features = ["spirv", "webgl"]} [build-dependencies] anyhow = "1.0" fs_extra = "1.2" glob = "0.3" rayon = "1.4" -naga = { version = "0.10", features = ["glsl-in", "spv-out", "wgsl-out"]} +naga = { version = "0.11", features = ["glsl-in", "spv-out", "wgsl-out"]} diff --git a/code/showcase/pong/src/render/mod.rs b/code/showcase/pong/src/render/mod.rs index 06c80d26..754d5acc 100644 --- a/code/showcase/pong/src/render/mod.rs +++ b/code/showcase/pong/src/render/mod.rs @@ -40,13 +40,16 @@ impl Render { log::warn!("size: {:?}", size); // The instance is a handle to our GPU // BackendBit::PRIMARY => Vulkan + Metal + DX12 + Browser WebGPU - let instance = wgpu::Instance::new(wgpu::Backends::all()); + let instance = wgpu::Instance::new(wgpu::InstanceDescriptor { + backends: wgpu::Backends::all(), + dx12_shader_compiler: Default::default(), + }); // # Safety // // The surface needs to live as long as the window that created it. // State owns the window so this should be safe. - let surface = unsafe { instance.create_surface(&window) }; + let surface = unsafe { instance.create_surface(&window) }.unwrap(); let adapter = instance .request_adapter(&wgpu::RequestAdapterOptions { @@ -68,13 +71,23 @@ impl Render { .await .unwrap(); + let surface_caps = surface.get_capabilities(&adapter); + // Shader code in this tutorial assumes an Srgb surface texture. Using a different + // one will result all the colors comming out darker. If you want to support non + // Srgb surfaces, you'll need to account for that when drawing to the frame. + let surface_format = surface_caps.formats.iter() + .copied() + .filter(|f| f.describe().srgb) + .next() + .unwrap_or(surface_caps.formats[0]); let config = wgpu::SurfaceConfiguration { usage: wgpu::TextureUsages::RENDER_ATTACHMENT, - format: surface.get_supported_formats(&adapter)[0], + format: surface_format, width: size.width, height: size.height, - present_mode: wgpu::PresentMode::Fifo, - alpha_mode: wgpu::CompositeAlphaMode::Auto, + present_mode: surface_caps.present_modes[0], + alpha_mode: surface_caps.alpha_modes[0], + view_formats: vec![surface_format], }; surface.configure(&device, &config); diff --git a/code/showcase/threading/Cargo.toml b/code/showcase/threading/Cargo.toml index e3f2d87c..4f8f37be 100644 --- a/code/showcase/threading/Cargo.toml +++ b/code/showcase/threading/Cargo.toml @@ -17,7 +17,7 @@ pollster = "0.2" log = "0.4" rayon = "1.4" # NEW! tobj = { version = "3.2", features = ["async"]} -wgpu = { version = "0.14"} +wgpu = { version = "0.15"} winit = "0.27" instant = "0.1" async-std = "1" @@ -31,7 +31,7 @@ features = ["png", "jpeg"] reqwest = { version = "0.11" } console_error_panic_hook = "0.1" console_log = "0.2" -wgpu = { version = "0.14", features = ["webgl"]} +wgpu = { version = "0.15", features = ["webgl"]} wasm-bindgen = "0.2" wasm-bindgen-futures = "0.4" web-sys = { version = "0.3", features = [ diff --git a/code/showcase/threading/src/lib.rs b/code/showcase/threading/src/lib.rs index 8f91e0fe..e7dc2352 100644 --- a/code/showcase/threading/src/lib.rs +++ b/code/showcase/threading/src/lib.rs @@ -224,13 +224,16 @@ impl State { // The instance is a handle to our GPU // BackendBit::PRIMARY => Vulkan + Metal + DX12 + Browser WebGPU - let instance = wgpu::Instance::new(wgpu::Backends::all()); + let instance = wgpu::Instance::new(wgpu::InstanceDescriptor { + backends: wgpu::Backends::all(), + dx12_shader_compiler: Default::default(), + }); // # Safety // // The surface needs to live as long as the window that created it. // State owns the window so this should be safe. - let surface = unsafe { instance.create_surface(&window) }; + let surface = unsafe { instance.create_surface(&window) }.unwrap(); let adapter = instance .request_adapter(&wgpu::RequestAdapterOptions { @@ -258,13 +261,23 @@ impl State { .await .unwrap(); + let surface_caps = surface.get_capabilities(&adapter); + // Shader code in this tutorial assumes an Srgb surface texture. Using a different + // one will result all the colors comming out darker. If you want to support non + // Srgb surfaces, you'll need to account for that when drawing to the frame. + let surface_format = surface_caps.formats.iter() + .copied() + .filter(|f| f.describe().srgb) + .next() + .unwrap_or(surface_caps.formats[0]); let config = wgpu::SurfaceConfiguration { usage: wgpu::TextureUsages::RENDER_ATTACHMENT, - format: surface.get_supported_formats(&adapter)[0], + format: surface_format, width: size.width, height: size.height, - present_mode: wgpu::PresentMode::Fifo, - alpha_mode: wgpu::CompositeAlphaMode::Auto, + present_mode: surface_caps.present_modes[0], + alpha_mode: surface_caps.alpha_modes[0], + view_formats: vec![surface_format], }; surface.configure(&device, &config); diff --git a/code/showcase/threading/src/texture.rs b/code/showcase/threading/src/texture.rs index 086d8707..38100184 100644 --- a/code/showcase/threading/src/texture.rs +++ b/code/showcase/threading/src/texture.rs @@ -29,6 +29,7 @@ impl Texture { dimension: wgpu::TextureDimension::D2, format: Self::DEPTH_FORMAT, usage: wgpu::TextureUsages::RENDER_ATTACHMENT | wgpu::TextureUsages::TEXTURE_BINDING, + view_formats: &[Self::DEPTH_FORMAT], }; let texture = device.create_texture(&desc); let view = texture.create_view(&wgpu::TextureViewDescriptor::default()); @@ -79,18 +80,20 @@ impl Texture { height: dimensions.1, depth_or_array_layers: 1, }; + let format = if is_normal_map { + wgpu::TextureFormat::Rgba8Unorm + } else { + wgpu::TextureFormat::Rgba8UnormSrgb + }; let texture = device.create_texture(&wgpu::TextureDescriptor { label, size, mip_level_count: 1, sample_count: 1, dimension: wgpu::TextureDimension::D2, - format: if is_normal_map { - wgpu::TextureFormat::Rgba8Unorm - } else { - wgpu::TextureFormat::Rgba8UnormSrgb - }, + format, usage: wgpu::TextureUsages::TEXTURE_BINDING | wgpu::TextureUsages::COPY_DST, + view_formats: &[], }); queue.write_texture( diff --git a/code/showcase/windowless/Cargo.toml b/code/showcase/windowless/Cargo.toml index 57da586c..ed65ddab 100644 --- a/code/showcase/windowless/Cargo.toml +++ b/code/showcase/windowless/Cargo.toml @@ -9,7 +9,7 @@ edition = "2018" [dependencies] image = "0.24" shaderc = "0.8" -wgpu = { version = "0.14", features = ["spirv"] } +wgpu = { version = "0.15", features = ["spirv"] } pollster = "0.2" futures-intrusive = "0.4" diff --git a/code/showcase/windowless/src/main.rs b/code/showcase/windowless/src/main.rs index c87398fb..5e84421c 100644 --- a/code/showcase/windowless/src/main.rs +++ b/code/showcase/windowless/src/main.rs @@ -1,7 +1,10 @@ use std::num::NonZeroU32; async fn run() { - let instance = wgpu::Instance::new(wgpu::Backends::all()); + let instance = wgpu::Instance::new(wgpu::InstanceDescriptor { + backends: wgpu::Backends::all(), + dx12_shader_compiler: Default::default(), + }); let adapter = instance .request_adapter(&wgpu::RequestAdapterOptions { power_preference: wgpu::PowerPreference::default(), @@ -28,6 +31,7 @@ async fn run() { format: wgpu::TextureFormat::Rgba8UnormSrgb, usage: wgpu::TextureUsages::COPY_SRC | wgpu::TextureUsages::RENDER_ATTACHMENT, label: None, + view_formats: &[], }; let texture = device.create_texture(&texture_desc); let texture_view = texture.create_view(&Default::default()); diff --git a/docs/beginner/tutorial1-window/README.md b/docs/beginner/tutorial1-window/README.md index 99d92a9a..1a47f2b4 100644 --- a/docs/beginner/tutorial1-window/README.md +++ b/docs/beginner/tutorial1-window/README.md @@ -11,7 +11,7 @@ For the beginner stuff, we're going to keep things very simple, we'll add things winit = "0.27" env_logger = "0.10" log = "0.4" -wgpu = "0.14" +wgpu = "0.15" ``` ## Using Rust's new resolver @@ -110,7 +110,7 @@ cfg-if = "1" [target.'cfg(target_arch = "wasm32")'.dependencies] console_error_panic_hook = "0.1.6" console_log = "0.2.0" -wgpu = { version = "0.14", features = ["webgl"]} +wgpu = { version = "0.15", features = ["webgl"]} wasm-bindgen = "0.2" wasm-bindgen-futures = "0.4.30" web-sys = { version = "0.3", features = [ diff --git a/docs/beginner/tutorial2-surface/README.md b/docs/beginner/tutorial2-surface/README.md index 5a649412..aa72413e 100644 --- a/docs/beginner/tutorial2-surface/README.md +++ b/docs/beginner/tutorial2-surface/README.md @@ -57,13 +57,16 @@ impl State { // The instance is a handle to our GPU // Backends::all => Vulkan + Metal + DX12 + Browser WebGPU - let instance = wgpu::Instance::new(wgpu::Backends::all()); + let instance = wgpu::Instance::new(wgpu::InstanceDescriptor { + backends: wgpu::Backends::all(), + dx12_shader_compiler: Default::default(), + }); // # Safety // // The surface needs to live as long as the window that created it. // State owns the window so this should be safe. - let surface = unsafe { instance.create_surface(&window) }; + let surface = unsafe { instance.create_surface(&window) }.unwrap(); let adapter = instance.request_adapter( &wgpu::RequestAdapterOptions { @@ -95,12 +98,14 @@ let adapter = instance .enumerate_adapters(wgpu::Backends::all()) .filter(|adapter| { // Check if this adapter supports our surface - !surface.get_supported_formats(&adapter).is_empty() + adapter.is_surface_supported(&surface) }) .next() .unwrap() ``` +One thing to note is that `enumerate_adapters` isn't available on WASM, so you have to use `request_adapter`. + Another thing to note is that `Adapter`s are locked to a specific backend. If you are on Windows and have 2 graphics cards you'll have at least 4 adapters available to use, 2 Vulkan and 2 DirectX. For more fields you can use to refine your search, [check out the docs](https://docs.rs/wgpu/latest/wgpu/struct.Adapter.html). @@ -148,13 +153,23 @@ You can view a full list of features [here](https://docs.rs/wgpu/latest/wgpu/str The `limits` field describes the limit of certain types of resources that we can create. We'll use the defaults for this tutorial, so we can support most devices. You can view a list of limits [here](https://docs.rs/wgpu/latest/wgpu/struct.Limits.html). ```rust + let surface_caps = surface.get_capabilities(&adapter); + // Shader code in this tutorial assumes an Srgb surface texture. Using a different + // one will result all the colors comming out darker. If you want to support non + // Srgb surfaces, you'll need to account for that when drawing to the frame. + let surface_format = surface_caps.formats.iter() + .copied() + .filter(|f| f.describe().srgb) + .next() + .unwrap_or(surface_caps.formats[0]); let config = wgpu::SurfaceConfiguration { usage: wgpu::TextureUsages::RENDER_ATTACHMENT, - format: surface.get_supported_formats(&adapter)[0], + format: surface_format, width: size.width, height: size.height, - present_mode: wgpu::PresentMode::Fifo, - alpha_mode: wgpu::CompositeAlphaMode::Auto, + present_mode: surface_caps.present_modes[0], + alpha_mode: surface_caps.alpha_modes[0], + view_formats: vec![surface_format], }; surface.configure(&device, &config); ``` @@ -163,7 +178,7 @@ Here we are defining a config for our surface. This will define how the surface The `usage` field describes how `SurfaceTexture`s will be used. `RENDER_ATTACHMENT` specifies that the textures will be used to write to the screen (we'll talk about more `TextureUsages`s later). -The `format` defines how `SurfaceTexture`s will be stored on the gpu. `surface.get_supported_formats(&adapter)` returns a `Vec` of the formats that are supported by that surface. While a surface may support many formats, it usually has a format that it prefers, in which case it places that format first in the returned `Vec`. We use the format in the first position (`[0]`) to get the best format to use for that particular surface. +The `format` defines how `SurfaceTexture`s will be stored on the gpu. We can get a supported format from the `SurfaceCapabilities`. `width` and `height` are the width and the height in pixels of a `SurfaceTexture`. This should usually be the width and the height of the window. @@ -244,13 +259,13 @@ cfg-if = "1" winit = "0.27" env_logger = "0.10" log = "0.4" -wgpu = "0.14" +wgpu = "0.15" pollster = "0.2" [target.'cfg(target_arch = "wasm32")'.dependencies] console_error_panic_hook = "0.1.6" console_log = "0.2.0" -wgpu = { version = "0.14", features = ["webgl"]} +wgpu = { version = "0.15", features = ["webgl"]} wasm-bindgen = "0.2" wasm-bindgen-futures = "0.4" web-sys = { version = "0.3", features = [ diff --git a/docs/beginner/tutorial5-textures/README.md b/docs/beginner/tutorial5-textures/README.md index 3b6f3e8b..04d0ec5d 100644 --- a/docs/beginner/tutorial5-textures/README.md +++ b/docs/beginner/tutorial5-textures/README.md @@ -442,7 +442,7 @@ winit = "0.27" env_logger = "0.10" log = "0.4" pollster = "0.2" -wgpu = "0.14" +wgpu = "0.15" bytemuck = { version = "1.12", features = [ "derive" ] } anyhow = "1.0" # NEW! ``` diff --git a/docs/showcase/imgui-demo/README.md b/docs/showcase/imgui-demo/README.md index 95c6c586..79423c91 100644 --- a/docs/showcase/imgui-demo/README.md +++ b/docs/showcase/imgui-demo/README.md @@ -14,7 +14,7 @@ This is not an in-depth guide on how to use Imgui. But here are some of the basi ```toml imgui = "0.7" -imgui-wgpu = "0.14" +imgui-wgpu = "0.15" imgui-winit-support = "0.7" ``` diff --git a/docs/showcase/pong/README.md b/docs/showcase/pong/README.md index 6b4c65ce..7e8f4e0c 100644 --- a/docs/showcase/pong/README.md +++ b/docs/showcase/pong/README.md @@ -268,7 +268,7 @@ anyhow = "1.0" bytemuck = { version = "1.12", features = [ "derive" ] } cgmath = "0.18" pollster = "0.2" -wgpu = { version = "0.14", features = ["spirv"]} +wgpu = { version = "0.15", features = ["spirv"]} wgpu_glyph = "0.17" rand = "0.8" rodio = { version = "0.15", default-features = false, features = ["wav"] } @@ -287,7 +287,7 @@ web-sys = { version = "0.3.53", features = [ "Window", "Element", ]} -wgpu = { version = "0.14", features = ["spirv", "webgl"]} +wgpu = { version = "0.15", features = ["spirv", "webgl"]} [build-dependencies] anyhow = "1.0" diff --git a/docs/showcase/windowless/README.md b/docs/showcase/windowless/README.md index 86c383ee..0f5a13f4 100644 --- a/docs/showcase/windowless/README.md +++ b/docs/showcase/windowless/README.md @@ -100,7 +100,7 @@ Update dependencies to support SPIR-V module. [dependencies] image = "0.23" shaderc = "0.7" -wgpu = { version = "0.14", features = ["spirv"] } +wgpu = { version = "0.15", features = ["spirv"] } pollster = "0.2" ``` From 9f2ecaec4ac4e4ebe9fec4003b105a2e39a326e8 Mon Sep 17 00:00:00 2001 From: Benjamin Hansen Date: Wed, 1 Feb 2023 21:26:30 -0700 Subject: [PATCH 2/4] added `view_formats` details to the docs --- code/beginner/tutorial2-surface/src/challenge.rs | 2 +- code/beginner/tutorial2-surface/src/lib.rs | 2 +- code/beginner/tutorial3-pipeline/src/challenge.rs | 2 +- code/beginner/tutorial3-pipeline/src/lib.rs | 2 +- code/beginner/tutorial4-buffer/src/challenge.rs | 2 +- code/beginner/tutorial4-buffer/src/lib.rs | 2 +- code/beginner/tutorial5-textures/src/challenge.rs | 2 +- code/beginner/tutorial5-textures/src/lib.rs | 2 +- code/beginner/tutorial6-uniforms/src/challenge.rs | 2 +- code/beginner/tutorial6-uniforms/src/lib.rs | 2 +- code/beginner/tutorial7-instancing/src/challenge.rs | 2 +- code/beginner/tutorial7-instancing/src/lib.rs | 2 +- code/beginner/tutorial8-depth/src/challenge.rs | 2 +- code/beginner/tutorial8-depth/src/lib.rs | 2 +- code/beginner/tutorial9-models/src/lib.rs | 2 +- code/intermediate/tutorial10-lighting/src/lib.rs | 2 +- code/intermediate/tutorial11-normals/src/lib.rs | 2 +- code/intermediate/tutorial12-camera/src/lib.rs | 2 +- code/intermediate/tutorial13-terrain/src/lib.rs | 2 +- code/showcase/compute/src/main.rs | 2 +- code/showcase/framework/src/lib.rs | 2 +- code/showcase/mouse-picking/src/lib.rs | 2 +- code/showcase/pong/src/render/mod.rs | 2 +- code/showcase/threading/src/lib.rs | 2 +- docs/beginner/tutorial2-surface/README.md | 10 +++++++--- docs/beginner/tutorial5-textures/README.md | 9 +++++++++ docs/intermediate/tutorial11-normals/README.md | 13 ++++++++----- 27 files changed, 48 insertions(+), 32 deletions(-) diff --git a/code/beginner/tutorial2-surface/src/challenge.rs b/code/beginner/tutorial2-surface/src/challenge.rs index 36ffc5d5..899c7c57 100644 --- a/code/beginner/tutorial2-surface/src/challenge.rs +++ b/code/beginner/tutorial2-surface/src/challenge.rs @@ -80,7 +80,7 @@ impl State { height: size.height, present_mode: surface_caps.present_modes[0], alpha_mode: surface_caps.alpha_modes[0], - view_formats: vec![surface_format], + view_formats: vec![], }; surface.configure(&device, &config); diff --git a/code/beginner/tutorial2-surface/src/lib.rs b/code/beginner/tutorial2-surface/src/lib.rs index b49913e3..858ebe50 100644 --- a/code/beginner/tutorial2-surface/src/lib.rs +++ b/code/beginner/tutorial2-surface/src/lib.rs @@ -79,7 +79,7 @@ impl State { height: size.height, present_mode: surface_caps.present_modes[0], alpha_mode: surface_caps.alpha_modes[0], - view_formats: vec![surface_format], + view_formats: vec![], }; surface.configure(&device, &config); diff --git a/code/beginner/tutorial3-pipeline/src/challenge.rs b/code/beginner/tutorial3-pipeline/src/challenge.rs index 9d331b08..d6cf6667 100644 --- a/code/beginner/tutorial3-pipeline/src/challenge.rs +++ b/code/beginner/tutorial3-pipeline/src/challenge.rs @@ -78,7 +78,7 @@ impl State { height: size.height, present_mode: surface_caps.present_modes[0], alpha_mode: surface_caps.alpha_modes[0], - view_formats: vec![surface_format], + view_formats: vec![], }; surface.configure(&device, &config); diff --git a/code/beginner/tutorial3-pipeline/src/lib.rs b/code/beginner/tutorial3-pipeline/src/lib.rs index 4e3e65d1..b5d50826 100644 --- a/code/beginner/tutorial3-pipeline/src/lib.rs +++ b/code/beginner/tutorial3-pipeline/src/lib.rs @@ -80,7 +80,7 @@ impl State { height: size.height, present_mode: surface_caps.present_modes[0], alpha_mode: surface_caps.alpha_modes[0], - view_formats: vec![surface_format], + view_formats: vec![], }; surface.configure(&device, &config); diff --git a/code/beginner/tutorial4-buffer/src/challenge.rs b/code/beginner/tutorial4-buffer/src/challenge.rs index 3f683cc0..c1aa27c3 100644 --- a/code/beginner/tutorial4-buffer/src/challenge.rs +++ b/code/beginner/tutorial4-buffer/src/challenge.rs @@ -141,7 +141,7 @@ impl State { height: size.height, present_mode: surface_caps.present_modes[0], alpha_mode: surface_caps.alpha_modes[0], - view_formats: vec![surface_format], + view_formats: vec![], }; surface.configure(&device, &config); diff --git a/code/beginner/tutorial4-buffer/src/lib.rs b/code/beginner/tutorial4-buffer/src/lib.rs index 315774ef..dd71cbd9 100644 --- a/code/beginner/tutorial4-buffer/src/lib.rs +++ b/code/beginner/tutorial4-buffer/src/lib.rs @@ -137,7 +137,7 @@ impl State { height: size.height, present_mode: surface_caps.present_modes[0], alpha_mode: surface_caps.alpha_modes[0], - view_formats: vec![surface_format], + view_formats: vec![], }; surface.configure(&device, &config); diff --git a/code/beginner/tutorial5-textures/src/challenge.rs b/code/beginner/tutorial5-textures/src/challenge.rs index a9571c6b..3160dea4 100644 --- a/code/beginner/tutorial5-textures/src/challenge.rs +++ b/code/beginner/tutorial5-textures/src/challenge.rs @@ -142,7 +142,7 @@ impl State { height: size.height, present_mode: surface_caps.present_modes[0], alpha_mode: surface_caps.alpha_modes[0], - view_formats: vec![surface_format], + view_formats: vec![], }; surface.configure(&device, &config); diff --git a/code/beginner/tutorial5-textures/src/lib.rs b/code/beginner/tutorial5-textures/src/lib.rs index ba31a75b..34c5794c 100644 --- a/code/beginner/tutorial5-textures/src/lib.rs +++ b/code/beginner/tutorial5-textures/src/lib.rs @@ -142,7 +142,7 @@ impl State { height: size.height, present_mode: surface_caps.present_modes[0], alpha_mode: surface_caps.alpha_modes[0], - view_formats: vec![surface_format], + view_formats: vec![], }; surface.configure(&device, &config); diff --git a/code/beginner/tutorial6-uniforms/src/challenge.rs b/code/beginner/tutorial6-uniforms/src/challenge.rs index a4151884..d275e47c 100644 --- a/code/beginner/tutorial6-uniforms/src/challenge.rs +++ b/code/beginner/tutorial6-uniforms/src/challenge.rs @@ -292,7 +292,7 @@ impl State { height: size.height, present_mode: surface_caps.present_modes[0], alpha_mode: surface_caps.alpha_modes[0], - view_formats: vec![surface_format], + view_formats: vec![], }; surface.configure(&device, &config); diff --git a/code/beginner/tutorial6-uniforms/src/lib.rs b/code/beginner/tutorial6-uniforms/src/lib.rs index ff1ddabd..9e15635b 100644 --- a/code/beginner/tutorial6-uniforms/src/lib.rs +++ b/code/beginner/tutorial6-uniforms/src/lib.rs @@ -292,7 +292,7 @@ impl State { height: size.height, present_mode: surface_caps.present_modes[0], alpha_mode: surface_caps.alpha_modes[0], - view_formats: vec![surface_format], + view_formats: vec![], }; surface.configure(&device, &config); diff --git a/code/beginner/tutorial7-instancing/src/challenge.rs b/code/beginner/tutorial7-instancing/src/challenge.rs index d0edcb38..3207a90d 100644 --- a/code/beginner/tutorial7-instancing/src/challenge.rs +++ b/code/beginner/tutorial7-instancing/src/challenge.rs @@ -346,7 +346,7 @@ impl State { height: size.height, present_mode: surface_caps.present_modes[0], alpha_mode: surface_caps.alpha_modes[0], - view_formats: vec![surface_format], + view_formats: vec![], }; surface.configure(&device, &config); diff --git a/code/beginner/tutorial7-instancing/src/lib.rs b/code/beginner/tutorial7-instancing/src/lib.rs index e3c9a925..05832785 100644 --- a/code/beginner/tutorial7-instancing/src/lib.rs +++ b/code/beginner/tutorial7-instancing/src/lib.rs @@ -353,7 +353,7 @@ impl State { height: size.height, present_mode: surface_caps.present_modes[0], alpha_mode: surface_caps.alpha_modes[0], - view_formats: vec![surface_format], + view_formats: vec![], }; surface.configure(&device, &config); diff --git a/code/beginner/tutorial8-depth/src/challenge.rs b/code/beginner/tutorial8-depth/src/challenge.rs index 00cff25d..a72384db 100644 --- a/code/beginner/tutorial8-depth/src/challenge.rs +++ b/code/beginner/tutorial8-depth/src/challenge.rs @@ -535,7 +535,7 @@ impl State { height: size.height, present_mode: surface_caps.present_modes[0], alpha_mode: surface_caps.alpha_modes[0], - view_formats: vec![surface_format], + view_formats: vec![], }; surface.configure(&device, &config); diff --git a/code/beginner/tutorial8-depth/src/lib.rs b/code/beginner/tutorial8-depth/src/lib.rs index 39af8208..abfa4bdf 100644 --- a/code/beginner/tutorial8-depth/src/lib.rs +++ b/code/beginner/tutorial8-depth/src/lib.rs @@ -363,7 +363,7 @@ impl State { height: size.height, present_mode: surface_caps.present_modes[0], alpha_mode: surface_caps.alpha_modes[0], - view_formats: vec![surface_format], + view_formats: vec![], }; surface.configure(&device, &config); diff --git a/code/beginner/tutorial9-models/src/lib.rs b/code/beginner/tutorial9-models/src/lib.rs index d52eefcc..f2e5595f 100644 --- a/code/beginner/tutorial9-models/src/lib.rs +++ b/code/beginner/tutorial9-models/src/lib.rs @@ -306,7 +306,7 @@ impl State { height: size.height, present_mode: surface_caps.present_modes[0], alpha_mode: surface_caps.alpha_modes[0], - view_formats: vec![surface_format], + view_formats: vec![], }; surface.configure(&device, &config); diff --git a/code/intermediate/tutorial10-lighting/src/lib.rs b/code/intermediate/tutorial10-lighting/src/lib.rs index 76adcd22..9e075cf1 100644 --- a/code/intermediate/tutorial10-lighting/src/lib.rs +++ b/code/intermediate/tutorial10-lighting/src/lib.rs @@ -398,7 +398,7 @@ impl State { height: size.height, present_mode: surface_caps.present_modes[0], alpha_mode: surface_caps.alpha_modes[0], - view_formats: vec![surface_format], + view_formats: vec![], }; surface.configure(&device, &config); diff --git a/code/intermediate/tutorial11-normals/src/lib.rs b/code/intermediate/tutorial11-normals/src/lib.rs index 4e9d596e..b560b76e 100644 --- a/code/intermediate/tutorial11-normals/src/lib.rs +++ b/code/intermediate/tutorial11-normals/src/lib.rs @@ -398,7 +398,7 @@ impl State { height: size.height, present_mode: surface_caps.present_modes[0], alpha_mode: surface_caps.alpha_modes[0], - view_formats: vec![surface_format], + view_formats: vec![], }; surface.configure(&device, &config); diff --git a/code/intermediate/tutorial12-camera/src/lib.rs b/code/intermediate/tutorial12-camera/src/lib.rs index 81eb20af..3daf18da 100644 --- a/code/intermediate/tutorial12-camera/src/lib.rs +++ b/code/intermediate/tutorial12-camera/src/lib.rs @@ -278,7 +278,7 @@ impl State { height: size.height, present_mode: surface_caps.present_modes[0], alpha_mode: surface_caps.alpha_modes[0], - view_formats: vec![surface_format], + view_formats: vec![], }; surface.configure(&device, &config); diff --git a/code/intermediate/tutorial13-terrain/src/lib.rs b/code/intermediate/tutorial13-terrain/src/lib.rs index 608ed6e3..1d5d5d41 100644 --- a/code/intermediate/tutorial13-terrain/src/lib.rs +++ b/code/intermediate/tutorial13-terrain/src/lib.rs @@ -280,7 +280,7 @@ impl State { height: size.height, present_mode: surface_caps.present_modes[0], alpha_mode: surface_caps.alpha_modes[0], - view_formats: vec![surface_format], + view_formats: vec![], }; surface.configure(&device, &config); diff --git a/code/showcase/compute/src/main.rs b/code/showcase/compute/src/main.rs index fb191917..5d7478dc 100644 --- a/code/showcase/compute/src/main.rs +++ b/code/showcase/compute/src/main.rs @@ -217,7 +217,7 @@ impl State { height: size.height, present_mode: surface_caps.present_modes[0], alpha_mode: surface_caps.alpha_modes[0], - view_formats: vec![surface_format], + view_formats: vec![], }; surface.configure(&device, &config); diff --git a/code/showcase/framework/src/lib.rs b/code/showcase/framework/src/lib.rs index cfb4873a..8a5c5c80 100644 --- a/code/showcase/framework/src/lib.rs +++ b/code/showcase/framework/src/lib.rs @@ -80,7 +80,7 @@ impl Display { height: size.height, present_mode: surface_caps.present_modes[0], alpha_mode: surface_caps.alpha_modes[0], - view_formats: vec![surface_format], + view_formats: vec![], }; surface.configure(&device, &config); diff --git a/code/showcase/mouse-picking/src/lib.rs b/code/showcase/mouse-picking/src/lib.rs index 7a70f2bc..11f385c6 100644 --- a/code/showcase/mouse-picking/src/lib.rs +++ b/code/showcase/mouse-picking/src/lib.rs @@ -283,7 +283,7 @@ impl State { height: size.height, present_mode: surface_caps.present_modes[0], alpha_mode: surface_caps.alpha_modes[0], - view_formats: vec![surface_format], + view_formats: vec![], }; surface.configure(&device, &config); diff --git a/code/showcase/pong/src/render/mod.rs b/code/showcase/pong/src/render/mod.rs index 754d5acc..910a9664 100644 --- a/code/showcase/pong/src/render/mod.rs +++ b/code/showcase/pong/src/render/mod.rs @@ -87,7 +87,7 @@ impl Render { height: size.height, present_mode: surface_caps.present_modes[0], alpha_mode: surface_caps.alpha_modes[0], - view_formats: vec![surface_format], + view_formats: vec![], }; surface.configure(&device, &config); diff --git a/code/showcase/threading/src/lib.rs b/code/showcase/threading/src/lib.rs index e7dc2352..58e629b5 100644 --- a/code/showcase/threading/src/lib.rs +++ b/code/showcase/threading/src/lib.rs @@ -277,7 +277,7 @@ impl State { height: size.height, present_mode: surface_caps.present_modes[0], alpha_mode: surface_caps.alpha_modes[0], - view_formats: vec![surface_format], + view_formats: vec![], }; surface.configure(&device, &config); diff --git a/docs/beginner/tutorial2-surface/README.md b/docs/beginner/tutorial2-surface/README.md index aa72413e..8242dfc2 100644 --- a/docs/beginner/tutorial2-surface/README.md +++ b/docs/beginner/tutorial2-surface/README.md @@ -169,7 +169,7 @@ The `limits` field describes the limit of certain types of resources that we can height: size.height, present_mode: surface_caps.present_modes[0], alpha_mode: surface_caps.alpha_modes[0], - view_formats: vec![surface_format], + view_formats: vec![], }; surface.configure(&device, &config); ``` @@ -190,16 +190,20 @@ Make sure that the width and height of the `SurfaceTexture` are not 0, as that c
-If you want to let your users pick what `PresentMode` they use, you can use [Surface::get_supported_modes()](https://docs.rs/wgpu/latest/wgpu/struct.Surface.html#method.get_supported_modes) to get a list of all the `PresentMode`s the surface supports: +If you want to let your users pick what `PresentMode` they use, you can use [SurfaceCapabilities::present_modes](https://docs.rs/wgpu/latest/wgpu/struct.SurfaceCapabilities.html#structfield.present_modes) to get a list of all the `PresentMode`s the surface supports: ```rust -let modes = surface.get_supported_modes(&adapter); +let modes = &surface_caps.present_modes; ``` Regardless, `PresentMode::Fifo` will always be supported, and `PresentMode::AutoVsync` and `PresentMode::AutoNoVsync` have fallback support and therefore will work on all platforms.
+`alpha_mode` is honestly not something I'm familiar with. I believe it has something to do with transparent windows, but feel free to open a pull request. For now we'll just use the first `AlphaMode` in the list given by `surface_caps`. + +`view_formats` is a list of `TextureFormat`s that you can use when creating `TextureView`s (we'll cover those briefly later in the this tutorial as well as more in depth [in the texture tutorial](../beginner/tutorial5-textures)). As of writing this means that if your surface is srgb color space, you can create a texture view that uses a linear color space. + Now that we've configured our surface properly we can add these new fields at the end of the method. ```rust diff --git a/docs/beginner/tutorial5-textures/README.md b/docs/beginner/tutorial5-textures/README.md index 04d0ec5d..a9161931 100644 --- a/docs/beginner/tutorial5-textures/README.md +++ b/docs/beginner/tutorial5-textures/README.md @@ -65,6 +65,14 @@ let diffuse_texture = device.create_texture( // COPY_DST means that we want to copy data to this texture usage: wgpu::TextureUsages::TEXTURE_BINDING | wgpu::TextureUsages::COPY_DST, label: Some("diffuse_texture"), + // This is the same as with the SurfaceConfig. It + // specifies what texture formats can be used to + // create TextureViews for this texture. The base + // texture format (Rgba8UnormSrgb in this case) is + // always supported. Note that using a different + // texture format is not supported on the WebGL2 + // backend. + view_formats: &[], } ); ``` @@ -493,6 +501,7 @@ impl Texture { dimension: wgpu::TextureDimension::D2, format: wgpu::TextureFormat::Rgba8UnormSrgb, usage: wgpu::TextureUsages::TEXTURE_BINDING | wgpu::TextureUsages::COPY_DST, + view_formats: &[], } ); diff --git a/docs/intermediate/tutorial11-normals/README.md b/docs/intermediate/tutorial11-normals/README.md index 88da99a9..f7aaeae5 100644 --- a/docs/intermediate/tutorial11-normals/README.md +++ b/docs/intermediate/tutorial11-normals/README.md @@ -442,6 +442,12 @@ pub fn from_image( is_normal_map: bool, // NEW! ) -> Result { // ... + // NEW! + let format = if is_normal_map { + wgpu::TextureFormat::Rgba8Unorm + } else { + wgpu::TextureFormat::Rgba8UnormSrgb + }; let texture = device.create_texture(&wgpu::TextureDescriptor { label, size, @@ -449,12 +455,9 @@ pub fn from_image( sample_count: 1, dimension: wgpu::TextureDimension::D2, // UPDATED! - format: if is_normal_map { - wgpu::TextureFormat::Rgba8Unorm - } else { - wgpu::TextureFormat::Rgba8UnormSrgb - }, + format, usage: wgpu::TextureUsages::TEXTURE_BINDING | wgpu::TextureUsages::COPY_DST, + view_formats: &[], }); // ... From 639e645b8b990f2cec29ff0337e18f9ebea5d61a Mon Sep 17 00:00:00 2001 From: Benjamin Hansen Date: Wed, 1 Feb 2023 21:36:14 -0700 Subject: [PATCH 3/4] added warning to pong --- docs/showcase/pong/README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/docs/showcase/pong/README.md b/docs/showcase/pong/README.md index 7e8f4e0c..355b57b7 100644 --- a/docs/showcase/pong/README.md +++ b/docs/showcase/pong/README.md @@ -2,6 +2,12 @@ ![](./pong.png) +
+ +Currently not working, this will be updated when [wgpu_glyph gets updated to 0.15](https://github.com/hecrj/wgpu_glyph/pull/95). + +
+ Practically the "Hello World!" of games. Pong has been remade thousands of times. I know Pong. You know Pong. We all know Pong. That being said, this time I wanted to put in a little more effort than most people do. This showcase has a basic menu system, sounds, and different game states. The architecture is not the best as I prescribed to the "get things done" mentality. If I were to redo this project, I'd change a lot of things. Regardless, let's get into the postmortem. From 68db03eaed0f1e84d838c01fd83c53c6bc3c8128 Mon Sep 17 00:00:00 2001 From: Benjamin Hansen Date: Thu, 2 Feb 2023 10:52:01 -0700 Subject: [PATCH 4/4] updated patrons list --- docs/README.md | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/docs/README.md b/docs/README.md index b5eb280b..e01e9270 100644 --- a/docs/README.md +++ b/docs/README.md @@ -25,17 +25,20 @@ I'm using this project to learn wgpu myself, so I might miss some important deta ## Special thanks to these patrons! - David Laban -- Gunstein Vatnar - Lennart - Ian Gowen - Aron Granberg - Bernard Llanos - Jan Šipr - Zeh Fernando -- Felix - Youngsuk Kim - オリトイツキ - Andrea Postal -- charlesk - +- Julius Liu +- Feng Liang +- Mattia Samiolo +- Joris Willems +- Jani Turkia +- papyDoctor +- Filip