diff --git a/Cargo.lock b/Cargo.lock index 4a47c17898..ad2bd33d45 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1893,7 +1893,7 @@ dependencies = [ [[package]] name = "gfx-auxil" version = "0.9.0" -source = "git+https://github.com/gfx-rs/gfx.git?rev=e305dcca3557923a6a8810162d8dd09cb45a43a6#e305dcca3557923a6a8810162d8dd09cb45a43a6" +source = "git+https://github.com/gfx-rs/gfx?rev=27a1dae3796d33d23812f2bb8c7e3b5aea18b521#27a1dae3796d33d23812f2bb8c7e3b5aea18b521" dependencies = [ "fxhash", "gfx-hal", @@ -1903,7 +1903,7 @@ dependencies = [ [[package]] name = "gfx-backend-dx11" version = "0.8.0" -source = "git+https://github.com/gfx-rs/gfx.git?rev=e305dcca3557923a6a8810162d8dd09cb45a43a6#e305dcca3557923a6a8810162d8dd09cb45a43a6" +source = "git+https://github.com/gfx-rs/gfx?rev=27a1dae3796d33d23812f2bb8c7e3b5aea18b521#27a1dae3796d33d23812f2bb8c7e3b5aea18b521" dependencies = [ "arrayvec", "bitflags", @@ -1924,7 +1924,7 @@ dependencies = [ [[package]] name = "gfx-backend-dx12" version = "0.8.0" -source = "git+https://github.com/gfx-rs/gfx.git?rev=e305dcca3557923a6a8810162d8dd09cb45a43a6#e305dcca3557923a6a8810162d8dd09cb45a43a6" +source = "git+https://github.com/gfx-rs/gfx?rev=27a1dae3796d33d23812f2bb8c7e3b5aea18b521#27a1dae3796d33d23812f2bb8c7e3b5aea18b521" dependencies = [ "arrayvec", "bit-set", @@ -1945,7 +1945,7 @@ dependencies = [ [[package]] name = "gfx-backend-empty" version = "0.8.0" -source = "git+https://github.com/gfx-rs/gfx.git?rev=e305dcca3557923a6a8810162d8dd09cb45a43a6#e305dcca3557923a6a8810162d8dd09cb45a43a6" +source = "git+https://github.com/gfx-rs/gfx?rev=27a1dae3796d33d23812f2bb8c7e3b5aea18b521#27a1dae3796d33d23812f2bb8c7e3b5aea18b521" dependencies = [ "gfx-hal", "log", @@ -1955,7 +1955,7 @@ dependencies = [ [[package]] name = "gfx-backend-gl" version = "0.8.1" -source = "git+https://github.com/gfx-rs/gfx.git?rev=e305dcca3557923a6a8810162d8dd09cb45a43a6#e305dcca3557923a6a8810162d8dd09cb45a43a6" +source = "git+https://github.com/gfx-rs/gfx?rev=27a1dae3796d33d23812f2bb8c7e3b5aea18b521#27a1dae3796d33d23812f2bb8c7e3b5aea18b521" dependencies = [ "arrayvec", "bitflags", @@ -1976,7 +1976,7 @@ dependencies = [ [[package]] name = "gfx-backend-metal" version = "0.8.1" -source = "git+https://github.com/gfx-rs/gfx.git?rev=e305dcca3557923a6a8810162d8dd09cb45a43a6#e305dcca3557923a6a8810162d8dd09cb45a43a6" +source = "git+https://github.com/gfx-rs/gfx?rev=27a1dae3796d33d23812f2bb8c7e3b5aea18b521#27a1dae3796d33d23812f2bb8c7e3b5aea18b521" dependencies = [ "arrayvec", "bitflags", @@ -2000,7 +2000,7 @@ dependencies = [ [[package]] name = "gfx-backend-vulkan" version = "0.8.0" -source = "git+https://github.com/gfx-rs/gfx.git?rev=e305dcca3557923a6a8810162d8dd09cb45a43a6#e305dcca3557923a6a8810162d8dd09cb45a43a6" +source = "git+https://github.com/gfx-rs/gfx?rev=27a1dae3796d33d23812f2bb8c7e3b5aea18b521#27a1dae3796d33d23812f2bb8c7e3b5aea18b521" dependencies = [ "arrayvec", "ash", @@ -2022,7 +2022,7 @@ dependencies = [ [[package]] name = "gfx-hal" version = "0.8.0" -source = "git+https://github.com/gfx-rs/gfx.git?rev=e305dcca3557923a6a8810162d8dd09cb45a43a6#e305dcca3557923a6a8810162d8dd09cb45a43a6" +source = "git+https://github.com/gfx-rs/gfx?rev=27a1dae3796d33d23812f2bb8c7e3b5aea18b521#27a1dae3796d33d23812f2bb8c7e3b5aea18b521" dependencies = [ "bitflags", "naga", @@ -3070,7 +3070,7 @@ checksum = "0debeb9fcf88823ea64d64e4a815ab1643f33127d995978e099942ce38f25238" [[package]] name = "naga" version = "0.4.0" -source = "git+https://github.com/gfx-rs/naga.git?rev=3a0f0144112ff621dd7f731bf455adf6cab19164#3a0f0144112ff621dd7f731bf455adf6cab19164" +source = "git+https://github.com/gfx-rs/naga?tag=gfx-25#057d03ad86f18e3bb3866b20901d8d4e892dd3d6" dependencies = [ "bit-set", "bitflags", @@ -3079,6 +3079,7 @@ dependencies = [ "log", "num-traits", "petgraph 0.5.1", + "rose_tree", "spirv_headers", "thiserror", ] @@ -4177,7 +4178,7 @@ dependencies = [ [[package]] name = "range-alloc" version = "0.1.2" -source = "git+https://github.com/gfx-rs/gfx.git?rev=e305dcca3557923a6a8810162d8dd09cb45a43a6#e305dcca3557923a6a8810162d8dd09cb45a43a6" +source = "git+https://github.com/gfx-rs/gfx?rev=27a1dae3796d33d23812f2bb8c7e3b5aea18b521#27a1dae3796d33d23812f2bb8c7e3b5aea18b521" [[package]] name = "raw-window-handle" @@ -4398,6 +4399,15 @@ version = "0.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "84348444bd7ad45729d0c49a4240d7cdc11c9d512c06c5ad1835c1ad4acda6db" +[[package]] +name = "rose_tree" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "284de9dae38774e2813aaabd7e947b4a6fe9b8c58c2309f754a487cdd50de1c2" +dependencies = [ + "petgraph 0.5.1", +] + [[package]] name = "rusqlite" version = "0.24.2" @@ -6645,8 +6655,8 @@ dependencies = [ [[package]] name = "wgpu" -version = "0.8.1" -source = "git+https://github.com/gfx-rs/wgpu-rs.git?rev=2b0149e5bd36fc70c1687afd4b196fd902c85e77#2b0149e5bd36fc70c1687afd4b196fd902c85e77" +version = "0.8.0" +source = "git+https://github.com/gfx-rs/wgpu-rs.git?rev=7486bdad64bb5d17b709ecccb41e063469efff88#7486bdad64bb5d17b709ecccb41e063469efff88" dependencies = [ "arrayvec", "js-sys", @@ -6665,9 +6675,8 @@ dependencies = [ [[package]] name = "wgpu-core" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d56c368fc0e6f3927c711d2b55a51ad4321218efc0239c4acf69e456ab70399" +version = "0.8.0" +source = "git+https://github.com/gfx-rs/wgpu?rev=53eab747a32414232be45d47cae8a43a369395d0#53eab747a32414232be45d47cae8a43a369395d0" dependencies = [ "arrayvec", "bitflags", @@ -6707,8 +6716,7 @@ dependencies = [ [[package]] name = "wgpu-types" version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa248d90c8e6832269b8955bf800e8241f942c25e18a235b7752226804d21556" +source = "git+https://github.com/gfx-rs/wgpu?rev=53eab747a32414232be45d47cae8a43a369395d0#53eab747a32414232be45d47cae8a43a369395d0" dependencies = [ "bitflags", "serde", diff --git a/Cargo.toml b/Cargo.toml index e96c0beefb..fdb5fca299 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -111,19 +111,18 @@ nativeBuildInputs = ["pkg-config"] winit = { git = "https://gitlab.com/veloren/winit.git", branch = "macos-test-spiffed" } vek = { git = "https://gitlab.com/veloren/vek.git", branch = "fix_intrinsics2" } # patch wgpu so we can use wgpu-profiler crate -# also points to 0.8 branch so we can use/and patch 0.8 naga/gfx (since a new tag isn't out yet) -wgpu = { git = "https://github.com/gfx-rs/wgpu-rs.git", rev = "2b0149e5bd36fc70c1687afd4b196fd902c85e77" } +wgpu = { git = "https://github.com/gfx-rs/wgpu-rs.git", rev = "7486bdad64bb5d17b709ecccb41e063469efff88" } -# use the latest fixes in naga (remove when updates trickle down to wgpu-rs) -naga = { git = "https://github.com/gfx-rs/naga.git", rev = "3a0f0144112ff621dd7f731bf455adf6cab19164" } -# use the latest fixes in gfx (remove when updates trickle down to wgpu-rs) -gfx-hal = { git = "https://github.com/gfx-rs/gfx.git", rev = "e305dcca3557923a6a8810162d8dd09cb45a43a6" } -gfx-backend-empty = { git = "https://github.com/gfx-rs/gfx.git", rev = "e305dcca3557923a6a8810162d8dd09cb45a43a6" } -gfx-backend-vulkan = { git = "https://github.com/gfx-rs/gfx.git", rev = "e305dcca3557923a6a8810162d8dd09cb45a43a6" } -gfx-backend-gl = { git = "https://github.com/gfx-rs/gfx.git", rev = "e305dcca3557923a6a8810162d8dd09cb45a43a6" } -gfx-backend-dx12 = { git = "https://github.com/gfx-rs/gfx.git", rev = "e305dcca3557923a6a8810162d8dd09cb45a43a6" } -gfx-backend-dx11 = { git = "https://github.com/gfx-rs/gfx.git", rev = "e305dcca3557923a6a8810162d8dd09cb45a43a6" } -gfx-backend-metal = { git = "https://github.com/gfx-rs/gfx.git", rev = "e305dcca3557923a6a8810162d8dd09cb45a43a6" } +# # use the latest fixes in naga (remove when updates trickle down to wgpu-rs) +# naga = { git = "https://github.com/gfx-rs/naga.git", rev = "3a0f0144112ff621dd7f731bf455adf6cab19164" } +# # use the latest fixes in gfx (remove when updates trickle down to wgpu-rs) +# gfx-hal = { git = "https://github.com/gfx-rs/gfx.git", rev = "e305dcca3557923a6a8810162d8dd09cb45a43a6" } +# gfx-backend-empty = { git = "https://github.com/gfx-rs/gfx.git", rev = "e305dcca3557923a6a8810162d8dd09cb45a43a6" } +# gfx-backend-vulkan = { git = "https://github.com/gfx-rs/gfx.git", rev = "e305dcca3557923a6a8810162d8dd09cb45a43a6" } +# gfx-backend-gl = { git = "https://github.com/gfx-rs/gfx.git", rev = "e305dcca3557923a6a8810162d8dd09cb45a43a6" } +# gfx-backend-dx12 = { git = "https://github.com/gfx-rs/gfx.git", rev = "e305dcca3557923a6a8810162d8dd09cb45a43a6" } +# gfx-backend-dx11 = { git = "https://github.com/gfx-rs/gfx.git", rev = "e305dcca3557923a6a8810162d8dd09cb45a43a6" } +# gfx-backend-metal = { git = "https://github.com/gfx-rs/gfx.git", rev = "e305dcca3557923a6a8810162d8dd09cb45a43a6" } # # Uncomment this to use a local fork of wgpu (for testing purposes) # [patch.'https://github.com/gfx-rs/wgpu'] diff --git a/assets/voxygen/shaders/include/shadows.glsl b/assets/voxygen/shaders/include/shadows.glsl index 58a69cf0ab..bd65dd3b5c 100644 --- a/assets/voxygen/shaders/include/shadows.glsl +++ b/assets/voxygen/shaders/include/shadows.glsl @@ -205,41 +205,6 @@ float ShadowCalculationDirected(in vec3 fragPos)//in vec4 /*light_pos[2]*/sun_po // orig_pos.y = n: warp_pos.y = 2*(1-f/n)*n/(f-n) + 1 = 2*(n-f)/(f-n) + 1 = 2 * -1 + 1 = -1, sun_pos.y = (-1 - -1) / 2 = 0 // orig_pos.y = f: warp_pos.y = 2*(1-f/f)*n/(f-n) + 1 = 2*(1-1)*n/(f-n) + 1 = 2 * 0 * n/(f-n) + 1 = 1, sun_pos.y = (1 - -1) / 2 = 1 // - // 2*(1-64/(1/((0-1)*63/2-1/64)))*1/63+1 - // - // 2*(1-f/x)*n/(f-n) + 1 = 0 - // 2*(1-f/x)*n/(f-n) = -1 - // - // (1-f/x) = -(f-n)/(2*n) - // 1 + (f-n)/(2*n) = f/x - // x = f/(1 + 0.5 * (f-n)/n) - // = 2*f/(1 + f/n) - // = 2*f*n/(f + n) - // = 2/(1/n + 1/f) - // - // 2/(1/(64/1) + 1/64) = 64 (but has n = f = 64) - // 2/(1/(64/3) + 1/64) = 32 - // 2/(1/(64/7) + 1/64) = 16 - // 2/(1/(64/15) + 1/64) = 8 - // 2/(1/(64/31) + 1/64) = 4 - // 2/(1/(64/63) + 1/64) = 2 - // 2/(1/(64/127) + 1/64) = 1 (but has f < n) - // - // 2*(1-64/(64/127))*64/127/(64-64/127)+1 - // - // (with normed n) - // = 2/(1/n + 1/(1+n)) - // = 2*n*(1+n)/(1+2n) - // = 1/((1 +2n)/(2n(1+n))) - // = 1/(1/(2n(1+n)) + 1/(1+n)) - // = (1 + n)/(1 + 0.5/n) - // 2*64*1/(64+1) - // - // 2*(1-64/(64/(1 + 0.5 * 63/1)))*1/63+1 - // - // sun_pos.xy = sun_pos.w - sun_pos.xy; - // sun_pos.xy = sun_pos.xy * 0.5 + 0.5; - // sun_pos.z -= sun_pos.w * bias; float visibility = textureProj(sampler2DShadow(t_directed_shadow_maps, s_directed_shadow_maps), sun_pos); /* float visibilityLeft = textureProj(t_directed_shadow_maps, sun_shadow.texture_mat * vec4(fragPos + vec3(0.0, -diskRadius, 0.0), 1.0)); float visibilityRight = textureProj(t_directed_shadow_maps, sun_shadow.texture_mat * vec4(fragPos + vec3(0.0, diskRadius, 0.0), 1.0)); */ diff --git a/voxygen/Cargo.toml b/voxygen/Cargo.toml index 873d8be854..af1c45dcab 100644 --- a/voxygen/Cargo.toml +++ b/voxygen/Cargo.toml @@ -45,7 +45,7 @@ i18n = {package = "veloren-i18n", path = "i18n"} # Graphics winit = {version = "0.24.0", features = ["serde"]} -wgpu = { version = "0.8.1", features = ["trace"] } +wgpu = { version = "=0.8.0", features = ["trace"] } wgpu-profiler = { git = "https://github.com/Imberflur/wgpu-profiler", tag = "wgpu-0.8" } bytemuck = { version="1.4", features=["derive"] } shaderc = "0.6.2" diff --git a/voxygen/src/render/renderer/pipeline_creation.rs b/voxygen/src/render/renderer/pipeline_creation.rs index c1d50cfdb6..1ed70319f6 100644 --- a/voxygen/src/render/renderer/pipeline_creation.rs +++ b/voxygen/src/render/renderer/pipeline_creation.rs @@ -294,7 +294,8 @@ fn create_shader_module( Ok(device.create_shader_module(&wgpu::ShaderModuleDescriptor { label: Some(&label), source: wgpu::ShaderSource::SpirV(Cow::Borrowed(spv.as_binary())), - flags: wgpu::ShaderFlags::empty(), // TODO: renable wgpu::ShaderFlags::VALIDATION, + flags: wgpu::ShaderFlags::empty(), + // TODO: renable // flags: wgpu::ShaderFlags::VALIDATION, })) } diff --git a/voxygen/src/scene/terrain.rs b/voxygen/src/scene/terrain.rs index 713d9e0156..7c18c1afe2 100644 --- a/voxygen/src/scene/terrain.rs +++ b/voxygen/src/scene/terrain.rs @@ -1480,7 +1480,6 @@ impl Terrain { // TODO: move to separate functions span!(guard, "Terrain sprites"); let chunk_size = V::RECT_SIZE.map(|e| e as f32); - let chunk_mag = (chunk_size * (f32::consts::SQRT_2 * 0.5)).magnitude_squared(); let sprite_low_detail_distance = sprite_render_distance * 0.75; let sprite_mid_detail_distance = sprite_render_distance * 0.5; @@ -1499,31 +1498,15 @@ impl Terrain { let chunk_center = pos.map2(chunk_size, |e, sz| (e as f32 + 0.5) * sz); let focus_dist_sqrd = Vec2::from(focus_pos).distance_squared(chunk_center); - let dist_sqrd = - Vec2::from(cam_pos) - .distance_squared(chunk_center) - .min(Vec2::from(cam_pos).distance_squared(chunk_center - chunk_size * 0.5)) - .min(Vec2::from(cam_pos).distance_squared( - chunk_center - chunk_size.x * 0.5 + chunk_size.y * 0.5, - )) - .min( - Vec2::from(cam_pos).distance_squared(chunk_center + chunk_size.x * 0.5), - ) - .min(Vec2::from(cam_pos).distance_squared( - chunk_center + chunk_size.x * 0.5 - chunk_size.y * 0.5, - )); + let dist_sqrd = Aabr { + min: chunk_center - chunk_size * 0.5, + max: chunk_center + chunk_size * 0.5, + } + .projected_point(cam_pos.xy()) + .distance_squared(cam_pos.xy()); + if focus_dist_sqrd < sprite_render_distance.powi(2) { - // TODO: do we really need this configurement by wind-sway, if not remove - // commented code, if so store the max wind sway of sprites in each chunk - let lod_level = /*let SpriteData { model, locals, .. } = if kind - .0 - .elim_case_pure(&self.sprite_config.0) - .as_ref() - .map(|config| config.wind_sway >= 0.4) - .unwrap_or(false) - &&*/ if dist_sqrd <= chunk_mag - || dist_sqrd < sprite_high_detail_distance.powi(2) - { + let lod_level = if dist_sqrd < sprite_high_detail_distance.powi(2) { 0 } else if dist_sqrd < sprite_hid_detail_distance.powi(2) { 1