Tint changes during Origin Trial

Changes for M105

Deprecated Features

  • The @stage attribute has been deprecated. The short forms should be used instead (@vertex, @fragment, or @compute). tint:1503

Changes for M104

New features

  • Tint now supports abstract-numerics, removing the need to always suffix unsigned integers with u tint:1504
  • Parsing of @compute, @fragment and @vertex added.

Changes for M103

New features

  • Produce warnings for when calling barriers, textureSample, and derivative builtins in non-uniform control flow tint:880
  • Matrix identity constructors and constructors for a single scalar value are now supported tint:1545

Breaking changes

  • Builtin atomicCompareExchangeWeak returns a struct instead of a vec2. tint:1185

Changes for M102

New Features

  • Parentheses are no longer required around expressions for if and switch statements tint:1424
  • Compound assignment statements are now supported. tint:1325
  • Postfix increment and decrement statements are now supported. tint:1488
  • The colon in case statements is now optional. tint:1485

Breaking changes

  • Struct members are now separated by commas. tint:1475
  • The @block attribute has been removed. tint:1324
  • The @stride attribute has been removed. tint:1381
  • Attributes using [[attribute]] syntax are no longer supported. tint:1382
  • The elseif keyword is no longer supported. tint:1289

Deprecated Features

  • The smoothStep() builtin has been renamed to smoothstep(). tint:1483

Changes for M101

New Features

  • Tint now supports unicode identifiers. tint:1437

Breaking changes

  • The isNan(), isInf(), isFinite(), and isNormal() builtins have been removed. tint:1312

Changes for M100

Breaking changes

  • The @interpolate(flat) attribute must now be specified on integral user-defined IO. tint:1224
  • The ignore() intrinsic has been removed. Use phoney-assignment instead: ignore(expr); -> _ = expr;.
  • break statements in continuing blocks are now correctly validated.

New Features

  • Module-scope declarations can now be declared in any order. tint:1266
  • The override keyword and @id() attribute for pipeline-overridable constants are now supported, replacing the @override attribute. tint:1403

Changes for M99

Breaking changes

Obviously infinite loops (no condition, no break) are now a validation error.

Deprecated Features

The following features have been deprecated and will be removed in M102:

  • The [[block]] attribute has been deprecated. tint:1324
  • Attributes now use the @decoration syntax instead of the [[decoration]] syntax. tint:1382
  • elseif has been replaced with else if. tint:1289
  • The [[stride]] attribute has been deprecated. tint:1381

New Features

  • Vector and matrix element type can now be inferred from constructor argument types. tint:1334
  • Added builtins degrees() and radians() for converting between degrees and radians. tint:1329
  • let arrays and matrices can now be dynamically indexed. tint:1352
  • Storage and Uniform buffer types no longer have to be structures. tint:1372
  • A struct declaration does not have to be followed by a semicolon. tint:1380

Fixes

  • Fixed an issue where for-loops that contain array or structure constructors in the loop initializer statements, condition expressions or continuing statements could fail to compile. tint:1364

Changes for M98

Breaking Changes

  • Taking the address of a vector component is no longer allowed.
  • Module-scope declarations can no longer alias a builtin name. tint:1318
  • It is now an error to call a function either directly or transitively, from a loop continuing block, that uses discard. tint:1302

Deprecated Features

  • The isNan(), isInf(), isFinite() and isNormal() builtins has been deprecated and will be removed in M101. tint:1312

New Features

  • New texture gather builtins: textureGather() and textureGatherCompare(). tint:1330
  • Shadowing is now fully supported. tint:819
  • The dot() builtin now supports integer vector types.
  • Identifiers can now start with a single leading underscore. tint:1292
  • Control flow analysis has been improved, and functions no longer need to return if the statement is unreachable. tint:1302
  • Unreachable statements now produce a warning instead of an error, to allow WGSL code to be updated to the new analysis behavior. These warnings may become errors in the future gpuweb#2378

Fixes

  • Fixed an issue where using a module-scoped let in a workgroup_size may result in a compilation error. tint:1320

Changes for M97

Breaking Changes

  • Deprecated modf() and frexp() builtin overloads that take a pointer second parameter have been removed.
  • Deprecated texture builtin functions that accepted a read access controlled storage texture have been removed.
  • Storage textures must now only use the write access control.

Deprecated Features

  • The ignore() builtin has been replaced with phony-assignment. gpuweb#2127

New Features

  • any() and all() now support a bool parameter. These simply return the passed argument. tint:1253
  • Call statements may now include functions that return a value (ignore() is no longer needed).
  • The interpolate(flat) attribute can now be specified on integral user-defined IO. It will eventually become an error to define integral user-defined IO without this attribute.
  • Matrix construction from scalar element values is now supported.

Fixes

  • Swizzling of vec3 types in storage and uniform buffers has been fixed for Metal 1.x. tint:1249
  • Calling a function that returns an unused value no longer produces an FXC compilation error. tint:1259
  • abs() fixed for unsigned integers on SPIR-V backend

Changes for M95

New Features

  • The size of an array can now be defined using a non-overridable module-scope constant
  • The num_workgroups builtin is now supported.

Fixes

  • Hex floats: now correctly errors when the magnitude is non-zero, and the exponent would cause overflow. tint:1150, tint:1166
  • Identifiers beginning with an underscore are now correctly rejected. tint:1179