For changelogs after v0.14, see the wgpu changelog.
- 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
- 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
- Change
--generate-debug-symbols
from anoption
to aswitch
. (#2472) @jimblandy - Add support for
.{vert,frag,comp}.glsl
files. (#2462) @eliemichel
- 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
- 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
- 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
- Disable
modf
&frexp
. (#2527) @teoxoy
- 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
- 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
- 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
- Generate correct code for bit complement on integers. (#2548) @jimblandy
- Don't include type parameter in splat expressions. (#2469) @jimblandy
- 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
- 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
- Document which expressions are in scope for a
break_if
expression. (#2326) @jimblandy
- 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
- Error on param redefinition. (#2342) @SparkyPotato
- 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
- Support commas in structure definitions. (#2400) @fornwall
- Add debug info. (#2379) @wicast
- Use
IndexSet
instead ofHashSet
for iterated sets (capabilities/extensions). (#2389) @eddyb - Support array bindings of buffers. (#2282) @kvark
- Rename
allow_point_size
toallow_and_force_point_size
. (#2280) @teoxoy - Initialize arrays inline. (#2331) @teoxoy
- 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
textureSize
level must be a signed integer. (#2397) @nical- Fix functions with array return type. (#2382) @Gordon-F
- Output
@interpolate(flat)
attribute for integer locations. (#2318) @expenses
- (Backport) Output
@interpolate(flat)
attribute for integer locations. (#2318) @expenses
- (Backport) Support array bindings of buffers. (#2282) @kvark
- (Backport) Convert conditional backedges to
break if
. (#2290) @eddyb
- 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
- 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
- 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
- Don't apply interpolation to fragment shaders outputs. (#2239) @JCapucho
- 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
- 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
- Replace
per_stage_map
withper_entry_point_map
(#2237) @armansito - Update
firstLeadingBit
for signed integers (#2235) @evahop
- 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
- 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
- (Backport) Convert conditional backedges to
break if
. (#2290) @eddyb
- Add handle validation pass to
Validator
(#2090) @ErichDonGubler - Add
Range::new_from_bounds
(#2148) @robtfm
- 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
- 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
- Add support for zero-initializing workgroup memory (#2111) @teoxoy
- 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
- Support binding arrays (#2199) @Patryk27
- Fix position propagation in lowering (#2079) @JCapucho
- Update initializer list type when parsing (#2066) @JCapucho
- Parenthesize unary negations to avoid
--
(#2087) @ErichDonGubler
- 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
- 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
- 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
- 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
- Write correct scalar kind when
width != 4
(#1514) @fintelia
SPV-OUT
- Backport #2389 (Use
IndexSet
instead ofHashSet
for iterated sets (capabilities/extensions)) by @eddyb, @jimblandy in gfx-rs/naga#2391
SPV-IN
- Backport #2290 (Convert conditional backedges to
break if
) by @eddyb in gfx-rs/naga#2387
- Make termcolor dependency optional by @AldaronLau in gfx-rs/naga#2014
- Fix clippy lints for 1.63 by @JCapucho in gfx-rs/naga#2026
- Saturate by @evahop in gfx-rs/naga#2025
- Use
Option::as_deref
as appropriate. by @jimblandy in gfx-rs/naga#2040 - Explicitly enable std for indexmap by @maxammann in gfx-rs/naga#2062
- Fix compiler warning by @Gordon-F in gfx-rs/naga#2074
API
- Implement
Clone
forModule
by @daxpedda in gfx-rs/naga#2013 - Remove the glsl-validate feature by @JCapucho in gfx-rs/naga#2045
DOCS
- Document arithmetic binary operation type rules. by @jimblandy in gfx-rs/naga#2051
VALIDATOR
- Add
emit_to_{stderr,string}
helpers to validation error by @nolanderc in gfx-rs/naga#2012 - Check regular functions don't have bindings by @JCapucho in gfx-rs/naga#2050
WGSL-IN
- Update reserved WGSL keywords by @norepimorphism in gfx-rs/naga#2009
- Implement lexical scopes by @JCapucho in gfx-rs/naga#2024
- Rename
Scope
toRule
, since we now have lexical scope. by @jimblandy in gfx-rs/naga#2042 - Splat on compound assignments by @JCapucho in gfx-rs/naga#2049
- Fix bad span in assignment lhs error by @JCapucho in gfx-rs/naga#2054
- Fix inclusion of trivia in spans by @SparkyPotato in gfx-rs/naga#2055
- Improve assignment diagnostics by @SparkyPotato in gfx-rs/naga#2056
- Break up long string, reformat rest of file. by @jimblandy in gfx-rs/naga#2057
- Fix line endings on wgsl reserved words list. by @jimblandy in gfx-rs/naga#2059
GLSL-IN
- Add support for .length() by @SpaceCat-Chan in gfx-rs/naga#2017
- Fix missing stores for local declarations by @adeline-sparks in gfx-rs/naga#2029
- Migrate to
SymbolTable
by @JCapucho in gfx-rs/naga#2044 - Update initializer list type when parsing by @JCapucho in gfx-rs/naga#2066
SPV-OUT
- Don't decorate varyings with interpolation modes at pipeline start/end by @nical in gfx-rs/naga#2038
- Decorate integer builtins as Flat in the spirv writer by @nical in gfx-rs/naga#2035
- Properly combine the fixes for #2035 and #2038. by @jimblandy in gfx-rs/naga#2041
- Don't emit no-op
OpBitCast
instructions. by @jimblandy in gfx-rs/naga#2043
HLSL-OUT
- Use the namer to sanitise entrypoint input/output struct names by @expenses in gfx-rs/naga#2001
- Handle Unpack2x16float in hlsl by @expenses in gfx-rs/naga#2002
- Add support for push constants by @JCapucho in gfx-rs/naga#2005
DOT-OUT
- Improvements by @JCapucho in gfx-rs/naga#1987
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
MSL-OUT
- Make VS-output positions invariant on even more systems (#1697) @cwfitzgerald
- Improve support for point primitives (#1696) @kvark
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
- Don't pin
indexmap
version (#1666) @a1phyr
MSL-OUT
- Fix support for point primitives (#1674) @kvark
GLSL-OUT
- Fix sampler association (#1671) @JCapucho
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
API
- Make
WithSpan
cloneable (#1620) @jakobhellermann
MSL-OUT
HLSL-OUT
GLSL-OUT
- 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
- API:
view_index
builtin
- GLSL-out:
- reflect textures without samplers
- SPV-out:
- fix incorrect pack/unpack
- 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
- implement casts from and to booleans in the backends
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- fix logical expression types
- fix FragDepth semantics
- spv-in:
- derive block status of structures
- spv-out:
- add lots of missing math functions
- implement discard
- 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
- 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
- development release for wgpu-0.6
- initial release