From f6337a44059621aea4de2961f17a57fdb3650e76 Mon Sep 17 00:00:00 2001 From: Ryan Harrison Date: Tue, 13 Feb 2024 16:53:33 -0500 Subject: [PATCH] wgsl: Implement AbstractInt remainder execution tests (#3400) Issue #1626 --- src/resources/cache/hashes.json | 2 +- .../shader/execution/binary/ai_arithmetic.bin | Bin 681680 -> 831992 bytes src/webgpu/listing_meta.json | 3 + .../expression/binary/ai_arithmetic.cache.ts | 28 +++++++++ .../expression/binary/ai_arithmetic.spec.ts | 58 ++++++++++++++++++ 5 files changed, 90 insertions(+), 1 deletion(-) diff --git a/src/resources/cache/hashes.json b/src/resources/cache/hashes.json index 1a698f89cac3..e7953a0afc90 100644 --- a/src/resources/cache/hashes.json +++ b/src/resources/cache/hashes.json @@ -104,6 +104,6 @@ "webgpu/shader/execution/unary/u32_complement.bin": "d00cdf00", "webgpu/shader/execution/unary/u32_conversion.bin": "2940ba5e", "webgpu/shader/execution/unary/ai_assignment.bin": "9c0d8f91", - "webgpu/shader/execution/binary/ai_arithmetic.bin": "f48612cb", + "webgpu/shader/execution/binary/ai_arithmetic.bin": "e17954", "webgpu/shader/execution/unary/ai_arithmetic.bin": "2a1ff461" } \ No newline at end of file diff --git a/src/resources/cache/webgpu/shader/execution/binary/ai_arithmetic.bin b/src/resources/cache/webgpu/shader/execution/binary/ai_arithmetic.bin index 49a8c9701890a03b16424042b561e3b0ab36649a..658eb46d3949a3187f3ad615d3b089ea106f5ffb 100644 GIT binary patch delta 19968 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 { return generateVectorI64BinaryToVectorCases(vectorI64Range(4), sparseI64Range(), ai_mul); }, + remainder: () => { + return generateBinaryToI64Cases(sparseI64Range(), sparseI64Range(), ai_rem); + }, + remainder_scalar_vector2: () => { + return generateI64VectorBinaryToVectorCases(sparseI64Range(), vectorI64Range(2), ai_rem); + }, + remainder_scalar_vector3: () => { + return generateI64VectorBinaryToVectorCases(sparseI64Range(), vectorI64Range(3), ai_rem); + }, + remainder_scalar_vector4: () => { + return generateI64VectorBinaryToVectorCases(sparseI64Range(), vectorI64Range(4), ai_rem); + }, + remainder_vector2_scalar: () => { + return generateVectorI64BinaryToVectorCases(vectorI64Range(2), sparseI64Range(), ai_rem); + }, + remainder_vector3_scalar: () => { + return generateVectorI64BinaryToVectorCases(vectorI64Range(3), sparseI64Range(), ai_rem); + }, + remainder_vector4_scalar: () => { + return generateVectorI64BinaryToVectorCases(vectorI64Range(4), sparseI64Range(), ai_rem); + }, subtraction: () => { return generateBinaryToI64Cases(sparseI64Range(), sparseI64Range(), ai_sub); }, diff --git a/src/webgpu/shader/execution/expression/binary/ai_arithmetic.spec.ts b/src/webgpu/shader/execution/expression/binary/ai_arithmetic.spec.ts index ac848a2bddc3..ae8b6ccf483b 100644 --- a/src/webgpu/shader/execution/expression/binary/ai_arithmetic.spec.ts +++ b/src/webgpu/shader/execution/expression/binary/ai_arithmetic.spec.ts @@ -186,6 +186,64 @@ Expression: x * y await run(t, abstractIntBinary('*'), [vec_type, TypeAbstractInt], vec_type, t.params, cases); }); +g.test('remainder') + .specURL('https://www.w3.org/TR/WGSL/#arithmetic-expr') + .desc( + ` +Expression: x % y +` + ) + .params(u => + u + .combine('inputSource', onlyConstInputSource) + .combine('vectorize', [undefined, 2, 3, 4] as const) + ) + .fn(async t => { + const cases = await d.get('remainder'); + await run( + t, + abstractIntBinary('%'), + [TypeAbstractInt, TypeAbstractInt], + TypeAbstractInt, + t.params, + cases + ); + }); + +g.test('remainder_scalar_vector') + .specURL('https://www.w3.org/TR/WGSL/#arithmetic-expr') + .desc( + ` +Expression: x % y +` + ) + .params(u => + u.combine('inputSource', onlyConstInputSource).combine('vectorize_rhs', [2, 3, 4] as const) + ) + .fn(async t => { + const vec_size = t.params.vectorize_rhs; + const vec_type = TypeVec(vec_size, TypeAbstractInt); + const cases = await d.get(`remainder_scalar_vector${vec_size}`); + await run(t, abstractIntBinary('%'), [TypeAbstractInt, vec_type], vec_type, t.params, cases); + }); + +g.test('remainder_vector_scalar') + .specURL('https://www.w3.org/TR/WGSL/#arithmetic-expr') + .desc( + ` +Expression: x % y +` + ) + .params(u => + u.combine('inputSource', onlyConstInputSource).combine('vectorize_lhs', [2, 3, 4] as const) + ) + .fn(async t => { + const vec_size = t.params.vectorize_lhs; + const vec_type = TypeVec(vec_size, TypeAbstractInt); + const cases = await d.get(`remainder_vector${vec_size}_scalar`); + await run(t, abstractIntBinary('%'), [vec_type, TypeAbstractInt], vec_type, t.params, cases); + }); + g.test('subtraction') .specURL('https://www.w3.org/TR/WGSL/#arithmetic-expr') .desc(