Commit Graph

2144 Commits

Author SHA1 Message Date
teoxoy
3d346977e5 avoid having constants pointing to other constants 2023-10-12 13:13:26 +02:00
teoxoy
648540999e [wgsl-in] use ast spans for errors since they are more accurate 2023-10-12 13:13:26 +02:00
Jim Blandy
c16a298cac Let ConstantEvaluator see through Constant exprs in Splat exprs. 2023-10-12 13:13:26 +02:00
Jim Blandy
3e4d565576 Let ConstantEvaluator see through Constant exprs in Compose exprs. 2023-10-12 13:13:26 +02:00
Jim Blandy
6bd15e4492 Add snapshot tests for constant evaluation of splats and composes. 2023-10-12 13:13:26 +02:00
teoxoy
c33d7ee40d add an expression constness tracker 2023-10-12 13:13:26 +02:00
Jim Blandy
ab177af3ba Test that only constant expressions are hoisted to initializers. 2023-10-12 13:13:26 +02:00
Jim Blandy
bdcb9f6f64 Split const-exprs.rs test into separate functions.
Also, just use a single out variable for each type. rather than
introducing a new output variable for every test we add.
2023-10-12 13:13:26 +02:00
Jim Blandy
1a4b526d9a ConstantEvaluator::swizzle: Handle vector concatenation and indexing (#2485)
* ConstantEvaluator::swizzle: Handle vector concatenation, indexing.

* Handle vector Compose expressions nested two deep.

* Move `flatten_compose` to `proc`, and make it a free function.

* [spv-out] Ensure that we flatten Compose for OpConstantCompose.
2023-10-12 13:13:26 +02:00
Jim Blandy
f0ac838019 ConstantEvaluator::copy_from: Rename argument handle to expr. (#2490) 2023-10-12 13:13:26 +02:00
Jim Blandy
44ca6ac5b3 Document some parts of ConstantEvaluator. (#2489) 2023-10-12 13:13:26 +02:00
Jim Blandy
ca69a6b372 Add a bit of logging to ConstantEvaluator. (#2488) 2023-10-12 13:13:26 +02:00
Jim Blandy
aa041aafbd Replace ConstantEvaluator's closure with optional emitter data.
Instead of letting the user supply an arbitrary closure for appending
expressions, instead give `ConstantEvaluator` an `Option` that holds
an `Emitter` to interrupt, and a `block` to add any new `Emit`
statements to.
2023-10-12 13:13:26 +02:00
Jim Blandy
77851ebfb6 Move front::Emitter to proc.
With the addition of the constant evaluator to the `proc` module, it
is now concerned with constructing expressions. Any code that
constructs expressions will generally also need to deal with `Emit`
statements, which are handled by the `Emitter` type. However,
`Emitter` is private to the `front` module. This patch moves it to
`proc` and makes it accessible to both the constant evaluator and the
front ends.
2023-10-12 13:13:26 +02:00
teoxoy
0e4ac2a98c [glsl-in] set initializer of local variables 2023-10-12 13:13:26 +02:00
teoxoy
fe7bc01d27 [glsl-in] const eval as soon as possible 2023-10-12 13:13:26 +02:00
teoxoy
3fb4c333a7 use LocalVariable init 2023-10-12 13:13:26 +02:00
teoxoy
a730236b68 [wgsl-in] eagerly evaluate const-expressions
[wgsl-in] support const-expressions in attributes

allow `Splat` as an evaluated const-expression type
2023-10-12 13:13:26 +02:00
Connor Fitzgerald
c5d884fca8 Add codeowners file 2023-10-11 14:05:04 -04:00
Nicolas Silva
33b75a27d9 [wgsl-in] Parse the bgra8unorm storage format (#2550) 2023-10-10 09:13:19 -07:00
Nicolas Silva
3c7dbc4016 Add StorageFormat::Bgra8Unorm 2023-10-09 17:04:03 +02:00
Jim Blandy
fe484b3a1b Require that Function and Private variables be CONSTRUCTIBLE.
Change the validator to enforce WGSL's requirement that all variables
in the `function` and `private` address spaces must have constructible
types.

Mark the `RayQuery` type as `CONSTRUCTIBLE`, since it is intended to
be used for local variables.

Add a regression test.
2023-10-09 12:27:05 +02:00
Jim Blandy
fa0fed100e compact: Don't assume Emitted expressions are live.
If an `Emit` statement covers an `Expression` that is not otherwise
used by any `Statement`, remove it from the `Arena` anyway. An `Emit`
statement controls when `Expression`s are evaluated, but it doesn't
have any side effects, so unless an expression is used by some other
statement, it's not necessary to the program.
2023-10-09 12:21:43 +02:00
Jim Blandy
e820c33abf compact: Minor cleanups.
- Simplify visibility markings.

- Remove some testing comments. (Tests carried out.)

- Remove some commented-out code.
2023-10-09 12:21:43 +02:00
Jim Blandy
c6716033da Improve docs for FunctionInfo::process_expression. 2023-10-06 18:43:22 +02:00
Jim Blandy
31f547580c Remove expression argument to FunctionInfo::process_expression.
We're already passing the handle and the arena, so it's superfluous.
2023-10-06 18:43:22 +02:00
Teodor Tanasoaia
4d6e0005f4 [valid] Disallow NaNs and infinities (#2508)
* [valid] disallow NaNs and infinities

* document literal float constraints
2023-10-05 12:50:36 -07:00
Teodor Tanasoaia
f37db5affc [wgsl] remove outerProduct (#2535) 2023-10-05 19:14:52 +02:00
Teodor Tanasoaia
6668d0694c Add Rgb10a2Uint format (#2525) 2023-10-03 13:36:14 +02:00
Teodor Tanasoaia
613da72ac0 [spv-out] require ClipDistance & CullDistance capabilities if necessary (#2528) 2023-10-03 13:34:56 +02:00
Evan Mark Hopkins
9f3cdb61aa [msl-out] Make varyings' struct members unique (#2521) 2023-09-29 12:26:23 +02:00
Teodor Tanasoaia
c927d3ec82 remove duplicated code 2023-09-28 15:16:18 -07:00
teoxoy
e6a47ba262 disable uniformity analysis for the fragment stage 2023-09-28 20:33:11 +02:00
teoxoy
ee236e6c9b [valid] make sure textureSampleBias is only used in the fragment stage 2023-09-28 20:33:11 +02:00
Teodor Tanasoaia
f72489be00 validate variable initializer for address spaces (#2513) 2023-09-28 20:32:46 +02:00
Jim Blandy
a17a93ef8f snapshots: convert_wgsl: Remove redundant cubeArrayShadow entry. (#2514)
The duplicate entry was introduced accidentally in #1845.
2023-09-28 09:09:57 +02:00
Evan Mark Hopkins
a898522e10 Rename identifiers containing double underscores (#2510) 2023-09-26 16:46:02 +02:00
Jim Blandy
3bcb114adb snapshots: Change messages for generating output.
Change printlns in the backend functions to say "generating" instead
of "writing" before calling the Naga backends. "Writing" suggests
writing output to a file; "generating" seems more accurate for calling
a backend.
2023-09-25 07:59:41 -07:00
Jim Blandy
5af7ebc955 snapshots: Consolidate path handling.
Add a new type, `Input`, representing a particular Naga input file,
with methods to generate related paths - output files with a
particular extension, parameter files, and the input file itself.
Use this throughout `snapshots.rs` to generate paths.

Give `Input` utility methods for reading and writing files.
2023-09-25 07:59:41 -07:00
Jim Blandy
4329a6a51b snapshots: Name convert_glsl_variations_check output consistently.
Rather than adding a `-glsl` suffix to the name, just rely on
`check_targets`' standard naming behavior, treating
`tests/in/variations.glsl` like any other snapshot input.
2023-09-25 07:59:41 -07:00
Jim Blandy
0c69735f59 Change naga::back::spv::DebugInfo::file_name to a &Path.
This makes it a bit easier to use in the CLI and snapshot tests.
2023-09-25 07:59:41 -07:00
Jim Blandy
7060246357 Give convert_glsl_folder's output more consistent names.
Don't replace dots with dashes in the output filenames for no reason.
Instead, give them names consistent with those generated by
`write_output_glsl`.
2023-09-25 07:59:41 -07:00
Jim Blandy
bc0fc97b26 Delete output files no longer generated by snapshot tests. 2023-09-25 07:59:41 -07:00
Evan Mark Hopkins
dc3d2b1e78 [glsl-out] Polyfill frexp 2023-09-25 13:17:50 +02:00
Jim Blandy
711aa1a834 snapshots: convert_spv: Don't validate the module twice.
Remove the call to `Validator::validate` in `convert_spv`, since it
directly follows the call to `check_targets`, which also called
`Validator::validate`.

The only difference between the two is whether `Parameters::god_mode`
is respected, but this difference doesn't seem to have been
deliberate: at the time the call to `check_targets` was added to
`convert_spv` (5f21cf360, 2021-02-17), the two calls were exactly the
same.
2023-09-25 12:25:15 +02:00
Jim Blandy
57bebbcd20 [wgsl-in] Use deterministic ordering for dependency ordering.
Use `FastIndexSet`, rather than `FastHashSet`, for tracking global
declarations' dependencies, so that the order in which functions are
inserted into the `Module` is not dependent on the hash function.
2023-09-21 23:18:18 -07:00
Jim Blandy
1b1ea37f15 [spv-out] Use FastIndexMap for Frontend::switch_cases. 2023-09-21 21:37:32 -07:00
Jim Blandy
89523aec08 Use FastIndexMap for SpecialTypes::predeclared_types. 2023-09-21 21:37:32 -07:00
Jim Blandy
6a254d904d [wgsl-in] Use FastIndexMap for temporary named expressions table. 2023-09-21 21:37:32 -07:00
Jim Blandy
ae0423835d Introduce FastIndexMap type alias, and use it for NamedExpressions. 2023-09-21 21:37:32 -07:00