summaryrefslogtreecommitdiffstats
path: root/dom/webgpu/tests/cts/checkout/src/webgpu/shader/validation/parse/builtin.spec.ts
blob: 3c684ee0fbe60deb64fe4d9b459c5c8fd3b6f98f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
export const description = `Validation tests for @builtin`;

import { makeTestGroup } from '../../../../common/framework/test_group.js';
import { ShaderValidationTest } from '../shader_validation_test.js';

export const g = makeTestGroup(ShaderValidationTest);

const kValidBuiltin = new Set([
  `@builtin(position)`,
  `@builtin(position,)`,
  `@ \n builtin(position)`,
  `@/^ comment ^/builtin/^ comment ^/\n\n(\t/^comment^/position/^comment^/)`,
]);
const kInvalidBuiltin = new Set([
  `@abuiltin(position)`,
  `@builtin`,
  `@builtin()`,
  `@builtin position`,
  `@builtin position)`,
  `@builtin(position`,
  `@builtin(position, frag_depth)`,
  `@builtin(identifier)`,
  `@builtin(2)`,
]);

g.test('parse')
  .desc(`Test that @builtin is parsed correctly.`)
  .params(u => u.combine('builtin', new Set([...kValidBuiltin, ...kInvalidBuiltin])))
  .fn(t => {
    const v = t.params.builtin.replace(/\^/g, '*');
    const code = `
@vertex
fn main() -> ${v} vec4<f32> {
  return vec4<f32>(.4, .2, .3, .1);
}`;
    t.expectCompileResult(kValidBuiltin.has(t.params.builtin), code);
  });