wgpu/naga/CHANGELOG.md
Brad Werth 6cd387412f Remove vertex_pulling_transfrom from PipelineCompilationOptions.
This option was only evaluated for Metal backends, and now it's required
there so the option is going away. It is still configurable for tests
via the PipelineOptions struct, deserialized from .ron files.

This also fixes some type problems with the unpack functions in
writer.rs. Metal << operator extends operand to int-sized, which then
has to be cast back down to the real size before as_type bit conversion.
The math for the snorm values is corrected, in some cases using the
metal unpack_snorm2x16_to_float function because we can't directly
cast a bit-shifted ushort value to half.
2024-07-19 17:13:45 +02:00

54 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 into UnaryOperator::LogicalNot & UnaryOperator::BitwiseNot. (#2554) @teoxoy
  • Remove IsFinite & IsNormal relational functions. (#2532) @teoxoy
  • Derive PartialEq on Expression. (#2417) @robtfm
  • Use FastIndexMap for SpecialTypes::predeclared_types. (#2495) @jimblandy

CLI

  • Change --generate-debug-symbols from an option to a switch. (#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 and Private variables be CONSTRUCTIBLE. (#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 into Error::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 the sign built-in function. (#2463) @fornwall
  • Properly implement modf and frexp. (#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 translate ModfStruct & 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 with NonUniform (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
  • Fixup some generated MSL for vertex buffer unpack functions. (#5829) @bradwerth
  • Make vertex pulling transform on by default. (#5773) @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 to cargo 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 of OpTypeImage. (#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 of HashSet for iterated sets (capabilities/extensions). (#2389) @eddyb
  • Support array bindings of buffers. (#2282) @kvark

MSL-OUT

  • Rename allow_point_size to allow_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 and u32 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 of type 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 with per_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 for gl_FragCoord on WebGL2. (#2254) @grovesNL
  • Inject default gl_PointSize = 1.0 in vertex shaders if FORCE_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)

  • Move to the Rust 2021 edition (#2085) @ErichDonGubler
  • Bump MSRV to 1.63 (#2129) @teoxoy

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 and ConservativeDepth syntax (#2132) @coreh

VALIDATOR

  • Allow u32 coordinates for textureStore/textureLoad (#2172) @PENGUINLIONG
  • Fix array being flagged as constructible when its base isn't (#2111) @teoxoy
  • Add type_flags to ModuleInfo (#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 on texture_2d<u32/i32> (#2138) @JMS55

ALL (FRONTENDS/BACKENDS)

  • Support 16-bit unorm/snorm formats (#2210) @fintelia
  • Support gl_PointCoord (#2180) @Neo-Zhixing

ALL BACKENDS

  • Add support for zero-initializing workgroup memory (#2111) @teoxoy

WGSL-IN

  • Implement module-level scoping (#2075) @SparkyPotato
  • Remove isFinite and isNormal (#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

SPV-IN

v0.10 (2022-10-05)

API

DOCS

VALIDATOR

WGSL-IN

GLSL-IN

SPV-OUT

HLSL-OUT

DOT-OUT

v0.9 (2022-06-30)

  • Fix minimal-versions of dependencies (#1840) @teoxoy
  • Update MSRV to 1.56 (#1838) @teoxoy

API

  • Rename TypeFlags INTERFACE/HOST_SHARED to IO_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 to AddressSpace (#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 a Pointer to a Scalar (#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 to smoothstep (#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 to firstTrailingBit/firstLeadingBit (#1735) @kvark
  • Make parenthesis optional for if and switch 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 and OpBitCount (#1954) @JCapucho
  • Add MultiView to SUPPORTED_CAPABILITIES (#1934) @expenses
  • Translate OpSMod and OpFMod 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 the std140 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 and countOneBits (#1897) @hasali19
  • Use OpCopyObject for matrix identity casts (#1916) @teoxoy
  • Use OpCopyObject for bool - bool conversion due to OpBitcast not being feasible for booleans (#1916) @teoxoy
  • Zero init variables in function and private address spaces (#1871) @teoxoy
  • Use SRem instead of SMod (#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 for matCx2 and mat2xR (#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 and ImageStore (#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 and reverseBits 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

  • Implement more sign agnostic operations (#1651, #1650) @JCapucho

SPV-OUT

  • Fix modulo operator (use OpFRem instead of OpFMod) (#1653) @JCapucho

MSL-OUT

  • Fix texture1d accesses (#1647) @jimblandy
  • Fix data packing functions (#1637) @phoekz

v0.8.1 (2021-12-29)

API

  • Make WithSpan clonable (#1620) @jakobhellermann

MSL-OUT

  • Fix packed vec access (#1634) @kvark
  • Fix packed float support (#1630) @kvark

HLSL-OUT

  • Support arrays of matrices (#1629) @kvark
  • Use mad instead of fma function (#1580) @parasyte

GLSL-OUT

  • Fix conflicting names for globals (#1616) @Gordon-F
  • Fix fma function (#1580) @parasyte

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
  • API:
    • image gather operations
  • WGSL-in:
    • remove [[block]] attribute
    • elseif is removed in favor of else if
  • 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
  • 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
  • SPV-in:
    • fix depth sampling with projection
  • HLSL-out:
    • fix local struct construction
  • GLSL-out:
    • fix select() order
  • SPV-out:
    • allow working around Adreno issue with OpName

v0.6.2 (2021-09-01)

  • SPV-out fixes:
    • requested capabilities for 1D and cube images, storage formats
    • handling break and continue in a switch 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
  • 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 and num_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
    • SPIRV frontend has improved CFG resolution (still with issues unresolved)
    • WGSL got better error messages, workgroup memory support
  • Backends:
    • general: better expression naming and emitting
    • new HLSL backend (in progress)
    • MSL:
      • support ArraySize expression
      • better texture sampling instructions
    • 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, but push_constant is added
    • Interpolation is moved into Binding::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 processing
    • Header is removed
    • entry points are an array instead of a map
    • new Swizzle and Splat expressions
    • interpolation qualifiers are extended and required
    • struct member layout is based on the byte offsets
  • Infrastructure:
    • control flow uniformity analysis
    • texture-sampler combination gathering
    • CallGraph processor is moved out into glsl backend
    • Interface is removed, instead the analysis produces ModuleInfo 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 named naga
  • 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