TS8099
On this page

TS8099

Front-end code UNSUPPORTED

UNSUPPORTED (TS8099) is the one deliberate exception to "sequential": it is the catch-all for a diagnostic whose site does not yet deserve its own code, so it stays parked past the sequential range instead of at its head.

The registry text and every compiler message on these pages are the compiler's own English.

Example

example.shade.ts
"use typeshade"
@fragment
export function main(@location(0) uv: vec2): vec4 {
let g = 0.
do {
g += 0.5
} while (g < 1.)
return vec4(g, g, g, 1.)
}

Compiled at build time against the pinned compiler, this program gets:

TS8099 error, line 6: do…while is not supported: the IR has one loop shape, a top-tested "for", and a do…while runs its body before the first test. Write "while (c) { … }" with the body's first pass unrolled above it, or a counted "for".

How to fix it

The same program, corrected. It compiles with no diagnostic.

example.shade.ts
"use typeshade"
@fragment
export function main(@location(0) uv: vec2): vec4 {
let g = 0.5
while (g < 1.) {
g += 0.5
}
return vec4(g, g, g, 1.)
}

The rules this enforces

Rule 6.1 Test
A resource must be written declare const x: uniform<T>, declare const x: storage<T>, declare const x: storage<T, "read_write">, or declare const x: <texture or sampler type>.
Rule 6.2 Test
A storage binding’s access mode is its second type argument: storage<T> is var<storage, read> and storage<T, "read_write"> is var<storage, read_write>.
Rule 7.7 Test
discard must be written as a bare statement, the identifier alone (discard), and may stand in a fragment entry and in a helper no vertex or compute entry can reach.
Rule 8.3 Test
A builtin WGSL confines by stage may be used in an entry of a permitted stage, and in a helper that no entry of an excluded stage can reach.
Rule 8.6 Test
An entry point must not be called from another function, and neither may a kernel function (Rule 8.22).
Rule 8.17 Test
A local function (a const that holds an arrow function or a function expression, or a function declaration, written inside a function’s body) is a function of the module named after the body that declares it (surface §14), and it may read and write the variables of the functions around it, as a TypeScript closure does.
Rule 8.18 Test
A function whose parameter has a function type, written out (f: (x: f32) => f32) or through a type alias of one, takes a function: a function declared at the top of the file or of a namespace, a method, a static method, a constructor, a field that holds a function (Rule 8.16) and a local function (Rule 8.17).

See also

SD0109
a fragment-only builtin is reachable from a vertex or compute entry

Source

Where the compiler raises this code at commit 26de7be8, one line per file:

Edit this page Report a problem