diff options
Diffstat (limited to 'dom/webgpu/tests/cts/checkout/src/webgpu/shader/validation/expression/call/builtin/radians.spec.ts')
-rw-r--r-- | dom/webgpu/tests/cts/checkout/src/webgpu/shader/validation/expression/call/builtin/radians.spec.ts | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/dom/webgpu/tests/cts/checkout/src/webgpu/shader/validation/expression/call/builtin/radians.spec.ts b/dom/webgpu/tests/cts/checkout/src/webgpu/shader/validation/expression/call/builtin/radians.spec.ts new file mode 100644 index 0000000000..dd432ac194 --- /dev/null +++ b/dom/webgpu/tests/cts/checkout/src/webgpu/shader/validation/expression/call/builtin/radians.spec.ts @@ -0,0 +1,76 @@ +const builtin = 'radians'; +export const description = ` +Validation tests for the ${builtin}() builtin. +`; + +import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +import { keysOf, objectsToRecord } from '../../../../../../common/util/data_tables.js'; +import { + TypeF16, + TypeF32, + elementType, + kAllFloatScalarsAndVectors, + kAllIntegerScalarsAndVectors, +} from '../../../../../util/conversion.js'; +import { ShaderValidationTest } from '../../../shader_validation_test.js'; + +import { + fullRangeForType, + kConstantAndOverrideStages, + stageSupportsType, + validateConstOrOverrideBuiltinEval, +} from './const_override_validation.js'; + +export const g = makeTestGroup(ShaderValidationTest); + +const kValuesTypes = objectsToRecord(kAllFloatScalarsAndVectors); + +g.test('values') + .desc( + ` +Validates that constant evaluation and override evaluation of ${builtin}() inputs rejects invalid values +` + ) + .params(u => + u + .combine('stage', kConstantAndOverrideStages) + .combine('type', keysOf(kValuesTypes)) + .filter(u => stageSupportsType(u.stage, kValuesTypes[u.type])) + .beginSubcases() + .expand('value', u => fullRangeForType(kValuesTypes[u.type])) + ) + .beforeAllSubcases(t => { + if (elementType(kValuesTypes[t.params.type]) === TypeF16) { + t.selectDeviceOrSkipTestCase('shader-f16'); + } + }) + .fn(t => { + const expectedResult = true; // The result is always smaller than the input, so can't go OOB. + validateConstOrOverrideBuiltinEval( + t, + builtin, + expectedResult, + [kValuesTypes[t.params.type].create(t.params.value)], + t.params.stage + ); + }); + +const kIntegerArgumentTypes = objectsToRecord([TypeF32, ...kAllIntegerScalarsAndVectors]); + +g.test('integer_argument') + .desc( + ` +Validates that scalar and vector integer arguments are rejected by ${builtin}() +` + ) + .params(u => u.combine('type', keysOf(kIntegerArgumentTypes))) + .fn(t => { + const type = kIntegerArgumentTypes[t.params.type]; + validateConstOrOverrideBuiltinEval( + t, + builtin, + /* expectedResult */ type === TypeF32, + [type.create(1)], + 'constant' + ); + }); |