mirror of
https://github.com/gfx-rs/wgpu.git
synced 2024-11-22 23:04:07 +00:00
9b7a965667
This proves a flag in msl::PipelineOptions that attempts to write all Metal vertex entry points to use a vertex pulling technique. It does this by: 1) Forcing the _buffer_sizes structure to be generated for all vertex entry points. The structure has additional buffer_size members that contain the byte sizes of the vertex buffers. 2) Adding new args to vertex entry points for the vertex id and/or the instance id and for the bound buffers. If there is an existing @builtin(vertex_index) or @builtin(instance_index) param, then no duplicate arg is created. 3) Adding code at the beginning of the function for vertex entry points to compare the vertex id or instance id against the lengths of all the bound buffers, and force an early-exit if the bounds are violated. 4) Extracting the raw bytes from the vertex buffer(s) and unpacking those bytes into the bound attributes with the expected types. 5) Replacing the varyings input and instead using the unpacked attributes to fill any structs-as-args that are rebuilt in the entry point. A new naga test is added which exercises this flag and demonstrates the effect of the transform. The msl generated by this test passes validation. Eventually this transformation will be the default, always-on behavior for Metal pipelines, though the flag may remain so that naga translation tests can be run with and without the tranformation.
53 KiB
53 KiB
Change Log
For changelogs after v0.14, see the wgpu changelog.
v0.14 (2023-10-25)
GENERAL
- Add support for const-expressions. (#2309) @teoxoy, @jimblandy
- Add support for the
rgb10a2uint
storage format. (#2525) @teoxoy - Implement module compaction for snapshot testing and the CLI. (#2472) @jimblandy
- Fix validation and GLSL parsing of
ldexp
. (#2449) @fornwall - Add support for dual source blending. (#2427) @freqmod
- Bump
indexmap
to v2. (#2426) @daxpedda - Bump MSRV to 1.65. (#2420) @jimblandy
API
- Split
UnaryOperator::Not
intoUnaryOperator::LogicalNot
&UnaryOperator::BitwiseNot
. (#2554) @teoxoy - Remove
IsFinite
&IsNormal
relational functions. (#2532) @teoxoy - Derive
PartialEq
onExpression
. (#2417) @robtfm - Use
FastIndexMap
forSpecialTypes::predeclared_types
. (#2495) @jimblandy
CLI
- Change
--generate-debug-symbols
from anoption
to aswitch
. (#2472) @jimblandy - Add support for
.{vert,frag,comp}.glsl
files. (#2462) @eliemichel
VALIDATOR
- Require
Capabilities::FLOAT64
for 64-bit floating-point literals. (#2567) @jimblandy - Add
Capabilities::CUBE_ARRAY_TEXTURES
. (#2530) @teoxoy - Disallow passing pointers to variables in the workgroup address space to functions. (#2507) @teoxoy
- Avoid OOM with large sparse resource bindings. (#2561) @teoxoy
- Require that
Function
andPrivate
variables beCONSTRUCTIBLE
. (#2545) @jimblandy - Disallow floating-point NaNs and infinities. (#2508) @teoxoy
- Temporarily disable uniformity analysis for the fragment stage. (#2515) @teoxoy
- Validate that
textureSampleBias
is only used in the fragment stage. (#2515) @teoxoy - Validate variable initializer for address spaces. (#2513) @teoxoy
- Prevent using multiple push constant variables in one entry point. (#2484) @andriyDev
- Validate
binding_array
variable address space. (#2422) @teoxoy - Validate storage buffer access. (#2415) @teoxoy
WGSL-IN
- Fix expected min arg count of
textureLoad
. (#2584) @teoxoy - Turn
Error::Other
intoError::Internal
, to help devs. (#2574) @jimblandy - Fix OOB typifier indexing. (#2570) @teoxoy
- Add support for the
bgra8unorm
storage format. (#2542 & #2550) @nical - Remove the
outerProduct
built-in function. (#2535) @teoxoy - Add support for
i32
overload of thesign
built-in function. (#2463) @fornwall - Properly implement
modf
andfrexp
. (#2454) @fornwall - Add support for scalar overloads of
all
&any
built-in functions. (#2445) @fornwall - Don't splat the left hand operand of a binary operation if it's not a scalar. (#2444) @fornwall
- Avoid splatting all binary operator expressions. (#2440) @fornwall
- Error on repeated or missing
@workgroup_size()
. (#2435) @fornwall - Error on repeated attributes. (#2428) @fornwall
- Fix error message for invalid
texture{Load,Store}()
on arrayed textures. (#2432) @fornwall
SPV-IN
- Disable
Modf
&Frexp
and translateModfStruct
&FrexpStruct
to their IR equivalents. (#2527) @teoxoy - Don't advertise support for
Capability::ImageMSArray
&Capability::InterpolationFunction
. (#2529) @teoxoy - Fix
OpImageQueries
to allow Uints. (#2404) @evahop
GLSL-IN
- Disable
modf
&frexp
. (#2527) @teoxoy
SPV-OUT
- Require
ClipDistance
&CullDistance
capabilities if necessary. (#2528) @teoxoy - Change
naga::back::spv::DebugInfo::file_name
to a&Path
. (#2501) @jimblandy - Always give structs with runtime arrays a
Block
decoration. (#2455) @TheoDulka - Decorate the result of the
OpLoad
withNonUniform
(not the access chain) when loading images/samplers (resources in the Handle address space). (#2422) @teoxoy - Cache
OpConstantNull
. (#2414) @evahop
MSL-OUT
- Add and fix minimum Metal version checks for optional functionality. (#2486) @teoxoy
- Make varyings' struct members unique. (#2521) @evahop
- Add experimental vertex pulling transform flag. (#5254) @bradwerth
GLSL-OUT
- Cull functions that should not be available for a given stage. (#2531) @teoxoy
- Rename identifiers containing double underscores. (#2510) @evahop
- Polyfill
frexp
. (#2504) @evahop - Add built-in functions to keywords. (#2410) @fornwall
WGSL-OUT
- Generate correct code for bit complement on integers. (#2548) @jimblandy
- Don't include type parameter in splat expressions. (#2469) @jimblandy
v0.13 (2023-07-21)
GENERAL
- Move from
make
tocargo xtask
workflows. (#2297) @ErichDonGubler - Omit non referenced expressions from output. (#2378) @teoxoy
- Bump
bitflags
to v2. (#2358) @daxpedda - Implement
workgroupUniformLoad
. (#2201) @DJMcNab
API
- Expose early depth test field. (#2393) @Joeoc2001
- Split image bounds check policy. (#2265) @teoxoy
- Change type of constant sized arrays to
NonZeroU32
. (#2337) @teoxoy - Introduce
GlobalCtx
. (#2335) @teoxoy - Introduce
Expression::Literal
. (#2333) @teoxoy - Introduce
Expression::ZeroValue
. (#2332) @teoxoy - Add support for const-expressions (only at the API level, functionality is still WIP). (#2266) @teoxoy, @jimblandy
DOCS
- Document which expressions are in scope for a
break_if
expression. (#2326) @jimblandy
VALIDATOR
- Don't
use std::opsIndex
, used only when"validate"
is on. (#2383) @jimblandy - Remove unneeded
ConstantError::Unresolved{Component,Size}
. (#2330) @ErichDonGubler - Remove
TypeError::UnresolvedBase
. (#2308) @ErichDonGubler
WGSL-IN
- Error on param redefinition. (#2342) @SparkyPotato
SPV-IN
- Improve documentation for SPIR-V control flow parsing. (#2324) @jimblandy
- Obey the
is_depth
field ofOpTypeImage
. (#2341) @expenses - Convert conditional backedges to
break if
. (#2290) @eddyb
GLSL-IN
- Support commas in structure definitions. (#2400) @fornwall
SPV-OUT
- Add debug info. (#2379) @wicast
- Use
IndexSet
instead ofHashSet
for iterated sets (capabilities/extensions). (#2389) @eddyb - Support array bindings of buffers. (#2282) @kvark
MSL-OUT
- Rename
allow_point_size
toallow_and_force_point_size
. (#2280) @teoxoy - Initialize arrays inline. (#2331) @teoxoy
HLSL-OUT
- Implement Pack/Unpack for HLSL. (#2353) @Elabajaba
- Complete HLSL reserved symbols. (#2367) @teoxoy
- Handle case insensitive FXC keywords. (#2347) @PJB3005
- Fix return type for firstbitlow/high. (#2315) @evahop
GLSL-OUT
textureSize
level must be a signed integer. (#2397) @nical- Fix functions with array return type. (#2382) @Gordon-F
WGSL-OUT
- Output
@interpolate(flat)
attribute for integer locations. (#2318) @expenses
v0.12.3 (2023-07-09)
WGSL-OUT
- (Backport) Output
@interpolate(flat)
attribute for integer locations. (#2318) @expenses
v0.12.2 (2023-05-30)
SPV-OUT
- (Backport) Support array bindings of buffers. (#2282) @kvark
v0.12.1 (2023-05-18)
SPV-IN
- (Backport) Convert conditional backedges to
break if
. (#2290) @eddyb
v0.12 (2023-04-19)
GENERAL
- Allow
array_index
to be unsigned. (#2298) @daxpedda - Add ray query support. (#2256) @kvark
- Add partial derivative builtins. (#2277) @evahop
- Skip
gl_PerVertex
unused builtins in the SPIR-V frontend. (#2272) @teoxoy - Differentiate between
i32
andu32
in switch statement cases. (#2269) @evahop - Fix zero initialization of workgroup memory. (#2259) @teoxoy
- Add
countTrailingZeros
. (#2243) @gents83 - Fix texture built-ins where u32 was expected. (#2245) @evahop
- Add
countLeadingZeros
. (#2226) @evahop - [glsl/hlsl-out] Write sizes of arrays behind pointers in function arguments. (#2250) @pluiedev
VALIDATOR
- Validate vertex stage returns the position built-in. (#2264) @teoxoy
- Enforce discard is only used in the fragment stage. (#2262) @Uriopass
- Add
Capabilities::MULTISAMPLED_SHADING
. (#2255) @teoxoy - Add
Capabilities::EARLY_DEPTH_TEST
. (#2255) @teoxoy - Add
Capabilities::MULTIVIEW
. (#2255) @teoxoy - Improve forward declaration validation. (#2232) @JCapucho
WGSL-IN
- Use
alias
instead oftype
for type aliases. (#2299) @FL33TW00D - Add predeclared vector and matrix type aliases. (#2251) @evahop
- Improve invalid assignment diagnostic. (#2233) @SparkyPotato
- Expect semicolons wherever required. (#2233) @SparkyPotato
- Fix panic on invalid zero array size. (#2233) @SparkyPotato
- Check for leading
{
while parsing a block. (#2233) @SparkyPotato
SPV-IN
- Don't apply interpolation to fragment shaders outputs. (#2239) @JCapucho
GLSL-IN
- Add switch implicit type conversion. (#2273) @evahop
- Document some fields of
naga::front::glsl::context::Context
. (#2244) @jimblandy - Perform output parameters implicit casts. (#2063) @JCapucho
- Add
not
vector relational builtin. (#2227) @JCapucho - Add double overloads for relational vector builtins. (#2227) @JCapucho
- Add bool overloads for relational vector builtins. (#2227) @JCapucho
SPV-OUT
- Fix invalid spirv being generated from integer dot products. (#2291) @PyryM
- Fix adding illegal decorators on fragment outputs. (#2286) @Wumpf
- Fix
countLeadingZeros
impl. (#2258) @teoxoy - Cache constant composites. (#2257) @evahop
- Support SPIR-V version 1.4. (#2230) @kvark
MSL-OUT
- Replace
per_stage_map
withper_entry_point_map
(#2237) @armansito - Update
firstLeadingBit
for signed integers (#2235) @evahop
HLSL-OUT
- Use
Interlocked<op>
intrinsic for atomic integers (#2294) (#2294) @ErichDonGubler - Document storage access generation. (#2295) @jimblandy
- Emit constructor functions for arrays. (#2281) @ErichDonGubler
- Clear
named_expressions
inserted by duplicated blocks. (#2116) @teoxoy
GLSL-OUT
- Skip
invariant
forgl_FragCoord
on WebGL2. (#2254) @grovesNL - Inject default
gl_PointSize = 1.0
in vertex shaders ifFORCE_POINT_SIZE
option was set. (#2223) @REASY
v0.11.1 (2023-05-18)
SPV-IN
- (Backport) Convert conditional backedges to
break if
. (#2290) @eddyb
v0.11 (2023-01-25)
API
- Add handle validation pass to
Validator
(#2090) @ErichDonGubler - Add
Range::new_from_bounds
(#2148) @robtfm
DOCS
- Fix docs for
Emit
statements (#2208) @jimblandy - Fix invalid
<...>
URLs with code spans (#2176) @ErichDonGubler - Explain how case clauses with multiple selectors are supported (#2126) @teoxoy
- Document
EarlyDepthTest
andConservativeDepth
syntax (#2132) @coreh
VALIDATOR
- Allow
u32
coordinates fortextureStore
/textureLoad
(#2172) @PENGUINLIONG - Fix array being flagged as constructible when its base isn't (#2111) @teoxoy
- Add
type_flags
toModuleInfo
(#2111) @teoxoy - Remove overly restrictive array stride check (#2215) @fintelia
- Let the uniformity analysis trust the handle validation pass (#2200) @jimblandy
- Fix warnings when building tests without validation (#2177) @jimblandy
- Add
ValidationFlags::BINDINGS
(#2156) @kvark - Fix
textureGather
ontexture_2d<u32/i32>
(#2138) @JMS55
ALL (FRONTENDS/BACKENDS)
ALL BACKENDS
- Add support for zero-initializing workgroup memory (#2111) @teoxoy
WGSL-IN
- Implement module-level scoping (#2075) @SparkyPotato
- Remove
isFinite
andisNormal
(#2218) @evahop - Update inverse hyperbolic built-ins (#2218) @evahop
- Add
refract
built-in (#2218) @evahop - Update reserved keywords (#2130) @teoxoy
- Remove non-32bit integers (#2146) @teoxoy
- Remove
workgroup_size
builtin (#2147) @teoxoy - Remove fallthrough statement (#2126) @teoxoy
SPV-IN
- Support binding arrays (#2199) @Patryk27
GLSL-IN
- Fix position propagation in lowering (#2079) @JCapucho
- Update initializer list type when parsing (#2066) @JCapucho
- Parenthesize unary negations to avoid
--
(#2087) @ErichDonGubler
SPV-OUT
- Add support for
atomicCompareExchangeWeak
(#2165) @aweinstock314 - Omit extra switch case blocks where possible (#2126) @teoxoy
- Fix switch cases after default not being output (#2126) @teoxoy
MSL-OUT
- Don't panic on missing bindings (#2175) @kvark
- Omit extra switch case blocks where possible (#2126) @teoxoy
- Fix
textureGather
compatibility on macOS 10.13 (#2104) @xiaopengli89 - Fix incorrect atomic bounds check on metal back-end (#2099) @raphlinus
- Parenthesize unary negations to avoid
--
(#2087) @ErichDonGubler
HLSL-OUT
- Simplify
write_default_init
(#2111) @teoxoy - Omit extra switch case blocks where possible (#2126) @teoxoy
- Properly implement bitcast (#2097) @cwfitzgerald
- Fix storage access chain through a matrix (#2097) @cwfitzgerald
- Workaround FXC Bug in Matrix Indexing (#2096) @cwfitzgerald
- Parenthesize unary negations to avoid
--
(#2087) @ErichDonGubler
GLSL-OUT
- Introduce a flag to include unused items (#2205) @robtfm
- Use
fma
polyfill for versions below gles 320 (#2197) @teoxoy - Emit reflection info for non-struct uniforms (#2189) @Rainb0wCodes
- Introduce a new block for switch cases (#2126) @teoxoy
WGSL-OUT
- Write correct scalar kind when
width != 4
(#1514) @fintelia
v0.10.1 (2023-06-21)
SPV-OUT
- Backport #2389 (Use
IndexSet
instead ofHashSet
for iterated sets (capabilities/extensions)) by @eddyb, @jimblandy in https://github.com/gfx-rs/naga/pull/2391
SPV-IN
- Backport #2290 (Convert conditional backedges to
break if
) by @eddyb in https://github.com/gfx-rs/naga/pull/2387
v0.10 (2022-10-05)
- Make termcolor dependency optional by @AldaronLau in https://github.com/gfx-rs/naga/pull/2014
- Fix clippy lints for 1.63 by @JCapucho in https://github.com/gfx-rs/naga/pull/2026
- Saturate by @evahop in https://github.com/gfx-rs/naga/pull/2025
- Use
Option::as_deref
as appropriate. by @jimblandy in https://github.com/gfx-rs/naga/pull/2040 - Explicitly enable std for indexmap by @maxammann in https://github.com/gfx-rs/naga/pull/2062
- Fix compiler warning by @Gordon-F in https://github.com/gfx-rs/naga/pull/2074
API
- Implement
Clone
forModule
by @daxpedda in https://github.com/gfx-rs/naga/pull/2013 - Remove the glsl-validate feature by @JCapucho in https://github.com/gfx-rs/naga/pull/2045
DOCS
- Document arithmetic binary operation type rules. by @jimblandy in https://github.com/gfx-rs/naga/pull/2051
VALIDATOR
- Add
emit_to_{stderr,string}
helpers to validation error by @nolanderc in https://github.com/gfx-rs/naga/pull/2012 - Check regular functions don't have bindings by @JCapucho in https://github.com/gfx-rs/naga/pull/2050
WGSL-IN
- Update reserved WGSL keywords by @norepimorphism in https://github.com/gfx-rs/naga/pull/2009
- Implement lexical scopes by @JCapucho in https://github.com/gfx-rs/naga/pull/2024
- Rename
Scope
toRule
, since we now have lexical scope. by @jimblandy in https://github.com/gfx-rs/naga/pull/2042 - Splat on compound assignments by @JCapucho in https://github.com/gfx-rs/naga/pull/2049
- Fix bad span in assignment lhs error by @JCapucho in https://github.com/gfx-rs/naga/pull/2054
- Fix inclusion of trivia in spans by @SparkyPotato in https://github.com/gfx-rs/naga/pull/2055
- Improve assignment diagnostics by @SparkyPotato in https://github.com/gfx-rs/naga/pull/2056
- Break up long string, reformat rest of file. by @jimblandy in https://github.com/gfx-rs/naga/pull/2057
- Fix line endings on wgsl reserved words list. by @jimblandy in https://github.com/gfx-rs/naga/pull/2059
GLSL-IN
- Add support for .length() by @SpaceCat-Chan in https://github.com/gfx-rs/naga/pull/2017
- Fix missing stores for local declarations by @adeline-sparks in https://github.com/gfx-rs/naga/pull/2029
- Migrate to
SymbolTable
by @JCapucho in https://github.com/gfx-rs/naga/pull/2044 - Update initializer list type when parsing by @JCapucho in https://github.com/gfx-rs/naga/pull/2066
SPV-OUT
- Don't decorate varyings with interpolation modes at pipeline start/end by @nical in https://github.com/gfx-rs/naga/pull/2038
- Decorate integer builtins as Flat in the spirv writer by @nical in https://github.com/gfx-rs/naga/pull/2035
- Properly combine the fixes for #2035 and #2038. by @jimblandy in https://github.com/gfx-rs/naga/pull/2041
- Don't emit no-op
OpBitCast
instructions. by @jimblandy in https://github.com/gfx-rs/naga/pull/2043
HLSL-OUT
- Use the namer to sanitise entrypoint input/output struct names by @expenses in https://github.com/gfx-rs/naga/pull/2001
- Handle Unpack2x16float in hlsl by @expenses in https://github.com/gfx-rs/naga/pull/2002
- Add support for push constants by @JCapucho in https://github.com/gfx-rs/naga/pull/2005
DOT-OUT
- Improvements by @JCapucho in https://github.com/gfx-rs/naga/pull/1987
v0.9 (2022-06-30)
API
- Rename
TypeFlags
INTERFACE
/HOST_SHARED
toIO_SHARED
/HOST_SHAREABLE
(#1872) @jimblandy - Expose more error information (#1827, #1937) @jakobhellermann @nical @jimblandy
- Do not unconditionally make error output colorful (#1707) @rhysd
- Rename
StorageClass
toAddressSpace
(#1699) @kvark - Add a way to emit errors to a path (#1640) @laptou
CLI
- Add
bincode
representation (#1729) @kvark - Include file path in WGSL parse error (#1708) @rhysd
- Add
--version
flag (#1706) @rhysd - Support reading input from stdin via
--stdin-file-path
(#1701) @rhysd - Use
panic = "abort"
(#1597) @jrmuizel
DOCS
- Standardize some docs (#1660) @NoelTautges
- Document
TypeInner::BindingArray
(#1859) @jimblandy - Clarify accepted types for
Expression::AccessIndex
(#1862) @NoelTautges - Document
proc::layouter
(#1693) @jimblandy - Document Naga's promises around validation and panics (#1828) @jimblandy
FunctionInfo
doc fixes (#1726) @jimblandy
VALIDATOR
- Forbid returning pointers and atomics from functions (#911) @jimblandy
- Let validation check for more unsupported builtins (#1962) @jimblandy
- Fix
Capabilities::SAMPLER_NON_UNIFORM_INDEXING
bitflag (#1915) @cwfitzgerald - Properly check that user-defined IO uses IO-shareable types (#912) @jimblandy
- Validate
ValuePointer
exactly like aPointer
to aScalar
(#1875) @jimblandy - Reject empty structs (#1826) @jimblandy
- Validate uniform address space layout constraints (#1812) @teoxoy
- Improve
AddressSpace
related error messages (#1710) @kvark
WGSL-IN
Main breaking changes
- Commas to separate struct members (comma after last member is optional)
struct S { a: f32; b: i32; }
->struct S { a: f32, b: i32 }
- Attribute syntax
[[binding(0), group(0)]]
->@binding(0) @group(0)
- Entry point stage attributes
@stage(vertex)
->@vertex
@stage(fragment)
->@fragment
@stage(compute)
->@compute
- Function renames
smoothStep
->smoothstep
findLsb
->firstTrailingBit
findMsb
->firstLeadingBit
Specification Changes (relevant changes have also been applied to the WGSL backend)
- Add support for
break if
(#1993) @JCapucho - Update number literal format (#1863) @teoxoy
- Allow non-ascii characters in identifiers (#1849) @teoxoy
- Update reserved keywords (#1847, #1870, #1905) @teoxoy @Gordon-F
- Update entry point stage attributes (#1833) @Gordon-F
- Make colon in case optional (#1801) @Gordon-F
- Rename
smoothStep
tosmoothstep
(#1800) @Gordon-F - Make semicolon after struct declaration optional (#1791) @stshine
- Use commas to separate struct members instead of semicolons (#1773) @Gordon-F
- Rename
findLsb
/findMsb
tofirstTrailingBit
/firstLeadingBit
(#1735) @kvark - Make parenthesis optional for
if
andswitch
statements (#1725) @Gordon-F - Declare attributes with
@attrib
instead of[[attrib]]
(#1676) @kvark - Allow non-structure buffer types (#1682) @kvark
- Remove
stride
attribute (#1681) @kvark
Improvements
- Implement complete validation for size and align attributes (#1979) @teoxoy
- Implement
firstTrailingBit
/firstLeadingBit
u32 overloads (#1865) @teoxoy - Add error for non-floating-point matrix (#1917) @grovesNL
- Implement partial vector & matrix identity constructors (#1916) @teoxoy
- Implement phony assignment (#1866, #1869) @teoxoy
- Fix being able to match
~=
as LogicalOperation (#1849) @teoxoy - Implement Binding Arrays (#1845) @cwfitzgerald
- Implement unary vector operators (#1820) @teoxoy
- Implement zero value constructors and constructors that infer their type from their parameters (#1790) @teoxoy
- Implement invariant attribute (#1789, #1822) @teoxoy @jimblandy
- Implement increment and decrement statements (#1788, #1912) @teoxoy
- Implement
while
loop (#1787) @teoxoy - Fix array size on globals (#1717) @jimblandy
- Implement integer vector overloads for
dot
function (#1689) @francesco-cattoglio - Implement block comments (#1675) @kocsis1david
- Implement assignment binary operators (#1662) @kvark
- Implement
radians
/degrees
builtin functions (#1627) @encounter - Implement
findLsb
/findMsb
builtin functions (#1473) @fintelia - Implement
textureGather
/textureGatherCompare
builtin functions (#1596) @kvark
SPV-IN
- Implement
OpBitReverse
andOpBitCount
(#1954) @JCapucho - Add
MultiView
toSUPPORTED_CAPABILITIES
(#1934) @expenses - Translate
OpSMod
andOpFMod
correctly (#1867, #1995) @teoxoy @JCapucho - Error on unsupported
MatrixStride
(#1805) @teoxoy - Align array stride for undecorated arrays (#1724) @JCapucho
GLSL-IN
- Don't allow empty last case in switch (#1981) @JCapucho
- Fix last case fallthrough and empty switch (#1981) @JCapucho
- Splat inputs for smoothstep if needed (#1976) @JCapucho
- Fix parameter not changing to depth (#1967) @JCapucho
- Fix matrix multiplication check (#1953) @JCapucho
- Fix panic (stop emitter in conditional) (#1952) @JCapucho
- Translate
mod
fn correctly (#1867) @teoxoy - Make the ternary operator behave as an if (#1877) @JCapucho
- Add support for
clamp
function (#1502) @sjinno - Better errors for bad constant expression (#1501) @sjinno
- Error on a
matCx2
used with thestd140
layout (#1806) @teoxoy - Allow nested accesses in lhs positions (#1794) @JCapucho
- Use forced conversions for vector/matrix constructors (#1796) @JCapucho
- Add support for
barrier
function (#1793) @fintelia - Fix panic (resume expression emit after
imageStore
) (#1795) @JCapucho - Allow multiple array specifiers (#1780) @JCapucho
- Fix memory qualifiers being inverted (#1779) @JCapucho
- Support arrays as input/output types (#1759) @JCapucho
- Fix freestanding constructor parsing (#1758) @JCapucho
- Fix matrix - scalar operations (#1757) @JCapucho
- Fix matrix - matrix division (#1757) @JCapucho
- Fix matrix comparisons (#1757) @JCapucho
- Add support for
texelFetchOffset
(#1746) @JCapucho - Inject
sampler2DMSArray
builtins on use (#1737) @JCapucho - Inject
samplerCubeArray
builtins on use (#1736) @JCapucho - Add support for image builtin functions (#1723) @JCapucho
- Add support for image declarations (#1723) @JCapucho
- Texture builtins fixes (#1719) @JCapucho
- Type qualifiers rework (#1713) @JCapucho
texelFetch
accept multisampled textures (#1715) @JCapucho- Fix panic when culling nested block (#1714) @JCapucho
- Fix composite constructors (#1631) @JCapucho
- Fix using swizzle as out arguments (#1632) @JCapucho
SPV-OUT
- Implement
reverseBits
andcountOneBits
(#1897) @hasali19 - Use
OpCopyObject
for matrix identity casts (#1916) @teoxoy - Use
OpCopyObject
for bool - bool conversion due toOpBitcast
not being feasible for booleans (#1916) @teoxoy - Zero init variables in function and private address spaces (#1871) @teoxoy
- Use
SRem
instead ofSMod
(#1867) @teoxoy - Add support for integer vector - scalar multiplication (#1820) @teoxoy
- Add support for matrix addition and subtraction (#1820) @teoxoy
- Emit required decorations on wrapper struct types (#1815) @jimblandy
- Decorate array and struct type layouts unconditionally (#1815) @jimblandy
- Fix wrong
MatrixStride
formatCx2
andmat2xR
(#1781) @teoxoy - Use
OpImageQuerySize
for MS images (#1742) @JCapucho
MSL-OUT
- Insert padding initialization for global constants (#1988) @teoxoy
- Don't rely on cached expressions (#1975) @JCapucho
- Fix pointers to private or workgroup address spaces possibly being read only (#1901) @teoxoy
- Zero init variables in function address space (#1871) @teoxoy
- Make binding arrays play nice with bounds checks (#1855) @cwfitzgerald
- Permit
invariant
qualifier on vertex shader outputs (#1821) @jimblandy - Fix packed
vec3
stores (#1816) @teoxoy - Actually test push constants to be used (#1767) @kvark
- Properly rename entry point arguments for struct members (#1766) @jimblandy
- Qualify read-only storage with const (#1763) @kvark
- Fix not unary operator for integer scalars (#1760) @vincentisambart
- Add bounds checks for
ImageLoad
andImageStore
(#1730) @jimblandy - Fix resource bindings for non-structures (#1718) @kvark
- Always check whether _buffer_sizes arg is needed (#1717) @jimblandy
- WGSL storage address space should always correspond to MSL device address space (#1711) @wtholliday
- Mitigation for MSL atomic bounds check (#1703) @glalonde
HLSL-OUT
- More
matCx2
fixes (#1989) (#1989) @teoxoy - Fix fallthrough in switch statements (#1920) @teoxoy
- Fix missing break statements (#1919) @teoxoy
- Fix
countOneBits
andreverseBits
for signed integers (#1928) @hasali19 - Fix array constructor return type (#1914) @teoxoy
- Fix hlsl output for writes to scalar/vector storage buffer (#1903) @hasali19
- Use
fmod
instead of%
(#1867) @teoxoy - Use wrapped constructors when loading from storage address space (#1893) @teoxoy
- Zero init struct constructor (#1890) @teoxoy
- Flesh out matrix handling documentation (#1850) @jimblandy
- Emit
row_major
qualifier on matrix uniform globals (#1846) @jimblandy - Fix bool splat (#1820) @teoxoy
- Add more padding when necessary (#1814) @teoxoy
- Support multidimensional arrays (#1814) @teoxoy
- Don't output interpolation modifier if it's the default (#1809) @NoelTautges
- Fix
matCx2
translation for uniform buffers (#1802) @teoxoy - Fix modifiers not being written in the vertex output and fragment input structs (#1789) @teoxoy
- Fix matrix not being declared as transposed (#1784) @teoxoy
- Insert padding between struct members (#1786) @teoxoy
- Fix not unary operator for integer scalars (#1760) @vincentisambart
GLSL-OUT
- Fix vector bitcasts (#1966) (#1966) @expenses
- Perform casts in int only math functions (#1978) @JCapucho
- Don't rely on cached expressions (#1975) @JCapucho
- Fix type error for
countOneBits
implementation (#1897) @hasali19 - Fix storage format for
Rgba8Unorm
(#1955) @JCapucho - Implement bounds checks for
ImageLoad
(#1889) @JCapucho - Fix feature search in expressions (#1887) @JCapucho
- Emit globals of any type (#1823) @jimblandy
- Add support for boolean vector
~
,|
and&
ops (#1820) @teoxoy - Fix array function arguments (#1814) @teoxoy
- Write constant sized array type for uniform (#1768) @hatoo
- Texture function fixes (#1742) @JCapucho
- Push constants use anonymous uniforms (#1683) @JCapucho
- Add support for push constant emulation (#1672) @JCapucho
- Skip unsized types if unused (#1649) @kvark
- Write struct and array initializers (#1644) @JCapucho
v0.8.5 (2022-01-25)
MSL-OUT
- Make VS-output positions invariant on even more systems (#1697) @cwfitzgerald
- Improve support for point primitives (#1696) @kvark
v0.8.4 (2022-01-24)
MSL-OUT
- Make VS-output positions invariant if possible (#1687) @kvark
GLSL-OUT
- Fix
floatBitsToUint
spelling (#1688) @cwfitzgerald - Call proper memory barrier functions (#1680) @francesco-cattoglio
v0.8.3 (2022-01-20)
- Don't pin
indexmap
version (#1666) @a1phyr
MSL-OUT
- Fix support for point primitives (#1674) @kvark
GLSL-OUT
- Fix sampler association (#1671) @JCapucho
v0.8.2 (2022-01-11)
VALIDATOR
- Check structure resource types (#1639) @kvark
WGSL-IN
- Improve type mismatch errors (#1658) @Gordon-F
SPV-IN
SPV-OUT
- Fix modulo operator (use
OpFRem
instead ofOpFMod
) (#1653) @JCapucho
MSL-OUT
v0.8.1 (2021-12-29)
API
- Make
WithSpan
clonable (#1620) @jakobhellermann
MSL-OUT
HLSL-OUT
GLSL-OUT
v0.8 (2021-12-18)
- development release for wgpu-0.12
- lots of fixes in all parts
- validator:
- now gated by
validate
feature - nicely detailed error messages with spans
- now gated by
- API:
- image gather operations
- WGSL-in:
- remove
[[block]]
attribute elseif
is removed in favor ofelse if
- remove
- MSL-out:
- full out-of-bounds checking
v0.7.3 (2021-12-14)
- API:
view_index
builtin
- GLSL-out:
- reflect textures without samplers
- SPV-out:
- fix incorrect pack/unpack
v0.7.2 (2021-12-01)
- validator:
- check stores for proper pointer class
- HLSL-out:
- fix stores into
mat3
- respect array strides
- fix stores into
- SPV-out:
- fix multi-word constants
- WGSL-in:
- permit names starting with underscores
- SPV-in:
- cull unused builtins
- support empty debug labels
- GLSL-in:
- don't panic on invalid integer operations
v0.7.1 (2021-10-12)
- implement casts from and to booleans in the backends
v0.7 (2021-10-07)
- development release for wgpu-0.11
- API:
- bit extraction and packing functions
- hyperbolic trigonometry functions
- validation is gated by a cargo feature
view_index
builtin- separate bounds checking policies for locals/buffers/textures
- IR:
- types and constants are guaranteed to be unique
- WGSL-in:
- new hex literal parser
- updated list of reserved words
- rewritten logic for resolving references and pointers
switch
can use unsigned selectors
- GLSL-in:
- better support for texture sampling
- better logic for auto-splatting scalars
- GLSL-out:
- fixed storage buffer layout
- fix module operator
- HLSL-out:
- fixed texture queries
- SPV-in:
- control flow handling is rewritten from scratch
- SPV-out:
- fully covered out-of-bounds checking
- option to emit point size
- option to clamp output depth
v0.6.3 (2021-09-08)
- Reduced heap allocations when generating WGSL, HLSL, and GLSL
- WGSL-in:
- support module-scope
let
type inference
- support module-scope
- SPV-in:
- fix depth sampling with projection
- HLSL-out:
- fix local struct construction
- GLSL-out:
- fix
select()
order
- fix
- SPV-out:
- allow working around Adreno issue with
OpName
- allow working around Adreno issue with
v0.6.2 (2021-09-01)
- SPV-out fixes:
- requested capabilities for 1D and cube images, storage formats
- handling
break
andcontinue
in aswitch
statement - avoid generating duplicate
OpTypeImage
types
- HLSL-out fixes:
- fix output struct member names
- MSL-out fixes:
- fix packing of fields in interface structs
- GLSL-out fixes:
- fix non-fallthrough
switch
cases
- fix non-fallthrough
- GLSL-in fixes:
- avoid infinite loop on invalid statements
v0.6.1 (2021-08-24)
- HLSL-out fixes:
- array arguments
- pointers to array arguments
- switch statement
- rewritten interface matching
- SPV-in fixes:
- array storage texture stores
- tracking sampling across function parameters
- updated petgraph dependencies
- MSL-out:
- gradient sampling
- GLSL-out:
- modulo operator on floats
v0.6 (2021-08-18)
- development release for wgpu-0.10
- API:
- atomic types and functions
- storage access is moved from global variables to the storage class and storage texture type
- new built-ins:
primitive_index
andnum_workgroups
- support for multi-sampled depth images
- WGSL:
select()
order of true/false is swapped
- HLSL backend is vastly improved and now usable
- GLSL frontend is heavily reworked
v0.5 (2021-06-18)
- development release for wgpu-0.9
- API:
- barriers
- dynamic indexing of matrices and arrays is only allowed on variables
- validator now accepts a list of IR capabilities to allow
- improved documentation
- Infrastructure:
- much richer test suite, focused around consuming or emitting WGSL
- lazy testing on large shader corpuses
- the binary is moved to a sub-crate "naga-cli"
- Frontends:
- GLSL frontend:
- rewritten from scratch and effectively revived, no longer depends on
pomelo
- only supports 440/450/460 versions for now
- has optional support for codespan messages
- rewritten from scratch and effectively revived, no longer depends on
- SPIRV frontend has improved CFG resolution (still with issues unresolved)
- WGSL got better error messages, workgroup memory support
- GLSL frontend:
- Backends:
- general: better expression naming and emitting
- new HLSL backend (in progress)
- MSL:
- support
ArraySize
expression - better texture sampling instructions
- support
- GLSL:
- multisampling on GLES
- WGSL is vastly improved and now usable
v0.4.2 (2021-05-28)
- SPIR-V frontend:
- fix image stores
- fix matrix stride check
- SPIR-V backend:
- fix auto-deriving the capabilities
- GLSL backend:
- support sample interpolation
- write out swizzled vector accesses
v0.4.1 (2021-05-14)
- numerous additions and improvements to SPIR-V frontend:
- int8, in16, int64
- null constant initializers for structs and matrices
OpArrayLength
,OpCopyMemory
,OpInBoundsAccessChain
,OpLogicalXxxEqual
- outer product
- fix struct size alignment
- initialize built-ins with default values
- fix read-only decorations on struct members
- fix struct size alignment in WGSL
- fix
fwidth
in WGSL - fix scalars arrays in GLSL backend
v0.4 (2021-04-29)
- development release for wgpu-0.8
- API:
- expressions are explicitly emitted with
Statement::Emit
- entry points have inputs in arguments and outputs in the result type
input
/output
storage classes are gone, butpush_constant
is addedInterpolation
is moved intoBinding::Location
variant- real pointer semantics with required
Expression::Load
TypeInner::ValuePointer
is added- image query expressions are added
- new
Statement::ImageStore
- all function calls are
Statement::Call
GlobalUse
is moved out into processingHeader
is removed- entry points are an array instead of a map
- new
Swizzle
andSplat
expressions - interpolation qualifiers are extended and required
- struct member layout is based on the byte offsets
- expressions are explicitly emitted with
- Infrastructure:
- control flow uniformity analysis
- texture-sampler combination gathering
CallGraph
processor is moved out intoglsl
backendInterface
is removed, instead the analysis producesModuleInfo
with all the derived info- validation of statement tree, expressions, and constants
- code linting is more strict for matches
- new GraphViz
dot
backend for pretty visualization of the IR - Metal support for inlined samplers
convert
example is transformed into the default binary target namednaga
- lots of frontend and backend fixes
v0.3.2 (2021-02-15)
- fix logical expression types
- fix FragDepth semantics
- spv-in:
- derive block status of structures
- spv-out:
- add lots of missing math functions
- implement discard
v0.3.1 (2021-01-31)
- wgsl:
- support constant array sizes
- spv-out:
- fix block decorations on nested structures
- fix fixed-size arrays
- fix matrix decorations inside structures
- implement read-only decorations
v0.3 (2021-01-30)
- development release for wgpu-0.7
- API:
- math functions
- type casts
- updated storage classes
- updated image sub-types
- image sampling/loading options
- storage images
- interpolation qualifiers
- early and conservative depth
- Processors:
- name manager
- automatic layout
- termination analysis
- validation of types, constants, variables, and entry points
v0.2 (2020-08-17)
- development release for wgpu-0.6
v0.1 (2020-02-26)
- initial release