mirror of
https://gitlab.com/veloren/veloren.git
synced 2024-08-30 18:12:32 +00:00
DOESN'T WORK
I made this commit because I've accidentally broke this when rebasing and deleted the veloren folder and don't want to write this for the 4th time. Please ignore this.
This commit is contained in:
parent
269c6171e4
commit
164bb4f87f
71
Cargo.lock
generated
71
Cargo.lock
generated
@ -1948,7 +1948,7 @@ dependencies = [
|
|||||||
"khronos-egl",
|
"khronos-egl",
|
||||||
"libloading 0.7.0",
|
"libloading 0.7.0",
|
||||||
"log",
|
"log",
|
||||||
"naga",
|
"naga 0.4.0",
|
||||||
"parking_lot 0.11.1",
|
"parking_lot 0.11.1",
|
||||||
"raw-window-handle",
|
"raw-window-handle",
|
||||||
"spirv_cross",
|
"spirv_cross",
|
||||||
@ -1972,7 +1972,7 @@ dependencies = [
|
|||||||
"gfx-hal",
|
"gfx-hal",
|
||||||
"log",
|
"log",
|
||||||
"metal",
|
"metal",
|
||||||
"naga",
|
"naga 0.4.0",
|
||||||
"objc",
|
"objc",
|
||||||
"parking_lot 0.11.1",
|
"parking_lot 0.11.1",
|
||||||
"profiling",
|
"profiling",
|
||||||
@ -1995,7 +1995,7 @@ dependencies = [
|
|||||||
"inplace_it",
|
"inplace_it",
|
||||||
"libloading 0.7.0",
|
"libloading 0.7.0",
|
||||||
"log",
|
"log",
|
||||||
"naga",
|
"naga 0.4.0",
|
||||||
"objc",
|
"objc",
|
||||||
"parking_lot 0.11.1",
|
"parking_lot 0.11.1",
|
||||||
"raw-window-handle",
|
"raw-window-handle",
|
||||||
@ -2010,7 +2010,7 @@ version = "0.8.0"
|
|||||||
source = "git+https://github.com/gfx-rs/gfx?rev=27a1dae3796d33d23812f2bb8c7e3b5aea18b521#27a1dae3796d33d23812f2bb8c7e3b5aea18b521"
|
source = "git+https://github.com/gfx-rs/gfx?rev=27a1dae3796d33d23812f2bb8c7e3b5aea18b521#27a1dae3796d33d23812f2bb8c7e3b5aea18b521"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bitflags",
|
"bitflags",
|
||||||
"naga",
|
"naga 0.4.0",
|
||||||
"raw-window-handle",
|
"raw-window-handle",
|
||||||
"thiserror",
|
"thiserror",
|
||||||
]
|
]
|
||||||
@ -2106,6 +2106,16 @@ dependencies = [
|
|||||||
"web-sys",
|
"web-sys",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "glsl-include"
|
||||||
|
version = "0.3.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "daa2afb1631e7ab4543e0dde0e3fc68bb49c58fee89c07f30a26553b1f684ab6"
|
||||||
|
dependencies = [
|
||||||
|
"lazy_static",
|
||||||
|
"regex",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "glyph_brush"
|
name = "glyph_brush"
|
||||||
version = "0.7.2"
|
version = "0.7.2"
|
||||||
@ -3080,6 +3090,22 @@ dependencies = [
|
|||||||
"thiserror",
|
"thiserror",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "naga"
|
||||||
|
version = "0.5.0"
|
||||||
|
source = "git+https://github.com/gfx-rs/naga.git?rev=607206f9a5cc33a8b1e7cec84663be6390e3be7f#607206f9a5cc33a8b1e7cec84663be6390e3be7f"
|
||||||
|
dependencies = [
|
||||||
|
"bit-set",
|
||||||
|
"bitflags",
|
||||||
|
"codespan-reporting",
|
||||||
|
"fxhash",
|
||||||
|
"log",
|
||||||
|
"num-traits",
|
||||||
|
"pp-rs",
|
||||||
|
"spirv_headers",
|
||||||
|
"thiserror",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "native-dialog"
|
name = "native-dialog"
|
||||||
version = "0.5.5"
|
version = "0.5.5"
|
||||||
@ -3845,6 +3871,15 @@ dependencies = [
|
|||||||
"rand 0.8.3",
|
"rand 0.8.3",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "pp-rs"
|
||||||
|
version = "0.2.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "bb458bb7f6e250e6eb79d5026badc10a3ebb8f9a15d1fff0f13d17c71f4d6dee"
|
||||||
|
dependencies = [
|
||||||
|
"unicode-xid 0.2.2",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ppv-lite86"
|
name = "ppv-lite86"
|
||||||
version = "0.2.10"
|
version = "0.2.10"
|
||||||
@ -4746,26 +4781,6 @@ version = "0.6.0"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "2579985fda508104f7587689507983eadd6a6e84dd35d6d115361f530916fa0d"
|
checksum = "2579985fda508104f7587689507983eadd6a6e84dd35d6d115361f530916fa0d"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "shaderc"
|
|
||||||
version = "0.6.3"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "50b8aeaae10b9bda5cba66736a7e265f67698e912e1cc6a4678acba286e22be9"
|
|
||||||
dependencies = [
|
|
||||||
"libc",
|
|
||||||
"shaderc-sys",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "shaderc-sys"
|
|
||||||
version = "0.6.3"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "5b12d7c62d6732884c9dfab587503fa3a795b108df152415a89da23812d4737e"
|
|
||||||
dependencies = [
|
|
||||||
"cmake",
|
|
||||||
"libc",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "sharded-slab"
|
name = "sharded-slab"
|
||||||
version = "0.1.1"
|
version = "0.1.1"
|
||||||
@ -6043,6 +6058,7 @@ dependencies = [
|
|||||||
"bincode",
|
"bincode",
|
||||||
"bytemuck",
|
"bytemuck",
|
||||||
"chrono",
|
"chrono",
|
||||||
|
"codespan-reporting",
|
||||||
"comma",
|
"comma",
|
||||||
"conrod_core",
|
"conrod_core",
|
||||||
"conrod_winit",
|
"conrod_winit",
|
||||||
@ -6059,6 +6075,7 @@ dependencies = [
|
|||||||
"euc",
|
"euc",
|
||||||
"futures-executor",
|
"futures-executor",
|
||||||
"gilrs",
|
"gilrs",
|
||||||
|
"glsl-include",
|
||||||
"glyph_brush",
|
"glyph_brush",
|
||||||
"guillotiere",
|
"guillotiere",
|
||||||
"hashbrown 0.11.2",
|
"hashbrown 0.11.2",
|
||||||
@ -6068,6 +6085,7 @@ dependencies = [
|
|||||||
"itertools 0.10.0",
|
"itertools 0.10.0",
|
||||||
"keyboard-keynames",
|
"keyboard-keynames",
|
||||||
"lazy_static",
|
"lazy_static",
|
||||||
|
"naga 0.5.0",
|
||||||
"native-dialog",
|
"native-dialog",
|
||||||
"num 0.4.0",
|
"num 0.4.0",
|
||||||
"num_cpus",
|
"num_cpus",
|
||||||
@ -6078,7 +6096,6 @@ dependencies = [
|
|||||||
"rodio",
|
"rodio",
|
||||||
"ron",
|
"ron",
|
||||||
"serde",
|
"serde",
|
||||||
"shaderc",
|
|
||||||
"specs",
|
"specs",
|
||||||
"specs-idvs",
|
"specs-idvs",
|
||||||
"strum",
|
"strum",
|
||||||
@ -6680,7 +6697,7 @@ dependencies = [
|
|||||||
"arrayvec",
|
"arrayvec",
|
||||||
"js-sys",
|
"js-sys",
|
||||||
"log",
|
"log",
|
||||||
"naga",
|
"naga 0.4.0",
|
||||||
"parking_lot 0.11.1",
|
"parking_lot 0.11.1",
|
||||||
"raw-window-handle",
|
"raw-window-handle",
|
||||||
"serde",
|
"serde",
|
||||||
@ -6712,7 +6729,7 @@ dependencies = [
|
|||||||
"gpu-alloc",
|
"gpu-alloc",
|
||||||
"gpu-descriptor",
|
"gpu-descriptor",
|
||||||
"log",
|
"log",
|
||||||
"naga",
|
"naga 0.4.0",
|
||||||
"parking_lot 0.11.1",
|
"parking_lot 0.11.1",
|
||||||
"profiling",
|
"profiling",
|
||||||
"raw-window-handle",
|
"raw-window-handle",
|
||||||
|
@ -133,9 +133,8 @@ nativeBuildInputs = ["pkg-config"]
|
|||||||
vek = { git = "https://gitlab.com/veloren/vek.git", branch = "fix_intrinsics2" }
|
vek = { git = "https://gitlab.com/veloren/vek.git", branch = "fix_intrinsics2" }
|
||||||
# patch wgpu so we can use wgpu-profiler crate
|
# patch wgpu so we can use wgpu-profiler crate
|
||||||
wgpu = { git = "https://github.com/gfx-rs/wgpu.git", rev = "a92b8549a8e2cb9dac781bafc5ed32828f3caf46" }
|
wgpu = { git = "https://github.com/gfx-rs/wgpu.git", rev = "a92b8549a8e2cb9dac781bafc5ed32828f3caf46" }
|
||||||
|
naga = { git = "https://github.com/gfx-rs/naga.git", rev = "607206f9a5cc33a8b1e7cec84663be6390e3be7f" }
|
||||||
|
|
||||||
# # 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)
|
# # 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-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-empty = { git = "https://github.com/gfx-rs/gfx.git", rev = "e305dcca3557923a6a8810162d8dd09cb45a43a6" }
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
#version 420 core
|
#version 460 core
|
||||||
|
|
||||||
layout(set = 0, binding = 0)
|
layout(set = 0, binding = 0)
|
||||||
uniform texture2D t_src_color;
|
uniform texture2D t_src_color;
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
#version 420 core
|
#version 460 core
|
||||||
|
|
||||||
layout(location = 0) out vec2 uv;
|
layout(location = 0) out vec2 uv;
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
#version 420 core
|
#version 460 core
|
||||||
|
|
||||||
#include <constants.glsl>
|
#include <constants.glsl>
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
#version 420 core
|
#version 460 core
|
||||||
|
|
||||||
#include <constants.glsl>
|
#include <constants.glsl>
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
#version 420 core
|
#version 460 core
|
||||||
|
|
||||||
#include <globals.glsl>
|
#include <globals.glsl>
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
#version 420 core
|
#version 460 core
|
||||||
|
|
||||||
#include <globals.glsl>
|
#include <globals.glsl>
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
#version 420 core
|
#version 460 core
|
||||||
|
|
||||||
#define FIGURE_SHADER
|
#define FIGURE_SHADER
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
#version 420 core
|
#version 460 core
|
||||||
|
|
||||||
#include <constants.glsl>
|
#include <constants.glsl>
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
#version 420 core
|
#version 460 core
|
||||||
|
|
||||||
#include <constants.glsl>
|
#include <constants.glsl>
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
#version 420 core
|
#version 460 core
|
||||||
|
|
||||||
#include <constants.glsl>
|
#include <constants.glsl>
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
#version 420 core
|
#version 460 core
|
||||||
|
|
||||||
#include <constants.glsl>
|
#include <constants.glsl>
|
||||||
|
|
||||||
|
@ -98,8 +98,8 @@ vec4 rand_perm_4(vec4 pos) {
|
|||||||
|
|
||||||
vec3 smooth_rand(vec3 pos, float lerp_axis) {
|
vec3 smooth_rand(vec3 pos, float lerp_axis) {
|
||||||
return vec3(snoise(vec4(pos, lerp_axis)), snoise(vec4(pos + 400.0, lerp_axis)), snoise(vec4(pos + 1000.0, lerp_axis)));
|
return vec3(snoise(vec4(pos, lerp_axis)), snoise(vec4(pos + 400.0, lerp_axis)), snoise(vec4(pos + 1000.0, lerp_axis)));
|
||||||
vec3 r0 = rand_perm_3(vec3(pos.x, pos.y, pos.z) + floor(lerp_axis));
|
// vec3 r0 = rand_perm_3(vec3(pos.x, pos.y, pos.z) + floor(lerp_axis));
|
||||||
vec3 r1 = rand_perm_3(vec3(pos.x, pos.y, pos.z) + floor(lerp_axis + 1.0));
|
// vec3 r1 = rand_perm_3(vec3(pos.x, pos.y, pos.z) + floor(lerp_axis + 1.0));
|
||||||
return r0 + (r1 - r0) * fract(lerp_axis);
|
// return r0 + (r1 - r0) * fract(lerp_axis);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
#version 420 core
|
#version 460 core
|
||||||
// #extension ARB_texture_storage : enable
|
// #extension ARB_texture_storage : enable
|
||||||
|
|
||||||
#include <constants.glsl>
|
#include <constants.glsl>
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
#version 420 core
|
#version 460 core
|
||||||
// #extension ARB_texture_storage : enable
|
// #extension ARB_texture_storage : enable
|
||||||
|
|
||||||
#define FIGURE_SHADER
|
#define FIGURE_SHADER
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
//
|
//
|
||||||
// However, in the future we might apply some depth transforms here.
|
// However, in the future we might apply some depth transforms here.
|
||||||
|
|
||||||
#version 420 core
|
#version 460 core
|
||||||
// #extension ARB_texture_storage : enable
|
// #extension ARB_texture_storage : enable
|
||||||
|
|
||||||
#include <constants.glsl>
|
#include <constants.glsl>
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
#version 420 core
|
#version 460 core
|
||||||
|
|
||||||
#include <constants.glsl>
|
#include <constants.glsl>
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
#version 420 core
|
#version 460 core
|
||||||
|
|
||||||
#include <constants.glsl>
|
#include <constants.glsl>
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
#version 420 core
|
#version 460 core
|
||||||
|
|
||||||
#include <constants.glsl>
|
#include <constants.glsl>
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
#version 420 core
|
#version 460 core
|
||||||
|
|
||||||
#include <constants.glsl>
|
#include <constants.glsl>
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
#version 420 core
|
#version 460 core
|
||||||
// #extension ARB_texture_storage : enable
|
// #extension ARB_texture_storage : enable
|
||||||
|
|
||||||
#include <constants.glsl>
|
#include <constants.glsl>
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
#version 420 core
|
#version 460 core
|
||||||
|
|
||||||
#include <constants.glsl>
|
#include <constants.glsl>
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
#version 420 core
|
#version 460 core
|
||||||
|
|
||||||
#include <constants.glsl>
|
#include <constants.glsl>
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
#version 420 core
|
#version 460 core
|
||||||
|
|
||||||
#include <constants.glsl>
|
#include <constants.glsl>
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
#version 420 core
|
#version 460 core
|
||||||
|
|
||||||
#include <constants.glsl>
|
#include <constants.glsl>
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
#version 420 core
|
#version 460 core
|
||||||
|
|
||||||
#include <constants.glsl>
|
#include <constants.glsl>
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
#version 420 core
|
#version 460 core
|
||||||
|
|
||||||
#include <constants.glsl>
|
#include <constants.glsl>
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
#version 420 core
|
#version 460 core
|
||||||
// #extension GL_ARB_texture_storage : require
|
// #extension GL_ARB_texture_storage : require
|
||||||
|
|
||||||
#include <constants.glsl>
|
#include <constants.glsl>
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
#version 420 core
|
#version 460 core
|
||||||
|
|
||||||
#include <constants.glsl>
|
#include <constants.glsl>
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
#version 420 core
|
#version 460 core
|
||||||
|
|
||||||
#include <globals.glsl>
|
#include <globals.glsl>
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
#version 420 core
|
#version 460 core
|
||||||
|
|
||||||
#include <globals.glsl>
|
#include <globals.glsl>
|
||||||
|
|
||||||
|
@ -53,7 +53,9 @@ winit = {version = "0.25.0", features = ["serde"]}
|
|||||||
wgpu = { version = "=0.8.0", features = ["trace", "cross"] }
|
wgpu = { version = "=0.8.0", features = ["trace", "cross"] }
|
||||||
wgpu-profiler = { git = "https://github.com/Imberflur/wgpu-profiler", tag = "wgpu-0.8" }
|
wgpu-profiler = { git = "https://github.com/Imberflur/wgpu-profiler", tag = "wgpu-0.8" }
|
||||||
bytemuck = { version="1.4", features=["derive"] }
|
bytemuck = { version="1.4", features=["derive"] }
|
||||||
shaderc = "0.6.2"
|
naga = { version = "0.5.0", features = ["glsl-in", "glsl-validate", "spv-out", "codespan-reporting"] }
|
||||||
|
glsl-include = "0.3.1"
|
||||||
|
codespan-reporting = "0.11.1"
|
||||||
|
|
||||||
# Ui
|
# Ui
|
||||||
conrod_core = {git = "https://gitlab.com/veloren/conrod.git", branch="copypasta_0.7"}
|
conrod_core = {git = "https://gitlab.com/veloren/conrod.git", branch="copypasta_0.7"}
|
||||||
|
@ -6,8 +6,10 @@ pub enum RenderError {
|
|||||||
SwapChainError(wgpu::SwapChainError),
|
SwapChainError(wgpu::SwapChainError),
|
||||||
CustomError(String),
|
CustomError(String),
|
||||||
CouldNotFindAdapter,
|
CouldNotFindAdapter,
|
||||||
ErrorInitializingCompiler,
|
GlslIncludeError(String, glsl_include::Error),
|
||||||
ShaderError(String, shaderc::Error),
|
ParserError(String, naga::front::glsl::ParseError),
|
||||||
|
ValidationError(String, naga::valid::ValidationError),
|
||||||
|
SpirvError(String, naga::back::spv::Error),
|
||||||
}
|
}
|
||||||
|
|
||||||
use std::fmt;
|
use std::fmt;
|
||||||
@ -25,10 +27,24 @@ impl fmt::Debug for RenderError {
|
|||||||
.finish(),
|
.finish(),
|
||||||
Self::CustomError(err) => f.debug_tuple("CustomError").field(err).finish(),
|
Self::CustomError(err) => f.debug_tuple("CustomError").field(err).finish(),
|
||||||
Self::CouldNotFindAdapter => f.debug_tuple("CouldNotFindAdapter").finish(),
|
Self::CouldNotFindAdapter => f.debug_tuple("CouldNotFindAdapter").finish(),
|
||||||
Self::ErrorInitializingCompiler => f.debug_tuple("ErrorInitializingCompiler").finish(),
|
Self::GlslIncludeError(shader_name, err) => write!(
|
||||||
Self::ShaderError(shader_name, err) => write!(
|
|
||||||
f,
|
f,
|
||||||
"\"{}\" shader failed to compile due to the following error: {}",
|
"\"{}\" shader contains invalid include directives: {}",
|
||||||
|
shader_name, err
|
||||||
|
),
|
||||||
|
Self::ParserError(shader_name, err) => write!(
|
||||||
|
f,
|
||||||
|
"\"{}\" shader failed to parse due to the following error: {}",
|
||||||
|
shader_name, err
|
||||||
|
),
|
||||||
|
Self::ValidationError(shader_name, err) => write!(
|
||||||
|
f,
|
||||||
|
"\"{}\" shader failed to validate due to the following error: {}",
|
||||||
|
shader_name, err
|
||||||
|
),
|
||||||
|
Self::SpirvError(shader_name, err) => write!(
|
||||||
|
f,
|
||||||
|
"\"{}\" shader failed to emit due to the following error: {}",
|
||||||
shader_name, err
|
shader_name, err
|
||||||
),
|
),
|
||||||
}
|
}
|
||||||
@ -47,8 +63,24 @@ impl From<wgpu::SwapChainError> for RenderError {
|
|||||||
fn from(err: wgpu::SwapChainError) -> Self { Self::SwapChainError(err) }
|
fn from(err: wgpu::SwapChainError) -> Self { Self::SwapChainError(err) }
|
||||||
}
|
}
|
||||||
|
|
||||||
impl From<(&str, shaderc::Error)> for RenderError {
|
impl From<(&str, glsl_include::Error)> for RenderError {
|
||||||
fn from((shader_name, err): (&str, shaderc::Error)) -> Self {
|
fn from((shader_name, err): (&str, glsl_include::Error)) -> Self {
|
||||||
Self::ShaderError(shader_name.into(), err)
|
Self::GlslIncludeError(shader_name.into(), err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl From<(&str, naga::front::glsl::ParseError)> for RenderError {
|
||||||
|
fn from((shader_name, err): (&str, naga::front::glsl::ParseError)) -> Self {
|
||||||
|
Self::ParserError(shader_name.into(), err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
impl From<(&str, naga::valid::ValidationError)> for RenderError {
|
||||||
|
fn from((shader_name, err): (&str, naga::valid::ValidationError)) -> Self {
|
||||||
|
Self::ValidationError(shader_name.into(), err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
impl From<(&str, naga::back::spv::Error)> for RenderError {
|
||||||
|
fn from((shader_name, err): (&str, naga::back::spv::Error)) -> Self {
|
||||||
|
Self::SpirvError(shader_name.into(), err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -124,7 +124,6 @@ impl ShaderModules {
|
|||||||
has_shadow_views: bool,
|
has_shadow_views: bool,
|
||||||
) -> Result<Self, RenderError> {
|
) -> Result<Self, RenderError> {
|
||||||
prof_span!(_guard, "ShaderModules::new");
|
prof_span!(_guard, "ShaderModules::new");
|
||||||
use shaderc::{CompileOptions, Compiler, OptimizationLevel, ResolvedInclude, ShaderKind};
|
|
||||||
|
|
||||||
let constants = shaders.get("include.constants").unwrap();
|
let constants = shaders.get("include.constants").unwrap();
|
||||||
let globals = shaders.get("include.globals").unwrap();
|
let globals = shaders.get("include.globals").unwrap();
|
||||||
@ -191,41 +190,28 @@ impl ShaderModules {
|
|||||||
})
|
})
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
let mut compiler = Compiler::new().ok_or(RenderError::ErrorInitializingCompiler)?;
|
let mut context = glsl_include::Context::new();
|
||||||
let mut options = CompileOptions::new().ok_or(RenderError::ErrorInitializingCompiler)?;
|
context.include("constants.glsl", &constants);
|
||||||
options.set_optimization_level(OptimizationLevel::Performance);
|
context.include("globals.glsl", &globals.0);
|
||||||
options.set_forced_version_profile(430, shaderc::GlslProfile::Core);
|
context.include("shadows.glsl", &shadows.0);
|
||||||
options.set_include_callback(move |name, _, shader_name, _| {
|
context.include("sky.glsl", &sky.0);
|
||||||
Ok(ResolvedInclude {
|
context.include("light.glsl", &light.0);
|
||||||
resolved_name: name.to_string(),
|
context.include("srgb.glsl", &srgb.0);
|
||||||
content: match name {
|
context.include("random.glsl", &random.0);
|
||||||
"constants.glsl" => constants.clone(),
|
context.include("lod.glsl", &lod.0);
|
||||||
"globals.glsl" => globals.0.to_owned(),
|
context.include("anti-aliasing.glsl", &anti_alias.0);
|
||||||
"shadows.glsl" => shadows.0.to_owned(),
|
context.include("cloud.glsl", &cloud.0);
|
||||||
"sky.glsl" => sky.0.to_owned(),
|
|
||||||
"light.glsl" => light.0.to_owned(),
|
|
||||||
"srgb.glsl" => srgb.0.to_owned(),
|
|
||||||
"random.glsl" => random.0.to_owned(),
|
|
||||||
"lod.glsl" => lod.0.to_owned(),
|
|
||||||
"anti-aliasing.glsl" => anti_alias.0.to_owned(),
|
|
||||||
"cloud.glsl" => cloud.0.to_owned(),
|
|
||||||
other => {
|
|
||||||
return Err(format!(
|
|
||||||
"Include {} in {} is not defined",
|
|
||||||
other, shader_name
|
|
||||||
));
|
|
||||||
},
|
|
||||||
},
|
|
||||||
})
|
|
||||||
});
|
|
||||||
|
|
||||||
let mut create_shader = |name, kind| {
|
let mut create_shader = |name, stage| {
|
||||||
let glsl = &shaders
|
let glsl = &shaders
|
||||||
.get(name)
|
.get(name)
|
||||||
.unwrap_or_else(|| panic!("Can't retrieve shader: {}", name))
|
.unwrap_or_else(|| panic!("Can't retrieve shader: {}", name))
|
||||||
.0;
|
.0;
|
||||||
let file_name = format!("{}.glsl", name);
|
let file_name = format!("{}.glsl", name);
|
||||||
create_shader_module(device, &mut compiler, glsl, kind, &file_name, &options)
|
let source = context
|
||||||
|
.expand(glsl)
|
||||||
|
.map_err(|err| (file_name.as_str(), err))?;
|
||||||
|
create_shader_module(device, &file_name, &source, stage)
|
||||||
};
|
};
|
||||||
|
|
||||||
let selected_fluid_shader = ["fluid-frag.", match mode.fluid {
|
let selected_fluid_shader = ["fluid-frag.", match mode.fluid {
|
||||||
@ -235,41 +221,41 @@ impl ShaderModules {
|
|||||||
.concat();
|
.concat();
|
||||||
|
|
||||||
Ok(Self {
|
Ok(Self {
|
||||||
skybox_vert: create_shader("skybox-vert", ShaderKind::Vertex)?,
|
skybox_vert: create_shader("skybox-vert", naga::ShaderStage::Vertex)?,
|
||||||
skybox_frag: create_shader("skybox-frag", ShaderKind::Fragment)?,
|
skybox_frag: create_shader("skybox-frag", naga::ShaderStage::Fragment)?,
|
||||||
debug_vert: create_shader("debug-vert", ShaderKind::Vertex)?,
|
debug_vert: create_shader("debug-vert", naga::ShaderStage::Vertex)?,
|
||||||
debug_frag: create_shader("debug-frag", ShaderKind::Fragment)?,
|
debug_frag: create_shader("debug-frag", naga::ShaderStage::Fragment)?,
|
||||||
figure_vert: create_shader("figure-vert", ShaderKind::Vertex)?,
|
figure_vert: create_shader("figure-vert", naga::ShaderStage::Vertex)?,
|
||||||
figure_frag: create_shader("figure-frag", ShaderKind::Fragment)?,
|
figure_frag: create_shader("figure-frag", naga::ShaderStage::Fragment)?,
|
||||||
terrain_vert: create_shader("terrain-vert", ShaderKind::Vertex)?,
|
terrain_vert: create_shader("terrain-vert", naga::ShaderStage::Vertex)?,
|
||||||
terrain_frag: create_shader("terrain-frag", ShaderKind::Fragment)?,
|
terrain_frag: create_shader("terrain-frag", naga::ShaderStage::Fragment)?,
|
||||||
fluid_vert: create_shader("fluid-vert", ShaderKind::Vertex)?,
|
fluid_vert: create_shader("fluid-vert", naga::ShaderStage::Vertex)?,
|
||||||
fluid_frag: create_shader(&selected_fluid_shader, ShaderKind::Fragment)?,
|
fluid_frag: create_shader(&selected_fluid_shader, naga::ShaderStage::Fragment)?,
|
||||||
sprite_vert: create_shader("sprite-vert", ShaderKind::Vertex)?,
|
sprite_vert: create_shader("sprite-vert", naga::ShaderStage::Vertex)?,
|
||||||
sprite_frag: create_shader("sprite-frag", ShaderKind::Fragment)?,
|
sprite_frag: create_shader("sprite-frag", naga::ShaderStage::Fragment)?,
|
||||||
particle_vert: create_shader("particle-vert", ShaderKind::Vertex)?,
|
particle_vert: create_shader("particle-vert", naga::ShaderStage::Vertex)?,
|
||||||
particle_frag: create_shader("particle-frag", ShaderKind::Fragment)?,
|
particle_frag: create_shader("particle-frag", naga::ShaderStage::Fragment)?,
|
||||||
ui_vert: create_shader("ui-vert", ShaderKind::Vertex)?,
|
ui_vert: create_shader("ui-vert", naga::ShaderStage::Vertex)?,
|
||||||
ui_frag: create_shader("ui-frag", ShaderKind::Fragment)?,
|
ui_frag: create_shader("ui-frag", naga::ShaderStage::Fragment)?,
|
||||||
lod_terrain_vert: create_shader("lod-terrain-vert", ShaderKind::Vertex)?,
|
lod_terrain_vert: create_shader("lod-terrain-vert", naga::ShaderStage::Vertex)?,
|
||||||
lod_terrain_frag: create_shader("lod-terrain-frag", ShaderKind::Fragment)?,
|
lod_terrain_frag: create_shader("lod-terrain-frag", naga::ShaderStage::Fragment)?,
|
||||||
clouds_vert: create_shader("clouds-vert", ShaderKind::Vertex)?,
|
clouds_vert: create_shader("clouds-vert", naga::ShaderStage::Vertex)?,
|
||||||
clouds_frag: create_shader("clouds-frag", ShaderKind::Fragment)?,
|
clouds_frag: create_shader("clouds-frag", naga::ShaderStage::Fragment)?,
|
||||||
postprocess_vert: create_shader("postprocess-vert", ShaderKind::Vertex)?,
|
postprocess_vert: create_shader("postprocess-vert", naga::ShaderStage::Vertex)?,
|
||||||
postprocess_frag: create_shader("postprocess-frag", ShaderKind::Fragment)?,
|
postprocess_frag: create_shader("postprocess-frag", naga::ShaderStage::Fragment)?,
|
||||||
blit_vert: create_shader("blit-vert", ShaderKind::Vertex)?,
|
blit_vert: create_shader("blit-vert", naga::ShaderStage::Vertex)?,
|
||||||
blit_frag: create_shader("blit-frag", ShaderKind::Fragment)?,
|
blit_frag: create_shader("blit-frag", naga::ShaderStage::Fragment)?,
|
||||||
point_light_shadows_vert: create_shader(
|
point_light_shadows_vert: create_shader(
|
||||||
"point-light-shadows-vert",
|
"point-light-shadows-vert",
|
||||||
ShaderKind::Vertex,
|
naga::ShaderStage::Vertex,
|
||||||
)?,
|
)?,
|
||||||
light_shadows_directed_vert: create_shader(
|
light_shadows_directed_vert: create_shader(
|
||||||
"light-shadows-directed-vert",
|
"light-shadows-directed-vert",
|
||||||
ShaderKind::Vertex,
|
naga::ShaderStage::Vertex,
|
||||||
)?,
|
)?,
|
||||||
light_shadows_figure_vert: create_shader(
|
light_shadows_figure_vert: create_shader(
|
||||||
"light-shadows-figure-vert",
|
"light-shadows-figure-vert",
|
||||||
ShaderKind::Vertex,
|
naga::ShaderStage::Vertex,
|
||||||
)?,
|
)?,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@ -277,23 +263,91 @@ impl ShaderModules {
|
|||||||
|
|
||||||
fn create_shader_module(
|
fn create_shader_module(
|
||||||
device: &wgpu::Device,
|
device: &wgpu::Device,
|
||||||
compiler: &mut shaderc::Compiler,
|
|
||||||
source: &str,
|
|
||||||
kind: shaderc::ShaderKind,
|
|
||||||
file_name: &str,
|
file_name: &str,
|
||||||
options: &shaderc::CompileOptions,
|
source: &str,
|
||||||
|
stage: naga::ShaderStage,
|
||||||
) -> Result<wgpu::ShaderModule, RenderError> {
|
) -> Result<wgpu::ShaderModule, RenderError> {
|
||||||
prof_span!(_guard, "create_shader_modules");
|
prof_span!(_guard, "create_shader_modules");
|
||||||
use std::borrow::Cow;
|
|
||||||
|
|
||||||
let spv = compiler
|
use codespan_reporting::{
|
||||||
.compile_into_spirv(source, kind, file_name, "main", Some(options))
|
diagnostic::{Diagnostic, Label},
|
||||||
.map_err(|e| (file_name, e))?;
|
files::SimpleFile,
|
||||||
|
term::{
|
||||||
|
self,
|
||||||
|
termcolor::{ColorChoice, StandardStream},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
use naga::{
|
||||||
|
back::spv,
|
||||||
|
front::glsl,
|
||||||
|
valid::{Capabilities, ValidationFlags, Validator},
|
||||||
|
};
|
||||||
|
use std::error::Error;
|
||||||
|
|
||||||
|
// Parse
|
||||||
|
let mut options = glsl::Options::default();
|
||||||
|
options.entry_points.insert("main".to_string(), stage);
|
||||||
|
let module = glsl::parse_str(source, &options).map_err(|err| {
|
||||||
|
let diagnostic = match err.kind.metadata() {
|
||||||
|
Some(metadata) => Diagnostic::error()
|
||||||
|
.with_message(err.kind.to_string())
|
||||||
|
.with_labels(vec![Label::primary((), metadata.start..metadata.end)]),
|
||||||
|
None => Diagnostic::error().with_message(err.kind.to_string()),
|
||||||
|
};
|
||||||
|
|
||||||
|
let files = SimpleFile::new(file_name, source);
|
||||||
|
let config = codespan_reporting::term::Config::default();
|
||||||
|
let writer = StandardStream::stderr(ColorChoice::Auto);
|
||||||
|
let _ = term::emit(&mut writer.lock(), &config, &files, &diagnostic);
|
||||||
|
|
||||||
|
(file_name, err)
|
||||||
|
})?;
|
||||||
|
|
||||||
|
// Validate
|
||||||
|
let info = Validator::new(ValidationFlags::all(), Capabilities::all())
|
||||||
|
.validate(&module)
|
||||||
|
.map_err(|err| {
|
||||||
|
eprint!("{}", err);
|
||||||
|
|
||||||
|
let mut e = err.source();
|
||||||
|
if e.is_some() {
|
||||||
|
eprintln!(": ");
|
||||||
|
} else {
|
||||||
|
eprintln!();
|
||||||
|
}
|
||||||
|
|
||||||
|
while let Some(source) = e {
|
||||||
|
eprintln!("\t{}", source);
|
||||||
|
e = source.source();
|
||||||
|
}
|
||||||
|
|
||||||
|
(file_name, err)
|
||||||
|
})?;
|
||||||
|
|
||||||
|
// Emit
|
||||||
|
let spv_options = spv::Options::default();
|
||||||
|
let spv = spv::write_vec(&module, &info, &spv_options).map_err(|err| {
|
||||||
|
eprint!("{}", err);
|
||||||
|
|
||||||
|
let mut e = err.source();
|
||||||
|
if e.is_some() {
|
||||||
|
eprintln!(": ");
|
||||||
|
} else {
|
||||||
|
eprintln!();
|
||||||
|
}
|
||||||
|
|
||||||
|
while let Some(source) = e {
|
||||||
|
eprintln!("\t{}", source);
|
||||||
|
e = source.source();
|
||||||
|
}
|
||||||
|
|
||||||
|
(file_name, err)
|
||||||
|
})?;
|
||||||
|
|
||||||
let label = [file_name, "\n\n", source].concat();
|
let label = [file_name, "\n\n", source].concat();
|
||||||
Ok(device.create_shader_module(&wgpu::ShaderModuleDescriptor {
|
Ok(device.create_shader_module(&wgpu::ShaderModuleDescriptor {
|
||||||
label: Some(&label),
|
label: Some(&label),
|
||||||
source: wgpu::ShaderSource::SpirV(Cow::Borrowed(spv.as_binary())),
|
source: wgpu::ShaderSource::SpirV(spv.into()),
|
||||||
flags: wgpu::ShaderFlags::empty(),
|
flags: wgpu::ShaderFlags::empty(),
|
||||||
// TODO: renable // flags: wgpu::ShaderFlags::VALIDATION,
|
// TODO: renable // flags: wgpu::ShaderFlags::VALIDATION,
|
||||||
}))
|
}))
|
||||||
|
Loading…
Reference in New Issue
Block a user