From 0cbdad1ff24c3d4d9eb48aabd45c87f296511cae Mon Sep 17 00:00:00 2001 From: Mike Welsh Date: Wed, 8 Sep 2021 00:20:11 -0700 Subject: [PATCH] wgpu: Bump to wgpu 0.11 --- Cargo.lock | 376 +++++++++----------------------- exporter/Cargo.toml | 1 + render/wgpu/Cargo.toml | 11 +- render/wgpu/src/bitmaps.rs | 2 +- render/wgpu/src/clap.rs | 12 +- render/wgpu/src/globals.rs | 6 +- render/wgpu/src/lib.rs | 52 +++-- render/wgpu/src/pipelines.rs | 33 ++- render/wgpu/src/target.rs | 56 ++--- render/wgpu/src/utils.rs | 16 +- tests/tests/regression_tests.rs | 2 +- 11 files changed, 208 insertions(+), 359 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 10df6869f..c35a1e6d9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -93,21 +93,21 @@ name = "arrayvec" version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b" -dependencies = [ - "serde", -] [[package]] name = "arrayvec" version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "be4dc07131ffa69b8072d35f5007352af944213cde02545e2103680baed38fcd" +dependencies = [ + "serde", +] [[package]] name = "ash" -version = "0.32.1" +version = "0.33.3+1.2.191" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06063a002a77d2734631db74e8f4ce7148b77fe522e6bca46f2ae7774fd48112" +checksum = "cc4f1d82f164f838ae413296d1131aa6fa79b917d25bebaa7033d25620c09219" dependencies = [ "libloading 0.7.0", ] @@ -186,6 +186,16 @@ version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" +[[package]] +name = "bitflags_serde_shim" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25c3d626f0280ec39b33a6fc5c6c1067432b4c41e94aee40ded197a6649bf025" +dependencies = [ + "bitflags", + "serde", +] + [[package]] name = "bitstream-io" version = "1.2.0" @@ -815,9 +825,9 @@ dependencies = [ [[package]] name = "d3d12" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "091ed1b25fe47c7ff129fc440c23650b6114f36aa00bc7212cc8041879294428" +checksum = "2daefd788d1e96e0a9d66dee4b828b883509bc3ea9ce30665f04c3246372690c" dependencies = [ "bitflags", "libloading 0.7.0", @@ -1108,15 +1118,6 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" -[[package]] -name = "drm-fourcc" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebbf3a5ed4671aabffefce172ff43d69c1f27dd2c6aea28e5212a70f32ada0cf" -dependencies = [ - "serde", -] - [[package]] name = "either" version = "1.6.1" @@ -1288,6 +1289,7 @@ name = "exporter" version = "0.1.0" dependencies = [ "clap", + "futures", "image", "indicatif", "log", @@ -1296,16 +1298,6 @@ dependencies = [ "walkdir", ] -[[package]] -name = "external-memory" -version = "0.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4dfe8d292b014422776a8c516862d2bff8a81b223a4461dfdc45f3862dc9d39" -dependencies = [ - "bitflags", - "drm-fourcc", -] - [[package]] name = "fastrand" version = "1.5.0" @@ -1317,9 +1309,9 @@ dependencies = [ [[package]] name = "fixedbitset" -version = "0.2.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37ab347416e802de484e4d03c7316c48f1ecb56574dfd4a46a80f173ce1de04d" +checksum = "398ea4fabe40b9b0d885340a2a991a44c8a645624075ad966d21f88688e2b69e" [[package]] name = "flash-lso" @@ -1560,168 +1552,6 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "gfx-auxil" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1694991b11d642680e82075a75c7c2bd75556b805efa7660b705689f05b1ab1c" -dependencies = [ - "fxhash", - "gfx-hal", - "spirv_cross", -] - -[[package]] -name = "gfx-backend-dx11" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f9e453baf3aaef2b0c354ce0b3d63d76402e406a59b64b7182d123cfa6635ae" -dependencies = [ - "arrayvec 0.5.2", - "bitflags", - "gfx-auxil", - "gfx-hal", - "gfx-renderdoc", - "libloading 0.7.0", - "log", - "parking_lot", - "range-alloc", - "raw-window-handle", - "smallvec", - "spirv_cross", - "thunderdome", - "winapi", - "wio", -] - -[[package]] -name = "gfx-backend-dx12" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21506399f64a3c4d389182a89a30073856ae33eb712315456b4fd8f39ee7682a" -dependencies = [ - "arrayvec 0.5.2", - "bit-set", - "bitflags", - "d3d12", - "gfx-auxil", - "gfx-hal", - "gfx-renderdoc", - "log", - "parking_lot", - "range-alloc", - "raw-window-handle", - "smallvec", - "spirv_cross", - "thunderdome", - "winapi", -] - -[[package]] -name = "gfx-backend-empty" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29c8f813c47791918aa00dc9c9ddf961d23fa8c2a5d869e6cb8ea84f944820f4" -dependencies = [ - "gfx-hal", - "log", - "raw-window-handle", -] - -[[package]] -name = "gfx-backend-gl" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bae057fc3a0ab23ecf97ae51d4017d27d5ddf0aab16ee6dcb58981af88c3152" -dependencies = [ - "arrayvec 0.5.2", - "bitflags", - "fxhash", - "gfx-hal", - "glow", - "js-sys", - "khronos-egl", - "libloading 0.7.0", - "log", - "naga", - "parking_lot", - "raw-window-handle", - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "gfx-backend-metal" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0de85808e2a98994c6af925253f8a9593bc57180ef1ea137deab6d35cc949517" -dependencies = [ - "arrayvec 0.5.2", - "bitflags", - "block", - "cocoa-foundation", - "copyless", - "core-graphics-types", - "foreign-types", - "fxhash", - "gfx-hal", - "log", - "metal", - "naga", - "objc", - "parking_lot", - "profiling", - "range-alloc", - "raw-window-handle", - "storage-map", -] - -[[package]] -name = "gfx-backend-vulkan" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9861ec855acbbc65c0e4f966d761224886e811dc2c6d413a4776e9293d0e5c0" -dependencies = [ - "arrayvec 0.5.2", - "ash", - "byteorder", - "core-graphics-types", - "gfx-hal", - "gfx-renderdoc", - "inplace_it", - "log", - "naga", - "objc", - "parking_lot", - "raw-window-handle", - "smallvec", - "winapi", -] - -[[package]] -name = "gfx-hal" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fbb575ea793dd0507b3082f4f2cde62dc9f3cebd98f5cd49ba2a4da97a976fd" -dependencies = [ - "bitflags", - "external-memory", - "naga", - "raw-window-handle", - "thiserror", -] - -[[package]] -name = "gfx-renderdoc" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8027995e247e2426d3a00d13f5191dd56c314bff02dc4b54cbf727f1ba9c40a" -dependencies = [ - "libloading 0.7.0", - "log", - "renderdoc-sys", -] - [[package]] name = "gif" version = "0.11.3" @@ -1740,9 +1570,9 @@ checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574" [[package]] name = "glow" -version = "0.9.0" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b80b98efaa8a34fce11d60dd2ce2760d5d83c373cbcc73bb87c2a3a84a54108" +checksum = "4f04649123493bc2483cbef4daddb45d40bbdae5adb221a63a23efdb0cc99520" dependencies = [ "js-sys", "slotmap", @@ -1752,9 +1582,9 @@ dependencies = [ [[package]] name = "gpu-alloc" -version = "0.4.7" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbc1b6ca374e81862526786d9cb42357ce03706ed1b8761730caafd02ab91f3a" +checksum = "0e64cbb8d36508d3e19da95e56e196a84f674fc190881f2cc010000798838aa6" dependencies = [ "bitflags", "gpu-alloc-types", @@ -1771,9 +1601,9 @@ dependencies = [ [[package]] name = "gpu-descriptor" -version = "0.1.1" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8a70f1e87a3840ed6a3e99e02c2b861e4dbdf26f0d07e38f42ea5aff46cfce2" +checksum = "d7a237f0419ab10d17006d55c62ac4f689a6bf52c75d3f38b8361d249e8d4b0b" dependencies = [ "bitflags", "gpu-descriptor-types", @@ -1841,6 +1671,12 @@ dependencies = [ "libc", ] +[[package]] +name = "hexf-parse" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfa686283ad6dd069f105e5ab091b04c62850d3e4cf5d67debad1933f55023df" + [[package]] name = "http" version = "0.2.4" @@ -1902,6 +1738,7 @@ checksum = "bc633605454125dec4b66843673f01c7df2b89479b32e0ed634e43a91cff62a5" dependencies = [ "autocfg", "hashbrown 0.11.2", + "serde", ] [[package]] @@ -2272,9 +2109,9 @@ dependencies = [ [[package]] name = "metal" -version = "0.23.0" +version = "0.23.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79d7d769f1c104b8388294d6594d491d2e21240636f5f94d37f8a0f3d7904450" +checksum = "e0514f491f4cc03632ab399ee01e2c1c1b12d3e1cf2d667c1ff5f87d6dcd2084" dependencies = [ "bitflags", "block", @@ -2365,19 +2202,21 @@ dependencies = [ [[package]] name = "naga" -version = "0.5.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef670817eef03d356d5a509ea275e7dd3a78ea9e24261ea3cb2dfed1abb08f64" +checksum = "eda66d09f712e1f0a6ab436137da4fac312f78301f6d4ac7cb8bfe96e988734f" dependencies = [ "bit-set", "bitflags", "codespan-reporting", "fxhash", + "hexf-parse", + "indexmap", "log", "num-traits", "petgraph", - "rose_tree", - "spirv_headers", + "serde", + "spirv", "thiserror", ] @@ -2783,9 +2622,9 @@ checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" [[package]] name = "petgraph" -version = "0.5.1" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "467d164a6de56270bd7c4d070df81d07beace25012d5103ced4e9ff08d6afdb7" +checksum = "4a13a2fa9d0b63e5f22328828741e523766fff0ee9e779316902290dff3f824f" dependencies = [ "fixedbitset", "indexmap", @@ -3131,15 +2970,6 @@ dependencies = [ "serde", ] -[[package]] -name = "rose_tree" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "284de9dae38774e2813aaabd7e947b4a6fe9b8c58c2309f754a487cdd50de1c2" -dependencies = [ - "petgraph", -] - [[package]] name = "ruffle_core" version = "0.1.0" @@ -3489,9 +3319,12 @@ dependencies = [ [[package]] name = "slotmap" -version = "0.4.2" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d61b40583e0c1bd3100652ba8940939decc8808e7b2a07f4f4606c6a8a40035a" +checksum = "e1e08e261d0e8f5c43123b7adf3e4ca1690d655377ac93a03b2c9d3e98de1342" +dependencies = [ + "version_check", +] [[package]] name = "sluice" @@ -3540,21 +3373,10 @@ dependencies = [ ] [[package]] -name = "spirv_cross" -version = "0.23.1" +name = "spirv" +version = "0.2.0+1.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60647fadbf83c4a72f0d7ea67a7ca3a81835cf442b8deae5c134c3e0055b2e14" -dependencies = [ - "cc", - "js-sys", - "wasm-bindgen", -] - -[[package]] -name = "spirv_headers" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f5b132530b1ac069df335577e3581765995cba5a13995cdbbdbc8fb057c532c" +checksum = "246bfa38fe3db3f1dfc8ca5a2cdeb7348c78be2112740cc0ec8ef18b6d94f830" dependencies = [ "bitflags", "num-traits", @@ -3572,15 +3394,6 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ef5430c8e36b713e13b48a9f709cc21e046723fe44ce34587b73a830203b533e" -[[package]] -name = "storage-map" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "418bb14643aa55a7841d5303f72cf512cfb323b8cc221d51580500a1ca75206c" -dependencies = [ - "lock_api", -] - [[package]] name = "strength_reduce" version = "0.2.3" @@ -3760,12 +3573,6 @@ dependencies = [ "syn", ] -[[package]] -name = "thunderdome" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87b4947742c93ece24a0032141d9caa3d853752e694a57e35029dd2bd08673e0" - [[package]] name = "tiff" version = "0.6.1" @@ -4147,9 +3954,9 @@ checksum = "9a8f3bf74f2d43500dea6a8291b6ac943e3465ea9936b94bd017e61b7b21dd01" [[package]] name = "web-sys" -version = "0.3.50" +version = "0.3.55" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a905d57e488fec8861446d3393670fb50d27a262344013181c2cdf9fff5481be" +checksum = "38eb105f1c59d9eaa6b5cdc92b859d85b926e82cb2e0945cd0c9259faa6fe9fb" dependencies = [ "js-sys", "wasm-bindgen", @@ -4183,11 +3990,11 @@ dependencies = [ [[package]] name = "wgpu" -version = "0.9.0" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd247f8b26fd3d42ef2f320d378025cd6e84d782ef749fab45cc3b981fbe3275" +checksum = "d1577ecc4f6992b9e965878ac594efb24eed2bdf089c11f45b3d1c5f216e2e30" dependencies = [ - "arrayvec 0.5.2", + "arrayvec 0.7.1", "js-sys", "log", "naga", @@ -4199,29 +4006,21 @@ dependencies = [ "wasm-bindgen-futures", "web-sys", "wgpu-core", + "wgpu-hal", "wgpu-types", ] [[package]] name = "wgpu-core" -version = "0.9.2" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "958a8a5e418492723ab4e7933bf6dbdf06f5dc87274ba2ae0e4f9c891aac579c" +checksum = "3bdcbfa4885b32c2b1feb2faeb8b6a76065b752b8f08751b82f994e937687f46" dependencies = [ - "arrayvec 0.5.2", + "arrayvec 0.7.1", "bitflags", "cfg_aliases", "copyless", "fxhash", - "gfx-backend-dx11", - "gfx-backend-dx12", - "gfx-backend-empty", - "gfx-backend-gl", - "gfx-backend-metal", - "gfx-backend-vulkan", - "gfx-hal", - "gpu-alloc", - "gpu-descriptor", "log", "naga", "parking_lot", @@ -4231,16 +4030,56 @@ dependencies = [ "serde", "smallvec", "thiserror", + "wgpu-hal", "wgpu-types", ] [[package]] -name = "wgpu-types" -version = "0.9.0" +name = "wgpu-hal" +version = "0.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f5c9678cd533558e28b416d66947b099742df1939307478db54f867137f1b60" +checksum = "0e493835d9edb153d5c8a9d8d016e1811dbe32ddb707a110be1453c7b051d3ec" +dependencies = [ + "arrayvec 0.7.1", + "ash", + "bit-set", + "bitflags", + "block", + "core-graphics-types", + "d3d12", + "foreign-types", + "fxhash", + "glow", + "gpu-alloc", + "gpu-descriptor", + "inplace_it", + "js-sys", + "khronos-egl", + "libloading 0.7.0", + "log", + "metal", + "naga", + "objc", + "parking_lot", + "profiling", + "range-alloc", + "raw-window-handle", + "renderdoc-sys", + "thiserror", + "wasm-bindgen", + "web-sys", + "wgpu-types", + "winapi", +] + +[[package]] +name = "wgpu-types" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e15e44ba88ec415466e18e91881319e7c9e96cb905dc623305168aea65b85ccc" dependencies = [ "bitflags", + "bitflags_serde_shim", "serde", ] @@ -4322,15 +4161,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "wio" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d129932f4644ac2396cb456385cbf9e63b5b30c6e8dc4820bdca4eb082037a5" -dependencies = [ - "winapi", -] - [[package]] name = "wyz" version = "0.2.0" diff --git a/exporter/Cargo.toml b/exporter/Cargo.toml index 1daee9c21..074d1e06e 100644 --- a/exporter/Cargo.toml +++ b/exporter/Cargo.toml @@ -7,6 +7,7 @@ license = "MIT OR Apache-2.0" [dependencies] clap = "3.0.0-beta.5" +futures = "0.3" ruffle_core = { path = "../core" } ruffle_render_wgpu = { path = "../render/wgpu", features = ["clap"] } image = "0.23.14" diff --git a/render/wgpu/Cargo.toml b/render/wgpu/Cargo.toml index 95d82f803..b4d2b4b3e 100644 --- a/render/wgpu/Cargo.toml +++ b/render/wgpu/Cargo.toml @@ -6,7 +6,6 @@ edition = "2021" license = "MIT OR Apache-2.0" [dependencies] -wgpu = "0.9.0" image = "0.23.14" log = "0.4" ruffle_core = { path = "../../core" } @@ -17,6 +16,16 @@ raw-window-handle = "0.3.3" clap = { version = "3.0.0-beta.5", optional = true } enum-map = "1.1.1" +# wgpu desktop +[target.'cfg(not(target_arch = "wasm32"))'.dependencies.wgpu] +version = "0.11" +features = ["spirv"] + +# wgpu wasm +[target.'cfg(target_arch = "wasm32")'.dependencies.wgpu] +version = "0.11" +features = ["spirv-web"] + [features] render_debug_labels = [] render_trace = ["wgpu/trace"] diff --git a/render/wgpu/src/bitmaps.rs b/render/wgpu/src/bitmaps.rs index 127cd6b84..4e738f902 100644 --- a/render/wgpu/src/bitmaps.rs +++ b/render/wgpu/src/bitmaps.rs @@ -46,7 +46,7 @@ impl BitmapSamplers { label: layout_label.as_deref(), entries: &[wgpu::BindGroupLayoutEntry { binding: 0, - visibility: wgpu::ShaderStage::FRAGMENT, + visibility: wgpu::ShaderStages::FRAGMENT, ty: wgpu::BindingType::Sampler { comparison: false, filtering: true, diff --git a/render/wgpu/src/clap.rs b/render/wgpu/src/clap.rs index f8c167aec..c21ca5b19 100644 --- a/render/wgpu/src/clap.rs +++ b/render/wgpu/src/clap.rs @@ -7,14 +7,14 @@ pub enum GraphicsBackend { Dx11, } -impl From for wgpu::BackendBit { +impl From for wgpu::Backends { fn from(backend: GraphicsBackend) -> Self { match backend { - GraphicsBackend::Default => wgpu::BackendBit::PRIMARY | wgpu::BackendBit::DX11, - GraphicsBackend::Vulkan => wgpu::BackendBit::VULKAN, - GraphicsBackend::Metal => wgpu::BackendBit::METAL, - GraphicsBackend::Dx12 => wgpu::BackendBit::DX12, - GraphicsBackend::Dx11 => wgpu::BackendBit::DX11, + GraphicsBackend::Default => wgpu::Backends::PRIMARY | wgpu::Backends::DX11, + GraphicsBackend::Vulkan => wgpu::Backends::VULKAN, + GraphicsBackend::Metal => wgpu::Backends::METAL, + GraphicsBackend::Dx12 => wgpu::Backends::DX12, + GraphicsBackend::Dx11 => wgpu::Backends::DX11, } } } diff --git a/render/wgpu/src/globals.rs b/render/wgpu/src/globals.rs index 0836402f9..f5d6e004b 100644 --- a/render/wgpu/src/globals.rs +++ b/render/wgpu/src/globals.rs @@ -24,7 +24,7 @@ impl Globals { label: layout_label.as_deref(), entries: &[wgpu::BindGroupLayoutEntry { binding: 0, - visibility: wgpu::ShaderStage::VERTEX, + visibility: wgpu::ShaderStages::VERTEX, ty: wgpu::BindingType::Buffer { ty: wgpu::BufferBindingType::Uniform, has_dynamic_offset: false, @@ -38,7 +38,7 @@ impl Globals { let buffer = device.create_buffer(&wgpu::BufferDescriptor { label: buffer_label.as_deref(), size: std::mem::size_of::() as u64, - usage: wgpu::BufferUsage::UNIFORM | wgpu::BufferUsage::COPY_DST, + usage: wgpu::BufferUsages::UNIFORM | wgpu::BufferUsages::COPY_DST, mapped_at_creation: false, }); @@ -90,7 +90,7 @@ impl Globals { [-1.0, 1.0, 0.0, 1.0], ], }]), - usage: wgpu::BufferUsage::COPY_SRC, + usage: wgpu::BufferUsages::COPY_SRC, }); encoder.copy_buffer_to_buffer( diff --git a/render/wgpu/src/lib.rs b/render/wgpu/src/lib.rs index 269e1ba56..f6b13aaab 100644 --- a/render/wgpu/src/lib.rs +++ b/render/wgpu/src/lib.rs @@ -248,11 +248,11 @@ impl WgpuRenderBackend { pub fn for_window( window: &W, size: (u32, u32), - backend: wgpu::BackendBit, + backend: wgpu::Backends, power_preference: wgpu::PowerPreference, trace_path: Option<&Path>, ) -> Result { - if wgpu::BackendBit::SECONDARY.contains(backend) { + if wgpu::Backends::SECONDARY.contains(backend) { log::warn!( "{} graphics backend support may not be fully supported.", format_list(&get_backend_names(backend), "and") @@ -275,11 +275,11 @@ impl WgpuRenderBackend { impl WgpuRenderBackend { pub fn for_offscreen( size: (u32, u32), - backend: wgpu::BackendBit, + backend: wgpu::Backends, power_preference: wgpu::PowerPreference, trace_path: Option<&Path>, ) -> Result { - if wgpu::BackendBit::SECONDARY.contains(backend) { + if wgpu::Backends::SECONDARY.contains(backend) { log::warn!( "{} graphics backend support may not be fully supported.", format_list(&get_backend_names(backend), "and") @@ -309,7 +309,7 @@ impl WgpuRenderBackend { sample_count: descriptors.msaa_sample_count, dimension: wgpu::TextureDimension::D2, format: target.format(), - usage: wgpu::TextureUsage::RENDER_ATTACHMENT, + usage: wgpu::TextureUsages::RENDER_ATTACHMENT, }); let frame_buffer_view = frame_buffer.create_view(&Default::default()); @@ -321,7 +321,7 @@ impl WgpuRenderBackend { sample_count: descriptors.msaa_sample_count, dimension: wgpu::TextureDimension::D2, format: wgpu::TextureFormat::Depth24PlusStencil8, - usage: wgpu::TextureUsage::RENDER_ATTACHMENT, + usage: wgpu::TextureUsages::RENDER_ATTACHMENT, }); let depth_texture_view = depth_texture.create_view(&Default::default()); @@ -353,7 +353,7 @@ impl WgpuRenderBackend { } pub fn build_descriptors( - backend: wgpu::BackendBit, + backend: wgpu::Backends, instance: wgpu::Instance, surface: Option<&wgpu::Surface>, power_preference: wgpu::PowerPreference, @@ -362,6 +362,7 @@ impl WgpuRenderBackend { let adapter = block_on(instance.request_adapter(&wgpu::RequestAdapterOptions { power_preference, compatible_surface: surface, + force_fallback_adapter: false, })) .ok_or_else(|| { let names = get_backend_names(backend); @@ -408,14 +409,14 @@ impl WgpuRenderBackend { let vertex_buffer = create_buffer_with_data( &self.descriptors.device, bytemuck::cast_slice(&vertices), - wgpu::BufferUsage::VERTEX, + wgpu::BufferUsages::VERTEX, create_debug_label!("Shape {} ({}) vbo", shape_id, draw.draw_type.name()), ); let index_buffer = create_buffer_with_data( &self.descriptors.device, bytemuck::cast_slice(&draw.indices), - wgpu::BufferUsage::INDEX, + wgpu::BufferUsages::INDEX, create_debug_label!("Shape {} ({}) ibo", shape_id, draw.draw_type.name()), ); @@ -439,7 +440,7 @@ impl WgpuRenderBackend { let tex_transforms_ubo = create_buffer_with_data( &self.descriptors.device, bytemuck::cast_slice(&[texture_transform]), - wgpu::BufferUsage::UNIFORM, + wgpu::BufferUsages::UNIFORM, create_debug_label!( "Shape {} draw {} textransforms ubo transfer buffer", shape_id, @@ -450,7 +451,7 @@ impl WgpuRenderBackend { let gradient_ubo = create_buffer_with_data( &self.descriptors.device, bytemuck::cast_slice(&[GradientUniforms::from(gradient)]), - wgpu::BufferUsage::STORAGE, + wgpu::BufferUsages::STORAGE, create_debug_label!( "Shape {} draw {} gradient ubo transfer buffer", shape_id, @@ -525,7 +526,7 @@ impl WgpuRenderBackend { let tex_transforms_ubo = create_buffer_with_data( &self.descriptors.device, bytemuck::cast_slice(&[texture_transform]), - wgpu::BufferUsage::UNIFORM, + wgpu::BufferUsages::UNIFORM, create_debug_label!( "Shape {} draw {} textransforms ubo transfer buffer", shape_id, @@ -619,7 +620,7 @@ impl WgpuRenderBackend { sample_count: 1, dimension: wgpu::TextureDimension::D2, format: wgpu::TextureFormat::Rgba8Unorm, - usage: wgpu::TextureUsage::SAMPLED | wgpu::TextureUsage::COPY_DST, + usage: wgpu::TextureUsages::TEXTURE_BINDING | wgpu::TextureUsages::COPY_DST, }); self.descriptors.queue.write_texture( @@ -627,6 +628,7 @@ impl WgpuRenderBackend { texture: &texture, mip_level: 0, origin: Default::default(), + aspect: wgpu::TextureAspect::All, }, &data, wgpu::ImageDataLayout { @@ -714,7 +716,7 @@ impl RenderBackend for WgpuRenderBackend { sample_count: self.descriptors.msaa_sample_count, dimension: wgpu::TextureDimension::D2, format: self.target.format(), - usage: wgpu::TextureUsage::RENDER_ATTACHMENT, + usage: wgpu::TextureUsages::RENDER_ATTACHMENT, }); self.frame_buffer_view = frame_buffer.create_view(&Default::default()); @@ -733,7 +735,7 @@ impl RenderBackend for WgpuRenderBackend { sample_count: self.descriptors.msaa_sample_count, dimension: wgpu::TextureDimension::D2, format: wgpu::TextureFormat::Depth24PlusStencil8, - usage: wgpu::TextureUsage::RENDER_ATTACHMENT, + usage: wgpu::TextureUsages::RENDER_ATTACHMENT, }); self.depth_texture_view = depth_texture.create_view(&Default::default()); self.descriptors.globals.set_resolution(width, height); @@ -916,12 +918,12 @@ impl RenderBackend for WgpuRenderBackend { .pipeline_for(self.mask_state), ); frame.render_pass.set_push_constants( - wgpu::ShaderStage::VERTEX, + wgpu::ShaderStages::VERTEX, 0, bytemuck::cast_slice(&[Transforms { world_matrix }]), ); frame.render_pass.set_push_constants( - wgpu::ShaderStage::FRAGMENT, + wgpu::ShaderStages::FRAGMENT, std::mem::size_of::() as u32, bytemuck::cast_slice(&[ColorAdjustments::from(transform.color_transform)]), ); @@ -1029,12 +1031,12 @@ impl RenderBackend for WgpuRenderBackend { } frame.render_pass.set_push_constants( - wgpu::ShaderStage::VERTEX, + wgpu::ShaderStages::VERTEX, 0, bytemuck::cast_slice(&[Transforms { world_matrix }]), ); frame.render_pass.set_push_constants( - wgpu::ShaderStage::FRAGMENT, + wgpu::ShaderStages::FRAGMENT, std::mem::size_of::() as u32, bytemuck::cast_slice(&[ColorAdjustments::from(transform.color_transform)]), ); @@ -1096,12 +1098,12 @@ impl RenderBackend for WgpuRenderBackend { ); frame.render_pass.set_push_constants( - wgpu::ShaderStage::VERTEX, + wgpu::ShaderStages::VERTEX, 0, bytemuck::cast_slice(&[Transforms { world_matrix }]), ); frame.render_pass.set_push_constants( - wgpu::ShaderStage::FRAGMENT, + wgpu::ShaderStages::FRAGMENT, std::mem::size_of::() as u32, bytemuck::cast_slice(&[ColorAdjustments { mult_color, @@ -1144,6 +1146,7 @@ impl RenderBackend for WgpuRenderBackend { &self.descriptors.device, &self.descriptors.queue, vec![draw_encoder.finish()], + frame.frame_data.1, ); } } @@ -1222,6 +1225,7 @@ impl RenderBackend for WgpuRenderBackend { texture, mip_level: 0, origin: Default::default(), + aspect: wgpu::TextureAspect::All, }, &rgba, wgpu::ImageDataLayout { @@ -1260,14 +1264,14 @@ fn create_quad_buffers(device: &wgpu::Device) -> (wgpu::Buffer, wgpu::Buffer, wg let vbo = create_buffer_with_data( device, bytemuck::cast_slice(&vertices), - wgpu::BufferUsage::VERTEX, + wgpu::BufferUsages::VERTEX, create_debug_label!("Quad vbo"), ); let ibo = create_buffer_with_data( device, bytemuck::cast_slice(&indices), - wgpu::BufferUsage::INDEX, + wgpu::BufferUsages::INDEX, create_debug_label!("Quad ibo"), ); @@ -1281,7 +1285,7 @@ fn create_quad_buffers(device: &wgpu::Device) -> (wgpu::Buffer, wgpu::Buffer, wg [0.0, 0.0, 0.0, 1.0], ], }]), - wgpu::BufferUsage::UNIFORM, + wgpu::BufferUsages::UNIFORM, create_debug_label!("Quad tex transforms"), ); diff --git a/render/wgpu/src/pipelines.rs b/render/wgpu/src/pipelines.rs index 8754bd36d..862dffca7 100644 --- a/render/wgpu/src/pipelines.rs +++ b/render/wgpu/src/pipelines.rs @@ -39,7 +39,6 @@ impl Pipelines { wgpu::ShaderModuleDescriptor { label: Some($($token)*), source: wgpu::util::make_spirv(include_bytes!($($token)*)), - flags: wgpu::ShaderFlags::empty(), } } }; @@ -55,7 +54,7 @@ impl Pipelines { let vertex_buffers_description = [wgpu::VertexBufferLayout { array_stride: std::mem::size_of::() as u64, - step_mode: wgpu::InputStepMode::Vertex, + step_mode: wgpu::VertexStepMode::Vertex, attributes: &vertex_attr_array![ 0 => Float32x2, 1 => Float32x4, @@ -77,7 +76,7 @@ impl Pipelines { entries: &[ wgpu::BindGroupLayoutEntry { binding: 0, - visibility: wgpu::ShaderStage::VERTEX, + visibility: wgpu::ShaderStages::VERTEX, ty: wgpu::BindingType::Buffer { ty: wgpu::BufferBindingType::Uniform, has_dynamic_offset: false, @@ -87,7 +86,7 @@ impl Pipelines { }, wgpu::BindGroupLayoutEntry { binding: 1, - visibility: wgpu::ShaderStage::FRAGMENT, + visibility: wgpu::ShaderStages::FRAGMENT, ty: wgpu::BindingType::Texture { multisampled: false, sample_type: wgpu::TextureSampleType::Float { filterable: true }, @@ -116,7 +115,7 @@ impl Pipelines { entries: &[ wgpu::BindGroupLayoutEntry { binding: 0, - visibility: wgpu::ShaderStage::VERTEX, + visibility: wgpu::ShaderStages::VERTEX, ty: wgpu::BindingType::Buffer { ty: wgpu::BufferBindingType::Uniform, has_dynamic_offset: false, @@ -126,7 +125,7 @@ impl Pipelines { }, wgpu::BindGroupLayoutEntry { binding: 1, - visibility: wgpu::ShaderStage::FRAGMENT, + visibility: wgpu::ShaderStages::FRAGMENT, ty: wgpu::BindingType::Buffer { ty: wgpu::BufferBindingType::Storage { read_only: true }, has_dynamic_offset: false, @@ -217,11 +216,11 @@ fn create_color_pipelines( bind_group_layouts: &[globals_layout], push_constant_ranges: &[ wgpu::PushConstantRange { - stages: wgpu::ShaderStage::VERTEX, + stages: wgpu::ShaderStages::VERTEX, range: 0..transforms_size, }, wgpu::PushConstantRange { - stages: wgpu::ShaderStage::FRAGMENT, + stages: wgpu::ShaderStages::FRAGMENT, range: transforms_size..transforms_size + colors_size, }, ], @@ -390,11 +389,11 @@ fn create_bitmap_pipeline( bind_group_layouts: &[globals_layout, bitmap_bind_layout, sampler_layout], push_constant_ranges: &[ wgpu::PushConstantRange { - stages: wgpu::ShaderStage::VERTEX, + stages: wgpu::ShaderStages::VERTEX, range: 0..64, }, wgpu::PushConstantRange { - stages: wgpu::ShaderStage::FRAGMENT, + stages: wgpu::ShaderStages::FRAGMENT, range: 64..96, }, ], @@ -561,11 +560,11 @@ fn create_gradient_pipeline( bind_group_layouts: &[globals_layout, gradient_bind_layout], push_constant_ranges: &[ wgpu::PushConstantRange { - stages: wgpu::ShaderStage::VERTEX, + stages: wgpu::ShaderStages::VERTEX, range: 0..64, }, wgpu::PushConstantRange { - stages: wgpu::ShaderStage::FRAGMENT, + stages: wgpu::ShaderStages::FRAGMENT, range: 64..96, }, ], @@ -717,7 +716,7 @@ fn create_gradient_pipeline( ShapePipeline { mask_pipelines } } -fn mask_render_state(state: MaskState) -> (wgpu::StencilState, wgpu::ColorWrite) { +fn mask_render_state(state: MaskState) -> (wgpu::StencilState, wgpu::ColorWrites) { let (stencil_state, color_write) = match state { MaskState::NoMask => ( wgpu::StencilFaceState { @@ -726,7 +725,7 @@ fn mask_render_state(state: MaskState) -> (wgpu::StencilState, wgpu::ColorWrite) depth_fail_op: wgpu::StencilOperation::Keep, pass_op: wgpu::StencilOperation::Keep, }, - wgpu::ColorWrite::ALL, + wgpu::ColorWrites::ALL, ), MaskState::DrawMaskStencil => ( wgpu::StencilFaceState { @@ -735,7 +734,7 @@ fn mask_render_state(state: MaskState) -> (wgpu::StencilState, wgpu::ColorWrite) depth_fail_op: wgpu::StencilOperation::Keep, pass_op: wgpu::StencilOperation::IncrementClamp, }, - wgpu::ColorWrite::empty(), + wgpu::ColorWrites::empty(), ), MaskState::DrawMaskedContent => ( wgpu::StencilFaceState { @@ -744,7 +743,7 @@ fn mask_render_state(state: MaskState) -> (wgpu::StencilState, wgpu::ColorWrite) depth_fail_op: wgpu::StencilOperation::Keep, pass_op: wgpu::StencilOperation::Keep, }, - wgpu::ColorWrite::ALL, + wgpu::ColorWrites::ALL, ), MaskState::ClearMaskStencil => ( wgpu::StencilFaceState { @@ -753,7 +752,7 @@ fn mask_render_state(state: MaskState) -> (wgpu::StencilState, wgpu::ColorWrite) depth_fail_op: wgpu::StencilOperation::Keep, pass_op: wgpu::StencilOperation::DecrementClamp, }, - wgpu::ColorWrite::empty(), + wgpu::ColorWrites::empty(), ), }; diff --git a/render/wgpu/src/target.rs b/render/wgpu/src/target.rs index 1e00c57ed..12dbec829 100644 --- a/render/wgpu/src/target.rs +++ b/render/wgpu/src/target.rs @@ -19,46 +19,48 @@ pub trait RenderTarget: Debug + 'static { fn height(&self) -> u32; - fn get_next_texture(&mut self) -> Result; + fn get_next_texture(&mut self) -> Result; fn submit>( &self, device: &wgpu::Device, queue: &wgpu::Queue, command_buffers: I, + frame: Self::Frame, ); } #[derive(Debug)] pub struct SwapChainTarget { window_surface: wgpu::Surface, - swap_chain_desc: wgpu::SwapChainDescriptor, - swap_chain: wgpu::SwapChain, + surface_config: wgpu::SurfaceConfiguration, } #[derive(Debug)] -pub struct SwapChainTargetFrame(wgpu::SwapChainFrame); +pub struct SwapChainTargetFrame { + texture: wgpu::SurfaceTexture, + view: wgpu::TextureView, +} impl RenderTargetFrame for SwapChainTargetFrame { fn view(&self) -> &wgpu::TextureView { - &self.0.output.view + &self.view } } impl SwapChainTarget { pub fn new(surface: wgpu::Surface, size: (u32, u32), device: &wgpu::Device) -> Self { - let swap_chain_desc = wgpu::SwapChainDescriptor { - usage: wgpu::TextureUsage::RENDER_ATTACHMENT, + let surface_config = wgpu::SurfaceConfiguration { + usage: wgpu::TextureUsages::RENDER_ATTACHMENT, format: wgpu::TextureFormat::Bgra8Unorm, width: size.0, height: size.1, present_mode: wgpu::PresentMode::Mailbox, }; - let swap_chain = device.create_swap_chain(&surface, &swap_chain_desc); + surface.configure(device, &surface_config); Self { + surface_config, window_surface: surface, - swap_chain_desc, - swap_chain, } } } @@ -67,27 +69,27 @@ impl RenderTarget for SwapChainTarget { type Frame = SwapChainTargetFrame; fn resize(&mut self, device: &wgpu::Device, width: u32, height: u32) { - self.swap_chain_desc.width = width; - self.swap_chain_desc.height = height; - self.swap_chain = device.create_swap_chain(&self.window_surface, &self.swap_chain_desc); + self.surface_config.width = width; + self.surface_config.height = height; + self.window_surface.configure(device, &self.surface_config); } fn format(&self) -> wgpu::TextureFormat { - self.swap_chain_desc.format + self.surface_config.format } fn width(&self) -> u32 { - self.swap_chain_desc.width + self.surface_config.width } fn height(&self) -> u32 { - self.swap_chain_desc.height + self.surface_config.height } - fn get_next_texture(&mut self) -> Result { - self.swap_chain - .get_current_frame() - .map(SwapChainTargetFrame) + fn get_next_texture(&mut self) -> Result { + let texture = self.window_surface.get_current_texture()?; + let view = texture.texture.create_view(&Default::default()); + Ok(SwapChainTargetFrame { texture, view }) } fn submit>( @@ -95,8 +97,10 @@ impl RenderTarget for SwapChainTarget { _device: &wgpu::Device, queue: &wgpu::Queue, command_buffers: I, + frame: Self::Frame, ) { queue.submit(command_buffers); + frame.texture.present(); } } @@ -137,14 +141,14 @@ impl TextureTarget { sample_count: 1, dimension: wgpu::TextureDimension::D2, format, - usage: wgpu::TextureUsage::RENDER_ATTACHMENT | wgpu::TextureUsage::COPY_SRC, + usage: wgpu::TextureUsages::RENDER_ATTACHMENT | wgpu::TextureUsages::COPY_SRC, }); let buffer_label = create_debug_label!("Render target buffer"); let buffer = device.create_buffer(&wgpu::BufferDescriptor { label: buffer_label.as_deref(), size: (buffer_dimensions.padded_bytes_per_row.get() as u64 * buffer_dimensions.height as u64), - usage: wgpu::BufferUsage::COPY_DST | wgpu::BufferUsage::MAP_READ, + usage: wgpu::BufferUsages::COPY_DST | wgpu::BufferUsages::MAP_READ, mapped_at_creation: false, }); Self { @@ -201,14 +205,14 @@ impl RenderTarget for TextureTarget { sample_count: 1, dimension: wgpu::TextureDimension::D2, format: self.format, - usage: wgpu::TextureUsage::RENDER_ATTACHMENT | wgpu::TextureUsage::COPY_SRC, + usage: wgpu::TextureUsages::RENDER_ATTACHMENT | wgpu::TextureUsages::COPY_SRC, }); let buffer_label = create_debug_label!("Render target buffer"); self.buffer = device.create_buffer(&wgpu::BufferDescriptor { label: buffer_label.as_deref(), size: width as u64 * height as u64 * 4, - usage: wgpu::BufferUsage::COPY_DST | wgpu::BufferUsage::MAP_READ, + usage: wgpu::BufferUsages::COPY_DST | wgpu::BufferUsages::MAP_READ, mapped_at_creation: false, }); } @@ -225,7 +229,7 @@ impl RenderTarget for TextureTarget { self.size.height } - fn get_next_texture(&mut self) -> Result { + fn get_next_texture(&mut self) -> Result { Ok(TextureTargetFrame( self.texture.create_view(&Default::default()), )) @@ -236,6 +240,7 @@ impl RenderTarget for TextureTarget { device: &wgpu::Device, queue: &wgpu::Queue, command_buffers: I, + _frame: Self::Frame, ) { let label = create_debug_label!("Render target transfer encoder"); let mut encoder = device.create_command_encoder(&wgpu::CommandEncoderDescriptor { @@ -246,6 +251,7 @@ impl RenderTarget for TextureTarget { texture: &self.texture, mip_level: 0, origin: wgpu::Origin3d::ZERO, + aspect: wgpu::TextureAspect::All, }, wgpu::ImageCopyBuffer { buffer: &self.buffer, diff --git a/render/wgpu/src/utils.rs b/render/wgpu/src/utils.rs index 2834d568c..f7eb3f13f 100644 --- a/render/wgpu/src/utils.rs +++ b/render/wgpu/src/utils.rs @@ -27,25 +27,25 @@ pub fn format_list<'a>(values: &[&'a str], connector: &'a str) -> Cow<'a, str> { } } -pub fn get_backend_names(backends: wgpu::BackendBit) -> Vec<&'static str> { +pub fn get_backend_names(backends: wgpu::Backends) -> Vec<&'static str> { let mut names = Vec::new(); - if backends.contains(wgpu::BackendBit::VULKAN) { + if backends.contains(wgpu::Backends::VULKAN) { names.push("Vulkan"); } - if backends.contains(wgpu::BackendBit::DX12) { + if backends.contains(wgpu::Backends::DX12) { names.push("DirectX 12"); } - if backends.contains(wgpu::BackendBit::DX11) { + if backends.contains(wgpu::Backends::DX11) { names.push("DirectX 11"); } - if backends.contains(wgpu::BackendBit::METAL) { + if backends.contains(wgpu::Backends::METAL) { names.push("Metal"); } - if backends.contains(wgpu::BackendBit::GL) { + if backends.contains(wgpu::Backends::GL) { names.push("Open GL"); } - if backends.contains(wgpu::BackendBit::BROWSER_WEBGPU) { + if backends.contains(wgpu::Backends::BROWSER_WEBGPU) { names.push("Web GPU"); } @@ -55,7 +55,7 @@ pub fn get_backend_names(backends: wgpu::BackendBit) -> Vec<&'static str> { pub fn create_buffer_with_data( device: &wgpu::Device, data: &[u8], - usage: wgpu::BufferUsage, + usage: wgpu::BufferUsages, label: Option, ) -> wgpu::Buffer { device.create_buffer_init(&wgpu::util::BufferInitDescriptor { diff --git a/tests/tests/regression_tests.rs b/tests/tests/regression_tests.rs index b4449de03..e04858be2 100644 --- a/tests/tests/regression_tests.rs +++ b/tests/tests/regression_tests.rs @@ -1022,7 +1022,7 @@ fn run_swf( let trace_output = Rc::new(RefCell::new(Vec::new())); let mut platform_id = None; - let backend_bit = wgpu::BackendBit::PRIMARY; + let backend_bit = wgpu::Backends::PRIMARY; let (render_backend, video_backend): (Box, Box) = if check_img {