From 262084f9cd026447b122f8b2d134fdabb3aa3380 Mon Sep 17 00:00:00 2001 From: dan sinclair Date: Tue, 26 Mar 2024 15:47:53 -0400 Subject: [PATCH] Add parameter validation for `asinh` (#3559) This CL adds tests for parameter validation to the `asinh` builtin. --- src/webgpu/listing_meta.json | 1 + .../expression/call/builtin/asinh.spec.ts | 120 ++++++++++++++++++ 2 files changed, 121 insertions(+) diff --git a/src/webgpu/listing_meta.json b/src/webgpu/listing_meta.json index 413de8791122..7e7db0ed7cbd 100644 --- a/src/webgpu/listing_meta.json +++ b/src/webgpu/listing_meta.json @@ -1888,6 +1888,7 @@ "webgpu:shader,validation,expression,call,builtin,asin:parameters:*": { "subcaseMS": 20072.777 }, "webgpu:shader,validation,expression,call,builtin,asin:values:*": { "subcaseMS": 0.359 }, "webgpu:shader,validation,expression,call,builtin,asinh:integer_argument:*": { "subcaseMS": 1.267 }, + "webgpu:shader,validation,expression,call,builtin,asinh:parameters:*": { "subcaseMS": 17189.159 }, "webgpu:shader,validation,expression,call,builtin,asinh:values:*": { "subcaseMS": 0.372 }, "webgpu:shader,validation,expression,call,builtin,atan2:integer_argument_x:*": { "subcaseMS": 0.912 }, "webgpu:shader,validation,expression,call,builtin,atan2:integer_argument_y:*": { "subcaseMS": 0.867 }, diff --git a/src/webgpu/shader/validation/expression/call/builtin/asinh.spec.ts b/src/webgpu/shader/validation/expression/call/builtin/asinh.spec.ts index cec4b73c6094..285ff2dcd275 100644 --- a/src/webgpu/shader/validation/expression/call/builtin/asinh.spec.ts +++ b/src/webgpu/shader/validation/expression/call/builtin/asinh.spec.ts @@ -89,3 +89,123 @@ Validates that scalar and vector integer arguments are rejected by ${builtin}() 'constant' ); }); + +const kTests = { + valid: { + src: `_ = asinh(1);`, + pass: true, + }, + alias: { + src: `_ = asinh(f32_alias(1));`, + pass: true, + }, + + bool: { + src: `_ = asinh(false);`, + pass: false, + }, + i32: { + src: `_ = asinh(1i);`, + pass: false, + }, + u32: { + src: `_ = asinh(1u);`, + pass: false, + }, + vec_bool: { + src: `_ = asinh(vec2(false, true));`, + pass: false, + }, + vec_i32: { + src: `_ = asinh(vec2(1, 1));`, + pass: false, + }, + vec_u32: { + src: `_ = asinh(vec2(1, 1));`, + pass: false, + }, + matrix: { + src: `_ = asinh(mat2x2(1, 1, 1, 1));`, + pass: false, + }, + atomic: { + src: ` _ = asinh(a);`, + pass: false, + }, + array: { + src: `var a: array; + _ = asinh(a);`, + pass: false, + }, + array_runtime: { + src: `_ = asinh(k.arry);`, + pass: false, + }, + struct: { + src: `var a: A; + _ = asinh(a);`, + pass: false, + }, + enumerant: { + src: `_ = asinh(read_write);`, + pass: false, + }, + ptr: { + src: `var a = 1f; + let p: ptr = &a; + _ = asinh(p);`, + pass: false, + }, + ptr_deref: { + src: `var a = 1f; + let p: ptr = &a; + _ = asinh(*p);`, + pass: true, + }, + sampler: { + src: `_ = asinh(s);`, + pass: false, + }, + texture: { + src: `_ = asinh(t);`, + pass: false, + }, + no_params: { + src: `_ = asinh();`, + pass: false, + }, + too_many_params: { + src: `_ = asinh(1, 2);`, + pass: false, + }, +}; + +g.test('parameters') + .desc(`Test that ${builtin} is validated correctly.`) + .params(u => u.combine('test', keysOf(kTests))) + .fn(t => { + const src = kTests[t.params.test].src; + const code = ` +alias f32_alias = f32; + +@group(0) @binding(0) var s: sampler; +@group(0) @binding(1) var t: texture_2d; + +var a: atomic; + +struct A { + i: u32, +} +struct B { + arry: array, +} +@group(0) @binding(3) var k: B; + + +@vertex +fn main() -> @builtin(position) vec4 { + ${src} + return vec4(.4, .2, .3, .1); +}`; + t.expectCompileResult(kTests[t.params.test].pass, code); + });