From ef26fdac8b7235ec8ff51b4ac9790ae68adf5c9d Mon Sep 17 00:00:00 2001 From: Imbris Date: Wed, 3 Feb 2021 22:30:43 -0500 Subject: [PATCH] Update to latest wgpu git (around 0.7), temporarily disable shader validation due to naga bug --- Cargo.lock | 104 ++++++++------- voxygen/Cargo.toml | 2 +- voxygen/src/render/pipelines/clouds.rs | 40 +++--- voxygen/src/render/pipelines/figure.rs | 58 +++++---- voxygen/src/render/pipelines/fluid.rs | 83 ++++++------ voxygen/src/render/pipelines/lod_terrain.rs | 67 +++++----- voxygen/src/render/pipelines/particle.rs | 90 ++++++------- voxygen/src/render/pipelines/postprocess.rs | 49 ++++--- voxygen/src/render/pipelines/shadow.rs | 136 ++++++++++---------- voxygen/src/render/pipelines/skybox.rs | 66 +++++----- voxygen/src/render/pipelines/sprite.rs | 90 ++++++------- voxygen/src/render/pipelines/terrain.rs | 66 +++++----- voxygen/src/render/pipelines/ui.rs | 79 +++++------- voxygen/src/render/renderer.rs | 4 +- 14 files changed, 461 insertions(+), 473 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 5dd7905124..11632ec0a2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1914,8 +1914,8 @@ dependencies = [ [[package]] name = "gfx-auxil" -version = "0.5.0" -source = "git+https://github.com/gfx-rs/gfx?rev=0244e3401e9f127617cb8636397048584e7bfe8a#0244e3401e9f127617cb8636397048584e7bfe8a" +version = "0.8.0" +source = "git+https://github.com/gfx-rs/gfx?rev=d54cdcfac68711a91b55682c56da09f8e5b6f4e7#d54cdcfac68711a91b55682c56da09f8e5b6f4e7" dependencies = [ "fxhash", "gfx-hal", @@ -1924,8 +1924,8 @@ dependencies = [ [[package]] name = "gfx-backend-dx11" -version = "0.6.0" -source = "git+https://github.com/gfx-rs/gfx?rev=0244e3401e9f127617cb8636397048584e7bfe8a#0244e3401e9f127617cb8636397048584e7bfe8a" +version = "0.7.0" +source = "git+https://github.com/gfx-rs/gfx?rev=d54cdcfac68711a91b55682c56da09f8e5b6f4e7#d54cdcfac68711a91b55682c56da09f8e5b6f4e7" dependencies = [ "arrayvec", "bitflags", @@ -1945,8 +1945,8 @@ dependencies = [ [[package]] name = "gfx-backend-dx12" -version = "0.6.2" -source = "git+https://github.com/gfx-rs/gfx?rev=0244e3401e9f127617cb8636397048584e7bfe8a#0244e3401e9f127617cb8636397048584e7bfe8a" +version = "0.7.0" +source = "git+https://github.com/gfx-rs/gfx?rev=d54cdcfac68711a91b55682c56da09f8e5b6f4e7#d54cdcfac68711a91b55682c56da09f8e5b6f4e7" dependencies = [ "arrayvec", "bit-set", @@ -1965,8 +1965,8 @@ dependencies = [ [[package]] name = "gfx-backend-empty" -version = "0.6.0" -source = "git+https://github.com/gfx-rs/gfx?rev=0244e3401e9f127617cb8636397048584e7bfe8a#0244e3401e9f127617cb8636397048584e7bfe8a" +version = "0.7.0" +source = "git+https://github.com/gfx-rs/gfx?rev=d54cdcfac68711a91b55682c56da09f8e5b6f4e7#d54cdcfac68711a91b55682c56da09f8e5b6f4e7" dependencies = [ "gfx-hal", "log", @@ -1975,8 +1975,8 @@ dependencies = [ [[package]] name = "gfx-backend-gl" -version = "0.6.0" -source = "git+https://github.com/gfx-rs/gfx?rev=0244e3401e9f127617cb8636397048584e7bfe8a#0244e3401e9f127617cb8636397048584e7bfe8a" +version = "0.7.0" +source = "git+https://github.com/gfx-rs/gfx?rev=d54cdcfac68711a91b55682c56da09f8e5b6f4e7#d54cdcfac68711a91b55682c56da09f8e5b6f4e7" dependencies = [ "arrayvec", "bitflags", @@ -1990,7 +1990,6 @@ dependencies = [ "naga", "parking_lot 0.11.1", "raw-window-handle", - "smallvec", "spirv_cross", "wasm-bindgen", "web-sys", @@ -1998,8 +1997,8 @@ dependencies = [ [[package]] name = "gfx-backend-metal" -version = "0.6.0" -source = "git+https://github.com/gfx-rs/gfx?rev=0244e3401e9f127617cb8636397048584e7bfe8a#0244e3401e9f127617cb8636397048584e7bfe8a" +version = "0.7.0" +source = "git+https://github.com/gfx-rs/gfx?rev=d54cdcfac68711a91b55682c56da09f8e5b6f4e7#d54cdcfac68711a91b55682c56da09f8e5b6f4e7" dependencies = [ "arrayvec", "bitflags", @@ -2009,7 +2008,6 @@ dependencies = [ "foreign-types", "gfx-auxil", "gfx-hal", - "lazy_static", "log", "metal", "naga", @@ -2023,8 +2021,8 @@ dependencies = [ [[package]] name = "gfx-backend-vulkan" -version = "0.6.5" -source = "git+https://github.com/gfx-rs/gfx?rev=0244e3401e9f127617cb8636397048584e7bfe8a#0244e3401e9f127617cb8636397048584e7bfe8a" +version = "0.7.0" +source = "git+https://github.com/gfx-rs/gfx?rev=d54cdcfac68711a91b55682c56da09f8e5b6f4e7#d54cdcfac68711a91b55682c56da09f8e5b6f4e7" dependencies = [ "arrayvec", "ash", @@ -2032,10 +2030,10 @@ dependencies = [ "core-graphics-types", "gfx-hal", "inplace_it", - "lazy_static", "log", "naga", "objc", + "parking_lot 0.11.1", "raw-window-handle", "smallvec", "winapi 0.3.9", @@ -2043,8 +2041,8 @@ dependencies = [ [[package]] name = "gfx-hal" -version = "0.6.0" -source = "git+https://github.com/gfx-rs/gfx?rev=0244e3401e9f127617cb8636397048584e7bfe8a#0244e3401e9f127617cb8636397048584e7bfe8a" +version = "0.7.0" +source = "git+https://github.com/gfx-rs/gfx?rev=d54cdcfac68711a91b55682c56da09f8e5b6f4e7#d54cdcfac68711a91b55682c56da09f8e5b6f4e7" dependencies = [ "bitflags", "naga", @@ -2136,9 +2134,9 @@ checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574" [[package]] name = "glow" -version = "0.6.1" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1625b792e2f9267116dd41eb7d325e0ea2572ceba5069451906745e04f852f33" +checksum = "072136d2c3783f3a92f131acb227bc806d3886278e2a4dc1e9990ec89ef9e70b" dependencies = [ "js-sys", "slotmap 0.4.0", @@ -2187,25 +2185,29 @@ dependencies = [ [[package]] name = "gpu-alloc" -version = "0.2.1" -source = "git+https://github.com/zakarumych/gpu-alloc?rev=d07be73f9439a37c89f5b72f2500cbf0eb4ff613#d07be73f9439a37c89f5b72f2500cbf0eb4ff613" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e7724b9aef57ea36d70faf54e0ee6265f86e41de16bed8333efdeab5b00e16b" dependencies = [ "bitflags", "gpu-alloc-types", + "tracing", ] [[package]] name = "gpu-alloc-types" -version = "0.1.0" -source = "git+https://github.com/zakarumych/gpu-alloc?rev=d07be73f9439a37c89f5b72f2500cbf0eb4ff613#d07be73f9439a37c89f5b72f2500cbf0eb4ff613" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54804d0d6bc9d7f26db4eaec1ad10def69b599315f487d32c334a80d1efe67a5" dependencies = [ "bitflags", ] [[package]] name = "gpu-descriptor" -version = "0.1.0" -source = "git+https://github.com/zakarumych/gpu-descriptor?rev=df74fd8c7bea03149058a41aab0e4fe04077b266#df74fd8c7bea03149058a41aab0e4fe04077b266" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8a70f1e87a3840ed6a3e99e02c2b861e4dbdf26f0d07e38f42ea5aff46cfce2" dependencies = [ "bitflags", "gpu-descriptor-types", @@ -2215,8 +2217,9 @@ dependencies = [ [[package]] name = "gpu-descriptor-types" -version = "0.1.0" -source = "git+https://github.com/zakarumych/gpu-descriptor?rev=df74fd8c7bea03149058a41aab0e4fe04077b266#df74fd8c7bea03149058a41aab0e4fe04077b266" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "363e3677e55ad168fef68cf9de3a4a310b53124c5e784c53a1d70e92d23f2126" dependencies = [ "bitflags", ] @@ -2719,8 +2722,9 @@ dependencies = [ [[package]] name = "khronos-egl" -version = "3.0.0-beta" -source = "git+https://github.com/timothee-haudebourg/khronos-egl?rev=9568b2ee3b02f2c17cc9479f824db16daecf1664#9568b2ee3b02f2c17cc9479f824db16daecf1664" +version = "3.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7bbf838a38f77712f76b4e8e007bba169a28a7cc7de2cbc4565f318467d74baa" dependencies = [ "libc", "libloading 0.6.7", @@ -3010,9 +3014,8 @@ dependencies = [ [[package]] name = "metal" -version = "0.20.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c4e8a431536529327e28c9ba6992f2cb0c15d4222f0602a16e6d7695ff3bccf" +version = "0.21.0" +source = "git+https://github.com/gfx-rs/metal-rs?rev=439c986eb7a9b91e88b61def2daa66e4043fcbef#439c986eb7a9b91e88b61def2daa66e4043fcbef" dependencies = [ "bitflags", "block", @@ -3177,9 +3180,10 @@ checksum = "0debeb9fcf88823ea64d64e4a815ab1643f33127d995978e099942ce38f25238" [[package]] name = "naga" -version = "0.2.0" -source = "git+https://github.com/gfx-rs/naga?tag=gfx-5#583f218c9dbca08daa6bf3efda60e80ecada63bb" +version = "0.3.1" +source = "git+https://github.com/gfx-rs/naga?tag=gfx-9#c12003f5648fcade5f20c01debc4cb12bd47073e" dependencies = [ + "bit-set", "bitflags", "fxhash", "log", @@ -4195,8 +4199,8 @@ dependencies = [ [[package]] name = "range-alloc" -version = "0.1.1" -source = "git+https://github.com/gfx-rs/gfx?rev=0244e3401e9f127617cb8636397048584e7bfe8a#0244e3401e9f127617cb8636397048584e7bfe8a" +version = "0.1.2" +source = "git+https://github.com/gfx-rs/gfx?rev=d54cdcfac68711a91b55682c56da09f8e5b6f4e7#d54cdcfac68711a91b55682c56da09f8e5b6f4e7" [[package]] name = "raw-window-handle" @@ -4902,9 +4906,9 @@ dependencies = [ [[package]] name = "spirv_cross" -version = "0.22.2" +version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ebd49af36be83ecd6290b57147e2a0e26145b832634b17146d934b197ca3713" +checksum = "06db6bd7b6518f761593783e2896eefe55e90455efc5f44511078ce0426ed418" dependencies = [ "cc", "js-sys", @@ -5535,12 +5539,6 @@ dependencies = [ "nom 5.1.2", ] -[[package]] -name = "typed-arena" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0685c84d5d54d1c26f7d3eb96cd41550adb97baed141a761cf335d3d33bcd0ae" - [[package]] name = "typenum" version = "1.12.0" @@ -6584,16 +6582,16 @@ dependencies = [ [[package]] name = "wgpu" -version = "0.6.0" -source = "git+https://github.com/gfx-rs/wgpu-rs.git?rev=ab8b0e3766558d541206da2790dfd63f15b13bc4#ab8b0e3766558d541206da2790dfd63f15b13bc4" +version = "0.7.0" +source = "git+https://github.com/gfx-rs/wgpu-rs.git?rev=f891e86e87f0733f04a8078f4be8ead2f24551cf#f891e86e87f0733f04a8078f4be8ead2f24551cf" dependencies = [ "arrayvec", "js-sys", + "naga", "parking_lot 0.11.1", "raw-window-handle", "smallvec", "tracing", - "typed-arena", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", @@ -6603,8 +6601,8 @@ dependencies = [ [[package]] name = "wgpu-core" -version = "0.6.0" -source = "git+https://github.com/gfx-rs/wgpu?rev=4ebe1f50b057046e4d4f015eb006330d62f5fe91#4ebe1f50b057046e4d4f015eb006330d62f5fe91" +version = "0.7.0" +source = "git+https://github.com/gfx-rs/wgpu?rev=7c7501cab72fd01b14def06b9d9bc63a8dd44b45#7c7501cab72fd01b14def06b9d9bc63a8dd44b45" dependencies = [ "arrayvec", "bitflags", @@ -6631,8 +6629,8 @@ dependencies = [ [[package]] name = "wgpu-types" -version = "0.6.0" -source = "git+https://github.com/gfx-rs/wgpu?rev=4ebe1f50b057046e4d4f015eb006330d62f5fe91#4ebe1f50b057046e4d4f015eb006330d62f5fe91" +version = "0.7.0" +source = "git+https://github.com/gfx-rs/wgpu?rev=7c7501cab72fd01b14def06b9d9bc63a8dd44b45#7c7501cab72fd01b14def06b9d9bc63a8dd44b45" dependencies = [ "bitflags", ] diff --git a/voxygen/Cargo.toml b/voxygen/Cargo.toml index c1902538e6..cf517efe77 100644 --- a/voxygen/Cargo.toml +++ b/voxygen/Cargo.toml @@ -27,7 +27,7 @@ anim = {package = "veloren-voxygen-anim", path = "anim", default-features = fals # Graphics winit = {version = "0.24.0", features = ["serde"]} -wgpu = { git = "https://github.com/gfx-rs/wgpu-rs.git", rev = "ab8b0e3766558d541206da2790dfd63f15b13bc4" } +wgpu = { git = "https://github.com/gfx-rs/wgpu-rs.git", rev = "f891e86e87f0733f04a8078f4be8ead2f24551cf" } bytemuck = { version="1.4", features=["derive"] } shaderc = "0.6.2" diff --git a/voxygen/src/render/pipelines/clouds.rs b/voxygen/src/render/pipelines/clouds.rs index eef0f226be..0a7a46ed63 100644 --- a/voxygen/src/render/pipelines/clouds.rs +++ b/voxygen/src/render/pipelines/clouds.rs @@ -171,30 +171,34 @@ impl CloudsPipeline { let render_pipeline = device.create_render_pipeline(&wgpu::RenderPipelineDescriptor { label: Some("Clouds pipeline"), layout: Some(&render_pipeline_layout), - vertex_stage: wgpu::ProgrammableStageDescriptor { + vertex: wgpu::VertexState { module: vs_module, entry_point: "main", + buffers: &[], }, - fragment_stage: Some(wgpu::ProgrammableStageDescriptor { + primitive: wgpu::PrimitiveState { + topology: wgpu::PrimitiveTopology::TriangleList, + strip_index_format: None, + front_face: wgpu::FrontFace::Ccw, + cull_mode: wgpu::CullMode::None, + polygon_mode: wgpu::PolygonMode::Fill, + }, + depth_stencil: None, + multisample: wgpu::MultisampleState { + count: samples, + mask: !0, + alpha_to_coverage_enabled: false, + }, + fragment: Some(wgpu::FragmentState { module: fs_module, entry_point: "main", + targets: &[wgpu::ColorTargetState { + format: sc_desc.format, + alpha_blend: wgpu::BlendState::REPLACE, + color_blend: wgpu::BlendState::REPLACE, + write_mask: wgpu::ColorWrite::ALL, + }], }), - rasterization_state: None, - primitive_topology: wgpu::PrimitiveTopology::TriangleList, - color_states: &[wgpu::ColorStateDescriptor { - format: sc_desc.format, - color_blend: wgpu::BlendDescriptor::REPLACE, - alpha_blend: wgpu::BlendDescriptor::REPLACE, - write_mask: wgpu::ColorWrite::ALL, - }], - depth_stencil_state: None, - vertex_state: wgpu::VertexStateDescriptor { - index_format: None, - vertex_buffers: &[], - }, - sample_count: samples, - sample_mask: !0, - alpha_to_coverage_enabled: false, }); Self { diff --git a/voxygen/src/render/pipelines/figure.rs b/voxygen/src/render/pipelines/figure.rs index ff4efd4319..7eaaeb3c15 100644 --- a/voxygen/src/render/pipelines/figure.rs +++ b/voxygen/src/render/pipelines/figure.rs @@ -200,48 +200,50 @@ impl FigurePipeline { let render_pipeline = device.create_render_pipeline(&wgpu::RenderPipelineDescriptor { label: Some("Figure pipeline"), layout: Some(&render_pipeline_layout), - vertex_stage: wgpu::ProgrammableStageDescriptor { + vertex: wgpu::VertexState { module: vs_module, entry_point: "main", + buffers: &[Vertex::desc()], }, - fragment_stage: Some(wgpu::ProgrammableStageDescriptor { - module: fs_module, - entry_point: "main", - }), - rasterization_state: Some(wgpu::RasterizationStateDescriptor { + primitive: wgpu::PrimitiveState { + topology: wgpu::PrimitiveTopology::TriangleList, + strip_index_format: None, front_face: wgpu::FrontFace::Ccw, cull_mode: wgpu::CullMode::Back, polygon_mode: wgpu::PolygonMode::Fill, - clamp_depth: false, - depth_bias: 0, - depth_bias_slope_scale: 0.0, - depth_bias_clamp: 0.0, - }), - primitive_topology: wgpu::PrimitiveTopology::TriangleList, - color_states: &[wgpu::ColorStateDescriptor { - format: sc_desc.format, - color_blend: wgpu::BlendDescriptor::REPLACE, - alpha_blend: wgpu::BlendDescriptor::REPLACE, - write_mask: wgpu::ColorWrite::ALL, - }], - depth_stencil_state: Some(wgpu::DepthStencilStateDescriptor { + }, + depth_stencil: Some(wgpu::DepthStencilState { format: wgpu::TextureFormat::Depth32Float, depth_write_enabled: true, depth_compare: wgpu::CompareFunction::GreaterEqual, - stencil: wgpu::StencilStateDescriptor { - front: wgpu::StencilStateFaceDescriptor::IGNORE, - back: wgpu::StencilStateFaceDescriptor::IGNORE, + stencil: wgpu::StencilState { + front: wgpu::StencilFaceState::IGNORE, + back: wgpu::StencilFaceState::IGNORE, read_mask: !0, write_mask: !0, }, + bias: wgpu::DepthBiasState { + constant: 0, + slope_scale: 0.0, + clamp: 0.0, + }, + clamp_depth: false, }), - vertex_state: wgpu::VertexStateDescriptor { - index_format: None, - vertex_buffers: &[Vertex::desc()], + multisample: wgpu::MultisampleState { + count: samples, + mask: !0, + alpha_to_coverage_enabled: false, }, - sample_count: samples, - sample_mask: !0, - alpha_to_coverage_enabled: false, + fragment: Some(wgpu::FragmentState { + module: fs_module, + entry_point: "main", + targets: &[wgpu::ColorTargetState { + format: sc_desc.format, + color_blend: wgpu::BlendState::REPLACE, + alpha_blend: wgpu::BlendState::REPLACE, + write_mask: wgpu::ColorWrite::ALL, + }], + }), }); Self { diff --git a/voxygen/src/render/pipelines/fluid.rs b/voxygen/src/render/pipelines/fluid.rs index 219c5561f9..fcc6c51809 100644 --- a/voxygen/src/render/pipelines/fluid.rs +++ b/voxygen/src/render/pipelines/fluid.rs @@ -32,11 +32,10 @@ impl Vertex { } } - fn desc<'a>() -> wgpu::VertexBufferDescriptor<'a> { - const ATTRIBUTES: [wgpu::VertexAttributeDescriptor; 1] = - wgpu::vertex_attr_array![0 => Uint]; - wgpu::VertexBufferDescriptor { - stride: Self::STRIDE, + fn desc<'a>() -> wgpu::VertexBufferLayout<'a> { + const ATTRIBUTES: [wgpu::VertexAttribute; 1] = wgpu::vertex_attr_array![0 => Uint]; + wgpu::VertexBufferLayout { + array_stride: Self::STRIDE, step_mode: wgpu::InputStepMode::Vertex, attributes: &ATTRIBUTES, } @@ -145,56 +144,58 @@ impl FluidPipeline { let render_pipeline = device.create_render_pipeline(&wgpu::RenderPipelineDescriptor { label: Some("Fluid pipeline"), layout: Some(&render_pipeline_layout), - vertex_stage: wgpu::ProgrammableStageDescriptor { + vertex: wgpu::VertexState { module: vs_module, entry_point: "main", + buffers: &[Vertex::desc()], }, - fragment_stage: Some(wgpu::ProgrammableStageDescriptor { - module: fs_module, - entry_point: "main", - }), - rasterization_state: Some(wgpu::RasterizationStateDescriptor { + primitive: wgpu::PrimitiveState { + topology: wgpu::PrimitiveTopology::TriangleList, + strip_index_format: None, front_face: wgpu::FrontFace::Ccw, cull_mode: wgpu::CullMode::None, polygon_mode: wgpu::PolygonMode::Fill, - clamp_depth: false, - depth_bias: 0, - depth_bias_slope_scale: 0.0, - depth_bias_clamp: 0.0, - }), - primitive_topology: wgpu::PrimitiveTopology::TriangleList, - color_states: &[wgpu::ColorStateDescriptor { - format: sc_desc.format, - color_blend: wgpu::BlendDescriptor { - src_factor: wgpu::BlendFactor::SrcAlpha, - dst_factor: wgpu::BlendFactor::OneMinusSrcAlpha, - operation: wgpu::BlendOperation::Add, - }, - alpha_blend: wgpu::BlendDescriptor { - src_factor: wgpu::BlendFactor::One, - dst_factor: wgpu::BlendFactor::One, - operation: wgpu::BlendOperation::Add, - }, - write_mask: wgpu::ColorWrite::ALL, - }], - depth_stencil_state: Some(wgpu::DepthStencilStateDescriptor { + }, + depth_stencil: Some(wgpu::DepthStencilState { format: wgpu::TextureFormat::Depth32Float, depth_write_enabled: false, depth_compare: wgpu::CompareFunction::GreaterEqual, - stencil: wgpu::StencilStateDescriptor { - front: wgpu::StencilStateFaceDescriptor::IGNORE, - back: wgpu::StencilStateFaceDescriptor::IGNORE, + stencil: wgpu::StencilState { + front: wgpu::StencilFaceState::IGNORE, + back: wgpu::StencilFaceState::IGNORE, read_mask: !0, write_mask: !0, }, + bias: wgpu::DepthBiasState { + constant: 0, + slope_scale: 0.0, + clamp: 0.0, + }, + clamp_depth: false, }), - vertex_state: wgpu::VertexStateDescriptor { - index_format: None, - vertex_buffers: &[Vertex::desc()], + multisample: wgpu::MultisampleState { + count: samples, + mask: !0, + alpha_to_coverage_enabled: false, }, - sample_count: samples, - sample_mask: !0, - alpha_to_coverage_enabled: false, + fragment: Some(wgpu::FragmentState { + module: fs_module, + entry_point: "main", + targets: &[wgpu::ColorTargetState { + format: sc_desc.format, + color_blend: wgpu::BlendState { + src_factor: wgpu::BlendFactor::SrcAlpha, + dst_factor: wgpu::BlendFactor::OneMinusSrcAlpha, + operation: wgpu::BlendOperation::Add, + }, + alpha_blend: wgpu::BlendState { + src_factor: wgpu::BlendFactor::One, + dst_factor: wgpu::BlendFactor::One, + operation: wgpu::BlendOperation::Add, + }, + write_mask: wgpu::ColorWrite::ALL, + }], + }), }); Self { diff --git a/voxygen/src/render/pipelines/lod_terrain.rs b/voxygen/src/render/pipelines/lod_terrain.rs index f7774cf24f..de601a49f2 100644 --- a/voxygen/src/render/pipelines/lod_terrain.rs +++ b/voxygen/src/render/pipelines/lod_terrain.rs @@ -16,11 +16,10 @@ impl Vertex { } } - fn desc<'a>() -> wgpu::VertexBufferDescriptor<'a> { - const ATTRIBUTES: [wgpu::VertexAttributeDescriptor; 1] = - wgpu::vertex_attr_array![0 => Float2]; - wgpu::VertexBufferDescriptor { - stride: Self::STRIDE, + fn desc<'a>() -> wgpu::VertexBufferLayout<'a> { + const ATTRIBUTES: [wgpu::VertexAttribute; 1] = wgpu::vertex_attr_array![0 => Float2]; + wgpu::VertexBufferLayout { + array_stride: Self::STRIDE, step_mode: wgpu::InputStepMode::Vertex, attributes: &ATTRIBUTES, } @@ -162,48 +161,50 @@ impl LodTerrainPipeline { let render_pipeline = device.create_render_pipeline(&wgpu::RenderPipelineDescriptor { label: Some("Lod terrain pipeline"), layout: Some(&render_pipeline_layout), - vertex_stage: wgpu::ProgrammableStageDescriptor { + vertex: wgpu::VertexState { module: vs_module, entry_point: "main", + buffers: &[Vertex::desc()], }, - fragment_stage: Some(wgpu::ProgrammableStageDescriptor { - module: fs_module, - entry_point: "main", - }), - rasterization_state: Some(wgpu::RasterizationStateDescriptor { + primitive: wgpu::PrimitiveState { + topology: wgpu::PrimitiveTopology::TriangleList, + strip_index_format: None, front_face: wgpu::FrontFace::Ccw, cull_mode: wgpu::CullMode::Back, polygon_mode: wgpu::PolygonMode::Fill, - clamp_depth: false, - depth_bias: 0, - depth_bias_slope_scale: 0.0, - depth_bias_clamp: 0.0, - }), - primitive_topology: wgpu::PrimitiveTopology::TriangleList, - color_states: &[wgpu::ColorStateDescriptor { - format: sc_desc.format, - color_blend: wgpu::BlendDescriptor::REPLACE, - alpha_blend: wgpu::BlendDescriptor::REPLACE, - write_mask: wgpu::ColorWrite::ALL, - }], - depth_stencil_state: Some(wgpu::DepthStencilStateDescriptor { + }, + depth_stencil: Some(wgpu::DepthStencilState { format: wgpu::TextureFormat::Depth32Float, depth_write_enabled: true, depth_compare: wgpu::CompareFunction::GreaterEqual, - stencil: wgpu::StencilStateDescriptor { - front: wgpu::StencilStateFaceDescriptor::IGNORE, - back: wgpu::StencilStateFaceDescriptor::IGNORE, + stencil: wgpu::StencilState { + front: wgpu::StencilFaceState::IGNORE, + back: wgpu::StencilFaceState::IGNORE, read_mask: !0, write_mask: !0, }, + bias: wgpu::DepthBiasState { + constant: 0, + slope_scale: 0.0, + clamp: 0.0, + }, + clamp_depth: false, }), - vertex_state: wgpu::VertexStateDescriptor { - index_format: None, - vertex_buffers: &[Vertex::desc()], + multisample: wgpu::MultisampleState { + count: samples, + mask: !0, + alpha_to_coverage_enabled: false, }, - sample_count: samples, - sample_mask: !0, - alpha_to_coverage_enabled: false, + fragment: Some(wgpu::FragmentState { + module: fs_module, + entry_point: "main", + targets: &[wgpu::ColorTargetState { + format: sc_desc.format, + color_blend: wgpu::BlendState::REPLACE, + alpha_blend: wgpu::BlendState::REPLACE, + write_mask: wgpu::ColorWrite::ALL, + }], + }), }); Self { diff --git a/voxygen/src/render/pipelines/particle.rs b/voxygen/src/render/pipelines/particle.rs index 465f48f3f5..2e551991bf 100644 --- a/voxygen/src/render/pipelines/particle.rs +++ b/voxygen/src/render/pipelines/particle.rs @@ -32,11 +32,11 @@ impl Vertex { } } - fn desc<'a>() -> wgpu::VertexBufferDescriptor<'a> { - const ATTRIBUTES: [wgpu::VertexAttributeDescriptor; 2] = + fn desc<'a>() -> wgpu::VertexBufferLayout<'a> { + const ATTRIBUTES: [wgpu::VertexAttribute; 2] = wgpu::vertex_attr_array![0 => Float3, 1 => Uint]; - wgpu::VertexBufferDescriptor { - stride: Self::STRIDE, + wgpu::VertexBufferLayout { + array_stride: Self::STRIDE, step_mode: wgpu::InputStepMode::Vertex, attributes: &ATTRIBUTES, } @@ -144,10 +144,10 @@ impl Instance { } } - fn desc<'a>() -> wgpu::VertexBufferDescriptor<'a> { - const ATTRIBUTES: [wgpu::VertexAttributeDescriptor; 6] = wgpu::vertex_attr_array![2 => Float, 3 => Float, 4 => Float, 5 => Int, 6 => Float3, 7 => Float3]; - wgpu::VertexBufferDescriptor { - stride: mem::size_of::() as wgpu::BufferAddress, + fn desc<'a>() -> wgpu::VertexBufferLayout<'a> { + const ATTRIBUTES: [wgpu::VertexAttribute; 6] = wgpu::vertex_attr_array![2 => Float, 3 => Float, 4 => Float, 5 => Int, 6 => Float3, 7 => Float3]; + wgpu::VertexBufferLayout { + array_stride: mem::size_of::() as wgpu::BufferAddress, step_mode: wgpu::InputStepMode::Instance, attributes: &ATTRIBUTES, } @@ -190,56 +190,58 @@ impl ParticlePipeline { let render_pipeline = device.create_render_pipeline(&wgpu::RenderPipelineDescriptor { label: Some("Particle pipeline"), layout: Some(&render_pipeline_layout), - vertex_stage: wgpu::ProgrammableStageDescriptor { + vertex: wgpu::VertexState { module: vs_module, entry_point: "main", + buffers: &[Vertex::desc(), Instance::desc()], }, - fragment_stage: Some(wgpu::ProgrammableStageDescriptor { - module: fs_module, - entry_point: "main", - }), - rasterization_state: Some(wgpu::RasterizationStateDescriptor { + primitive: wgpu::PrimitiveState { + topology: wgpu::PrimitiveTopology::TriangleList, + strip_index_format: None, front_face: wgpu::FrontFace::Ccw, cull_mode: wgpu::CullMode::Back, polygon_mode: wgpu::PolygonMode::Fill, - clamp_depth: false, - depth_bias: 0, - depth_bias_slope_scale: 0.0, - depth_bias_clamp: 0.0, - }), - primitive_topology: wgpu::PrimitiveTopology::TriangleList, - color_states: &[wgpu::ColorStateDescriptor { - format: sc_desc.format, - color_blend: wgpu::BlendDescriptor { - src_factor: wgpu::BlendFactor::SrcAlpha, - dst_factor: wgpu::BlendFactor::OneMinusSrcAlpha, - operation: wgpu::BlendOperation::Add, - }, - alpha_blend: wgpu::BlendDescriptor { - src_factor: wgpu::BlendFactor::One, - dst_factor: wgpu::BlendFactor::One, - operation: wgpu::BlendOperation::Add, - }, - write_mask: wgpu::ColorWrite::ALL, - }], - depth_stencil_state: Some(wgpu::DepthStencilStateDescriptor { + }, + depth_stencil: Some(wgpu::DepthStencilState { format: wgpu::TextureFormat::Depth32Float, depth_write_enabled: true, depth_compare: wgpu::CompareFunction::GreaterEqual, - stencil: wgpu::StencilStateDescriptor { - front: wgpu::StencilStateFaceDescriptor::IGNORE, - back: wgpu::StencilStateFaceDescriptor::IGNORE, + stencil: wgpu::StencilState { + front: wgpu::StencilFaceState::IGNORE, + back: wgpu::StencilFaceState::IGNORE, read_mask: !0, write_mask: !0, }, + bias: wgpu::DepthBiasState { + constant: 0, + slope_scale: 0.0, + clamp: 0.0, + }, + clamp_depth: false, }), - vertex_state: wgpu::VertexStateDescriptor { - index_format: None, - vertex_buffers: &[Vertex::desc(), Instance::desc()], + multisample: wgpu::MultisampleState { + count: samples, + mask: !0, + alpha_to_coverage_enabled: false, }, - sample_count: samples, - sample_mask: !0, - alpha_to_coverage_enabled: false, + fragment: Some(wgpu::FragmentState { + module: fs_module, + entry_point: "main", + targets: &[wgpu::ColorTargetState { + format: sc_desc.format, + color_blend: wgpu::BlendState { + src_factor: wgpu::BlendFactor::SrcAlpha, + dst_factor: wgpu::BlendFactor::OneMinusSrcAlpha, + operation: wgpu::BlendOperation::Add, + }, + alpha_blend: wgpu::BlendState { + src_factor: wgpu::BlendFactor::One, + dst_factor: wgpu::BlendFactor::One, + operation: wgpu::BlendOperation::Add, + }, + write_mask: wgpu::ColorWrite::ALL, + }], + }), }); Self { diff --git a/voxygen/src/render/pipelines/postprocess.rs b/voxygen/src/render/pipelines/postprocess.rs index c367eb168e..4935a05c7a 100644 --- a/voxygen/src/render/pipelines/postprocess.rs +++ b/voxygen/src/render/pipelines/postprocess.rs @@ -114,7 +114,6 @@ impl PostProcessPipeline { sc_desc: &wgpu::SwapChainDescriptor, global_layout: &GlobalsLayouts, layout: &PostProcessLayout, - aa_mode: AaMode, ) -> Self { common::span!(_guard, "PostProcessPipeline::new"); let render_pipeline_layout = @@ -124,41 +123,37 @@ impl PostProcessPipeline { bind_group_layouts: &[&global_layout.globals, &layout.layout], }); - let samples = match aa_mode { - AaMode::None | AaMode::Fxaa => 1, - // TODO: Ensure sampling in the shader is exactly between the 4 texels - AaMode::MsaaX4 => 4, - AaMode::MsaaX8 => 8, - AaMode::MsaaX16 => 16, - }; - let render_pipeline = device.create_render_pipeline(&wgpu::RenderPipelineDescriptor { label: Some("Post process pipeline"), layout: Some(&render_pipeline_layout), - vertex_stage: wgpu::ProgrammableStageDescriptor { + vertex: wgpu::VertexState { module: vs_module, entry_point: "main", + buffers: &[], }, - fragment_stage: Some(wgpu::ProgrammableStageDescriptor { + primitive: wgpu::PrimitiveState { + topology: wgpu::PrimitiveTopology::TriangleList, + strip_index_format: None, + front_face: wgpu::FrontFace::Ccw, + cull_mode: wgpu::CullMode::None, + polygon_mode: wgpu::PolygonMode::Fill, + }, + depth_stencil: None, + multisample: wgpu::MultisampleState { + count: 1, + mask: !0, + alpha_to_coverage_enabled: false, + }, + fragment: Some(wgpu::FragmentState { module: fs_module, entry_point: "main", + targets: &[wgpu::ColorTargetState { + format: sc_desc.format, + color_blend: wgpu::BlendState::REPLACE, + alpha_blend: wgpu::BlendState::REPLACE, + write_mask: wgpu::ColorWrite::ALL, + }], }), - rasterization_state: None, - primitive_topology: wgpu::PrimitiveTopology::TriangleList, - color_states: &[wgpu::ColorStateDescriptor { - format: sc_desc.format, - color_blend: wgpu::BlendDescriptor::REPLACE, - alpha_blend: wgpu::BlendDescriptor::REPLACE, - write_mask: wgpu::ColorWrite::ALL, - }], - depth_stencil_state: None, - vertex_state: wgpu::VertexStateDescriptor { - index_format: None, - vertex_buffers: &[], - }, - sample_count: samples, - sample_mask: !0, - alpha_to_coverage_enabled: false, }); Self { diff --git a/voxygen/src/render/pipelines/shadow.rs b/voxygen/src/render/pipelines/shadow.rs index 9160e9de71..037abaadd5 100644 --- a/voxygen/src/render/pipelines/shadow.rs +++ b/voxygen/src/render/pipelines/shadow.rs @@ -157,43 +157,41 @@ impl ShadowFigurePipeline { let render_pipeline = device.create_render_pipeline(&wgpu::RenderPipelineDescriptor { label: Some("Directed shadow figure pipeline"), layout: Some(&render_pipeline_layout), - vertex_stage: wgpu::ProgrammableStageDescriptor { + vertex: wgpu::VertexState { module: vs_module, entry_point: "main", + buffers: &[TerrainVertex::desc()], }, - fragment_stage: /*Some(wgpu::ProgrammableStageDescriptor { - module: fs_module, - entry_point: "main", - })*/None, - rasterization_state: Some(wgpu::RasterizationStateDescriptor { + primitive: wgpu::PrimitiveState { + topology: wgpu::PrimitiveTopology::TriangleList, + strip_index_format: None, front_face: wgpu::FrontFace::Ccw, - cull_mode: wgpu::CullMode::Front, + cull_mode: wgpu::CullMode::Back, polygon_mode: wgpu::PolygonMode::Fill, - clamp_depth: true, - depth_bias: 0, - depth_bias_slope_scale: 0.0, - depth_bias_clamp: 0.0, - }), - primitive_topology: wgpu::PrimitiveTopology::TriangleList, - color_states: &[], - depth_stencil_state: Some(wgpu::DepthStencilStateDescriptor { + }, + depth_stencil: Some(wgpu::DepthStencilState { format: wgpu::TextureFormat::Depth24Plus, depth_write_enabled: true, depth_compare: wgpu::CompareFunction::Less, - stencil: wgpu::StencilStateDescriptor { - front: wgpu::StencilStateFaceDescriptor::IGNORE, - back: wgpu::StencilStateFaceDescriptor::IGNORE, + stencil: wgpu::StencilState { + front: wgpu::StencilFaceState::IGNORE, + back: wgpu::StencilFaceState::IGNORE, read_mask: !0, write_mask: !0, }, + bias: wgpu::DepthBiasState { + constant: 0, + slope_scale: 0.0, + clamp: 0.0, + }, + clamp_depth: true, }), - vertex_state: wgpu::VertexStateDescriptor { - index_format: None, - vertex_buffers: &[TerrainVertex::desc()], + multisample: wgpu::MultisampleState { + count: samples, + mask: !0, + alpha_to_coverage_enabled: false, }, - sample_count: samples, - sample_mask: !0, - alpha_to_coverage_enabled: false, + fragment: None, }); Self { @@ -233,43 +231,41 @@ impl ShadowPipeline { let render_pipeline = device.create_render_pipeline(&wgpu::RenderPipelineDescriptor { label: Some("Directed shadow pipeline"), layout: Some(&render_pipeline_layout), - vertex_stage: wgpu::ProgrammableStageDescriptor { + vertex: wgpu::VertexState { module: vs_module, entry_point: "main", + buffers: &[TerrainVertex::desc()], }, - fragment_stage: /*Some(wgpu::ProgrammableStageDescriptor { - module: fs_module, - entry_point: "main", - })*/None, - rasterization_state: Some(wgpu::RasterizationStateDescriptor { + primitive: wgpu::PrimitiveState { + topology: wgpu::PrimitiveTopology::TriangleList, + strip_index_format: None, front_face: wgpu::FrontFace::Ccw, - cull_mode: wgpu::CullMode::Front, + cull_mode: wgpu::CullMode::Back, polygon_mode: wgpu::PolygonMode::Fill, - clamp_depth: true, - depth_bias: 0, - depth_bias_slope_scale: 0.0, - depth_bias_clamp: 0.0, - }), - primitive_topology: wgpu::PrimitiveTopology::TriangleList, - color_states: &[], - depth_stencil_state: Some(wgpu::DepthStencilStateDescriptor { + }, + depth_stencil: Some(wgpu::DepthStencilState { format: wgpu::TextureFormat::Depth24Plus, depth_write_enabled: true, depth_compare: wgpu::CompareFunction::Less, - stencil: wgpu::StencilStateDescriptor { - front: wgpu::StencilStateFaceDescriptor::IGNORE, - back: wgpu::StencilStateFaceDescriptor::IGNORE, + stencil: wgpu::StencilState { + front: wgpu::StencilFaceState::IGNORE, + back: wgpu::StencilFaceState::IGNORE, read_mask: !0, write_mask: !0, }, + bias: wgpu::DepthBiasState { + constant: 0, + slope_scale: 0.0, + clamp: 0.0, + }, + clamp_depth: true, }), - vertex_state: wgpu::VertexStateDescriptor { - index_format: None, - vertex_buffers: &[TerrainVertex::desc()], + multisample: wgpu::MultisampleState { + count: samples, + mask: !0, + alpha_to_coverage_enabled: false, }, - sample_count: samples, - sample_mask: !0, - alpha_to_coverage_enabled: false, + fragment: None, }); Self { @@ -311,43 +307,41 @@ impl PointShadowPipeline { let render_pipeline = device.create_render_pipeline(&wgpu::RenderPipelineDescriptor { label: Some("Point shadow pipeline"), layout: Some(&render_pipeline_layout), - vertex_stage: wgpu::ProgrammableStageDescriptor { + vertex: wgpu::VertexState { module: vs_module, entry_point: "main", + buffers: &[TerrainVertex::desc()], }, - fragment_stage: /*Some(wgpu::ProgrammableStageDescriptor { - module: fs_module, - entry_point: "main", - })*/None, - rasterization_state: Some(wgpu::RasterizationStateDescriptor { + primitive: wgpu::PrimitiveState { + topology: wgpu::PrimitiveTopology::TriangleList, + strip_index_format: None, front_face: wgpu::FrontFace::Ccw, cull_mode: wgpu::CullMode::Back, polygon_mode: wgpu::PolygonMode::Fill, - clamp_depth: false, - depth_bias: 0, - depth_bias_slope_scale: 0.0, - depth_bias_clamp: 0.0, - }), - primitive_topology: wgpu::PrimitiveTopology::TriangleList, - color_states: &[], - depth_stencil_state: Some(wgpu::DepthStencilStateDescriptor { + }, + depth_stencil: Some(wgpu::DepthStencilState { format: wgpu::TextureFormat::Depth24Plus, depth_write_enabled: true, depth_compare: wgpu::CompareFunction::Less, - stencil: wgpu::StencilStateDescriptor { - front: wgpu::StencilStateFaceDescriptor::IGNORE, - back: wgpu::StencilStateFaceDescriptor::IGNORE, + stencil: wgpu::StencilState { + front: wgpu::StencilFaceState::IGNORE, + back: wgpu::StencilFaceState::IGNORE, read_mask: !0, write_mask: !0, }, + bias: wgpu::DepthBiasState { + constant: 0, + slope_scale: 0.0, + clamp: 0.0, + }, + clamp_depth: false, }), - vertex_state: wgpu::VertexStateDescriptor { - index_format: None, - vertex_buffers: &[TerrainVertex::desc()], + multisample: wgpu::MultisampleState { + count: samples, + mask: !0, + alpha_to_coverage_enabled: false, }, - sample_count: samples, - sample_mask: !0, - alpha_to_coverage_enabled: false, + fragment: None, }); Self { diff --git a/voxygen/src/render/pipelines/skybox.rs b/voxygen/src/render/pipelines/skybox.rs index f682ba9472..484ca5b4b7 100644 --- a/voxygen/src/render/pipelines/skybox.rs +++ b/voxygen/src/render/pipelines/skybox.rs @@ -9,11 +9,11 @@ pub struct Vertex { } impl Vertex { - fn desc<'a>() -> wgpu::VertexBufferDescriptor<'a> { - wgpu::VertexBufferDescriptor { - stride: Self::STRIDE, + fn desc<'a>() -> wgpu::VertexBufferLayout<'a> { + wgpu::VertexBufferLayout { + array_stride: Self::STRIDE, step_mode: wgpu::InputStepMode::Vertex, - attributes: &[wgpu::VertexAttributeDescriptor { + attributes: &[wgpu::VertexAttribute { offset: 0, shader_location: 0, format: wgpu::VertexFormat::Float3, @@ -58,48 +58,50 @@ impl SkyboxPipeline { let render_pipeline = device.create_render_pipeline(&wgpu::RenderPipelineDescriptor { label: Some("Skybox pipeline"), layout: Some(&render_pipeline_layout), - vertex_stage: wgpu::ProgrammableStageDescriptor { + vertex: wgpu::VertexState { module: vs_module, entry_point: "main", + buffers: &[Vertex::desc()], }, - fragment_stage: Some(wgpu::ProgrammableStageDescriptor { - module: fs_module, - entry_point: "main", - }), - rasterization_state: Some(wgpu::RasterizationStateDescriptor { + primitive: wgpu::PrimitiveState { + topology: wgpu::PrimitiveTopology::TriangleList, + strip_index_format: None, front_face: wgpu::FrontFace::Ccw, cull_mode: wgpu::CullMode::Back, polygon_mode: wgpu::PolygonMode::Fill, - clamp_depth: false, - depth_bias: 0, - depth_bias_slope_scale: 0.0, - depth_bias_clamp: 0.0, - }), - primitive_topology: wgpu::PrimitiveTopology::TriangleList, - color_states: &[wgpu::ColorStateDescriptor { - format: sc_desc.format, - color_blend: wgpu::BlendDescriptor::REPLACE, - alpha_blend: wgpu::BlendDescriptor::REPLACE, - write_mask: wgpu::ColorWrite::ALL, - }], - depth_stencil_state: Some(wgpu::DepthStencilStateDescriptor { + }, + depth_stencil: Some(wgpu::DepthStencilState { format: wgpu::TextureFormat::Depth32Float, depth_write_enabled: true, depth_compare: wgpu::CompareFunction::GreaterEqual, - stencil: wgpu::StencilStateDescriptor { - front: wgpu::StencilStateFaceDescriptor::IGNORE, - back: wgpu::StencilStateFaceDescriptor::IGNORE, + stencil: wgpu::StencilState { + front: wgpu::StencilFaceState::IGNORE, + back: wgpu::StencilFaceState::IGNORE, read_mask: !0, write_mask: !0, }, + bias: wgpu::DepthBiasState { + constant: 0, + slope_scale: 0.0, + clamp: 0.0, + }, + clamp_depth: false, }), - vertex_state: wgpu::VertexStateDescriptor { - index_format: None, - vertex_buffers: &[Vertex::desc()], + multisample: wgpu::MultisampleState { + count: samples, + mask: !0, + alpha_to_coverage_enabled: false, }, - sample_count: samples, - sample_mask: !0, - alpha_to_coverage_enabled: false, + fragment: Some(wgpu::FragmentState { + module: fs_module, + entry_point: "main", + targets: &[wgpu::ColorTargetState { + format: sc_desc.format, + color_blend: wgpu::BlendState::REPLACE, + alpha_blend: wgpu::BlendState::REPLACE, + write_mask: wgpu::ColorWrite::ALL, + }], + }), }); Self { diff --git a/voxygen/src/render/pipelines/sprite.rs b/voxygen/src/render/pipelines/sprite.rs index 1fc754ca34..40bf2f2647 100644 --- a/voxygen/src/render/pipelines/sprite.rs +++ b/voxygen/src/render/pipelines/sprite.rs @@ -60,11 +60,11 @@ impl Vertex { } } - fn desc<'a>() -> wgpu::VertexBufferDescriptor<'a> { - const ATTRIBUTES: [wgpu::VertexAttributeDescriptor; 3] = + fn desc<'a>() -> wgpu::VertexBufferLayout<'a> { + const ATTRIBUTES: [wgpu::VertexAttribute; 3] = wgpu::vertex_attr_array![0 => Float3, 1 => Uint, 2 => Uint]; - wgpu::VertexBufferDescriptor { - stride: Self::STRIDE, + wgpu::VertexBufferLayout { + array_stride: Self::STRIDE, step_mode: wgpu::InputStepMode::Vertex, attributes: &ATTRIBUTES, } @@ -113,10 +113,10 @@ impl Instance { } } - fn desc<'a>() -> wgpu::VertexBufferDescriptor<'a> { - const ATTRIBUTES: [wgpu::VertexAttributeDescriptor; 7] = wgpu::vertex_attr_array![3 => Uint, 4 => Float4, 5 => Float4, 6 => Float4,7 => Float4, 8 => Float4, 9 => Float]; - wgpu::VertexBufferDescriptor { - stride: mem::size_of::() as wgpu::BufferAddress, + fn desc<'a>() -> wgpu::VertexBufferLayout<'a> { + const ATTRIBUTES: [wgpu::VertexAttribute; 7] = wgpu::vertex_attr_array![3 => Uint, 4 => Float4, 5 => Float4, 6 => Float4,7 => Float4, 8 => Float4, 9 => Float]; + wgpu::VertexBufferLayout { + array_stride: mem::size_of::() as wgpu::BufferAddress, step_mode: wgpu::InputStepMode::Instance, attributes: &ATTRIBUTES, } @@ -237,56 +237,58 @@ impl SpritePipeline { let render_pipeline = device.create_render_pipeline(&wgpu::RenderPipelineDescriptor { label: Some("Sprite pipeline"), layout: Some(&render_pipeline_layout), - vertex_stage: wgpu::ProgrammableStageDescriptor { + vertex: wgpu::VertexState { module: vs_module, entry_point: "main", + buffers: &[Vertex::desc(), Instance::desc()], }, - fragment_stage: Some(wgpu::ProgrammableStageDescriptor { - module: fs_module, - entry_point: "main", - }), - rasterization_state: Some(wgpu::RasterizationStateDescriptor { + primitive: wgpu::PrimitiveState { + topology: wgpu::PrimitiveTopology::TriangleList, + strip_index_format: None, front_face: wgpu::FrontFace::Ccw, cull_mode: wgpu::CullMode::Back, polygon_mode: wgpu::PolygonMode::Fill, - clamp_depth: false, - depth_bias: 0, - depth_bias_slope_scale: 0.0, - depth_bias_clamp: 0.0, - }), - primitive_topology: wgpu::PrimitiveTopology::TriangleList, - color_states: &[wgpu::ColorStateDescriptor { - format: sc_desc.format, - color_blend: wgpu::BlendDescriptor { - src_factor: wgpu::BlendFactor::SrcAlpha, - dst_factor: wgpu::BlendFactor::OneMinusSrcAlpha, - operation: wgpu::BlendOperation::Add, - }, - alpha_blend: wgpu::BlendDescriptor { - src_factor: wgpu::BlendFactor::One, - dst_factor: wgpu::BlendFactor::One, - operation: wgpu::BlendOperation::Add, - }, - write_mask: wgpu::ColorWrite::ALL, - }], - depth_stencil_state: Some(wgpu::DepthStencilStateDescriptor { + }, + depth_stencil: Some(wgpu::DepthStencilState { format: wgpu::TextureFormat::Depth32Float, depth_write_enabled: true, depth_compare: wgpu::CompareFunction::GreaterEqual, - stencil: wgpu::StencilStateDescriptor { - front: wgpu::StencilStateFaceDescriptor::IGNORE, - back: wgpu::StencilStateFaceDescriptor::IGNORE, + stencil: wgpu::StencilState { + front: wgpu::StencilFaceState::IGNORE, + back: wgpu::StencilFaceState::IGNORE, read_mask: !0, write_mask: !0, }, + bias: wgpu::DepthBiasState { + constant: 0, + slope_scale: 0.0, + clamp: 0.0, + }, + clamp_depth: false, }), - vertex_state: wgpu::VertexStateDescriptor { - index_format: None, - vertex_buffers: &[Vertex::desc(), Instance::desc()], + multisample: wgpu::MultisampleState { + count: samples, + mask: !0, + alpha_to_coverage_enabled: false, }, - sample_count: samples, - sample_mask: !0, - alpha_to_coverage_enabled: false, + fragment: Some(wgpu::FragmentState { + module: fs_module, + entry_point: "main", + targets: &[wgpu::ColorTargetState { + format: sc_desc.format, + color_blend: wgpu::BlendState { + src_factor: wgpu::BlendFactor::SrcAlpha, + dst_factor: wgpu::BlendFactor::OneMinusSrcAlpha, + operation: wgpu::BlendOperation::Add, + }, + alpha_blend: wgpu::BlendState { + src_factor: wgpu::BlendFactor::One, + dst_factor: wgpu::BlendFactor::One, + operation: wgpu::BlendOperation::Add, + }, + write_mask: wgpu::ColorWrite::ALL, + }], + }), }); Self { diff --git a/voxygen/src/render/pipelines/terrain.rs b/voxygen/src/render/pipelines/terrain.rs index 2cd8159503..a362412fe1 100644 --- a/voxygen/src/render/pipelines/terrain.rs +++ b/voxygen/src/render/pipelines/terrain.rs @@ -102,11 +102,11 @@ impl Vertex { self.pos_norm = (self.pos_norm & !(0xF << 27)) | ((bone_idx as u32 & 0xF) << 27); } - pub fn desc<'a>() -> wgpu::VertexBufferDescriptor<'a> { - const ATTRIBUTES: [wgpu::VertexAttributeDescriptor; 2] = + pub fn desc<'a>() -> wgpu::VertexBufferLayout<'a> { + const ATTRIBUTES: [wgpu::VertexAttribute; 2] = wgpu::vertex_attr_array![0 => Uint,1 => Uint]; - wgpu::VertexBufferDescriptor { - stride: Self::STRIDE, + wgpu::VertexBufferLayout { + array_stride: Self::STRIDE, step_mode: wgpu::InputStepMode::Vertex, attributes: &ATTRIBUTES, } @@ -219,48 +219,50 @@ impl TerrainPipeline { let render_pipeline = device.create_render_pipeline(&wgpu::RenderPipelineDescriptor { label: Some("Terrain pipeline"), layout: Some(&render_pipeline_layout), - vertex_stage: wgpu::ProgrammableStageDescriptor { + vertex: wgpu::VertexState { module: vs_module, entry_point: "main", + buffers: &[Vertex::desc()], }, - fragment_stage: Some(wgpu::ProgrammableStageDescriptor { - module: fs_module, - entry_point: "main", - }), - rasterization_state: Some(wgpu::RasterizationStateDescriptor { + primitive: wgpu::PrimitiveState { + topology: wgpu::PrimitiveTopology::TriangleList, + strip_index_format: None, front_face: wgpu::FrontFace::Ccw, cull_mode: wgpu::CullMode::Back, polygon_mode: wgpu::PolygonMode::Fill, - clamp_depth: false, - depth_bias: 0, - depth_bias_slope_scale: 0.0, - depth_bias_clamp: 0.0, - }), - primitive_topology: wgpu::PrimitiveTopology::TriangleList, - color_states: &[wgpu::ColorStateDescriptor { - format: sc_desc.format, - color_blend: wgpu::BlendDescriptor::REPLACE, - alpha_blend: wgpu::BlendDescriptor::REPLACE, - write_mask: wgpu::ColorWrite::ALL, - }], - depth_stencil_state: Some(wgpu::DepthStencilStateDescriptor { + }, + depth_stencil: Some(wgpu::DepthStencilState { format: wgpu::TextureFormat::Depth32Float, depth_write_enabled: true, depth_compare: wgpu::CompareFunction::GreaterEqual, - stencil: wgpu::StencilStateDescriptor { - front: wgpu::StencilStateFaceDescriptor::IGNORE, - back: wgpu::StencilStateFaceDescriptor::IGNORE, + stencil: wgpu::StencilState { + front: wgpu::StencilFaceState::IGNORE, + back: wgpu::StencilFaceState::IGNORE, read_mask: !0, write_mask: !0, }, + bias: wgpu::DepthBiasState { + constant: 0, + slope_scale: 0.0, + clamp: 0.0, + }, + clamp_depth: false, }), - vertex_state: wgpu::VertexStateDescriptor { - index_format: None, - vertex_buffers: &[Vertex::desc()], + multisample: wgpu::MultisampleState { + count: samples, + mask: !0, + alpha_to_coverage_enabled: false, }, - sample_count: samples, - sample_mask: !0, - alpha_to_coverage_enabled: false, + fragment: Some(wgpu::FragmentState { + module: fs_module, + entry_point: "main", + targets: &[wgpu::ColorTargetState { + format: sc_desc.format, + color_blend: wgpu::BlendState::REPLACE, + alpha_blend: wgpu::BlendState::REPLACE, + write_mask: wgpu::ColorWrite::ALL, + }], + }), }); Self { diff --git a/voxygen/src/render/pipelines/ui.rs b/voxygen/src/render/pipelines/ui.rs index 74727780bd..d0ed277ffc 100644 --- a/voxygen/src/render/pipelines/ui.rs +++ b/voxygen/src/render/pipelines/ui.rs @@ -16,11 +16,11 @@ pub struct Vertex { } impl Vertex { - fn desc<'a>() -> wgpu::VertexBufferDescriptor<'a> { - const ATTRIBUTES: [wgpu::VertexAttributeDescriptor; 5] = + fn desc<'a>() -> wgpu::VertexBufferLayout<'a> { + const ATTRIBUTES: [wgpu::VertexAttribute; 5] = wgpu::vertex_attr_array![0 => Float2, 1 => Float2, 2 => Float4, 3 => Float2, 4 => Uint]; - wgpu::VertexBufferDescriptor { - stride: Self::STRIDE, + wgpu::VertexBufferLayout { + array_stride: Self::STRIDE, step_mode: wgpu::InputStepMode::Vertex, attributes: &ATTRIBUTES, } @@ -192,7 +192,6 @@ impl UiPipeline { sc_desc: &wgpu::SwapChainDescriptor, global_layout: &GlobalsLayouts, layout: &UiLayout, - aa_mode: AaMode, ) -> Self { let render_pipeline_layout = device.create_pipeline_layout(&wgpu::PipelineLayoutDescriptor { @@ -201,57 +200,45 @@ impl UiPipeline { bind_group_layouts: &[&global_layout.globals, &layout.locals, &layout.texture], }); - let samples = match aa_mode { - AaMode::None | AaMode::Fxaa => 1, - // TODO: Ensure sampling in the shader is exactly between the 4 texels - AaMode::MsaaX4 => 4, - AaMode::MsaaX8 => 8, - AaMode::MsaaX16 => 16, - }; - let render_pipeline = device.create_render_pipeline(&wgpu::RenderPipelineDescriptor { label: Some("UI pipeline"), layout: Some(&render_pipeline_layout), - vertex_stage: wgpu::ProgrammableStageDescriptor { + vertex: wgpu::VertexState { module: vs_module, entry_point: "main", + buffers: &[Vertex::desc()], }, - fragment_stage: Some(wgpu::ProgrammableStageDescriptor { - module: fs_module, - entry_point: "main", - }), - rasterization_state: Some(wgpu::RasterizationStateDescriptor { + primitive: wgpu::PrimitiveState { + topology: wgpu::PrimitiveTopology::TriangleList, + strip_index_format: None, front_face: wgpu::FrontFace::Ccw, cull_mode: wgpu::CullMode::Back, polygon_mode: wgpu::PolygonMode::Fill, - clamp_depth: false, - depth_bias: 0, - depth_bias_slope_scale: 0.0, - depth_bias_clamp: 0.0, - }), - primitive_topology: wgpu::PrimitiveTopology::TriangleList, - color_states: &[wgpu::ColorStateDescriptor { - format: sc_desc.format, - color_blend: wgpu::BlendDescriptor { - src_factor: wgpu::BlendFactor::SrcAlpha, - dst_factor: wgpu::BlendFactor::OneMinusSrcAlpha, - operation: wgpu::BlendOperation::Add, - }, - alpha_blend: wgpu::BlendDescriptor { - src_factor: wgpu::BlendFactor::One, - dst_factor: wgpu::BlendFactor::One, - operation: wgpu::BlendOperation::Add, - }, - write_mask: wgpu::ColorWrite::ALL, - }], - depth_stencil_state: None, - vertex_state: wgpu::VertexStateDescriptor { - index_format: None, - vertex_buffers: &[Vertex::desc()], }, - sample_count: samples, - sample_mask: !0, - alpha_to_coverage_enabled: false, + depth_stencil: None, + multisample: wgpu::MultisampleState { + count: 1, + mask: !0, + alpha_to_coverage_enabled: false, + }, + fragment: Some(wgpu::FragmentState { + module: fs_module, + entry_point: "main", + targets: &[wgpu::ColorTargetState { + format: sc_desc.format, + color_blend: wgpu::BlendState { + src_factor: wgpu::BlendFactor::SrcAlpha, + dst_factor: wgpu::BlendFactor::OneMinusSrcAlpha, + operation: wgpu::BlendOperation::Add, + }, + alpha_blend: wgpu::BlendState { + src_factor: wgpu::BlendFactor::One, + dst_factor: wgpu::BlendFactor::One, + operation: wgpu::BlendOperation::Add, + }, + write_mask: wgpu::ColorWrite::ALL, + }], + }), }); Self { diff --git a/voxygen/src/render/renderer.rs b/voxygen/src/render/renderer.rs index 5656126dc7..80e8aca956 100644 --- a/voxygen/src/render/renderer.rs +++ b/voxygen/src/render/renderer.rs @@ -2239,7 +2239,6 @@ fn create_pipelines( sc_desc, &layouts.global, &layouts.ui, - mode.aa, ); // Construct a pipeline for rendering terrain @@ -2272,7 +2271,6 @@ fn create_pipelines( sc_desc, &layouts.global, &layouts.postprocess, - mode.aa, ); // Consider reenabling at some time in the future @@ -2364,6 +2362,6 @@ fn create_shader_module( Ok(device.create_shader_module(&wgpu::ShaderModuleDescriptor { label: Some(source), source: wgpu::ShaderSource::SpirV(Cow::Borrowed(spv.as_binary())), - flags: wgpu::ShaderFlags::VALIDATION, + flags: wgpu::ShaderFlags::empty(), // TODO: renable wgpu::ShaderFlags::VALIDATION, })) }