Skip to content

Commit 1cee1a9

Browse files
Bug 2025939 - test(webgpu): update CTS to 9726cfe2893834c4bb42b435638c4e7362f4c258 r=#webgpu-reviewers
`webgpu:shader,validation,extension,readonly_and_readwrite_storage_textures:var_decl:*` regressed on platform(s) that expose the `readonly_and_readwrite_storage_textures` WGSL feature, but this was expected (see [gpuweb/cts#4567](gpuweb/cts#4567)). Follow-up work is already under way for this at [gpuweb/cts#4612](gpuweb/cts#4612). Differential Revision: https://phabricator.services.mozilla.com/D289639
1 parent 34fc93b commit 1cee1a9

15 files changed

Lines changed: 91 additions & 77 deletions

File tree

dom/webgpu/tests/cts/checkout/src/webgpu/capability_info.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -982,6 +982,7 @@ export const kKnownWGSLLanguageFeatures = [
982982
'subgroup_uniformity',
983983
'swizzle_assignment',
984984
'linear_indexing',
985+
'texture_formats_tier1',
985986
] as const;
986987

987988
export type WGSLLanguageFeature = (typeof kKnownWGSLLanguageFeatures)[number];

dom/webgpu/tests/cts/checkout/src/webgpu/shader/execution/shader_io/compute_builtins.spec.ts

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -277,16 +277,18 @@ g.test('inputs')
277277
localIndex,
278278
output[globalOffset + kLocalIndexOffset]
279279
) ||
280-
expectEqual(
281-
'global_index',
282-
globalLinearIndex,
283-
output[globalOffset + kGlobalIndexOffset]
284-
) ||
285-
expectEqual(
286-
'group_index',
287-
groupLinearIndex,
288-
output[globalOffset + kGroupIndexOffset]
289-
);
280+
(linear_indexing &&
281+
expectEqual(
282+
'global_index',
283+
globalLinearIndex,
284+
output[globalOffset + kGlobalIndexOffset]
285+
)) ||
286+
(linear_indexing &&
287+
expectEqual(
288+
'group_index',
289+
groupLinearIndex,
290+
output[globalOffset + kGroupIndexOffset]
291+
));
290292
if (error) {
291293
return error;
292294
}

dom/webgpu/tests/cts/checkout/src/webgpu/shader/validation/extension/readonly_and_readwrite_storage_textures.spec.ts

Lines changed: 32 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,25 @@ Validation tests for the readonly_and_readwrite_storage_textures language featur
33
`;
44

55
import { makeTestGroup } from '../../../../common/framework/test_group.js';
6-
import { kPossibleStorageTextureFormats } from '../../../format_info.js';
6+
import { hasFeature } from '../../../../common/util/util.js';
7+
import {
8+
kPossibleStorageTextureFormats,
9+
kTextureFormatsTier1EnablesStorageReadOnlyWriteOnly,
10+
} from '../../../format_info.js';
711
import { ShaderValidationTest } from '../shader_validation_test.js';
812

913
export const g = makeTestGroup(ShaderValidationTest);
1014

11-
const kFeatureName = 'readonly_and_readwrite_storage_textures';
15+
const kAccessModeFeatureName = 'readonly_and_readwrite_storage_textures';
16+
const kTier1FeatureName = 'texture_formats_tier1';
17+
const kTier1DeviceFeatureName = 'texture-formats-tier1';
1218

1319
g.test('var_decl')
1420
.desc(
15-
`Checks that the read and read_write access modes are only allowed with the language feature present`
21+
`Checks that the read and read_write access modes are only allowed with the language feature present
22+
23+
TODO(https://github.com/gpuweb/cts/issues/4612): Stop checking the device feature
24+
`
1625
)
1726
.paramsSubcasesOnly(u =>
1827
u
@@ -28,9 +37,26 @@ g.test('var_decl')
2837
.fn(t => {
2938
const { type, format, access } = t.params;
3039

40+
let valid = true;
41+
if (access !== 'write') {
42+
valid &&= t.hasLanguageFeature(kAccessModeFeatureName);
43+
}
44+
45+
if (kTextureFormatsTier1EnablesStorageReadOnlyWriteOnly.indexOf(format) >= 0) {
46+
// Even though some of these formats do not support read-write access
47+
// without the tier2 adapter feature, their validity in WGSL should
48+
// depend only on the language feature for tier1.
49+
50+
// However, because the language feature is new, also check the device
51+
// feature. MAINTENANCE_TODO(https://github.com/gpuweb/cts/issues/4612):
52+
// Stop doing this; make `if` body unconditional
53+
if (!hasFeature(t.device.features, kTier1DeviceFeatureName)) {
54+
valid &&= t.hasLanguageFeature(kTier1FeatureName);
55+
}
56+
}
57+
3158
const source = `@group(0) @binding(0) var t : ${type}<${format}, ${access}>;`;
32-
const requiresFeature = access !== 'write';
33-
t.expectCompileResult(t.hasLanguageFeature(kFeatureName) || !requiresFeature, source);
59+
t.expectCompileResult(valid, source);
3460
});
3561

3662
g.test('textureBarrier')
@@ -39,7 +65,7 @@ g.test('textureBarrier')
3965
)
4066
.fn(t => {
4167
t.expectCompileResult(
42-
t.hasLanguageFeature(kFeatureName),
68+
t.hasLanguageFeature(kAccessModeFeatureName),
4369
`
4470
@workgroup_size(1) @compute fn main() {
4571
textureBarrier();

dom/webgpu/tests/cts/checkout/src/webgpu/shader/validation/shader_io/builtins.spec.ts

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -423,9 +423,6 @@ g.test('reuse_builtin_name')
423423
)
424424
.fn(t => {
425425
let code = '';
426-
if (t.params.enable) {
427-
code += `enable ${t.params.enable};\n`;
428-
}
429426
if (t.params.use === 'alias') {
430427
code += `alias ${t.params.name} = i32;`;
431428
} else if (t.params.use === `struct`) {
@@ -437,8 +434,7 @@ g.test('reuse_builtin_name')
437434
} else if (t.params.use === `function-var`) {
438435
code += `fn test() { let ${t.params.name} = 1; }`;
439436
}
440-
const expect = t.params.requires === undefined || t.hasLanguageFeature(t.params.requires);
441-
t.expectCompileResult(expect, code);
437+
t.expectCompileResult(true, code);
442438
});
443439

444440
const kTests = {

dom/webgpu/tests/cts/checkout/tools/gen_version

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ if (!fs.existsSync(myself)) {
1414
process.exit(1);
1515
}
1616

17-
const version = '5ca78e5515baa2e2c6681f1b2dae2926cc8884d7';
17+
const version = '9726cfe2893834c4bb42b435638c4e7362f4c258';
1818

1919
fs.mkdirSync('./gen/common/internal', { recursive: true });
2020
// This will be copied into the various other build directories.

dom/webgpu/tests/cts/moz.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ origin:
88
name: WebGPU CTS
99
description: WebGPU Compliance Test Suite
1010
url: https://gpuweb.github.io/cts/
11-
release: 5ca78e5515baa2e2c6681f1b2dae2926cc8884d7 (2026-03-17T15:43:35Z).
12-
revision: 5ca78e5515baa2e2c6681f1b2dae2926cc8884d7
11+
release: 9726cfe2893834c4bb42b435638c4e7362f4c258 (2026-03-20T18:30:29Z).
12+
revision: 9726cfe2893834c4bb42b435638c4e7362f4c258
1313
license: ['BSD-3-Clause']
1414

1515
updatebot:

testing/web-platform/mozilla/meta/webgpu/cts/webgpu/shader/execution/shader_io/compute_builtins/cts.https.html.ini

Lines changed: 0 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,76 +1,51 @@
11
[cts.https.html?q=webgpu:shader,execution,shader_io,compute_builtins:inputs:*]
2-
implementation-status: backlog
32
[:method="mixed";dispatch="direct";groupSize={"x":1,"y":1,"z":1};numGroups={"x":1,"y":1,"z":1}]
4-
expected: FAIL
53

64
[:method="mixed";dispatch="direct";groupSize={"x":1,"y":1,"z":1};numGroups={"x":8,"y":4,"z":2}]
7-
expected: FAIL
85

96
[:method="mixed";dispatch="direct";groupSize={"x":3,"y":7,"z":5};numGroups={"x":13,"y":9,"z":11}]
10-
expected: FAIL
117

128
[:method="mixed";dispatch="direct";groupSize={"x":8,"y":4,"z":2};numGroups={"x":1,"y":1,"z":1}]
13-
expected: FAIL
149

1510
[:method="mixed";dispatch="indirect";groupSize={"x":1,"y":1,"z":1};numGroups={"x":1,"y":1,"z":1}]
16-
expected: FAIL
1711

1812
[:method="mixed";dispatch="indirect";groupSize={"x":1,"y":1,"z":1};numGroups={"x":8,"y":4,"z":2}]
19-
expected: FAIL
2013

2114
[:method="mixed";dispatch="indirect";groupSize={"x":3,"y":7,"z":5};numGroups={"x":13,"y":9,"z":11}]
22-
expected: FAIL
2315

2416
[:method="mixed";dispatch="indirect";groupSize={"x":8,"y":4,"z":2};numGroups={"x":1,"y":1,"z":1}]
25-
expected: FAIL
2617

2718
[:method="param";dispatch="direct";groupSize={"x":1,"y":1,"z":1};numGroups={"x":1,"y":1,"z":1}]
28-
expected: FAIL
2919

3020
[:method="param";dispatch="direct";groupSize={"x":1,"y":1,"z":1};numGroups={"x":8,"y":4,"z":2}]
31-
expected: FAIL
3221

3322
[:method="param";dispatch="direct";groupSize={"x":3,"y":7,"z":5};numGroups={"x":13,"y":9,"z":11}]
34-
expected: FAIL
3523

3624
[:method="param";dispatch="direct";groupSize={"x":8,"y":4,"z":2};numGroups={"x":1,"y":1,"z":1}]
37-
expected: FAIL
3825

3926
[:method="param";dispatch="indirect";groupSize={"x":1,"y":1,"z":1};numGroups={"x":1,"y":1,"z":1}]
40-
expected: FAIL
4127

4228
[:method="param";dispatch="indirect";groupSize={"x":1,"y":1,"z":1};numGroups={"x":8,"y":4,"z":2}]
43-
expected: FAIL
4429

4530
[:method="param";dispatch="indirect";groupSize={"x":3,"y":7,"z":5};numGroups={"x":13,"y":9,"z":11}]
46-
expected: FAIL
4731

4832
[:method="param";dispatch="indirect";groupSize={"x":8,"y":4,"z":2};numGroups={"x":1,"y":1,"z":1}]
49-
expected: FAIL
5033

5134
[:method="struct";dispatch="direct";groupSize={"x":1,"y":1,"z":1};numGroups={"x":1,"y":1,"z":1}]
52-
expected: FAIL
5335

5436
[:method="struct";dispatch="direct";groupSize={"x":1,"y":1,"z":1};numGroups={"x":8,"y":4,"z":2}]
55-
expected: FAIL
5637

5738
[:method="struct";dispatch="direct";groupSize={"x":3,"y":7,"z":5};numGroups={"x":13,"y":9,"z":11}]
58-
expected: FAIL
5939

6040
[:method="struct";dispatch="direct";groupSize={"x":8,"y":4,"z":2};numGroups={"x":1,"y":1,"z":1}]
61-
expected: FAIL
6241

6342
[:method="struct";dispatch="indirect";groupSize={"x":1,"y":1,"z":1};numGroups={"x":1,"y":1,"z":1}]
64-
expected: FAIL
6543

6644
[:method="struct";dispatch="indirect";groupSize={"x":1,"y":1,"z":1};numGroups={"x":8,"y":4,"z":2}]
67-
expected: FAIL
6845

6946
[:method="struct";dispatch="indirect";groupSize={"x":3,"y":7,"z":5};numGroups={"x":13,"y":9,"z":11}]
70-
expected: FAIL
7147

7248
[:method="struct";dispatch="indirect";groupSize={"x":8,"y":4,"z":2};numGroups={"x":1,"y":1,"z":1}]
73-
expected: FAIL
7449

7550

7651
[cts.https.html?q=webgpu:shader,execution,shader_io,compute_builtins:num_subgroups:*]

testing/web-platform/mozilla/meta/webgpu/cts/webgpu/shader/validation/extension/readonly_and_readwrite_storage_textures/cts.https.html.ini

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,6 @@
33

44

55
[cts.https.html?q=webgpu:shader,validation,extension,readonly_and_readwrite_storage_textures:var_decl:*]
6-
implementation-status:
7-
if os == "linux": backlog
6+
implementation-status: backlog
87
[:]
9-
expected:
10-
if os == "linux": FAIL
8+
expected: FAIL

testing/web-platform/mozilla/meta/webgpu/cts/webgpu/shader/validation/parse/requires/cts.https.html.ini

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,8 @@
4747

4848
[:feature="texture_and_sampler_let"]
4949

50+
[:feature="texture_formats_tier1"]
51+
5052
[:feature="uniform_buffer_standard_layout"]
5153

5254
[:feature="unrestricted_pointer_parameters"]

testing/web-platform/mozilla/meta/webgpu/cts/webgpu/shader/validation/shader_io/builtins/cts.https.html.ini

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,6 @@
103103

104104

105105
[cts.https.html?q=webgpu:shader,validation,shader_io,builtins:reuse_builtin_name:*]
106-
implementation-status: backlog
107106
[:name="clip_distances";stage="vertex";io="out";type="array%3Cf32,1%3E";enable="clip_distances";use="alias"]
108107

109108
[:name="clip_distances";stage="vertex";io="out";type="array%3Cf32,1%3E";enable="clip_distances";use="function"]
@@ -215,19 +214,14 @@
215214
[:name="global_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use="struct"]
216215

217216
[:name="global_invocation_index";stage="compute";io="in";type="u32";requires="linear_indexing";use="alias"]
218-
expected: FAIL
219217

220218
[:name="global_invocation_index";stage="compute";io="in";type="u32";requires="linear_indexing";use="function"]
221-
expected: FAIL
222219

223220
[:name="global_invocation_index";stage="compute";io="in";type="u32";requires="linear_indexing";use="function-var"]
224-
expected: FAIL
225221

226222
[:name="global_invocation_index";stage="compute";io="in";type="u32";requires="linear_indexing";use="module-var"]
227-
expected: FAIL
228223

229224
[:name="global_invocation_index";stage="compute";io="in";type="u32";requires="linear_indexing";use="struct"]
230-
expected: FAIL
231225

232226
[:name="instance_index";stage="vertex";io="in";type="u32";use="alias"]
233227

@@ -410,19 +404,14 @@
410404
[:name="workgroup_id";stage="compute";io="in";type="vec3%3Cu32%3E";use="struct"]
411405

412406
[:name="workgroup_index";stage="compute";io="in";type="u32";requires="linear_indexing";use="alias"]
413-
expected: FAIL
414407

415408
[:name="workgroup_index";stage="compute";io="in";type="u32";requires="linear_indexing";use="function"]
416-
expected: FAIL
417409

418410
[:name="workgroup_index";stage="compute";io="in";type="u32";requires="linear_indexing";use="function-var"]
419-
expected: FAIL
420411

421412
[:name="workgroup_index";stage="compute";io="in";type="u32";requires="linear_indexing";use="module-var"]
422-
expected: FAIL
423413

424414
[:name="workgroup_index";stage="compute";io="in";type="u32";requires="linear_indexing";use="struct"]
425-
expected: FAIL
426415

427416

428417
[cts.https.html?q=webgpu:shader,validation,shader_io,builtins:stage_inout:*]

0 commit comments

Comments
 (0)