- WGSL:
- semicolon after struct declaration are now optional
- commas are used to separate struct members instead of semicolons
- attributes are declared with
@attrib
instead of[[attrib]]
stride
attribute is removed- block comments are supported
- renames:
findLsb
->firstTrailingBit
findMsb
->firstLeadingBit
smoothStep
->smoothstep
- 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