Commit Graph

1039 Commits

Author SHA1 Message Date
Gordon-F
24b2c548bd [hlsl-out] Add note about entry points in ReflectionInfo 2021-06-26 13:15:44 -04:00
Jim Blandy
c156fa9ad3 [spv-out] Properly reset Writers between module writes.
A single `Writer` can be reused to convert any number of Naga IR modules to
SPIR-V. This lets us reuse the heap allocations, but makes us responsible for
resetting the state of the `Writer` fully between modules. The old code
neglected to clear several different fields: logical_layout (all fields),
lookup_type, and cached_constants.

This commit uses Rust struct literal expressions to construct the re-initialized
`Writer`, which makes the compiler check that each field has been handled.

It also introduces a policy limiting how much storage will be retained, so that
processing the occasional whale doesn't leave us with leviathan buffers
permanently.
2021-06-26 12:54:53 -04:00
Jim Blandy
f0d41c3fd6 [spv-out] Track block termination statically.
Rather than giving `Block` an optional `terminator` field in addition to its
`body`, track block termination statically, with two types:

- `Block` is a block without a termination instruction. This is what most code
  generation functions operate on.

- `TerminatedBlock` is a block with a termination instruction. This is what
  `Function::blocks` holds.

The `Function::consume` method takes a `Block` by value, together with a
termination instruction, and turns it into a `TerminatedBlock`.

This lets us remove some unwraps and awkward conditions.

As part of this change, `Writer::write_block` no longer hits an `unimplemented!`
for Naga statements following `Break`, `Return`, and so on. Instead, it simply
doesn't emit code for them, which is a correct translation. If we want to forbid
these, we should handle that in validation instead.
2021-06-26 12:45:47 -04:00
Igor Shaposhnik
1f42d4f227 Fix CI validation tasks 2021-06-24 17:26:35 -04:00
Gordon-F
a8119f005e Add extra fragment entry point to wgsl quad snapshot 2021-06-24 10:47:17 -04:00
Gordon-F
e28344edbb [hlsl-out] Return entry points name to users 2021-06-24 10:47:17 -04:00
Gordon-F
391983459a [hlsl-out] Add enum with supported shader models 2021-06-24 10:47:17 -04:00
Gordon-F
c9a782f8d6 [hlsl-out] Fix panic with shader with multiple entry points without argument 2021-06-24 10:47:17 -04:00
Gordon-F
1c5d538ab4 [glsl-out] Add entry point name to snapshot file name 2021-06-24 10:47:17 -04:00
Gordon-F
64b9e45015 [msl-out] Add type for backend result 2021-06-23 11:16:45 -04:00
Jonathan Behrens
42f1f37741 [glsl-in] Deduplicate constants so array types match 2021-06-23 11:13:40 -04:00
Gordon-F
0a957f9427 [wgsl-out] Reduce global import usage 2021-06-23 11:10:12 -04:00
Gordon-F
1d4f2305b0 [msl-out] Reduce global import usage 2021-06-23 11:10:12 -04:00
Gordon-F
9e245d1fde [hlsl-out] Reduce global import usage 2021-06-23 11:10:12 -04:00
Gordon-F
7eeab393b2 [glsl-out] Reduce global import usage 2021-06-23 11:10:12 -04:00
Igor Shaposhnik
a5874eb0cf [wgsl-out] Fix Pointer writing 2021-06-22 12:29:14 -04:00
Gordon-F
0292a2897a Move FunctionCtx into back module 2021-06-22 10:23:27 -04:00
Gordon-F
ec6b18a782 [glsl-out] Refactor FunctionCtx 2021-06-22 10:23:27 -04:00
Dzmitry Malyshau
064263272c Refactor control flow validation, allow break in switches 2021-06-22 00:24:50 -04:00
Gordon-F
9b823c1b60 [hlsl-out] Implement Access and Unary expressions 2021-06-21 16:41:00 -04:00
João Capucho
d3fe1c978b [glsl-in] Add support for precision qualifiers 2021-06-21 21:37:08 +01:00
João Capucho
898c2e7c68 [glsl-in] Use macro for qualifier match 2021-06-21 21:37:08 +01:00
João Capucho
93436047f3 [glsl-in] Fix builtin types 2021-06-21 21:37:08 +01:00
Igor Shaposhnik
3a4d6fa295 Reduce code duplication between backends 2021-06-21 15:33:56 -04:00
Jim Blandy
548cde4701 Clear Validator::valid_expression_list before validating each function.
If validation fails, `Validator` may be left with entries in
`valid_expression_list` and `valid_expression_set`. The validator does clear the
set before examining a function's body, but not the list, which means a
long-lived `Validator` could accumulate an unbounded amount of garbage in the
list.

(Minor cleanup: use structural update syntax where appropriate.)
2021-06-21 14:53:20 -04:00
João Capucho
cae71a788a [glsl-in] Support for vector scalar operations 2021-06-21 10:44:26 -04:00
João Capucho
ffe67139cd [glsl-in] Add support for mix with bool selectors 2021-06-20 23:11:16 -04:00
João Capucho
c152205c87 [glsl-in] arguments of opaque types are constant 2021-06-20 23:11:16 -04:00
João Capucho
01036e8f42 [glsl-in] Use crate::BOOL_WIDTH for booleans width 2021-06-20 23:11:16 -04:00
João Capucho
e7d712e608 [glsl-in] Apply constant binary ops to composites 2021-06-20 23:11:16 -04:00
João Capucho
60644504d8 [glsl-in] Implicit cast stores with ValuePointer 2021-06-20 23:11:16 -04:00
João Capucho
68609cdff8 [glsl-in] Implement textureSize 2021-06-20 23:11:16 -04:00
João Capucho
fd042e6f31 [glsl-in] Implement default for options 2021-06-20 23:11:16 -04:00
João Capucho
16d7c0e428 [glsl-in] Implement texelFetch 2021-06-20 23:11:16 -04:00
Jim Blandy
696ca340e0 Improve docs for TypeInner, valid::TypeFlags, and some internal types. 2021-06-20 12:18:50 -04:00
Jim Blandy
70016ce6e3 Address warnings about links from cargo doc --package naga. 2021-06-20 12:18:50 -04:00
Dzmitry Malyshau
70071228a3 [spv-out] don't OpConvert the same width 2021-06-20 01:27:58 -04:00
João Capucho
4bc4c60663 [glsl-in] Implicit casts for function calls 2021-06-19 13:58:21 -04:00
Gordon-F
6cdd332cef Reorganize test snapshot folder 2021-06-19 10:19:04 -04:00
Jim Blandy
c16f2097ad [spv-out]: Ensure array subscripts are in bounds. 2021-06-18 20:44:07 -04:00
Jim Blandy
a7cacab276 [spv-out] Move Writer type to back/spv/mod.rs.
The `impl` blocks for `Writer` and its associated types remain in spv/writer.rs.

There should be no substantive code changes in this commit, only moving code
around and adjusting `use` declarations to match.
2021-06-18 20:44:07 -04:00
Jim Blandy
9146942412 [spv-out]: Abstract out null constant creation. 2021-06-18 20:44:07 -04:00
Jim Blandy
ac92f09a48 [spv-out] Document is_intermediate. 2021-06-18 20:44:07 -04:00
Jim Blandy
1d0b3f3a75 Functions can take pointers to unsized structs, but no other unsized types. 2021-06-18 20:44:07 -04:00
Jim Blandy
fd3b2a93d4 access.wgsl: Make array mutable, and assign to an element. 2021-06-18 20:44:07 -04:00
Jim Blandy
b8724eb1fd Tweak access.wgsl to avoid #913 and make SPIR-V more distinctive. 2021-06-18 20:44:07 -04:00
Dzmitry Malyshau
8376bab562 Bump version to 0.5 naga-v0.5.0 2021-06-18 20:18:52 -04:00
Dzmitry Malyshau
f0f8a5f3ba Fix GLSL frontend clippy error 2021-06-18 20:18:52 -04:00
Dzmitry Malyshau
bfeab40c8d Changelog for v0.5 release 2021-06-18 20:18:52 -04:00
João Capucho
a1bd4a8053 [glsl-in] Allow structs as local type 2021-06-18 16:54:45 -04:00