Commit Graph

733 Commits

Author SHA1 Message Date
Dzmitry Malyshau
24eaad10fc Follow up on the swizzle PR review notes (#750) 2021-04-22 11:17:44 -04:00
Dzmitry Malyshau
a2e5284f82 WGSL trailing commas (#743)
* [wgsl-in] typedef Span

* [wgsl-in] trailing comma for case list

* [wgsl-in] trailing comma for constructors

* Review fixes
2021-04-21 22:38:26 -04:00
Dzmitry Malyshau
bc344579e8 [spv-in] fix signed/unsigned casting for builtins (#746) 2021-04-21 11:04:53 -04:00
Dzmitry Malyshau
b86c2fbeeb Don't print the module in converter if no output is specified (#744) 2021-04-21 09:40:29 -04:00
Ashley
4664cd301a [Metal] Wrap a packed_float3 with float3 when loading from struct (#740)
* Implement the wrapping in Expression::Load instead

* Add changes to stack size

* stable and nightly can't seem to agree on a stack size

* Apply suggestions

* Add a comment about unexpected path

* Update skybox snapshot

* should_pack_struct_member returns an Option<ScalarKind>

* Remove accidental file
2021-04-21 09:16:11 -04:00
Dzmitry Malyshau
5d1746b0b4 Swizzle expression (#734) 2021-04-20 22:03:54 -04:00
Ashley
b08dfe5146 [Metal] Impl Expression::Splat (#738)
* [Metal] Impl `Expression::Splat`

* Add changes to the snapshots

* Apply suggestions
2021-04-20 11:41:13 -04:00
Ashley Ruglys
a4ac7b38b2 Don't use an interpolation on fake bindings 2021-04-20 10:51:45 -04:00
Gordon-F
c37ae5e2a0 [glsl-out] Use fmt::Writer instead of io::Writer 2021-04-20 09:09:35 -04:00
Gordon-F
446f5dad6f [hlsl-out] Use fmt::Writer instead of io::Writer 2021-04-20 09:09:35 -04:00
François
79bcfb1206 [glsl-in] add support for array variables (#731)
* [glsl-in] add support for array variables

* clippy

* more clippy
2021-04-19 13:37:25 -04:00
Jim Blandy
9cd6fd9c20 [msl-out]: Generate interpolation qualifiers. 2021-04-19 09:42:00 -04:00
Jim Blandy
fc39ea8877 [msl-out]: ResolvedBinding::try_fmt: Simplify error handling. 2021-04-19 09:42:00 -04:00
Jim Blandy
4f442ff8cc Require binding interpolation to be resolved by the front end.
When validating IR, verify that all `Binding`s for vertex shader outputs and
fragment shader inputs, whether directly in the argument or result, or applied
to a struct member, has specified an interpolation and sampling, not `None`.
This ensures that front ends explicitly state their policies, rather than
coasting through on back ends' default behavior.

In practice, all our front ends have very similar defaults, so provide a utility
function on `Module` to apply these rules. Use this utility function in the
SPIR-V and WGSL front ends; GLSL seems to already fill in interpolation as
required.
2021-04-19 09:42:00 -04:00
Jim Blandy
0910af2718 [wgsl-in] Implement WGSL interpolate syntax from gpuweb PR #1605.
Fixes: #670
2021-04-19 09:42:00 -04:00
Jim Blandy
99a9e1e78e Change Binding::Location to a struct-style enum variant.
This commit makes no other changes. This is in preparation for adding a third
field, at which point tuple variants start to get obscure.
2021-04-19 09:42:00 -04:00
Jim Blandy
45ee5f5113 [spv-out] Writer: Introduce decorate helper method.
The `Writer::decorate` private method neatens up eight call sites.
2021-04-19 09:42:00 -04:00
Igor Shaposhnik
ce0720ac61 Add wgsl-out into test infrastructure (#730) 2021-04-19 09:19:03 -04:00
Igor Shaposhnik
c1675d06f9 Start wgsl-out (#727) 2021-04-19 00:23:27 -04:00
Dzmitry Malyshau
62c2cf7332 Validate composite constants (#729) 2021-04-18 23:19:09 -04:00
Ashley
a584ec8185 Impl Eq for msl::Options (#725) 2021-04-18 01:19:12 -04:00
Lachlan Sneff
4cbef59dd6 Add struct instantiation support to wgsl-in (#507)
* Add struct instantiation support to wgsl-in

* Readd type matching and move struct test

* rebase onto master and update tests

* Update tests to upstream

* Fix merge errors

* Rebase onto master

* [wgsl-in] delay composite type creation

* Use the new WGSL construction syntax in the tests

Co-authored-by: Dzmitry Malyshau <kvarkus@gmail.com>
2021-04-17 01:14:07 -04:00
Dzmitry Malyshau
bb716f9c10 [spv-out] implement array value indexing (#723) 2021-04-16 17:11:18 -04:00
Dzmitry Malyshau
daf4c82376 Allow stepping on floats in the validator (#724) 2021-04-16 16:16:15 -04:00
Ashley
285a855e19 Impl Hash for msl::Options (#716)
* Impl `Hash` for `msl::Options`

* Remove ordered float

* [msl] derive everything on Options manually

* [msl] switch from Arena to Vec for the options

* Fix the clippy error by allowing derive_hash_xor_eq

* Fix skybox test

Co-authored-by: Dzmitry Malyshau <kvarkus@gmail.com>
2021-04-16 14:11:26 -04:00
Jim Blandy
2eb3e81e19 [wgsl-in] Add basic test for interpolate attribute. 2021-04-15 17:19:20 -04:00
Jim Blandy
3f958f618b [glsl-out] Let snapshot tests request a specific GLSL desktop version.
Add a Option<u16> to the snapshot `Params` to let snapshots request specific
Desktop GLSL versions. The default is GLSL ES 3.10.

It would be more general to let the params select any GLSL version, but that
would entail making glsl::Version implement Deserialize and all that, which
seems like overkill.
2021-04-15 17:19:20 -04:00
Jim Blandy
576723960e Permit interpolation qualifiers on both vertex outputs and fragment inputs. 2021-04-15 17:19:20 -04:00
Jim Blandy
7fda34c4fd [glsl-out] Add version checks for qualifiers.
Use `back::glsl::features::FeaturesManager` to detect which qualifiers the given
module actually uses, and check them against the requested GLSL version.

The `linear` and `sample` qualifiers for fragment shader inputs are not
supported in all versions of GLSL that Naga can generate.
2021-04-15 17:19:20 -04:00
Jim Blandy
ec6ef38dac Makefile: Omit misleading slashes. 2021-04-15 17:19:20 -04:00
Dzmitry Malyshau
2eae37f7e5 [spv-out] rename temp_chain to temp_list, run a cargo fmt pass 2021-04-14 19:26:20 -04:00
Dzmitry Malyshau
96f9cb4ce1 [wgsl] Add support for simplified vector construction, add a snapshot test 2021-04-14 19:26:20 -04:00
Dzmitry Malyshau
c8d26a1f47 Splat support for WGSL and SPV in/out, updated snapshots 2021-04-14 19:26:20 -04:00
Dzmitry Malyshau
d3b39d9e58 Splat expression in the IR 2021-04-14 19:26:20 -04:00
Jim Blandy
6701e2bf96 Avoid non-exhaustive matches on Expression.
Non-exhaustive matches on `Expression` make it harder to review changes that add
new enum variants, because the compiler can't tell you that you've missed a
case.

Although I believe Clippy is able to do so, I don't think we should make a
blanket rule of forbidding wildcard match arms against `Expression`. There are a
few matches that are only concerned with a handful of variants, or a single
variant. For example, variant, naga::front::spv::Parser::next_block is only
concerned with whether an expression is a constant or not. In principle, these
sites should also be checked when adding a new variant, but it seems too
burdensome to require them to list all the `Expression` variants they don't care
about. The principle should be applied only to matches that are already handling
most variants.

At the moment, there is only one such match on `Expression` in the code base,
and it's only missing a few variants, so this is quick to fix.
2021-04-14 16:11:37 -04:00
Dzmitry Malyshau
c2c93e4ecd Remove cargo-insta 2021-04-14 16:10:31 -04:00
Jim Blandy
f7fdf6b560 Makefile: Be more flexible in removing YAML headers from snapshots.
The snapshot files in tests/out start with headers like this:

    ---
    source: tests/snapshots.rs
    expression: dis
    ---
    ; SPIR-V
    ; Version: 1.0
    ; Generator: rspirv
    ...

The Makefile's `validate-foo` targets trim off those lines with `tail -n +5`
before submitting their test to the validators.

However, some versions of the `insta` crate seem to generate headers with an
extra blank line, like this:

    ---
    source: tests/snapshots.rs
    expression: dis

    ---

This makes the `validate-foo` targets unhappy.

This commit changes the `validate-foo` targets to use `sed` to cope with both
kinds of headers.
2021-04-13 23:43:55 -04:00
Dzmitry Malyshau
3f57e4db5a Enable texture-array snapshot on Metal 2021-04-13 01:31:57 -04:00
Dzmitry Malyshau
2923cfb3aa [spv-in] claim Vulkan Memory Model support 2021-04-13 01:31:57 -04:00
Dzmitry Malyshau
270feb3c0f [msl] map push constants to buffers 2021-04-13 01:31:57 -04:00
Dzmitry Malyshau
9cd2b04c04 [spv-out] put matrix decorations on arrays of matrices (#712) 2021-04-12 12:12:19 -04:00
Ashley
202d3a6912 Add metal constants to keywords (#709) 2021-04-11 14:36:29 -04:00
Ashley
640bfb1f26 [Metal] Make constant composites non-constexpr (#707)
* Make constant composites non-constexpr

* Update shadow test
2021-04-11 14:21:47 -04:00
Ashley
98db1dedcd Add a note about references and pointers to Expression::Load (#708)
* Add a note about references and pointers to Expression::Load

* Formatting

* Remove comma

* Clearer English
2021-04-11 14:21:02 -04:00
Ashley
3b4acc5300 [Metal] Handle length(float) and distance(float, float) (#706)
* Handle length(float x)

* Handle length(float) and distance(float, float)

* Apply suggestions

* Apply suggestions

* Move stack size range up by 1000
2021-04-11 13:01:31 -04:00
Ashley
30180c008b [Metal] Change the function argument pointer type to use & instead of * (#693)
* Take references in function calls if thats what the funciton wants

* Use references instead of pointers the function argument list
2021-04-11 12:48:22 -04:00
Ashley
9549b26a90 Add the reserved types in metal_types to metal keywords (#705) 2021-04-11 12:32:01 -04:00
Timo de Kort
5d487941b2 Start hlsl-out (#408)
* Add hlsl-out feature

* Integrate hlsl-out with snapshots

* Add snapshot
2021-04-11 11:36:26 -04:00
Ashley
a8f1022b12 [Metal] Handle NaN and inf correctly in constants (#704)
* Handle NaN and inf

* Handle negative infinity
2021-04-11 11:06:23 -04:00
Mehmet Oguz Derin
142038c85b WGSL: const to let 2021-04-11 01:24:19 -04:00