Commit Graph

1417 Commits

Author SHA1 Message Date
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 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) 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
Dzmitry Malyshau
21324b8fea
Update WGSL grammar for pointer access. (#1312)
* Update WGSL grammar for pointer access.

Comes with a small test, which revealed a number of issues in the backends.

* Validate pointer arguments to functions to only have function/private/workgroup classes.

Comes with a small test. Also, "pointer-access.spv" test is temporarily disabled.
2021-09-27 18:49:28 -04:00
João Capucho
38d74a7f0a [glsl-in] Use intermediate local if storage class isn't function
Automatically spills to a local variable function call arguments to
parameters expecting a pointer where the argument storage class isn't
function since the storage classes wouldn't match.
2021-09-27 21:09:08 +01:00
João Capucho
aa08cf94a4 [spv-in] preserve case order when reusing blocks 2021-09-27 16:01:43 -04:00
Jim Blandy
8122598fe7 [wgsl-out] Correct handling of named pointer expressions.
Treat expressions in `Function::named_expressions` like WGSL `let` declarations,
assuming that the Load Rule was applied to the rhs of the declaration, meaning
that their values are always `Indirection::Ordinary`.

Split `write_expr_plain_form` out from `write_expr_with_indirection`, to clean
up the parenthesis generation: no more `opened_paren` variable, just function
calls. This makes the early return for named expressions neater.

Fixes #1382.
2021-09-27 16:01:43 -04:00
Jim Blandy
7b023ce396 [wgsl-out] Make plain_form_indirection an associated fn of Writer. 2021-09-27 16:01:43 -04:00
Jim Blandy
f3ea2130a4 [wgsl-in]: Correctly compare pointer types.
Treat `TypeInner::ValuePointer` and `TypeInner::Pointer` as equivalent by
converting them to a canonical form before comparison.

Support `ValuePointer` in WGSL type output.

Fixes #1318.
2021-09-27 16:01:43 -04:00
Jim Blandy
6e4401ae96 Rename UniqueArena methods to more closely resemble HashSet.
`UniqueArena::fetch_or_append` becomes `insert`.

`UniqueArena::try_get` becomes `get_handle`, by analogy with `get`, that takes a
type as a key.
2021-09-27 15:17:41 -04:00
Jim Blandy
944a693ae5 Use UniqueArena for types.
Ensure that each distinct type occurs only once in `Module::types`, so that we
can use `Eq` on `Type` or `TypeInner` for type equivalence, without being
confused by differing `Handle<Type>` values that point to identical types.

This removes a number of duplicate types from the ir snapshots.

Fixes #1385.
2021-09-27 15:17:41 -04:00
Jim Blandy
d026577a91 Consolidate Handle construction code. 2021-09-27 15:17:41 -04:00
Jim Blandy
f91e95b22e [glsl-in]: Register new types as necessary during constant solving. 2021-09-27 15:17:41 -04:00
Jim Blandy
d44e2ad207 Simplify interpolation defaulting.
Replace `Module::apply_common_default_interpolation` with a simpler function
that handles a single `Binding` at a time. In exchange for the simplicity, the
function must be called at each point function arguments, function results, and
struct members are prepared. (Any missed spots will be caught by the verifier.)

This approach no longer requires mutating types in the arena, a prerequisite for
properly handling type identity.

Applying defaults to struct members when the struct declaration is parsed does
have a disadvantage, compared to the old whole-module pass: at struct parse
time, we don't yet know which pipeline stages the struct will be used in. The
best we can do is apply defaults to anything with a `Location` binding. This
causes needless qualifiers to appear in some output. However, it seems that our
back end languages all tolerate such qualifiers.
2021-09-27 15:17:41 -04:00
João Capucho
73f9d07207 [Typifier] Some relational functions output vectors
Previously the typifier flagged all relational functions as producing a
scalar boolean but with the exception of `all` and `any`, according to
the wgsl spec, all other relational functions output a type the same
size as the input.
2021-09-26 21:19:08 -04:00
João Capucho
04b176ec6b [glsl-in] Refractor overload selector and add comments 2021-09-23 15:04:07 -04:00
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