Commit Graph

1435 Commits

Author SHA1 Message Date
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
Dzmitry Malyshau
3b49981111 Bump version to 0.7.1 naga-v0.7.1 2021-10-12 11:44:13 -04:00
Dzmitry Malyshau
ee450c1ee4 Fix float-bool casts in MSL, SPV, and HLSL backends (#1459) 2021-10-12 11:42:20 -04:00
Dzmitry Malyshau
3a2f7e611e Release 0.7 (#1455) naga-v0.7.0 2021-10-07 18:04:30 -04:00
Igor Shaposhnik
943235cd5e [glsl-out] Convert modulo operator on float to SPIR-V OpFRem equivalent function (#1452) 2021-10-07 16:59:39 -04:00
Connor Fitzgerald
2e7d629aef [spv-in] Fix bitfieldExtract/Insert argument types (#1453) 2021-10-07 09:15:38 -04:00
Jim Blandy
0e3fbc8166 Replace pointer-access.spv snapshot test with WGSL source. (#1450)
The original pointer access test used SPIR-V for its input because WGSL didn't
have a working pointer indirection operator at the time. Now that it does, we
can just write this test in WGSL directly.

Fixes #1432.
2021-10-06 16:30:36 -04:00
Dzmitry Malyshau
943e321bc6 Fix lazy CI for snapshots 2021-10-05 21:58:39 -04:00
Connor Fitzgerald
2f5a41cce9 Add insert/extractBits and pack/unpack functions (#1449) 2021-10-05 20:32:57 -04:00
Igor Shaposhnik
3e1244c5cb Make shader validation under a separate feature (#1437) 2021-10-05 15:11:32 -04:00
João Capucho
da00bf2be6 [glsl-in] Always use uint for array size (#1448) 2021-10-05 13:05:47 -04:00
João Capucho
71a75d727d [glsl-out] Es: convert 1D images to 2D (#1436) 2021-10-03 23:01:44 -04:00
João Capucho
b34fa5f2cc [glsl-in] Fix array index parsing for 1D images (#1445) 2021-10-03 16:22:14 +00:00
João Capucho
f01eb72378 [Snapshots] Allow a blacklist of entrypoints for glsl-out (#1444) 2021-10-02 23:22:49 -04:00
Jim Blandy
f30f3a3db6 Properly type-check Expression::Select arguments. (#1442)
Require the `accept` and `reject` arguments to `select` to be scalars or
vectors, per WGSL spec.
2021-10-01 12:47:39 -04:00
Jim Blandy
ea50486b2d Forbid unsized structs as final members of structs. (#1443)
WGSL says:

> - The last member of the structure type defining the store type for a variable
>   ... may be a runtime-sized array.
>
> - A runtime-sized array must not be used as the store type or contained within
>   a store type in any other cases.

Thus, a struct whose final member is a struct whose final member is a
runtime-sized array is verboten.
2021-10-01 09:40:18 -04:00
Jim Blandy
4ea2d96cfb Various doc fixes. (#1440) 2021-09-30 08:56:09 -04:00
Jim Blandy
4ef1cc403b Remove Namer::call_unique. (#1439)
Replace uses of `call_unique` with uses of `call` and `call_or`, which becomes
public. It's not clear when `call_unique` is correct to use, and avoiding a few
numeric suffixes here and there isn't worth it.
2021-09-29 19:33:38 -04:00
Jim Blandy
92a97fb7d5 Simplify implementation of Namer::namespace. (#1438)
Eliminate `Namer::namespace_index` and remove namespace indices from
`Namer::unique` keys. Instead, implement `Namer::namespace` by just swapping in
a fresh table for the duration of the call.

Create the fresh hash table with the right initial capacity. The prior
implementation did manage to avoid allocations by sharing a hash table, and we'd
like to not lose that advantage entirely.

This has no effect on generated code.
2021-09-29 15:55:37 -04:00
Igor Shaposhnik
a4bf25a0d5 Emit std430 layout qualifiers for storage buffers (#1435)
* Remove unused petgraph dependency from glsl-out

* Emit std430 layout qualifiers for storage buffers
2021-09-29 12:24:34 -04:00
Jim Blandy
2e73e48657 When writing snapshots, reliably identify which writer has failed. (#1427) 2021-09-28 13:42:26 -04:00
Jim Blandy
3e992d8bbf Address 'unused variable' warnings when 'span' feature is off. (#1433) 2021-09-27 19:17:20 -04:00
Dzmitry Malyshau
004a12e21d [spv-out] option to clamp frag_depth (#1431) 2021-09-27 23:00:10 +00:00