From 97fc4f6b4feb45b3bcf80b1f3be7e292501d14cb Mon Sep 17 00:00:00 2001 From: Alan Baker Date: Wed, 27 Nov 2024 13:10:36 -0500 Subject: [PATCH 1/2] Add validation of subgroup_uniformity diagnostic --- .../validation/parse/diagnostic.spec.ts | 35 ++++++++++++++++--- 1 file changed, 30 insertions(+), 5 deletions(-) diff --git a/src/webgpu/shader/validation/parse/diagnostic.spec.ts b/src/webgpu/shader/validation/parse/diagnostic.spec.ts index becf47f40ba4..21656d799419 100644 --- a/src/webgpu/shader/validation/parse/diagnostic.spec.ts +++ b/src/webgpu/shader/validation/parse/diagnostic.spec.ts @@ -6,7 +6,7 @@ import { ShaderValidationTest } from '../shader_validation_test.js'; export const g = makeTestGroup(ShaderValidationTest); -const kSpecDiagnosticRules = ['derivative_uniformity']; +const kSpecDiagnosticRules = ['derivative_uniformity', 'subgroup_uniformity']; const kSpecDiagnosticSeverities = ['off', 'info', 'warning', 'error']; const kDiagnosticTypes = ['attribute', 'directive']; @@ -80,6 +80,11 @@ g.test('valid_params') .combine('rule', kSpecDiagnosticRules) .combine('type', kDiagnosticTypes) ) + .beforeAllSubcases(t => { + if (t.params.rule === 'subgroup_uniformity') { + t.selectDeviceOrSkipTestCase('subgroups' as GPUFeatureName); + } + }) .fn(t => { const diag = generateDiagnostic(t.params.type, t.params.severity, t.params.rule); let code = ``; @@ -124,9 +129,19 @@ g.test('warning_unknown_rule') g.test('valid_locations') .specURL('https://gpuweb.github.io/gpuweb/wgsl/#diagnostics') .desc(`Tests valid locations`) - .params(u => u.combine('type', kDiagnosticTypes).combine('location', keysOf(kValidLocations))) + .params(u => + u + .combine('type', kDiagnosticTypes) + .combine('location', keysOf(kValidLocations)) + .combine('rule', kSpecDiagnosticRules) + ) + .beforeAllSubcases(t => { + if (t.params.rule === 'subgroup_uniformity') { + t.selectDeviceOrSkipTestCase('subgroups' as GPUFeatureName); + } + }) .fn(t => { - const diag = generateDiagnostic(t.params.type, 'info', 'derivative_uniformity'); + const diag = generateDiagnostic(t.params.type, 'info', t.params.rule); const code = kValidLocations[t.params.location](diag); let res = true; if (t.params.type === 'directive') { @@ -143,9 +158,19 @@ g.test('valid_locations') g.test('invalid_locations') .specURL('https://gpuweb.github.io/gpuweb/wgsl/#diagnostics') .desc(`Tests invalid locations`) - .params(u => u.combine('type', kDiagnosticTypes).combine('location', keysOf(kInvalidLocations))) + .params(u => + u + .combine('type', kDiagnosticTypes) + .combine('location', keysOf(kInvalidLocations)) + .combine('rule', kSpecDiagnosticRules) + ) + .beforeAllSubcases(t => { + if (t.params.rule === 'subgroup_uniformity') { + t.selectDeviceOrSkipTestCase('subgroups' as GPUFeatureName); + } + }) .fn(t => { - const diag = generateDiagnostic(t.params.type, 'info', 'derivative_uniformity'); + const diag = generateDiagnostic(t.params.type, 'info', t.params.rule); t.expectCompileResult(true, kInvalidLocations[t.params.location]('')); t.expectCompileResult(false, kInvalidLocations[t.params.location](diag)); }); From dbb53eb0388a75574d9ed136d99ed78280543070 Mon Sep 17 00:00:00 2001 From: Alan Baker Date: Fri, 29 Nov 2024 14:13:20 -0500 Subject: [PATCH 2/2] Changes for review * remove device selection for subgroup_uniformity --- .../shader/validation/parse/diagnostic.spec.ts | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/src/webgpu/shader/validation/parse/diagnostic.spec.ts b/src/webgpu/shader/validation/parse/diagnostic.spec.ts index 21656d799419..a8ccad526e46 100644 --- a/src/webgpu/shader/validation/parse/diagnostic.spec.ts +++ b/src/webgpu/shader/validation/parse/diagnostic.spec.ts @@ -80,11 +80,6 @@ g.test('valid_params') .combine('rule', kSpecDiagnosticRules) .combine('type', kDiagnosticTypes) ) - .beforeAllSubcases(t => { - if (t.params.rule === 'subgroup_uniformity') { - t.selectDeviceOrSkipTestCase('subgroups' as GPUFeatureName); - } - }) .fn(t => { const diag = generateDiagnostic(t.params.type, t.params.severity, t.params.rule); let code = ``; @@ -135,11 +130,6 @@ g.test('valid_locations') .combine('location', keysOf(kValidLocations)) .combine('rule', kSpecDiagnosticRules) ) - .beforeAllSubcases(t => { - if (t.params.rule === 'subgroup_uniformity') { - t.selectDeviceOrSkipTestCase('subgroups' as GPUFeatureName); - } - }) .fn(t => { const diag = generateDiagnostic(t.params.type, 'info', t.params.rule); const code = kValidLocations[t.params.location](diag); @@ -164,11 +154,6 @@ g.test('invalid_locations') .combine('location', keysOf(kInvalidLocations)) .combine('rule', kSpecDiagnosticRules) ) - .beforeAllSubcases(t => { - if (t.params.rule === 'subgroup_uniformity') { - t.selectDeviceOrSkipTestCase('subgroups' as GPUFeatureName); - } - }) .fn(t => { const diag = generateDiagnostic(t.params.type, 'info', t.params.rule); t.expectCompileResult(true, kInvalidLocations[t.params.location](''));