summaryrefslogtreecommitdiffstats
path: root/dom/webgpu/tests/cts/checkout/src/webgpu/shader/execution/expression/unary/af_assignment.spec.ts
blob: 001c47e117bde2386d50e461558b6bec754b9e00 (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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
export const description = `
Execution Tests for assignment of AbstractFloats
`;

import { makeTestGroup } from '../../../../../common/framework/test_group.js';
import { GPUTest } from '../../../../gpu_test.js';
import { Type } from '../../../../util/conversion.js';
import {
  ShaderBuilder,
  abstractFloatShaderBuilder,
  basicExpressionBuilder,
  onlyConstInputSource,
  run,
} from '../expression.js';

import { d } from './af_assignment.cache.js';

function concrete_assignment(): ShaderBuilder {
  return basicExpressionBuilder(value => `${value}`);
}

function abstract_assignment(): ShaderBuilder {
  return abstractFloatShaderBuilder(value => `${value}`);
}

export const g = makeTestGroup(GPUTest);

g.test('abstract')
  .specURL('https://www.w3.org/TR/WGSL/#floating-point-conversion')
  .desc(
    `
testing that extracting abstract floats works
`
  )
  .params(u => u.combine('inputSource', onlyConstInputSource))
  .fn(async t => {
    const cases = await d.get('abstract');
    await run(
      t,
      abstract_assignment(),
      [Type.abstractFloat],
      Type.abstractFloat,
      t.params,
      cases,
      1
    );
  });

g.test('f32')
  .specURL('https://www.w3.org/TR/WGSL/#floating-point-conversion')
  .desc(
    `
concretizing to f32
`
  )
  .params(u => u.combine('inputSource', onlyConstInputSource))
  .fn(async t => {
    const cases = await d.get('f32');
    await run(t, concrete_assignment(), [Type.abstractFloat], Type.f32, t.params, cases);
  });

g.test('f16')
  .specURL('https://www.w3.org/TR/WGSL/#floating-point-conversion')
  .desc(
    `
concretizing to f16
`
  )
  .beforeAllSubcases(t => {
    t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] });
  })
  .params(u => u.combine('inputSource', onlyConstInputSource))
  .fn(async t => {
    const cases = await d.get('f16');
    await run(t, concrete_assignment(), [Type.abstractFloat], Type.f16, t.params, cases);
  });