Commit Graph

926 Commits

Author SHA1 Message Date
Jim Blandy
9dcfe8fa4b [spv-out]: Don't have write_expression_pointer return a storage class. (#958)
Nobody uses that value. This lets us simplify `GlobalVariable` and
`write_global_variable` as well.
2021-06-08 10:16:10 -04:00
Igor Shaposhnik
be6a4172c5 Fix Expression::Load generating (#925)
* [glsl-out] Fix writing named expressions with array types

* [wgsl-out] Remove unsupported builtin from baked expression

* [glsl-out] Add a newline between globals for readability

* Set bake_ref_count to 1 for Expression::Load

* Update snapshot data
2021-06-08 10:15:26 -04:00
Jim Blandy
bfa2bbe590 Snapshot quad-glsl to WGSL, not SPIR-V and IR.
In tests/out, stop generating the uncommitted files quad-glsl.ron and
quad-glsl.spvasm, and add the snapshot quad-glsl.wgsl.
2021-06-07 17:27:09 +01:00
Matus Talcik
94cdaf685d [spv-in] CFG: add break statements in switch selections (#951) 2021-06-05 20:09:41 -04:00
Jim Blandy
a2a35f2eb3 Permit dynamic indexing of arrays and matrices only behind a pointer. (#949)
This makes Naga IR validation impose the restrictions added to WGSL in
gpuweb/gpuweb#1801.

Remove code in the SPIR-V writer to spill arrays to temporary variables in order
to index them dynamically. If such IR is encountered, treat it as a failure of
validation.
2021-06-04 12:57:20 -04:00
João Capucho
1c3baf4557 [glsl-in] Allow field selection behind pointers (#948) 2021-06-03 16:09:20 -04:00
João Capucho
87748a2fe3 [glsl-in] Add integration tests to CI (#943)
* [glsl-in] Add glsl snapshots folder

* [glsl-in] Fix incorrect angle brackets parsing

* [glsl-in] Temporarily remove wgsl snapshot output
2021-06-03 15:34:54 -04:00
João Capucho
db3dd63bdd [glsl-in] Don't output empty struct in entry point 2021-06-03 15:32:46 -04:00
Igor Shaposhnik
ce88c9d537 Exclude bin and tests from publishing 2021-06-03 13:06:45 -04:00
Gordon-F
90c2cf6aa6 Add ability to generate named expressions 2021-06-03 10:40:59 -04:00
João Capucho
98769c642d [glsl-in] read global in prologue only if allowed
Adds a check of wether or not a global can be read in the entry point prologue
2021-06-03 10:36:54 -04:00
Igor Shaposhnik
1a60ba01d9 Add note about MSRV in README 2021-06-02 21:19:09 -04:00
Frizi
2295508f0e Insert attribute glsl location qualifier for opengl ES 3.0 2021-06-02 12:36:04 -04:00
João Capucho
3699034ccc [glsl-in] Fix for if being in the wrong body 2021-06-01 21:12:46 -04:00
João Capucho
4cb036b335 [glsl-in] Fix op assignments 2021-06-01 21:12:46 -04:00
João Capucho
344acc3121 [glsl-in] Reenable snapshot tests 2021-06-01 21:11:50 -04:00
João Capucho
679b6a308f [glsl-in] Fix emitting issues 2021-06-01 21:11:50 -04:00
João Capucho
027634451d [glsl-in] Collect entry point arguments usage 2021-06-01 21:11:50 -04:00
Dzmitry Malyshau
61bfb29963 Don't consider discard and return inside uniform control flow 2021-05-31 00:49:25 -04:00
Fredrik Norén
58e5b2565d Validate matrix component-wise ops correctly 2021-05-30 11:03:54 -04:00
Aron Granberg
37724102a3 Improve wgsl lexer error messages.
Better errors for Unexpected, BadInteger, BadFloat, BadTexture, BadTypeCast, UnknownScalarType, UnknownStorageClass, UnknownAttribute, UnknownBuiltin, UnknownShaderStage, UnknownStorageFormat and UnknownConservativeDepth, ZeroStride, ZeroSizeOrAlign and UnknownType.

Also adds lexer::capture_span.

Also fixes some validation for texture sample types and and issue that cauld cause e.g. the type `f33` to be parsed as `f32`.
2021-05-30 11:01:00 -04:00
João Capucho
589f02fad4 [glsl-in] Add implicit conversions tests 2021-05-29 19:38:56 -04:00
João Capucho
b9e641c310 [glsl-in] Expression implicit conversions 2021-05-29 19:38:56 -04:00
Dzmitry Malyshau
4b5ab528ac Comparison sampling tests 2021-05-28 22:43:39 -04:00
Dzmitry Malyshau
d3fbb30d46 [wgsl-out] Improve texture sampling call 2021-05-28 22:43:39 -04:00
Dzmitry Malyshau
8a1d883ba5 [wgsl-in] support textureSampleCompareLevel 2021-05-28 22:43:39 -04:00
Dzmitry Malyshau
1366546645 [glsl-out] improve array types 2021-05-28 22:18:51 -04:00
Dzmitry Malyshau
d1e2ac57fe New snapshot test for global variables 2021-05-28 22:18:51 -04:00
Dzmitry Malyshau
0244853d4c [wgsl-in] Support workgroup storage class 2021-05-28 22:18:51 -04:00
Jim Blandy
14908e5126 [spv-out]: Don't pass in the type arena where it's not needed. 2021-05-28 00:47:25 -04:00
Jim Blandy
48363fcef1 Don't accept unsized types as function arguments. 2021-05-26 12:27:29 -04:00
Jim Blandy
398d3545b3 Include the type arena in ResolveContext, since it's always needed. 2021-05-26 10:35:59 -04:00
Dzmitry Malyshau
badf99653a [spv-in] refactor the matrix stride check 2021-05-26 00:15:09 -04:00
João Capucho
f57739d30b [glsl-in] Provide default interpolation 2021-05-25 13:52:37 -04:00
João Capucho
9464a81ae2 [glsl-in] Fix parameter qualifiers
Previously the types where changed in a later phase now they are changed
right when the argument is added, this makes the implementation slightly
less spec compliant because the following code will compile whilst it shouldn't

```glsl
void test(float a) {}
void test(out float b) {}
```
2021-05-25 13:52:37 -04:00
João Capucho
2b263a1851 [glsl-in] Cast lod value in textureLod 2021-05-25 13:52:37 -04:00
João Capucho
01eb19e29f [glsl-in] Fix vector and matrix constructor
Matrix and vector constructors expected a vector (in the case of the
matrix) or a scalar (in both cases). Now they handle resizing such that
the following code now works

```glsl
mat3 a;
mat4(a); // This would return a validation error because it emitted a cast
```
2021-05-25 13:52:37 -04:00
João Capucho
9868441ebc [glsl-in] Fix storage access 2021-05-25 13:52:37 -04:00
João Capucho
28a1ee4354 [glsl-in] Don't read builtin if it isn't available 2021-05-25 13:52:37 -04:00
João Capucho
e7308e1903 [glsl-in] fix validation error of entry result 2021-05-25 13:52:37 -04:00
Jim Blandy
99fbb34bd6 Require dynamically sized arrays to appear in 'storage' memory.
WGSL requires that runtime-sized arrays appear only as the last member of a
structure in in the `storage` storage class. It seems to me that Naga should
enforce this restriction on its own IR as well.
2021-05-25 00:02:08 -04:00
Jack Foltz
813da7a87e [glsl-in] Support parsing push_constant and std430 2021-05-23 11:48:49 +01:00
Dzmitry Malyshau
652b65cfa9 Validate built-ins to not repeat 2021-05-21 23:22:05 -04:00
Jim Blandy
50de6ae9ac Improve error messages for missing I/O bindings.
The `apply_common_default_interpolation` helper function would panic if bindings
were missing, but missing bindings should be something that front ends can count
on validation to detect, so the helper should just return silently.

The validator returned `InvalidType` errors for missing bindings, apparently
because variables without bindings must be structs that do have bindings. But
this is unhelpful when you've just forgotten to label an argument. So this patch
adds a new, more specific, `VaryingError` variant.
2021-05-21 23:04:27 -04:00
Jim Blandy
652a955e9b Expression::As: Typo. 2021-05-21 23:04:27 -04:00
Jim Blandy
8bcd2a4a1f [spv-in]: Typo. 2021-05-21 23:04:27 -04:00
Jim Blandy
ad550addb8 [spv-out] Take advantage of use abbreviation. 2021-05-21 23:04:27 -04:00
Igor Shaposhnik
3dd9cc0c66 [wgsl-out] Skip access to unsupported builtin inside Store statement 2021-05-21 11:03:05 -04:00
Igor Shaposhnik
6c4012f9c4 Add Vulkan tutorial shaders to lazy check 2021-05-21 10:54:26 -04:00
João Capucho
72fca17dbc [glsl-in] Cleanup 2021-05-20 21:05:10 -04:00