Commit Graph

1372 Commits

Author SHA1 Message Date
João Capucho
160ab82fee [glsl-in] Allow array constructors 2021-09-21 18:25:43 -04:00
João Capucho
70db5f681d [glsl-in] Allow use of constructors for user types 2021-09-21 18:25:43 -04:00
João Capucho
d5fc05e8a4 Allow unsigned integers in switch 2021-09-21 17:16:51 -04:00
João Capucho
6a57559070 [glsl-out] Improve handling of samplerCubeArrayShadow
Adds checks that it isn't used in an unsupported function and emits the
depth_ref as a separate argument.
2021-09-21 16:54:05 -04:00
João Capucho
63a8463edd [glsl-in] Support function declarations with void as arguments 2021-09-21 15:07:14 -04:00
Dzmitry Malyshau
115d170584 wgsl-out: update reserved words 2021-09-21 13:51:12 -04:00
João Capucho
af44603e47 [glsl-in] Use Span instead of SourceMetadata 2021-09-21 11:00:33 -04:00
Aleksi Sapon
42db64628e wgsl-out: vector bitcast 2021-09-21 15:50:10 +01:00
João Capucho
98944bb7a6 Track finished across compound statements 2021-09-20 12:00:22 -04:00
Aleksi Sapon
dc8a41de04 spv-in: no case fallthrough when last statement allows it 2021-09-20 15:11:46 +01:00
João Capucho
60d0bf850b Add support for multi view extensions 2021-09-19 17:38:27 -04:00
João Capucho
cd65484a22 [wgsl-in] Disallow identifiers starting with _ 2021-09-19 20:41:53 +01:00
João Capucho
7895e7f036 Don't output identifiers starting with _ 2021-09-19 15:18:17 -04:00
João Capucho
aea755fd32 [spv-in] Allow OpLine anywhere in the function 2021-09-19 14:06:08 -04:00
João Capucho
9b34d503da Add formating checks to CI 2021-09-19 11:55:49 -04:00
João Capucho
d7ca7d43b9 [glsl-in] Improve infix handling
Add support for float, vector and matrices targets.

Fix prefix and postfix being inverted (one was returning the value
of the other).

Remove an unneeded local indirection for prefix handling.

Add tests.
2021-09-17 13:56:42 -04:00
João Capucho
1cb4447ec3 [glsl-in] Add test array constant dynamic indexing 2021-09-17 13:47:38 -04:00
João Capucho
e824519378 [glsl-in] Cast switch selector to int if it's uint 2021-09-17 12:30:43 -04:00
João Capucho
796f5f14b0 [glsl-in] Fix bad bit pattern in texelFetch
This caused arrayed textures to not be accepted
2021-09-17 10:19:59 -04:00
Jasper St. Pierre
27d6e442d2 [glsl-in] Also apply vector splatting to bitwise ops 2021-09-17 10:19:28 -04:00
João Capucho
2610082bbf [glsl-in] Use local for constant indexing
Constants that are to be dynamically indexed now are first transformed
into locals with them as the initializer.
2021-09-17 09:53:30 -04:00
Jasper St. Pierre
a9d20d8ef4 [glsl-in] Add support for a large number of texture sample overrides 2021-09-16 23:00:19 +01:00
João Capucho
60bd9ec884 [glsl-in] Compile tests without codespan 2021-09-16 16:10:01 -04:00
Jim Blandy
8aae069f22 Document some Expression, EntryPoint, and Module rules. 2021-09-16 11:01:45 -04:00
Jim Blandy
636b8ed606 Document AtomicResult expressions. 2021-09-16 11:01:24 -04:00
Dzmitry Malyshau
52d74e91a4 spv-out: option to emit PointSize 2021-09-15 18:48:18 -04:00
Jim Blandy
5d3c93e8c7 [wgsl-out] Properly parenthesize address-of expressions.
Fixes #1352.
2021-09-15 18:46:55 -04:00
Jim Blandy
045ec6db32 [spv-out] Various doc fixes. 2021-09-15 18:41:07 -04:00
Jim Blandy
95d3a4e699
Enable span tracking by default in the Naga CLI. (#1364) 2021-09-15 15:32:19 -07:00
Jim Blandy
e5ba11332f Correctly recognize defined spans.
Without this change, the `to_range` method method returns `None` even when spans
are enabled.
2021-09-15 10:53:46 -04:00
Jim Blandy
d31121df77 [wgsl-in] Refuse to apply postfix expressions to WGSL pointers.
Fixes #1356.

Output for the test case in that issue is now:

    error: the value indexed by a `[]` subscripting expression must not be a pointer
      ┌─ wgsl:5:14
      │
    5 │     let a = *pv[3]; // Problematic line
      │              ^^ expression is a pointer

    Could not parse WGSL
2021-09-15 10:51:35 -04:00
Jim Blandy
08c1a1e9a3 [wgsl-in] Record identifier definitions as TypedExpression values.
Both a `var` binding and a `let` binding of a pointer to a variable create
entries in the `lookup_ident` tables whose expression is a `LocalVariable`.
However, the `let` should be a pointer, whereas the `var` should be a reference.
This patch changes the tables to hold `TypedExpression` values, thus preserving
the distinction.
2021-09-15 10:51:35 -04:00
Jim Blandy
4abf22c4d1 snapshot tests: Always write IR when requested, even if validation fails. 2021-09-15 10:37:12 -04:00
João Capucho
36114d95b6 [spv-in] Move function data into BlockContext
This allows removing many arguments from functions dealing with
instruction parsing
2021-09-15 10:24:01 -04:00
Jim Blandy
933ecc4a44 [spv-out] Rename test snapshot files.
The old filenames were probably based on the shader stage, not the shader
function name, which the PR changed to do in response to a review suggestion.
2021-09-14 18:41:23 -04:00
Jim Blandy
0d3dbfe781 Clean up some old snapshot files.
`tests/out/glsl/operators.main.Fragment.glsl` is no longer generated because the
function in question changed to a Compute entry point.

`tests/out/wgsl/multiple_entry_points-glsl.wgsl` is no longer generated because
the input test was removed in 057dc310.
2021-09-14 18:38:49 -04:00
Jim Blandy
3fdd8592fc [wgsl-in] Rework Load Rule handling and indirection.
Make the parser code more closely follow the spec's grammar around
`unary_expression`, `postfix_expression`, and `singular_expression`.

Change the handling of postfix expressions (indexing, member/component access,
and swizzling) to apply the indirection at the appropriate time, resulting in
code improvements on all output formats. For example, where we used to generate
the following MSL:

    metal::float4 _e13 = bar.matrix[3];
    float b = _e13.x;

we now generate, simply:

    float b = bar.matrix[3].x;

Propagate WGSL reference types correctly, so that parenthesizing expressions no
longer causes the Load Rule to be applied.

Together with #1332 (already landed), this is a replacement for #1312, and
unblocks #1352.

Fixes #1351.
2021-09-14 16:17:57 -04:00
Dzmitry Malyshau
db80ed4fa9 Fix warnings in snapshots and spv-in 2021-09-14 09:46:25 -04:00
Jim Blandy
c03427b154 Document TypeResolution and TypeInner::ValuePointer. 2021-09-14 09:41:28 -04:00
Dzmitry Malyshau
807accd7de wgsl-in: require storage class to be given 2021-09-13 15:44:05 -04:00
Jasper St. Pierre
0e66930aff [glsl-in] Fix sampling texture array types
Fixes #1349.
2021-09-12 09:44:14 -04:00
Jasper St. Pierre
ba39fd47c3
Output parentheses around dereference (#1348)
Regression from ce676cf130.

We need to output (*d).mx rather than *d.mx, at least according to Tint.
wgsl-in seems to handle *d.mx just fine, which is likely a separate bug.
2021-09-11 23:32:10 -07:00
João Capucho
130f802c89
Make span copyable (#1314)
* Make span copyable

* Use fixed size integers for span
2021-09-10 19:52:45 +00:00
João Capucho
439148b1a7 [spv-in] Move essential code out of debug_assert 2021-09-10 17:28:16 +01:00
João Capucho
3049f63cad
[spv-in] new block parser (#1294)
* [spv-in] New two pass parser based

* [spv-in] Allow expressions defined in dominant block in different scopes

* Make the patch non breaking

* [spv-in] Allow scope transfers in phi instructions

* [spv-in] Remove unused stuff

* [spv-in] Handle switch merges as breaks

* Remove no longer needed stuff

* Revert some changes to prepare to merge

* Remove dead code

* Don't spill into local if in scope

* [spv-in] Documentation, comments, some renaming for clarity.

* Address comments

Co-authored-by: Jim Blandy <jimb@red-bean.com>
2021-09-10 08:51:05 -07:00
Dzmitry Malyshau
7681f4a21f msl-out: fix as_type expressions 2021-09-09 21:09:20 -04:00
Dzmitry Malyshau
135df311b1 hlsl: avoid using texture keyword 2021-09-09 16:02:17 -04:00
Jim Blandy
ce676cf130 [wgsl-out] Correct production of * and & operators.
Fixes #1322.
2021-09-08 15:04:45 -07:00
Dzmitry Malyshau
e226cf3f1d spv-out: option to skip OpName for varyings 2021-09-08 16:52:10 -04:00
Dzmitry Malyshau
c1eed779fe Infer types of module-scope let declarations 2021-09-08 09:42:36 -04:00