Commit Graph

1457 Commits

Author SHA1 Message Date
Igor Shaposhnik
7c2fdf94c0 [wgsl-out] Add double underscores as a reserved prefix 2021-11-26 09:36:18 -05:00
Dzmitry Malyshau
ddbc1c4b1f WGSL: use underscore prefix like the other backends 2021-11-25 16:23:24 -05:00
Igor Shaposhnik
2107b20561 [wgsl-in] Don't allow keywords to be used as identifiers 2021-11-24 16:34:17 -05:00
Igor Shaposhnik
cb6d3fa815 [wgsl] Move backend keyword list into its own module 2021-11-24 16:34:17 -05:00
Igor Shaposhnik
ae0c7355ca [wgsl] Remove IsInf and IsNan 2021-11-24 16:05:03 -05:00
Jim Blandy
7fd172515d [spv-out] Don't support arguments pointing to unsized types.
Functions with such arguments could never have been called anyway, and now they
are forbidden in validation.
2021-11-18 17:39:56 -05:00
Jim Blandy
cc930180d9 Tighten checks on pointers to unsized values, and pointer arguments.
Pointers should not be `DATA`: they can never be stored in anything. (Function
arguments are not storage; they're like `let` bindings.)

Un-`SIZED` values may only live in the `Storage` storage class, so creating
pointers to them in other storage classes is meaningless.

The `ARGUMENT` flag should be set only on pointers in those storage classes that
are permitted to be passed to functions.

See comments in code for details.

Fixes #1513.
2021-11-18 17:39:56 -05:00
Jim Blandy
633f1b3377 [wgsl-in] Don't be confused by pointers to globals.
The WGSL front end knows that globals in the `Handle` storage class do not
produce references, but it attempts to manage this in two places which trip over
each other. As a consequence, referring to a `let` binding holding a pointer to
a global flips the variable's type from WGSL `ptr` to WGSL reference, with
bewildering consequences.
2021-11-18 17:39:56 -05:00
Layl Bongers
29571cc4cf Add multiview wgsl builtin 2021-11-18 09:57:37 -05:00
Jim Blandy
6a5b33fa24
Move BoundsCheckPolicy/Policies into proc, from back. (#1537) 2021-11-17 19:15:59 -08:00
bjorn3
38366e382f Switch to rustc-hash
See gfx-rs/rspirv#221 for the rationale behind this change
2021-11-16 23:51:19 -05:00
Igor Shaposhnik
30a0a37af0 Update dependencies 2021-11-16 23:46:54 -05:00
Jim Blandy
ce18eba695 Check that stores are permitted by the pointer's storage access.
Fixes #1533.
2021-11-16 23:40:56 -05:00
Jim Blandy
3d6cbcf8a6 Remove IndexableLength::Specializable variant.
Specializable constants are no longer permitted as array lengths, so this case
should not arise in valid code.
2021-11-16 09:12:42 -05:00
Jim Blandy
90daa9edfe Forbid specializable constants as array lengths.
Only the SPIR-V front end can produce such array types, and it seems that our
back ends don't support this case well.
2021-11-16 09:12:42 -05:00
Boris-Chengbiao Zhou
1dcde48d09
[valid] Check that switches have a default case (#1529)
From the WGSL spec: "Each switch statement must have exactly one default clause."
2021-11-15 00:07:55 +00:00
Jay Oster
66c3499df8
[spv-out] Fix scalar-times-matrix operations (#1524) 2021-11-14 19:07:38 -05:00
Jim Blandy
e69a70bfb7
[spv-in] Permit pointers to runtime arrays only in StorageBuffer. (#1522)
* [spv-in] Change shadow.spv test input to use StorageBuffer.

The ecosystem around Naga will generally not be able to use Vulkan adapters that
don't support the SPV_KHR_storage_buffer_storage_class (which was incorporated
into SPIR-V 1.3), so we can assume it is present.

Changing the test not to use runtime-sized arrays in the Uniform storage class
will allow Naga to tighten up some validation checks.

* [spv-in] Permit pointers to runtime arrays only in StorageBuffer.

Fixes #1519.
2021-11-10 16:58:57 -05:00
João Capucho
eda078d736
[glsl-in] Allow more operations as access bases (#1521) 2021-11-10 12:16:19 -05:00
João Capucho
d168f15d81
[glsl-in] Allow constructors from non-scalar to scalar (#1520) 2021-11-10 12:15:43 -05:00
João Capucho
c3c4ab7548 [glsl-in] Add test for matrix from matrix constructor 2021-11-09 15:15:11 +00:00
João Capucho
7234d19d00 [glsl-in] Implement matrix to matrix constructor 2021-11-09 15:15:11 +00:00
João Capucho
e26bff1b8d [glsl-in] Split constructor calls into two functions
Improves code readability and removes nesting
2021-11-09 15:15:11 +00:00
João Capucho
8a1dbcb050
[spv-in] Always use get_expr_handle for expressions in image expressions (#1516)
* [spv-in] Use `get_expr_handle` in `parse_image_write`

* [spv-in] Use BlockContext directly instead of its fields

* [spv-in] Use `get_expr_handle` for depth ref
2021-11-09 09:52:29 -05:00
João Capucho
8e2c4fbef5
[glsl-in] Don't panic on UB integer operations (#1518) 2021-11-09 09:35:59 -05:00
Dzmitry Malyshau
8bc3aa824b
Refactor namer scheme, fix trailing digits (#1510) 2021-11-09 09:24:41 -05:00
Jonathan Behrens
098e4af52f [spv-out] Fix word order for constants 2021-11-07 14:51:40 +00:00
Dzmitry Malyshau
28c45321e5
hlsl: respect array stride in storage buffers (#1507) 2021-11-03 22:44:46 -04:00
Shohei Jinno
d9b166816b
[glsl-in] Add helper to reduce repetition. (#1505)
```
Ok(self.constants.fetch_or_append(
    Constant {
        name: None,
        specialization: None,
        inner,
    },
    span,
))
```

was called repetitively, so I added
`ConstantSolver::register_constant(&mut self, ConstantInner, Span)`
that returns Handle<Constant>.
2021-11-02 18:05:59 -07:00
Jim Blandy
c1b378842e
Make tests properly exercise Some("") global names. (#1503)
The GLSL empty-global-name.frag test doesn't suffice because the GLSL front end
doesn't produce the same IR as the SPIR-V included in the bug report. As far as
I know, only a genuine SPIR-V input test can produce a global whose name is
`Some("")`.

Include the SPIR-V assembly source.
2021-11-01 14:07:11 -04:00
Dzmitry Malyshau
323999fcb9
Fix span includes into function validation (#1500) 2021-10-31 23:58:58 -04:00
Igor Shaposhnik
9d2b357214
[glsl\wgsl out] Remove unnecessary clones (#1492)
* [glsl-out] Remove unnecessary clones

* [wgsl-out] Remove unnecessary clones
2021-10-28 13:54:32 -04:00
Igor Shaposhnik
d1cfdd15a0 Add test for last falltrough switch case 2021-10-27 11:12:35 +01:00
João Capucho
0458f0a404
[valid] Check that the last switch case isn't falltrough (#1485) 2021-10-26 21:33:49 -04:00
Igor Shaposhnik
00bbbed90a
Handle empty variable names in namer (#1484)
* Handle empty variable names in namer

* Add glsl-in test with empty global name
2021-10-26 17:46:27 -04:00
João Capucho
63dbd38edc
Make default a switch case (#1477)
* Make default a switch case

Previously the default case of a switch statement was encoded as a block
in the statement but the wgsl spec defines it in such a way that the
default case ordering matters.

* [spv-out] Support for the new switch IR

* [dot-out] Use different labels for default cases
2021-10-26 13:31:54 -04:00
Jim Blandy
5cf11ab734 Make use of AddSpan and MapErrWithSpan conditional.
This avoids warnings in default-feature builds, like `cargo test -p naga`.
2021-10-25 19:35:59 +01:00
João Capucho
8c071ef122
[wgsl-in] Always flush expressions in function call (#1478) 2021-10-25 11:17:55 -07:00
João Capucho
f8d3c4bc8e
[wgsl-in] Add support for function call statements (#1476)
* [wgsl-in] Add support for function call statements

* Apply comments
2021-10-25 12:15:58 -04:00
Alex Es
ec001c3ead
Use span information in analyzer errors (proof of concept) (#1470)
* Proof-of-concept for adding spans to validation errors.

Still missing: actually printing the damn stuff.

* Emit errors from analyzer in the CLI.

TODO: tests, I guess!

* Simplification refactoring: avoid avoiding allocations so vehemently.

* Mask helper traits with `as _`.

* Fix block iterator throwing up when span feature is disabled.

* Nest use statements.

* Add basic docs.

* Axe AddSpanResult.
2021-10-24 22:47:03 -04:00
Dzmitry Malyshau
fd5085277a Switch the constant in bevy-pbr to avoid display incosistencies 2021-10-23 23:39:49 -04:00
Dzmitry Malyshau
a03f23c132 Allow new clippy::if_same_then_else 2021-10-23 23:39:49 -04:00
João Capucho
044fc1b742
[spv-in] Cast int comparisons arguments (#1471)
Operations like `OpUGreaterThan` accept arguments as long as they are integers
(signedness doesn't matter) but they must be interpreted as `Uint`s.
2021-10-23 23:22:31 -04:00
João Capucho
c3a0d71f8b
[spv-out] Write function arguments names (#1472) 2021-10-23 23:20:12 -04:00
João Capucho
70ad084ad4
[spv-in]: Cull unused builtins inside structs (#1469)
Some compilers like shaderc introduce a full gl_PerVertex struct, this
includes gl_ClipDistance. Normally this isn't a problem since most
drivers optimize it away, but naga zero inits globals if they weren't
previously initialized. This causes gl_ClipDistance to be initialized to
zero which can be really bad for performance.
2021-10-19 22:55:20 -04:00
Dzmitry Malyshau
c4ab9a3956
hlsl: Fix mat3 stores (#1467) 2021-10-18 01:04:06 -04:00
Jim Blandy
ed4cc8e4d8
Use Cow to reduce allocation in proc::Namer. (#1465)
Minimize allocation in the namer. Heap-allocate string only when needed to
provide an owned key for a hash table, or to hold synthesized text. Try to reuse
allocations.

Many unnecessary trailing `_` characters are removed from test output. These
were all superfluous; separators are still inserted where necessary.
2021-10-16 17:56:59 +00:00
Jim Blandy
528f52fba0
[msl-out] Put serde(default) on the whole struct, not on each field. (#1463)
This has no effect, but makes the code more legible.
2021-10-16 10:55:31 -04:00
Jim Blandy
62cc5fc646
[msl-out] Delete Writer::runtime_sized_buffers. (#1462)
This is just a table mapping handles to their indices, but we can just fetch the
index directly from the handle. We never iterate over its entries, but even if
we did, we could at least use a HashSet instead of a HashMap.
2021-10-15 00:44:28 -04:00
Dzmitry Malyshau
4cb91f2c98
cli: option to keep coordinate space unchanged (#1460) 2021-10-13 08:21:29 -04:00