From cfcb6b435085854b7a1fc876c5a90f9e0e6e198b Mon Sep 17 00:00:00 2001 From: Corentin Wallez Date: Mon, 21 Sep 2026 10:36:35 +0200 Subject: [PATCH] Remove 'as GPUFeatureName' casts that are no longer needed. Since the features where added to webgpu-types --- package-lock.json | 22 ++++++++----------- package.json | 2 +- .../copyTextureToTexture.spec.ts | 2 +- .../command_buffer/image_copy.spec.ts | 2 +- .../texture_compression_unaligned.spec.ts | 4 +--- .../api/validation/createTexture.spec.ts | 15 +++---------- src/webgpu/capability_info.ts | 4 ++-- .../builtin/atomics/atomicStoreMax.spec.ts | 2 +- .../builtin/atomics/atomicStoreMin.spec.ts | 2 +- .../call/builtin/quadBroadcast.spec.ts | 8 +++---- .../expression/call/builtin/quadSwap.spec.ts | 8 +++---- .../call/builtin/subgroupAdd.spec.ts | 8 +++---- .../call/builtin/subgroupAll.spec.ts | 6 ++--- .../call/builtin/subgroupAny.spec.ts | 6 ++--- .../call/builtin/subgroupBallot.spec.ts | 8 +++---- .../call/builtin/subgroupBitwise.spec.ts | 8 +++---- .../call/builtin/subgroupBroadcast.spec.ts | 12 +++++----- .../call/builtin/subgroupElect.spec.ts | 8 +++---- .../call/builtin/subgroupMinMax.spec.ts | 10 ++++----- .../call/builtin/subgroupMul.spec.ts | 8 +++---- .../call/builtin/subgroupShuffle.spec.ts | 14 ++++++------ .../shader_io/compute_builtins.spec.ts | 8 +++---- .../shader_io/fragment_builtins.spec.ts | 12 +++++----- .../validation/shader_validation_test.ts | 6 ++--- 24 files changed, 85 insertions(+), 100 deletions(-) diff --git a/package-lock.json b/package-lock.json index d61298adb78f..2bd1b7f20ab0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -24,7 +24,7 @@ "@types/w3c-image-capture": "^1.0.10", "@typescript-eslint/eslint-plugin": "^6.9.1", "@typescript-eslint/parser": "^6.9.1", - "@webgpu/types": "^0.1.72", + "@webgpu/types": "^0.1.74", "ansi-colors": "4.1.3", "babel-plugin-add-header-comment": "^1.0.3", "babel-plugin-const-enum": "^1.2.0", @@ -1539,10 +1539,11 @@ "dev": true }, "node_modules/@webgpu/types": { - "version": "0.1.72", - "resolved": "https://registry.npmjs.org/@webgpu/types/-/types-0.1.72.tgz", - "integrity": "sha512-0cF7RFM2edNoiIS1ODJp0/Gzv4/xSXhwoR0YCza+OWpJWtn4wmo9DvK91aLlH9+uUnwIriP7ZiC3WitmyhuzBw==", - "dev": true + "version": "0.1.74", + "resolved": "https://registry.npmjs.org/@webgpu/types/-/types-0.1.74.tgz", + "integrity": "sha512-lgiI4hbuLcI9unnm2cL/tvCaQU45dp0xcLWJh5uB/9MBGvIA4F8XIk7nSiBeg+K4xWGYwgZKn80LmERI5CxoTA==", + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/abbrev": { "version": "1.1.1", @@ -8968,11 +8969,6 @@ "url": "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/sponsors/sindresorhus" } }, - "tools/eslint-custom-rules": { - "version": "0.0.0", - "extraneous": true, - "license": "BSD-3-Clause" - }, "tools/eslint-plugin-gpuweb-cts": { "version": "0.0.0", "dev": true, @@ -10076,9 +10072,9 @@ "dev": true }, "@webgpu/types": { - "version": "0.1.72", - "resolved": "https://registry.npmjs.org/@webgpu/types/-/types-0.1.72.tgz", - "integrity": "sha512-0cF7RFM2edNoiIS1ODJp0/Gzv4/xSXhwoR0YCza+OWpJWtn4wmo9DvK91aLlH9+uUnwIriP7ZiC3WitmyhuzBw==", + "version": "0.1.74", + "resolved": "https://registry.npmjs.org/@webgpu/types/-/types-0.1.74.tgz", + "integrity": "sha512-lgiI4hbuLcI9unnm2cL/tvCaQU45dp0xcLWJh5uB/9MBGvIA4F8XIk7nSiBeg+K4xWGYwgZKn80LmERI5CxoTA==", "dev": true }, "abbrev": { diff --git a/package.json b/package.json index ec9e302bf79f..04364bf532e9 100644 --- a/package.json +++ b/package.json @@ -50,7 +50,7 @@ "@types/w3c-image-capture": "^1.0.10", "@typescript-eslint/eslint-plugin": "^6.9.1", "@typescript-eslint/parser": "^6.9.1", - "@webgpu/types": "^0.1.72", + "@webgpu/types": "^0.1.74", "ansi-colors": "4.1.3", "babel-plugin-add-header-comment": "^1.0.3", "babel-plugin-const-enum": "^1.2.0", diff --git a/src/webgpu/api/operation/command_buffer/copyTextureToTexture.spec.ts b/src/webgpu/api/operation/command_buffer/copyTextureToTexture.spec.ts index f9d2fdfbbe6f..e3a0e14d2296 100644 --- a/src/webgpu/api/operation/command_buffer/copyTextureToTexture.spec.ts +++ b/src/webgpu/api/operation/command_buffer/copyTextureToTexture.spec.ts @@ -1009,7 +1009,7 @@ g.test('color_textures,compressed,unaligned,non_array') ) .fn(t => { const { partialEdge, srcFormat, dstFormat, copyBoxOffsets } = t.params; - t.skipIfDeviceDoesNotHaveFeature('texture-compression-unaligned' as GPUFeatureName); + t.skipIfDeviceDoesNotHaveFeature('texture-compression-unaligned'); t.skipIfCopyTextureToTextureNotSupportedForFormat(srcFormat, dstFormat); // The source and destination formats share the same base format, so they have the same texel diff --git a/src/webgpu/api/operation/command_buffer/image_copy.spec.ts b/src/webgpu/api/operation/command_buffer/image_copy.spec.ts index 88813731d147..2984d1a00f2a 100644 --- a/src/webgpu/api/operation/command_buffer/image_copy.spec.ts +++ b/src/webgpu/api/operation/command_buffer/image_copy.spec.ts @@ -1768,7 +1768,7 @@ g.test('compressed_textures,unaligned_mip_level_0') .fn(t => { const { format, initMethod, checkMethod, copyCase } = t.params; t.skipIfTextureFormatNotSupported(format); - t.skipIfDeviceDoesNotHaveFeature('texture-compression-unaligned' as GPUFeatureName); + t.skipIfDeviceDoesNotHaveFeature('texture-compression-unaligned'); const info = getBlockInfoForColorTextureFormat(format); diff --git a/src/webgpu/api/validation/capability_checks/features/texture_compression_unaligned.spec.ts b/src/webgpu/api/validation/capability_checks/features/texture_compression_unaligned.spec.ts index e9e532147447..e61c149203f9 100644 --- a/src/webgpu/api/validation/capability_checks/features/texture_compression_unaligned.spec.ts +++ b/src/webgpu/api/validation/capability_checks/features/texture_compression_unaligned.spec.ts @@ -17,8 +17,6 @@ import { UniqueFeaturesOrLimitsGPUTest } from '../../../../gpu_test.js'; export const g = makeTestGroup(UniqueFeaturesOrLimitsGPUTest); -const kTextureCompressionUnaligned = 'texture-compression-unaligned' as GPUFeatureName; - g.test('createTexture,unaligned_size') .desc( `Test that creating a compressed texture whose mip level 0 size is not a multiple of the texel @@ -40,7 +38,7 @@ g.test('createTexture,unaligned_size') requiredFeatures.push(formatFeature); } if (enable_feature) { - requiredFeatures.push(kTextureCompressionUnaligned); + requiredFeatures.push('texture-compression-unaligned'); } t.selectDeviceOrSkipTestCase({ requiredFeatures }); diff --git a/src/webgpu/api/validation/createTexture.spec.ts b/src/webgpu/api/validation/createTexture.spec.ts index 79d59de5e00e..8b71ef1d0f53 100644 --- a/src/webgpu/api/validation/createTexture.spec.ts +++ b/src/webgpu/api/validation/createTexture.spec.ts @@ -496,10 +496,7 @@ g.test('texture_size,default_value_and_smallest_size,compressed_format') // With 'texture-compression-unaligned', mip level 0 is no longer required to be a multiple of // the texel block size, so every (small, in-range) size in this test becomes valid. - const supportsUnaligned = hasFeature( - t.device.features, - 'texture-compression-unaligned' as GPUFeatureName - ); + const supportsUnaligned = hasFeature(t.device.features, 'texture-compression-unaligned'); const success = supportsUnaligned || _success; t.expectValidationError(() => { @@ -765,10 +762,7 @@ g.test('texture_size,2d_texture,compressed_format') // With 'texture-compression-unaligned', mip level 0 of a compressed texture is no longer // required to be a multiple of the texel block size, so unaligned widths/heights are valid. - const supportsUnaligned = hasFeature( - t.device.features, - 'texture-compression-unaligned' as GPUFeatureName - ); + const supportsUnaligned = hasFeature(t.device.features, 'texture-compression-unaligned'); const success = (supportsUnaligned || (size[0] % info.blockWidth === 0 && size[1] % info.blockHeight === 0)) && @@ -1005,10 +999,7 @@ g.test('texture_size,3d_texture,compressed_format') // With 'texture-compression-unaligned', mip level 0 of a compressed texture is no longer // required to be a multiple of the texel block size, so unaligned widths/heights are valid. - const supportsUnaligned = hasFeature( - t.device.features, - 'texture-compression-unaligned' as GPUFeatureName - ); + const supportsUnaligned = hasFeature(t.device.features, 'texture-compression-unaligned'); const success = (supportsUnaligned || (size[0] % info.blockWidth === 0 && size[1] % info.blockHeight === 0)) && diff --git a/src/webgpu/capability_info.ts b/src/webgpu/capability_info.ts index 1e2a470e7e15..5bcf21086c99 100644 --- a/src/webgpu/capability_info.ts +++ b/src/webgpu/capability_info.ts @@ -972,8 +972,8 @@ export const kFeatureNameInfo: { 'primitive-index': {}, 'texture-component-swizzle': {}, 'subgroup-size-control': {}, - ['atomic-vec2u-min-max' as GPUFeatureName]: {}, - ['texture-compression-unaligned' as GPUFeatureName]: {}, + 'atomic-vec2u-min-max': {}, + 'texture-compression-unaligned': {}, }; /** List of all GPUFeatureName values. */ export const kFeatureNames = keysOf(kFeatureNameInfo); diff --git a/src/webgpu/shader/execution/expression/call/builtin/atomics/atomicStoreMax.spec.ts b/src/webgpu/shader/execution/expression/call/builtin/atomics/atomicStoreMax.spec.ts index 9ff7d7dfc570..207f042b2d2d 100644 --- a/src/webgpu/shader/execution/expression/call/builtin/atomics/atomicStoreMax.spec.ts +++ b/src/webgpu/shader/execution/expression/call/builtin/atomics/atomicStoreMax.spec.ts @@ -30,7 +30,7 @@ the composite max of all values written. .combine('rndMultiplyY', [0, 1, 41609, 138545483, 2 ** 28]) ) .fn(async t => { - t.skipIfDeviceDoesNotHaveFeature('atomic-vec2u-min-max' as GPUFeatureName); + t.skipIfDeviceDoesNotHaveFeature('atomic-vec2u-min-max'); const wgsl = ` enable atomic_vec2u_min_max; @group(0) @binding(0) diff --git a/src/webgpu/shader/execution/expression/call/builtin/atomics/atomicStoreMin.spec.ts b/src/webgpu/shader/execution/expression/call/builtin/atomics/atomicStoreMin.spec.ts index e3caf3e39f1b..4c466ed18a0f 100644 --- a/src/webgpu/shader/execution/expression/call/builtin/atomics/atomicStoreMin.spec.ts +++ b/src/webgpu/shader/execution/expression/call/builtin/atomics/atomicStoreMin.spec.ts @@ -31,7 +31,7 @@ the composite min of all values written. .combine('rndMultiplyY', [0, 1, 41609, 138545483, 2 ** 28]) ) .fn(async t => { - t.skipIfDeviceDoesNotHaveFeature('atomic-vec2u-min-max' as GPUFeatureName); + t.skipIfDeviceDoesNotHaveFeature('atomic-vec2u-min-max'); const wgsl = ` enable atomic_vec2u_min_max; @group(0) @binding(0) diff --git a/src/webgpu/shader/execution/expression/call/builtin/quadBroadcast.spec.ts b/src/webgpu/shader/execution/expression/call/builtin/quadBroadcast.spec.ts index 8556a3d3ec42..fd6d8d1ea240 100644 --- a/src/webgpu/shader/execution/expression/call/builtin/quadBroadcast.spec.ts +++ b/src/webgpu/shader/execution/expression/call/builtin/quadBroadcast.spec.ts @@ -108,7 +108,7 @@ g.test('data_types') .fn(async t => { const wgSize = [4, 1, 1]; const type = kTypes[t.params.type]; - t.skipIfDeviceDoesNotHaveFeature('subgroups' as GPUFeatureName); + t.skipIfDeviceDoesNotHaveFeature('subgroups'); if (type.requiresF16()) { t.skipIfDeviceDoesNotHaveFeature('shader-f16'); } @@ -242,7 +242,7 @@ Quad operations require a full quad so workgroup sizes are limited to multiples .combine('id', [0, 1, 2, 3] as const) ) .fn(async t => { - t.skipIfDeviceDoesNotHaveFeature('subgroups' as GPUFeatureName); + t.skipIfDeviceDoesNotHaveFeature('subgroups'); const wgThreads = t.params.wgSize[0] * t.params.wgSize[1] * t.params.wgSize[2]; const wgsl = ` @@ -322,7 +322,7 @@ predication filters are skipped. .combine('id', [0, 1, 2, 3] as const) ) .fn(async t => { - t.skipIfDeviceDoesNotHaveFeature('subgroups' as GPUFeatureName); + t.skipIfDeviceDoesNotHaveFeature('subgroups'); const wgThreads = t.params.wgSize[0] * t.params.wgSize[1] * t.params.wgSize[2]; const testcase = kPredicateCases[t.params.predicate]; @@ -501,7 +501,7 @@ g.test('fragment,all_active') .combineWithParams([{ format: 'rgba32uint' }] as const) ) .fn(async t => { - t.skipIfDeviceDoesNotHaveFeature('subgroups' as GPUFeatureName); + t.skipIfDeviceDoesNotHaveFeature('subgroups'); const fsShader = ` enable subgroups; diff --git a/src/webgpu/shader/execution/expression/call/builtin/quadSwap.spec.ts b/src/webgpu/shader/execution/expression/call/builtin/quadSwap.spec.ts index 93983d196270..12fa65f866eb 100644 --- a/src/webgpu/shader/execution/expression/call/builtin/quadSwap.spec.ts +++ b/src/webgpu/shader/execution/expression/call/builtin/quadSwap.spec.ts @@ -130,7 +130,7 @@ g.test('data_types') .fn(async t => { const wgSize = [4, 1, 1]; const type = kTypes[t.params.type]; - t.skipIfDeviceDoesNotHaveFeature('subgroups' as GPUFeatureName); + t.skipIfDeviceDoesNotHaveFeature('subgroups'); if (type.requiresF16()) { t.skipIfDeviceDoesNotHaveFeature('shader-f16'); } @@ -261,7 +261,7 @@ Quad operations require a full quad so workgroup sizes are limited to multiples .combine('op', kOps) ) .fn(async t => { - t.skipIfDeviceDoesNotHaveFeature('subgroups' as GPUFeatureName); + t.skipIfDeviceDoesNotHaveFeature('subgroups'); const wgThreads = t.params.wgSize[0] * t.params.wgSize[1] * t.params.wgSize[2]; const wgsl = ` @@ -341,7 +341,7 @@ predication filters are skipped. .combine('op', kOps) ) .fn(async t => { - t.skipIfDeviceDoesNotHaveFeature('subgroups' as GPUFeatureName); + t.skipIfDeviceDoesNotHaveFeature('subgroups'); const wgThreads = t.params.wgSize[0] * t.params.wgSize[1] * t.params.wgSize[2]; const testcase = kPredicateCases[t.params.predicate]; @@ -511,7 +511,7 @@ g.test('fragment,all_active') .combineWithParams([{ format: 'rgba32uint' }] as const) ) .fn(async t => { - t.skipIfDeviceDoesNotHaveFeature('subgroups' as GPUFeatureName); + t.skipIfDeviceDoesNotHaveFeature('subgroups'); const fsShader = ` enable subgroups; diff --git a/src/webgpu/shader/execution/expression/call/builtin/subgroupAdd.spec.ts b/src/webgpu/shader/execution/expression/call/builtin/subgroupAdd.spec.ts index 6c7613b88f72..6b6868a4c2ea 100644 --- a/src/webgpu/shader/execution/expression/call/builtin/subgroupAdd.spec.ts +++ b/src/webgpu/shader/execution/expression/call/builtin/subgroupAdd.spec.ts @@ -67,7 +67,7 @@ and limit the number of permutations needed to calculate the final result.` ] as const) ) .fn(async t => { - t.skipIfDeviceDoesNotHaveFeature('subgroups' as GPUFeatureName); + t.skipIfDeviceDoesNotHaveFeature('subgroups'); if (t.params.type === 'f16') { t.skipIfDeviceDoesNotHaveFeature('shader-f16'); } @@ -168,7 +168,7 @@ TODO: support vec3 types. .combine('operation', kOperations) ) .fn(async t => { - t.skipIfDeviceDoesNotHaveFeature('subgroups' as GPUFeatureName); + t.skipIfDeviceDoesNotHaveFeature('subgroups'); const type = kDataTypes[t.params.type]; if (type.requiresF16()) { t.skipIfDeviceDoesNotHaveFeature('shader-f16'); @@ -295,7 +295,7 @@ g.test('compute,split') .combine('wgSize', kWGSizes) ) .fn(async t => { - t.skipIfDeviceDoesNotHaveFeature('subgroups' as GPUFeatureName); + t.skipIfDeviceDoesNotHaveFeature('subgroups'); const testcase = kPredicateCases[t.params.case]; const outputUintsPerElement = 1; const inputData = new Uint32Array([0]); // no input data @@ -481,7 +481,7 @@ g.test('fragment') .combineWithParams([{ format: 'rgba32uint' }] as const) ) .fn(async t => { - t.skipIfDeviceDoesNotHaveFeature('subgroups' as GPUFeatureName); + t.skipIfDeviceDoesNotHaveFeature('subgroups'); const subgroupMinSize = t.device.adapterInfo.subgroupMinSize!; const innerTexels = (t.params.size[0] - 1) * (t.params.size[1] - 1); t.skipIf(innerTexels < subgroupMinSize, 'Too few texels to be reliable'); diff --git a/src/webgpu/shader/execution/expression/call/builtin/subgroupAll.spec.ts b/src/webgpu/shader/execution/expression/call/builtin/subgroupAll.spec.ts index 8969695785cd..8c22d07c3db7 100644 --- a/src/webgpu/shader/execution/expression/call/builtin/subgroupAll.spec.ts +++ b/src/webgpu/shader/execution/expression/call/builtin/subgroupAll.spec.ts @@ -132,7 +132,7 @@ g.test('compute,all_active') .combine('case', [...iterRange(kNumCases, x => x)]) ) .fn(async t => { - t.skipIfDeviceDoesNotHaveFeature('subgroups' as GPUFeatureName); + t.skipIfDeviceDoesNotHaveFeature('subgroups'); const wgThreads = t.params.wgSize[0] * t.params.wgSize[1] * t.params.wgSize[2]; const wgsl = ` @@ -196,7 +196,7 @@ g.test('compute,split') .combine('case', [...iterRange(kNumCases, x => x)]) ) .fn(async t => { - t.skipIfDeviceDoesNotHaveFeature('subgroups' as GPUFeatureName); + t.skipIfDeviceDoesNotHaveFeature('subgroups'); const testcase = kPredicateCases[t.params.predicate]; const wgThreads = t.params.wgSize[0] * t.params.wgSize[1] * t.params.wgSize[2]; @@ -327,7 +327,7 @@ g.test('fragment,all_active') .combineWithParams([{ format: 'rg32uint' }] as const) ) .fn(async t => { - t.skipIfDeviceDoesNotHaveFeature('subgroups' as GPUFeatureName); + t.skipIfDeviceDoesNotHaveFeature('subgroups'); const numInputs = t.params.size[0] * t.params.size[1]; const inputData = generateInputData(t.params.case, numInputs); diff --git a/src/webgpu/shader/execution/expression/call/builtin/subgroupAny.spec.ts b/src/webgpu/shader/execution/expression/call/builtin/subgroupAny.spec.ts index 866f49790e44..012ec9110b43 100644 --- a/src/webgpu/shader/execution/expression/call/builtin/subgroupAny.spec.ts +++ b/src/webgpu/shader/execution/expression/call/builtin/subgroupAny.spec.ts @@ -132,7 +132,7 @@ g.test('compute,all_active') .combine('case', [...iterRange(kNumCases, x => x)]) ) .fn(async t => { - t.skipIfDeviceDoesNotHaveFeature('subgroups' as GPUFeatureName); + t.skipIfDeviceDoesNotHaveFeature('subgroups'); const wgThreads = t.params.wgSize[0] * t.params.wgSize[1] * t.params.wgSize[2]; const wgsl = ` @@ -196,7 +196,7 @@ g.test('compute,split') .combine('case', [...iterRange(kNumCases, x => x)]) ) .fn(async t => { - t.skipIfDeviceDoesNotHaveFeature('subgroups' as GPUFeatureName); + t.skipIfDeviceDoesNotHaveFeature('subgroups'); const testcase = kPredicateCases[t.params.predicate]; const wgThreads = t.params.wgSize[0] * t.params.wgSize[1] * t.params.wgSize[2]; @@ -327,7 +327,7 @@ g.test('fragment,all_active') .combineWithParams([{ format: 'rg32uint' }] as const) ) .fn(async t => { - t.skipIfDeviceDoesNotHaveFeature('subgroups' as GPUFeatureName); + t.skipIfDeviceDoesNotHaveFeature('subgroups'); const numInputs = t.params.size[0] * t.params.size[1]; const inputData = generateInputData(t.params.case, numInputs); diff --git a/src/webgpu/shader/execution/expression/call/builtin/subgroupBallot.spec.ts b/src/webgpu/shader/execution/expression/call/builtin/subgroupBallot.spec.ts index 5e469694c663..8e2c549f19c8 100644 --- a/src/webgpu/shader/execution/expression/call/builtin/subgroupBallot.spec.ts +++ b/src/webgpu/shader/execution/expression/call/builtin/subgroupBallot.spec.ts @@ -186,7 +186,7 @@ g.test('compute,split') .desc('Tests ballot in a split subgroup') .params(u => u.combine('case', keysOf(kCases))) .fn(async t => { - t.skipIfDeviceDoesNotHaveFeature('subgroups' as GPUFeatureName); + t.skipIfDeviceDoesNotHaveFeature('subgroups'); const testcase = kCases[t.params.case]; const wgsl = ` enable subgroups; @@ -222,7 +222,7 @@ g.test('predicate') .desc('Tests the predicate parameter') .params(u => u.combine('case', keysOf(kCases))) .fn(async t => { - t.skipIfDeviceDoesNotHaveFeature('subgroups' as GPUFeatureName); + t.skipIfDeviceDoesNotHaveFeature('subgroups'); const testcase = kCases[t.params.case]; const wgsl = ` enable subgroups; @@ -310,7 +310,7 @@ g.test('predicate_and_control_flow') .desc('Test dynamic predicate and control flow together') .params(u => u.combine('case', keysOf(kBothCases))) .fn(async t => { - t.skipIfDeviceDoesNotHaveFeature('subgroups' as GPUFeatureName); + t.skipIfDeviceDoesNotHaveFeature('subgroups'); const testcase = kBothCases[t.params.case]; const wgsl = ` enable subgroups; @@ -519,7 +519,7 @@ g.test('fragment') .combineWithParams([{ format: 'rgba32uint' }] as const) ) .fn(async t => { - t.skipIfDeviceDoesNotHaveFeature('subgroups' as GPUFeatureName); + t.skipIfDeviceDoesNotHaveFeature('subgroups'); const width = t.params.size[0]; const height = t.params.size[1]; const testcase = kFragmentPredicates[t.params.predicate]; diff --git a/src/webgpu/shader/execution/expression/call/builtin/subgroupBitwise.spec.ts b/src/webgpu/shader/execution/expression/call/builtin/subgroupBitwise.spec.ts index 170a4ee13e46..cc396e7158a3 100644 --- a/src/webgpu/shader/execution/expression/call/builtin/subgroupBitwise.spec.ts +++ b/src/webgpu/shader/execution/expression/call/builtin/subgroupBitwise.spec.ts @@ -134,7 +134,7 @@ g.test('data_types') .combine('op', kOps) ) .fn(async t => { - t.skipIfDeviceDoesNotHaveFeature('subgroups' as GPUFeatureName); + t.skipIfDeviceDoesNotHaveFeature('subgroups'); const type = kTypes[t.params.type]; let numEles = 1; if (type instanceof VectorType) { @@ -293,7 +293,7 @@ g.test('compute,all_active') .combine('op', kOps) ) .fn(async t => { - t.skipIfDeviceDoesNotHaveFeature('subgroups' as GPUFeatureName); + t.skipIfDeviceDoesNotHaveFeature('subgroups'); const wgThreads = t.params.wgSize[0] * t.params.wgSize[1] * t.params.wgSize[2]; const wgsl = ` @@ -364,7 +364,7 @@ g.test('compute,split') .combine('case', [...iterRange(kNumCases, x => x)]) ) .fn(async t => { - t.skipIfDeviceDoesNotHaveFeature('subgroups' as GPUFeatureName); + t.skipIfDeviceDoesNotHaveFeature('subgroups'); const testcase = kPredicateCases[t.params.predicate]; const wgThreads = t.params.wgSize[0] * t.params.wgSize[1] * t.params.wgSize[2]; @@ -535,7 +535,7 @@ g.test('fragment,all_active') .combineWithParams([{ format: 'rg32uint' }] as const) ) .fn(async t => { - t.skipIfDeviceDoesNotHaveFeature('subgroups' as GPUFeatureName); + t.skipIfDeviceDoesNotHaveFeature('subgroups'); const numInputs = t.params.size[0] * t.params.size[1]; const subgroupMinSize = t.device.adapterInfo.subgroupMinSize!; diff --git a/src/webgpu/shader/execution/expression/call/builtin/subgroupBroadcast.spec.ts b/src/webgpu/shader/execution/expression/call/builtin/subgroupBroadcast.spec.ts index 1067c9c45774..5aef69748145 100644 --- a/src/webgpu/shader/execution/expression/call/builtin/subgroupBroadcast.spec.ts +++ b/src/webgpu/shader/execution/expression/call/builtin/subgroupBroadcast.spec.ts @@ -108,7 +108,7 @@ g.test('data_types') .fn(async t => { const wgSize = [4, 1, 1]; const type = kDataTypes[t.params.type]; - t.skipIfDeviceDoesNotHaveFeature('subgroups' as GPUFeatureName); + t.skipIfDeviceDoesNotHaveFeature('subgroups'); if (type.requiresF16()) { t.skipIfDeviceDoesNotHaveFeature('shader-f16'); } @@ -174,7 +174,7 @@ g.test('workgroup_uniform_load') .combine('first', [false, true] as const) ) .fn(t => { - t.skipIfDeviceDoesNotHaveFeature('subgroups' as GPUFeatureName); + t.skipIfDeviceDoesNotHaveFeature('subgroups'); // Compatibility mode has lower workgroup limits. const wgThreads = t.params.wgSize[0] * t.params.wgSize[1] * t.params.wgSize[2]; const { @@ -368,7 +368,7 @@ g.test('compute,all_active') .combine('id', [0, 1, 2, 3, 7, 13, 25, 46] as const) ) .fn(async t => { - t.skipIfDeviceDoesNotHaveFeature('subgroups' as GPUFeatureName); + t.skipIfDeviceDoesNotHaveFeature('subgroups'); const wgThreads = t.params.wgSize[0] * t.params.wgSize[1] * t.params.wgSize[2]; const broadcast = @@ -459,7 +459,7 @@ g.test('compute,split') .combine('wgSize', kWGSizes) ) .fn(async t => { - t.skipIfDeviceDoesNotHaveFeature('subgroups' as GPUFeatureName); + t.skipIfDeviceDoesNotHaveFeature('subgroups'); const testcase = kPredicateCases[t.params.predicate]; const wgThreads = t.params.wgSize[0] * t.params.wgSize[1] * t.params.wgSize[2]; @@ -540,7 +540,7 @@ g.test('broadcastFirst,split') u.combine('predicate', keysOf(kPredicateCases)).beginSubcases().combine('wgSize', kWGSizes) ) .fn(async t => { - t.skipIfDeviceDoesNotHaveFeature('subgroups' as GPUFeatureName); + t.skipIfDeviceDoesNotHaveFeature('subgroups'); const testcase = kPredicateCases[t.params.predicate]; const wgThreads = t.params.wgSize[0] * t.params.wgSize[1] * t.params.wgSize[2]; @@ -691,7 +691,7 @@ g.test('fragment') .combineWithParams([{ format: 'rgba32uint' }] as const) ) .fn(async t => { - t.skipIfDeviceDoesNotHaveFeature('subgroups' as GPUFeatureName); + t.skipIfDeviceDoesNotHaveFeature('subgroups'); const innerTexels = (t.params.size[0] - 1) * (t.params.size[1] - 1); const subgroupMaxSize = t.device.adapterInfo.subgroupMaxSize!; t.skipIf(innerTexels < subgroupMaxSize, 'Too few texels to be reliable'); diff --git a/src/webgpu/shader/execution/expression/call/builtin/subgroupElect.spec.ts b/src/webgpu/shader/execution/expression/call/builtin/subgroupElect.spec.ts index 9143c41ecc34..52f658cd7175 100644 --- a/src/webgpu/shader/execution/expression/call/builtin/subgroupElect.spec.ts +++ b/src/webgpu/shader/execution/expression/call/builtin/subgroupElect.spec.ts @@ -63,7 +63,7 @@ g.test('compute,all_active') .desc('Test subgroupElect in compute shader with all active invocations') .params(u => u.combine('wgSize', kWGSizes)) .fn(async t => { - t.skipIfDeviceDoesNotHaveFeature('subgroups' as GPUFeatureName); + t.skipIfDeviceDoesNotHaveFeature('subgroups'); const wgThreads = t.params.wgSize[0] * t.params.wgSize[1] * t.params.wgSize[2]; const wgsl = ` @@ -119,7 +119,7 @@ g.test('compute,split') u.combine('predicate', keysOf(kPredicateCases)).beginSubcases().combine('wgSize', kWGSizes) ) .fn(async t => { - t.skipIfDeviceDoesNotHaveFeature('subgroups' as GPUFeatureName); + t.skipIfDeviceDoesNotHaveFeature('subgroups'); const testcase = kPredicateCases[t.params.predicate]; const wgThreads = t.params.wgSize[0] * t.params.wgSize[1] * t.params.wgSize[2]; @@ -183,7 +183,7 @@ g.test('compute,each_invocation') .combine('wgSize', kWGSizes) ) .fn(async t => { - t.skipIfDeviceDoesNotHaveFeature('subgroups' as GPUFeatureName); + t.skipIfDeviceDoesNotHaveFeature('subgroups'); const wgThreads = t.params.wgSize[0] * t.params.wgSize[1] * t.params.wgSize[2]; const subgroupMaxSize = t.device.adapterInfo.subgroupMaxSize!; @@ -328,7 +328,7 @@ g.test('fragment') .combineWithParams([{ format: 'rgba32uint' }] as const) ) .fn(async t => { - t.skipIfDeviceDoesNotHaveFeature('subgroups' as GPUFeatureName); + t.skipIfDeviceDoesNotHaveFeature('subgroups'); const subgroupMinSize = t.device.adapterInfo.subgroupMinSize!; const innerTexels = (t.params.size[0] - 1) * (t.params.size[1] - 1); t.skipIf(innerTexels < subgroupMinSize, 'Too few texels to be reliable'); diff --git a/src/webgpu/shader/execution/expression/call/builtin/subgroupMinMax.spec.ts b/src/webgpu/shader/execution/expression/call/builtin/subgroupMinMax.spec.ts index a8eed3299b99..b21d6c3a8fb3 100644 --- a/src/webgpu/shader/execution/expression/call/builtin/subgroupMinMax.spec.ts +++ b/src/webgpu/shader/execution/expression/call/builtin/subgroupMinMax.spec.ts @@ -99,7 +99,7 @@ and limit the number of permutations needed to calculate the final result.` ] as const) ) .fn(async t => { - t.skipIfDeviceDoesNotHaveFeature('subgroups' as GPUFeatureName); + t.skipIfDeviceDoesNotHaveFeature('subgroups'); if (t.params.type === 'f16') { t.skipIfDeviceDoesNotHaveFeature('shader-f16'); } @@ -182,7 +182,7 @@ g.test('data_types') .fn(async t => { const wgSize = [4, 1, 1]; const type = kDataTypes[t.params.type]; - t.skipIfDeviceDoesNotHaveFeature('subgroups' as GPUFeatureName); + t.skipIfDeviceDoesNotHaveFeature('subgroups'); if (type.requiresF16()) { t.skipIfDeviceDoesNotHaveFeature('shader-f16'); } @@ -324,7 +324,7 @@ g.test('compute,all_active') .combine('case', [...iterRange(kNumRandomCases, x => x)] as const) ) .fn(async t => { - t.skipIfDeviceDoesNotHaveFeature('subgroups' as GPUFeatureName); + t.skipIfDeviceDoesNotHaveFeature('subgroups'); const wgThreads = t.params.wgSize[0] * t.params.wgSize[1] * t.params.wgSize[2]; const wgsl = ` @@ -396,7 +396,7 @@ g.test('compute,split') .combine('case', [...iterRange(kNumRandomCases, x => x)]) ) .fn(async t => { - t.skipIfDeviceDoesNotHaveFeature('subgroups' as GPUFeatureName); + t.skipIfDeviceDoesNotHaveFeature('subgroups'); const testcase = kPredicateCases[t.params.predicate]; const wgThreads = t.params.wgSize[0] * t.params.wgSize[1] * t.params.wgSize[2]; @@ -570,7 +570,7 @@ g.test('fragment') .combineWithParams([{ format: 'rg32uint' }] as const) ) .fn(async t => { - t.skipIfDeviceDoesNotHaveFeature('subgroups' as GPUFeatureName); + t.skipIfDeviceDoesNotHaveFeature('subgroups'); const numInputs = t.params.size[0] * t.params.size[1]; const subgroupMinSize = t.device.adapterInfo.subgroupMinSize!; diff --git a/src/webgpu/shader/execution/expression/call/builtin/subgroupMul.spec.ts b/src/webgpu/shader/execution/expression/call/builtin/subgroupMul.spec.ts index a4a0f813ee5a..261c76b17f2b 100644 --- a/src/webgpu/shader/execution/expression/call/builtin/subgroupMul.spec.ts +++ b/src/webgpu/shader/execution/expression/call/builtin/subgroupMul.spec.ts @@ -67,7 +67,7 @@ and limit the number of permutations needed to calculate the final result.` ] as const) ) .fn(async t => { - t.skipIfDeviceDoesNotHaveFeature('subgroups' as GPUFeatureName); + t.skipIfDeviceDoesNotHaveFeature('subgroups'); if (t.params.type === 'f16') { t.skipIfDeviceDoesNotHaveFeature('shader-f16'); } @@ -186,7 +186,7 @@ TODO: support vec3 types. .combine('operation', kOperations) ) .fn(async t => { - t.skipIfDeviceDoesNotHaveFeature('subgroups' as GPUFeatureName); + t.skipIfDeviceDoesNotHaveFeature('subgroups'); const type = kDataTypes[t.params.type]; if (type.requiresF16()) { t.skipIfDeviceDoesNotHaveFeature('shader-f16'); @@ -320,7 +320,7 @@ g.test('compute,split') .combine('wgSize', kWGSizes) ) .fn(async t => { - t.skipIfDeviceDoesNotHaveFeature('subgroups' as GPUFeatureName); + t.skipIfDeviceDoesNotHaveFeature('subgroups'); const testcase = kPredicateCases[t.params.case]; const outputUintsPerElement = 1; const inputData = new Uint32Array([0]); // no input data @@ -511,7 +511,7 @@ g.test('fragment') .combineWithParams([{ format: 'rgba32uint' }] as const) ) .fn(async t => { - t.skipIfDeviceDoesNotHaveFeature('subgroups' as GPUFeatureName); + t.skipIfDeviceDoesNotHaveFeature('subgroups'); const subgroupMinSize = t.device.adapterInfo.subgroupMinSize!; const subgroupMaxSize = t.device.adapterInfo.subgroupMaxSize!; const innerTexels = (t.params.size[0] - 1) * (t.params.size[1] - 1); diff --git a/src/webgpu/shader/execution/expression/call/builtin/subgroupShuffle.spec.ts b/src/webgpu/shader/execution/expression/call/builtin/subgroupShuffle.spec.ts index 94e9880a1804..e0ef78dde3f6 100644 --- a/src/webgpu/shader/execution/expression/call/builtin/subgroupShuffle.spec.ts +++ b/src/webgpu/shader/execution/expression/call/builtin/subgroupShuffle.spec.ts @@ -111,7 +111,7 @@ g.test('shuffle,id') .desc(`Tests various ways to shuffle invocations`) .params(u => u.combine('case', keysOf(kShuffleCases))) .fn(async t => { - t.skipIfDeviceDoesNotHaveFeature('subgroups' as GPUFeatureName); + t.skipIfDeviceDoesNotHaveFeature('subgroups'); const testcase = kShuffleCases[t.params.case]; const wgsl = ` @@ -233,7 +233,7 @@ g.test('shuffleUpDown,delta') .desc(`Test ShuffleUp and ShuffleDown deltas`) .params(u => u.combine('op', kUpDownOps).combine('case', keysOf(kUpDownCases))) .fn(async t => { - t.skipIfDeviceDoesNotHaveFeature('subgroups' as GPUFeatureName); + t.skipIfDeviceDoesNotHaveFeature('subgroups'); const testcase = kUpDownCases[t.params.case]; const wgsl = ` @@ -324,7 +324,7 @@ g.test('shuffleXor,mask') .desc(`Test ShuffleXor masks`) .params(u => u.combine('case', keysOf(kMaskCases))) .fn(async t => { - t.skipIfDeviceDoesNotHaveFeature('subgroups' as GPUFeatureName); + t.skipIfDeviceDoesNotHaveFeature('subgroups'); const testcase = kMaskCases[t.params.case]; const wgsl = ` @@ -508,7 +508,7 @@ g.test('compute,all_active') .combine('case', [...iterRange(kNumCases, x => x)]) ) .fn(async t => { - t.skipIfDeviceDoesNotHaveFeature('subgroups' as GPUFeatureName); + t.skipIfDeviceDoesNotHaveFeature('subgroups'); const wgThreads = t.params.wgSize[0] * t.params.wgSize[1] * t.params.wgSize[2]; let selectValue = `input[lid]`; @@ -586,7 +586,7 @@ g.test('compute,split') .combine('wgSize', kWGSizes) ) .fn(async t => { - t.skipIfDeviceDoesNotHaveFeature('subgroups' as GPUFeatureName); + t.skipIfDeviceDoesNotHaveFeature('subgroups'); const testcase = kPredicateCases[t.params.predicate]; const wgThreads = t.params.wgSize[0] * t.params.wgSize[1] * t.params.wgSize[2]; @@ -741,7 +741,7 @@ g.test('data_types') .fn(async t => { const wgSize = [4, 1, 1]; const type = kTypes[t.params.type]; - t.skipIfDeviceDoesNotHaveFeature('subgroups' as GPUFeatureName); + t.skipIfDeviceDoesNotHaveFeature('subgroups'); if (type.requiresF16()) { t.skipIfDeviceDoesNotHaveFeature('shader-f16'); } @@ -887,7 +887,7 @@ g.test('fragment') .combineWithParams([{ format: 'rgba32uint' }] as const) ) .fn(async t => { - t.skipIfDeviceDoesNotHaveFeature('subgroups' as GPUFeatureName); + t.skipIfDeviceDoesNotHaveFeature('subgroups'); const fsShader = ` enable subgroups; diff --git a/src/webgpu/shader/execution/shader_io/compute_builtins.spec.ts b/src/webgpu/shader/execution/shader_io/compute_builtins.spec.ts index 5caa3cfb4246..5a5fdb7fb8de 100644 --- a/src/webgpu/shader/execution/shader_io/compute_builtins.spec.ts +++ b/src/webgpu/shader/execution/shader_io/compute_builtins.spec.ts @@ -446,7 +446,7 @@ g.test('subgroup_size') ] as const) ) .fn(async t => { - t.skipIfDeviceDoesNotHaveFeature('subgroups' as GPUFeatureName); + t.skipIfDeviceDoesNotHaveFeature('subgroups'); const subgroupMinSize = t.device.adapterInfo.subgroupMinSize!; const subgroupMaxSize = t.device.adapterInfo.subgroupMaxSize!; @@ -650,7 +650,7 @@ g.test('subgroup_invocation_id') ] as const) ) .fn(async t => { - t.skipIfDeviceDoesNotHaveFeature('subgroups' as GPUFeatureName); + t.skipIfDeviceDoesNotHaveFeature('subgroups'); const wgx = t.params.sizes[0]; const wgy = t.params.sizes[1]; const wgz = t.params.sizes[2]; @@ -879,7 +879,7 @@ g.test('subgroup_id') ] as const) ) .fn(async t => { - t.skipIfDeviceDoesNotHaveFeature('subgroups' as GPUFeatureName); + t.skipIfDeviceDoesNotHaveFeature('subgroups'); t.skipIfLanguageFeatureNotSupported('subgroup_id'); const wgx = t.params.sizes[0]; const wgy = t.params.sizes[1]; @@ -1037,7 +1037,7 @@ g.test('num_subgroups') ] as const) ) .fn(async t => { - t.skipIfDeviceDoesNotHaveFeature('subgroups' as GPUFeatureName); + t.skipIfDeviceDoesNotHaveFeature('subgroups'); t.skipIfLanguageFeatureNotSupported('subgroup_id'); const wgx = t.params.sizes[0]; const wgy = t.params.sizes[1]; diff --git a/src/webgpu/shader/execution/shader_io/fragment_builtins.spec.ts b/src/webgpu/shader/execution/shader_io/fragment_builtins.spec.ts index 4bb493f67fee..5ec88c3eaae1 100644 --- a/src/webgpu/shader/execution/shader_io/fragment_builtins.spec.ts +++ b/src/webgpu/shader/execution/shader_io/fragment_builtins.spec.ts @@ -1727,7 +1727,7 @@ g.test('subgroup_size') .combineWithParams([{ format: 'rgba32uint' }] as const) ) .fn(async t => { - t.skipIfDeviceDoesNotHaveFeature('subgroups' as GPUFeatureName); + t.skipIfDeviceDoesNotHaveFeature('subgroups'); const subgroupMinSize = t.device.adapterInfo.subgroupMinSize!; const subgroupMaxSize = t.device.adapterInfo.subgroupMaxSize!; @@ -1877,7 +1877,7 @@ g.test('subgroup_invocation_id') .combineWithParams([{ format: 'rgba32uint' }] as const) ) .fn(async t => { - t.skipIfDeviceDoesNotHaveFeature('subgroups' as GPUFeatureName); + t.skipIfDeviceDoesNotHaveFeature('subgroups'); const fsShader = ` enable subgroups; @@ -2134,7 +2134,7 @@ g.test('primitive_index,basic') ) .fn(t => { const { triCount, instances, firstVertex, firstIndex, firstInstance } = t.params; - t.skipIfDeviceDoesNotHaveFeature('primitive-index' as GPUFeatureName); + t.skipIfDeviceDoesNotHaveFeature('primitive-index'); runPrimitiveIndexTest(t, { count: triCount * 3, @@ -2165,7 +2165,7 @@ g.test('primitive_index,primitive_reset') 'Tests that the primitive_index built-in value does not increment or reset across primitive resets' ) .fn(t => { - t.skipIfDeviceDoesNotHaveFeature('primitive-index' as GPUFeatureName); + t.skipIfDeviceDoesNotHaveFeature('primitive-index'); runPrimitiveIndexTest(t, { count: 10, @@ -2190,7 +2190,7 @@ g.test('primitive_index,discarded_primitves') ) .fn(t => { const { vertices } = t.params; - t.skipIfDeviceDoesNotHaveFeature('primitive-index' as GPUFeatureName); + t.skipIfDeviceDoesNotHaveFeature('primitive-index'); runPrimitiveIndexTest(t, { count: 6, @@ -2203,7 +2203,7 @@ g.test('primitive_index,discarded_primitves') g.test('primitive_index,topologies') .desc('Tests that the primitive_index built-in value works every topology') .fn(t => { - t.skipIfDeviceDoesNotHaveFeature('primitive-index' as GPUFeatureName); + t.skipIfDeviceDoesNotHaveFeature('primitive-index'); const triListVertices = [ // 0,2 diff --git a/src/webgpu/shader/validation/shader_validation_test.ts b/src/webgpu/shader/validation/shader_validation_test.ts index a5d8689c6b4d..94df1d43b03d 100644 --- a/src/webgpu/shader/validation/shader_validation_test.ts +++ b/src/webgpu/shader/validation/shader_validation_test.ts @@ -7,10 +7,10 @@ import { const kEnables: Record = { f16: 'shader-f16', - subgroups: 'subgroups' as GPUFeatureName, - clip_distances: 'clip-distances' as GPUFeatureName, + subgroups: 'subgroups', + clip_distances: 'clip-distances', chromium_experimental_primitive_id: 'chromium-experimental-primitive-id' as GPUFeatureName, - atomic_vec2u_min_max: 'atomic-vec2u-min-max' as GPUFeatureName, + atomic_vec2u_min_max: 'atomic-vec2u-min-max', }; /**