Revert "Replace shaderc with naga"

This reverts commit 446d93dda0.
This commit is contained in:
Joshua Yanovski 2021-09-04 11:59:18 -07:00
parent 896d9299e5
commit 5500435d2f
39 changed files with 145 additions and 286 deletions

81
Cargo.lock generated
View File

@ -2023,7 +2023,7 @@ dependencies = [
"khronos-egl",
"libloading 0.7.0",
"log",
"naga 0.4.0",
"naga",
"parking_lot 0.11.1",
"raw-window-handle",
"spirv_cross",
@ -2047,7 +2047,7 @@ dependencies = [
"gfx-hal",
"log",
"metal",
"naga 0.4.0",
"naga",
"objc",
"parking_lot 0.11.1",
"profiling",
@ -2070,7 +2070,7 @@ dependencies = [
"inplace_it",
"libloading 0.7.0",
"log",
"naga 0.4.0",
"naga",
"objc",
"parking_lot 0.11.1",
"raw-window-handle",
@ -2085,7 +2085,7 @@ version = "0.8.0"
source = "git+https://github.com/gfx-rs/gfx?rev=27a1dae3796d33d23812f2bb8c7e3b5aea18b521#27a1dae3796d33d23812f2bb8c7e3b5aea18b521"
dependencies = [
"bitflags",
"naga 0.4.0",
"naga",
"raw-window-handle",
"thiserror",
]
@ -2175,16 +2175,6 @@ dependencies = [
"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]]
name = "glyph_brush"
version = "0.7.2"
@ -3212,22 +3202,6 @@ dependencies = [
"thiserror",
]
[[package]]
name = "naga"
version = "0.6.0"
source = "git+https://github.com/gfx-rs/naga.git?rev=2069ea698f4ff570c7d065b899f16a88725aca85#2069ea698f4ff570c7d065b899f16a88725aca85"
dependencies = [
"bit-set",
"bitflags",
"codespan-reporting",
"fxhash",
"log",
"num-traits",
"pp-rs",
"spirv",
"thiserror",
]
[[package]]
name = "native-dialog"
version = "0.5.5"
@ -3949,15 +3923,6 @@ dependencies = [
"rand 0.8.4",
]
[[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]]
name = "ppv-lite86"
version = "0.2.10"
@ -4883,6 +4848,26 @@ version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
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]]
name = "sharded-slab"
version = "0.1.1"
@ -5138,16 +5123,6 @@ dependencies = [
"winapi 0.3.9",
]
[[package]]
name = "spirv"
version = "0.2.0+1.5.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "246bfa38fe3db3f1dfc8ca5a2cdeb7348c78be2112740cc0ec8ef18b6d94f830"
dependencies = [
"bitflags",
"num-traits",
]
[[package]]
name = "spirv_cross"
version = "0.23.1"
@ -6183,7 +6158,6 @@ dependencies = [
"bytemuck",
"chrono",
"chumsky",
"codespan-reporting",
"conrod_core",
"conrod_winit",
"copy_dir",
@ -6201,7 +6175,6 @@ dependencies = [
"enum-iterator",
"euc",
"gilrs",
"glsl-include",
"glyph_brush",
"guillotiere",
"hashbrown 0.11.2",
@ -6212,7 +6185,6 @@ dependencies = [
"keyboard-keynames",
"lazy_static",
"mumble-link",
"naga 0.6.0",
"native-dialog",
"num 0.4.0",
"num_cpus",
@ -6223,6 +6195,7 @@ dependencies = [
"rodio",
"ron",
"serde",
"shaderc",
"specs",
"specs-idvs",
"strum",
@ -6803,7 +6776,7 @@ dependencies = [
"arrayvec",
"js-sys",
"log",
"naga 0.4.0",
"naga",
"parking_lot 0.11.1",
"raw-window-handle",
"serde",
@ -6835,7 +6808,7 @@ dependencies = [
"gpu-alloc",
"gpu-descriptor",
"log",
"naga 0.4.0",
"naga",
"parking_lot 0.11.1",
"profiling",
"raw-window-handle",

View File

@ -136,8 +136,9 @@ nativeBuildInputs = ["pkg-config"]
vek = { git = "https://gitlab.com/veloren/vek.git", branch = "fix_intrinsics2" }
# patch wgpu so we can use wgpu-profiler crate
wgpu = { git = "https://github.com/gfx-rs/wgpu.git", rev = "a92b8549a8e2cb9dac781bafc5ed32828f3caf46" }
naga = { git = "https://github.com/gfx-rs/naga.git", rev = "2069ea698f4ff570c7d065b899f16a88725aca85" }
# # 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" }

View File

@ -1,4 +1,4 @@
#version 460 core
#version 420 core
layout(set = 0, binding = 0)
uniform texture2D t_src_color;

View File

@ -1,4 +1,4 @@
#version 460 core
#version 420 core
layout(location = 0) out vec2 uv;

View File

@ -1,4 +1,4 @@
#version 460 core
#version 420 core
#include <constants.glsl>

View File

@ -1,4 +1,4 @@
#version 460 core
#version 420 core
#include <constants.glsl>

View File

@ -1,4 +1,4 @@
#version 460 core
#version 420 core
#include <globals.glsl>

View File

@ -1,4 +1,4 @@
#version 460 core
#version 420 core
#include <globals.glsl>

View File

@ -1,4 +1,4 @@
#version 460 core
#version 420 core
layout(set = 0, binding = 0)
uniform texture2D t_src_color;

View File

@ -1,4 +1,4 @@
#version 460 core
#version 420 core
layout(set = 0, binding = 0)
uniform texture2D t_src_color;

View File

@ -1,4 +1,4 @@
#version 460 core
#version 420 core
layout(set = 0, binding = 0)
uniform texture2D t_src_color;

View File

@ -1,4 +1,4 @@
#version 460 core
#version 420 core
#define FIGURE_SHADER

View File

@ -1,4 +1,4 @@
#version 460 core
#version 420 core
#include <constants.glsl>

View File

@ -1,4 +1,4 @@
#version 460 core
#version 420 core
#include <constants.glsl>

View File

@ -1,4 +1,4 @@
#version 460 core
#version 420 core
#include <constants.glsl>

View File

@ -1,4 +1,4 @@
#version 460 core
#version 420 core
#include <constants.glsl>

View File

@ -98,5 +98,8 @@ vec4 rand_perm_4(vec4 pos) {
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)));
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));
return r0 + (r1 - r0) * fract(lerp_axis);
}
#endif

View File

@ -1,4 +1,4 @@
#version 460 core
#version 420 core
// #extension ARB_texture_storage : enable
#include <constants.glsl>

View File

@ -1,4 +1,4 @@
#version 460 core
#version 420 core
// #extension ARB_texture_storage : enable
#define FIGURE_SHADER

View File

@ -2,7 +2,7 @@
//
// However, in the future we might apply some depth transforms here.
#version 460 core
#version 420 core
// #extension ARB_texture_storage : enable
#include <constants.glsl>

View File

@ -1,4 +1,4 @@
#version 460 core
#version 420 core
#include <constants.glsl>

View File

@ -1,4 +1,4 @@
#version 460 core
#version 420 core
#include <constants.glsl>

View File

@ -1,4 +1,4 @@
#version 460 core
#version 420 core
#include <constants.glsl>

View File

@ -1,4 +1,4 @@
#version 460 core
#version 420 core
#include <constants.glsl>

View File

@ -1,4 +1,4 @@
#version 460 core
#version 420 core
// #extension ARB_texture_storage : enable
#include <constants.glsl>

View File

@ -1,4 +1,4 @@
#version 460 core
#version 420 core
#include <constants.glsl>

View File

@ -1,4 +1,4 @@
#version 460 core
#version 420 core
#include <constants.glsl>

View File

@ -1,4 +1,4 @@
#version 460 core
#version 420 core
#include <constants.glsl>

View File

@ -1,4 +1,4 @@
#version 460 core
#version 420 core
#include <constants.glsl>

View File

@ -1,4 +1,4 @@
#version 460 core
#version 420 core
#include <constants.glsl>

View File

@ -1,4 +1,4 @@
#version 460 core
#version 420 core
#include <constants.glsl>

View File

@ -1,4 +1,4 @@
#version 460 core
#version 420 core
// #extension GL_ARB_texture_storage : require
#include <constants.glsl>

View File

@ -1,4 +1,4 @@
#version 460 core
#version 420 core
#include <constants.glsl>

View File

@ -1,4 +1,4 @@
#version 460 core
#version 420 core
#include <globals.glsl>

View File

@ -1,4 +1,4 @@
#version 460 core
#version 420 core
#include <globals.glsl>

View File

@ -55,9 +55,7 @@ winit = {version = "0.25.0", features = ["serde"]}
wgpu = { version = "=0.8.0", features = ["trace", "cross"] }
wgpu-profiler = { git = "https://github.com/Imberflur/wgpu-profiler", tag = "wgpu-0.8" }
bytemuck = { version="1.4", features=["derive"] }
naga = { version = "=0.6.0", features = ["glsl-in", "glsl-validate", "spv-out", "codespan-reporting"] }
glsl-include = "0.3.1"
codespan-reporting = "0.11.1"
shaderc = "0.6.2"
# Ui
conrod_core = {git = "https://gitlab.com/veloren/conrod.git", branch="copypasta_0.7"}

View File

@ -6,13 +6,11 @@ pub enum RenderError {
SwapChainError(wgpu::SwapChainError),
CustomError(String),
CouldNotFindAdapter,
GlslIncludeError(String, glsl_include::Error),
ParserError(String),
ValidationError(String, naga::valid::ValidationError),
SpirvError(String, naga::back::spv::Error),
ErrorInitializingCompiler,
ShaderError(String, shaderc::Error),
}
use std::{error::Error, fmt};
use std::fmt;
impl fmt::Debug for RenderError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
@ -27,56 +25,12 @@ impl fmt::Debug for RenderError {
.finish(),
Self::CustomError(err) => f.debug_tuple("CustomError").field(err).finish(),
Self::CouldNotFindAdapter => f.debug_tuple("CouldNotFindAdapter").finish(),
Self::GlslIncludeError(shader_name, err) => write!(
Self::ErrorInitializingCompiler => f.debug_tuple("ErrorInitializingCompiler").finish(),
Self::ShaderError(shader_name, err) => write!(
f,
"\"{}\" shader contains invalid include directives: {}",
"\"{}\" shader failed to compile due to the following error: {}",
shader_name, err
),
Self::ParserError(shader_name) => {
write!(f, "\"{}\" shader failed to parse", shader_name)
},
Self::ValidationError(shader_name, err) => {
write!(
f,
"\"{}\" shader failed to validate due to the following error: {}",
shader_name, err
)?;
let mut e = err.source();
if e.is_some() {
writeln!(f, ": ")?;
} else {
writeln!(f)?;
}
while let Some(source) = e {
writeln!(f, "\t{}", source)?;
e = source.source();
}
Ok(())
},
Self::SpirvError(shader_name, err) => {
write!(
f,
"\"{}\" shader failed to emit due to the following error: {}",
shader_name, err
)?;
let mut e = err.source();
if e.is_some() {
writeln!(f, ": ")?;
} else {
writeln!(f)?;
}
while let Some(source) = e {
writeln!(f, "\t{}", source)?;
e = source.source();
}
Ok(())
},
}
}
}
@ -93,19 +47,8 @@ impl From<wgpu::SwapChainError> for RenderError {
fn from(err: wgpu::SwapChainError) -> Self { Self::SwapChainError(err) }
}
impl From<(&str, glsl_include::Error)> for RenderError {
fn from((shader_name, err): (&str, glsl_include::Error)) -> Self {
Self::GlslIncludeError(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)
impl From<(&str, shaderc::Error)> for RenderError {
fn from((shader_name, err): (&str, shaderc::Error)) -> Self {
Self::ShaderError(shader_name.into(), err)
}
}

View File

@ -12,7 +12,6 @@ use pipeline_creation::{
IngameAndShadowPipelines, InterfacePipelines, PipelineCreation, Pipelines, ShadowPipelines,
};
use shaders::Shaders;
use shadow_map::{ShadowMap, ShadowMapRenderer};
use super::{

View File

@ -13,39 +13,6 @@ use super::{
use common_base::prof_span;
use std::sync::Arc;
/// Shader compiler
pub struct Compiler {
glsl: naga::front::glsl::Parser,
validator: naga::valid::Validator,
spirv: naga::back::spv::Writer,
}
impl Compiler {
pub fn new() -> Self {
use naga::{
back::spv,
front::glsl,
valid::{Capabilities, ValidationFlags, Validator},
};
let glsl = glsl::Parser::default();
let validator = Validator::new(ValidationFlags::all(), Capabilities::all());
let options = spv::Options {
flags: spv::WriterFlags::DEBUG,
..Default::default()
};
let spirv = spv::Writer::new(&options)
// Only happens if the options are invalid
.expect("Failed to create spirv emitter");
Compiler {
glsl,
validator,
spirv,
}
}
}
/// All the pipelines
pub struct Pipelines {
pub debug: debug::DebugPipeline,
@ -164,6 +131,7 @@ impl ShaderModules {
has_shadow_views: bool,
) -> Result<Self, RenderError> {
prof_span!(_guard, "ShaderModules::new");
use shaderc::{CompileOptions, Compiler, OptimizationLevel, ResolvedInclude, ShaderKind};
let constants = shaders.get("include.constants").unwrap();
let globals = shaders.get("include.globals").unwrap();
@ -248,30 +216,41 @@ impl ShaderModules {
})
.unwrap();
let mut context = glsl_include::Context::new();
context.include("constants.glsl", &constants);
context.include("globals.glsl", &globals.0);
context.include("shadows.glsl", &shadows.0);
context.include("sky.glsl", &sky.0);
context.include("light.glsl", &light.0);
context.include("srgb.glsl", &srgb.0);
context.include("random.glsl", &random.0);
context.include("lod.glsl", &lod.0);
context.include("anti-aliasing.glsl", &anti_alias.0);
context.include("cloud.glsl", &cloud.0);
let mut compiler = Compiler::new().ok_or(RenderError::ErrorInitializingCompiler)?;
let mut options = CompileOptions::new().ok_or(RenderError::ErrorInitializingCompiler)?;
options.set_optimization_level(OptimizationLevel::Performance);
options.set_forced_version_profile(430, shaderc::GlslProfile::Core);
options.set_include_callback(move |name, _, shader_name, _| {
Ok(ResolvedInclude {
resolved_name: name.to_string(),
content: match name {
"constants.glsl" => constants.clone(),
"globals.glsl" => globals.0.to_owned(),
"shadows.glsl" => shadows.0.to_owned(),
"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 compiler = Compiler::new();
let mut create_shader = |name, stage| {
let mut create_shader = |name, kind| {
let glsl = &shaders
.get(name)
.unwrap_or_else(|| panic!("Can't retrieve shader: {}", name))
.0;
let file_name = format!("{}.glsl", name);
let source = context
.expand(glsl)
.map_err(|err| (file_name.as_str(), err))?;
create_shader_module(device, &file_name, &source, stage, &mut compiler)
create_shader_module(device, &mut compiler, glsl, kind, &file_name, &options)
};
let selected_fluid_shader = ["fluid-frag.", match pipeline_modes.fluid {
@ -281,50 +260,47 @@ impl ShaderModules {
.concat();
Ok(Self {
skybox_vert: create_shader("skybox-vert", ShaderKind::Vertex)?,
skybox_frag: create_shader("skybox-frag", ShaderKind::Fragment)?,
debug_vert: create_shader("debug-vert", ShaderKind::Vertex)?,
debug_frag: create_shader("debug-frag", ShaderKind::Fragment)?,
figure_vert: create_shader("figure-vert", ShaderKind::Vertex)?,
figure_frag: create_shader("figure-frag", ShaderKind::Fragment)?,
terrain_vert: create_shader("terrain-vert", ShaderKind::Vertex)?,
terrain_frag: create_shader("terrain-frag", ShaderKind::Fragment)?,
fluid_vert: create_shader("fluid-vert", ShaderKind::Vertex)?,
fluid_frag: create_shader(&selected_fluid_shader, ShaderKind::Fragment)?,
sprite_vert: create_shader("sprite-vert", ShaderKind::Vertex)?,
sprite_frag: create_shader("sprite-frag", ShaderKind::Fragment)?,
particle_vert: create_shader("particle-vert", ShaderKind::Vertex)?,
particle_frag: create_shader("particle-frag", ShaderKind::Fragment)?,
ui_vert: create_shader("ui-vert", ShaderKind::Vertex)?,
ui_frag: create_shader("ui-frag", ShaderKind::Fragment)?,
lod_terrain_vert: create_shader("lod-terrain-vert", ShaderKind::Vertex)?,
lod_terrain_frag: create_shader("lod-terrain-frag", ShaderKind::Fragment)?,
clouds_vert: create_shader("clouds-vert", ShaderKind::Vertex)?,
clouds_frag: create_shader("clouds-frag", ShaderKind::Fragment)?,
dual_downsample_filtered_frag: create_shader(
"dual-downsample-filtered-frag",
naga::ShaderStage::Fragment,
ShaderKind::Fragment,
)?,
dual_downsample_frag: create_shader(
"dual-downsample-frag",
naga::ShaderStage::Fragment,
)?,
dual_upsample_frag: create_shader("dual-upsample-frag", naga::ShaderStage::Fragment)?,
skybox_vert: create_shader("skybox-vert", naga::ShaderStage::Vertex)?,
skybox_frag: create_shader("skybox-frag", naga::ShaderStage::Fragment)?,
debug_vert: create_shader("debug-vert", naga::ShaderStage::Vertex)?,
debug_frag: create_shader("debug-frag", naga::ShaderStage::Fragment)?,
figure_vert: create_shader("figure-vert", naga::ShaderStage::Vertex)?,
figure_frag: create_shader("figure-frag", naga::ShaderStage::Fragment)?,
terrain_vert: create_shader("terrain-vert", naga::ShaderStage::Vertex)?,
terrain_frag: create_shader("terrain-frag", naga::ShaderStage::Fragment)?,
fluid_vert: create_shader("fluid-vert", naga::ShaderStage::Vertex)?,
fluid_frag: create_shader(&selected_fluid_shader, naga::ShaderStage::Fragment)?,
sprite_vert: create_shader("sprite-vert", naga::ShaderStage::Vertex)?,
sprite_frag: create_shader("sprite-frag", naga::ShaderStage::Fragment)?,
particle_vert: create_shader("particle-vert", naga::ShaderStage::Vertex)?,
particle_frag: create_shader("particle-frag", naga::ShaderStage::Fragment)?,
ui_vert: create_shader("ui-vert", naga::ShaderStage::Vertex)?,
ui_frag: create_shader("ui-frag", naga::ShaderStage::Fragment)?,
lod_terrain_vert: create_shader("lod-terrain-vert", naga::ShaderStage::Vertex)?,
lod_terrain_frag: create_shader("lod-terrain-frag", naga::ShaderStage::Fragment)?,
clouds_vert: create_shader("clouds-vert", naga::ShaderStage::Vertex)?,
clouds_frag: create_shader("clouds-frag", naga::ShaderStage::Fragment)?,
postprocess_vert: create_shader("postprocess-vert", naga::ShaderStage::Vertex)?,
postprocess_frag: create_shader("postprocess-frag", naga::ShaderStage::Fragment)?,
blit_vert: create_shader("blit-vert", naga::ShaderStage::Vertex)?,
blit_frag: create_shader("blit-frag", naga::ShaderStage::Fragment)?,
dual_downsample_frag: create_shader("dual-downsample-frag", ShaderKind::Fragment)?,
dual_upsample_frag: create_shader("dual-upsample-frag", ShaderKind::Fragment)?,
postprocess_vert: create_shader("postprocess-vert", ShaderKind::Vertex)?,
postprocess_frag: create_shader("postprocess-frag", ShaderKind::Fragment)?,
blit_vert: create_shader("blit-vert", ShaderKind::Vertex)?,
blit_frag: create_shader("blit-frag", ShaderKind::Fragment)?,
point_light_shadows_vert: create_shader(
"point-light-shadows-vert",
naga::ShaderStage::Vertex,
ShaderKind::Vertex,
)?,
light_shadows_directed_vert: create_shader(
"light-shadows-directed-vert",
naga::ShaderStage::Vertex,
ShaderKind::Vertex,
)?,
light_shadows_figure_vert: create_shader(
"light-shadows-figure-vert",
naga::ShaderStage::Vertex,
ShaderKind::Vertex,
)?,
})
}
@ -332,57 +308,23 @@ impl ShaderModules {
fn create_shader_module(
device: &wgpu::Device,
file_name: &str,
compiler: &mut shaderc::Compiler,
source: &str,
stage: naga::ShaderStage,
compiler: &mut Compiler,
kind: shaderc::ShaderKind,
file_name: &str,
options: &shaderc::CompileOptions,
) -> Result<wgpu::ShaderModule, RenderError> {
prof_span!(_guard, "create_shader_modules");
use std::borrow::Cow;
use codespan_reporting::{
diagnostic::{Diagnostic, Label},
files::SimpleFile,
term::{
self,
termcolor::{ColorChoice, StandardStream},
},
};
use naga::front::glsl;
// Parse
let options = glsl::Options::from(stage);
let module = compiler.glsl.parse(&options, source).map_err(|errors| {
let files = SimpleFile::new(file_name, source);
let config = codespan_reporting::term::Config::default();
let writer = StandardStream::stderr(ColorChoice::Auto);
for err in errors {
let diagnostic = Diagnostic::error()
.with_message(err.kind.to_string())
.with_labels(vec![Label::primary((), err.meta)]);
let _ = term::emit(&mut writer.lock(), &config, &files, &diagnostic);
}
RenderError::ParserError(file_name.to_string())
})?;
// Validate
let info = compiler
.validator
.validate(&module)
.map_err(|err| (file_name, err))?;
// Emit
let mut spv = Vec::new();
compiler
.spirv
.write(&module, &info, &mut spv)
.map_err(|err| (file_name, err))?;
let spv = compiler
.compile_into_spirv(source, kind, file_name, "main", Some(options))
.map_err(|e| (file_name, e))?;
let label = [file_name, "\n\n", source].concat();
Ok(device.create_shader_module(&wgpu::ShaderModuleDescriptor {
label: Some(file_name),
source: wgpu::ShaderSource::SpirV(spv.into()),
label: Some(&label),
source: wgpu::ShaderSource::SpirV(Cow::Borrowed(spv.as_binary())),
flags: wgpu::ShaderFlags::empty(),
// TODO: renable // flags: wgpu::ShaderFlags::VALIDATION,
}))