Skip to content

Commit 67ea8f0

Browse files
authored
[wgsl-in] Split into multiple files (gfx-rs#2207)
Make changes suggested in gfx-rs#2075, but put off to a separate PR because they would interfere with reviewing the change: - Split the new WGSL front end into modules in a logical way. - Rename `Parser` to `Frontend`.
1 parent ae049ed commit 67ea8f0

28 files changed

+5837
-5766
lines changed

benches/criterion.rs

+8-8
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ fn gather_inputs(folder: &str, extension: &str) -> Vec<Box<[u8]>> {
2828
}
2929

3030
fn parse_glsl(stage: naga::ShaderStage, inputs: &[Box<[u8]>]) {
31-
let mut parser = naga::front::glsl::Parser::default();
31+
let mut parser = naga::front::glsl::Frontend::default();
3232
let options = naga::front::glsl::Options {
3333
stage,
3434
defines: Default::default(),
@@ -44,12 +44,12 @@ fn frontends(c: &mut Criterion) {
4444
#[cfg(all(feature = "wgsl-in", feature = "serialize", feature = "deserialize"))]
4545
group.bench_function("bin", |b| {
4646
let inputs_wgsl = gather_inputs("tests/in", "wgsl");
47-
let mut parser = naga::front::wgsl::Parser::new();
47+
let mut frontend = naga::front::wgsl::Frontend::new();
4848
let inputs_bin = inputs_wgsl
4949
.iter()
5050
.map(|input| {
5151
let string = std::str::from_utf8(input).unwrap();
52-
let module = parser.parse(string).unwrap();
52+
let module = frontend.parse(string).unwrap();
5353
bincode::serialize(&module).unwrap()
5454
})
5555
.collect::<Vec<_>>();
@@ -66,10 +66,10 @@ fn frontends(c: &mut Criterion) {
6666
.iter()
6767
.map(|input| std::str::from_utf8(input).unwrap())
6868
.collect::<Vec<_>>();
69-
let mut parser = naga::front::wgsl::Parser::new();
69+
let mut frontend = naga::front::wgsl::Frontend::new();
7070
b.iter(move || {
7171
for &input in inputs.iter() {
72-
parser.parse(input).unwrap();
72+
frontend.parse(input).unwrap();
7373
}
7474
});
7575
});
@@ -81,7 +81,7 @@ fn frontends(c: &mut Criterion) {
8181
for input in inputs.iter() {
8282
let spv =
8383
unsafe { slice::from_raw_parts(input.as_ptr() as *const u32, input.len() / 4) };
84-
let parser = naga::front::spv::Parser::new(spv.iter().cloned(), &options);
84+
let parser = naga::front::spv::Frontend::new(spv.iter().cloned(), &options);
8585
parser.parse().unwrap();
8686
}
8787
});
@@ -101,12 +101,12 @@ fn frontends(c: &mut Criterion) {
101101
#[cfg(feature = "wgsl-in")]
102102
fn gather_modules() -> Vec<naga::Module> {
103103
let inputs = gather_inputs("tests/in", "wgsl");
104-
let mut parser = naga::front::wgsl::Parser::new();
104+
let mut frontend = naga::front::wgsl::Frontend::new();
105105
inputs
106106
.iter()
107107
.map(|input| {
108108
let string = std::str::from_utf8(input).unwrap();
109-
parser.parse(string).unwrap()
109+
frontend.parse(string).unwrap()
110110
})
111111
.collect()
112112
}

cli/src/bin/naga.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -289,7 +289,7 @@ fn run() -> Result<(), Box<dyn std::error::Error>> {
289289
}
290290
ext @ ("vert" | "frag" | "comp") => {
291291
let input = String::from_utf8(input)?;
292-
let mut parser = naga::front::glsl::Parser::default();
292+
let mut parser = naga::front::glsl::Frontend::default();
293293

294294
(
295295
parser

src/front/glsl/builtins.rs

+26-20
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ use super::{
44
ParameterQualifier,
55
},
66
context::Context,
7-
Error, ErrorKind, Parser, Result,
7+
Error, ErrorKind, Frontend, Result,
88
};
99
use crate::{
1010
BinaryOperator, Block, Constant, DerivativeAxis, Expression, Handle, ImageClass,
@@ -1676,7 +1676,7 @@ impl MacroCall {
16761676
/// finally returns the final expression with the correct result
16771677
pub fn call(
16781678
&self,
1679-
parser: &mut Parser,
1679+
frontend: &mut Frontend,
16801680
ctx: &mut Context,
16811681
body: &mut Block,
16821682
args: &mut [Handle<Expression>],
@@ -1688,8 +1688,14 @@ impl MacroCall {
16881688
args[0]
16891689
}
16901690
MacroCall::SamplerShadow => {
1691-
sampled_to_depth(&mut parser.module, ctx, args[0], meta, &mut parser.errors);
1692-
parser.invalidate_expression(ctx, args[0], meta)?;
1691+
sampled_to_depth(
1692+
&mut frontend.module,
1693+
ctx,
1694+
args[0],
1695+
meta,
1696+
&mut frontend.errors,
1697+
);
1698+
frontend.invalidate_expression(ctx, args[0], meta)?;
16931699
ctx.samplers.insert(args[0], args[1]);
16941700
args[0]
16951701
}
@@ -1702,7 +1708,7 @@ impl MacroCall {
17021708
let mut coords = args[1];
17031709

17041710
if proj {
1705-
let size = match *parser.resolve_type(ctx, coords, meta)? {
1711+
let size = match *frontend.resolve_type(ctx, coords, meta)? {
17061712
TypeInner::Vector { size, .. } => size,
17071713
_ => unreachable!(),
17081714
};
@@ -1748,7 +1754,7 @@ impl MacroCall {
17481754

17491755
let extra = args.get(2).copied();
17501756
let comps =
1751-
parser.coordinate_components(ctx, args[0], coords, extra, meta, body)?;
1757+
frontend.coordinate_components(ctx, args[0], coords, extra, meta, body)?;
17521758

17531759
let mut num_args = 2;
17541760

@@ -1795,10 +1801,10 @@ impl MacroCall {
17951801
true => {
17961802
let offset_arg = args[num_args];
17971803
num_args += 1;
1798-
match parser.solve_constant(ctx, offset_arg, meta) {
1804+
match frontend.solve_constant(ctx, offset_arg, meta) {
17991805
Ok(v) => Some(v),
18001806
Err(e) => {
1801-
parser.errors.push(e);
1807+
frontend.errors.push(e);
18021808
None
18031809
}
18041810
}
@@ -1832,7 +1838,7 @@ impl MacroCall {
18321838
if arrayed {
18331839
let mut components = Vec::with_capacity(4);
18341840

1835-
let size = match *parser.resolve_type(ctx, expr, meta)? {
1841+
let size = match *frontend.resolve_type(ctx, expr, meta)? {
18361842
TypeInner::Vector { size: ori_size, .. } => {
18371843
for index in 0..(ori_size as u32) {
18381844
components.push(ctx.add_expression(
@@ -1862,7 +1868,7 @@ impl MacroCall {
18621868
body,
18631869
));
18641870

1865-
let ty = parser.module.types.insert(
1871+
let ty = frontend.module.types.insert(
18661872
Type {
18671873
name: None,
18681874
inner: TypeInner::Vector {
@@ -1881,7 +1887,7 @@ impl MacroCall {
18811887
}
18821888
MacroCall::ImageLoad { multi } => {
18831889
let comps =
1884-
parser.coordinate_components(ctx, args[0], args[1], None, meta, body)?;
1890+
frontend.coordinate_components(ctx, args[0], args[1], None, meta, body)?;
18851891
let (sample, level) = match (multi, args.get(2)) {
18861892
(_, None) => (None, None),
18871893
(true, Some(&arg)) => (Some(arg), None),
@@ -1901,7 +1907,7 @@ impl MacroCall {
19011907
}
19021908
MacroCall::ImageStore => {
19031909
let comps =
1904-
parser.coordinate_components(ctx, args[0], args[1], None, meta, body)?;
1910+
frontend.coordinate_components(ctx, args[0], args[1], None, meta, body)?;
19051911
ctx.emit_restart(body);
19061912
body.push(
19071913
crate::Statement::ImageStore {
@@ -2037,7 +2043,7 @@ impl MacroCall {
20372043
body,
20382044
),
20392045
MacroCall::Mod(size) => {
2040-
ctx.implicit_splat(parser, &mut args[1], meta, size)?;
2046+
ctx.implicit_splat(frontend, &mut args[1], meta, size)?;
20412047

20422048
// x - y * floor(x / y)
20432049

@@ -2081,7 +2087,7 @@ impl MacroCall {
20812087
)
20822088
}
20832089
MacroCall::Splatted(fun, size, i) => {
2084-
ctx.implicit_splat(parser, &mut args[i], meta, size)?;
2090+
ctx.implicit_splat(frontend, &mut args[i], meta, size)?;
20852091

20862092
ctx.add_expression(
20872093
Expression::Math {
@@ -2105,8 +2111,8 @@ impl MacroCall {
21052111
body,
21062112
),
21072113
MacroCall::Clamp(size) => {
2108-
ctx.implicit_splat(parser, &mut args[1], meta, size)?;
2109-
ctx.implicit_splat(parser, &mut args[2], meta, size)?;
2114+
ctx.implicit_splat(frontend, &mut args[1], meta, size)?;
2115+
ctx.implicit_splat(frontend, &mut args[2], meta, size)?;
21102116

21112117
ctx.add_expression(
21122118
Expression::Math {
@@ -2143,8 +2149,8 @@ impl MacroCall {
21432149
return Ok(None);
21442150
}
21452151
MacroCall::SmoothStep { splatted } => {
2146-
ctx.implicit_splat(parser, &mut args[0], meta, splatted)?;
2147-
ctx.implicit_splat(parser, &mut args[1], meta, splatted)?;
2152+
ctx.implicit_splat(frontend, &mut args[0], meta, splatted)?;
2153+
ctx.implicit_splat(frontend, &mut args[1], meta, splatted)?;
21482154

21492155
ctx.add_expression(
21502156
Expression::Math {
@@ -2202,7 +2208,7 @@ fn texture_call(
22022208

22032209
/// Helper struct for texture calls with the separate components from the vector argument
22042210
///
2205-
/// Obtained by calling [`coordinate_components`](Parser::coordinate_components)
2211+
/// Obtained by calling [`coordinate_components`](Frontend::coordinate_components)
22062212
#[derive(Debug)]
22072213
struct CoordComponents {
22082214
coordinate: Handle<Expression>,
@@ -2211,7 +2217,7 @@ struct CoordComponents {
22112217
used_extra: bool,
22122218
}
22132219

2214-
impl Parser {
2220+
impl Frontend {
22152221
/// Helper function for texture calls, splits the vector argument into it's components
22162222
fn coordinate_components(
22172223
&mut self,

0 commit comments

Comments
 (0)