Skip to content

Commit

Permalink
wgsl: Implement AbstractInt min execution tests
Browse files Browse the repository at this point in the history
Issue #1297
  • Loading branch information
zoddicus committed Feb 12, 2024
1 parent 8ca8543 commit 70b6ccc
Show file tree
Hide file tree
Showing 3 changed files with 139 additions and 119 deletions.
210 changes: 105 additions & 105 deletions src/resources/cache/hashes.json
Original file line number Diff line number Diff line change
@@ -1,107 +1,107 @@
{
"webgpu/shader/execution/binary/af_addition.bin": "d2a94254",
"webgpu/shader/execution/binary/af_logical.bin": "e32bdae7",
"webgpu/shader/execution/binary/af_division.bin": "998cb6fc",
"webgpu/shader/execution/binary/af_matrix_addition.bin": "496bd4ec",
"webgpu/shader/execution/binary/af_matrix_subtraction.bin": "dd4e9a4f",
"webgpu/shader/execution/binary/af_multiplication.bin": "e81deb2c",
"webgpu/shader/execution/binary/af_remainder.bin": "5aeed2e",
"webgpu/shader/execution/binary/af_subtraction.bin": "dc69ddc1",
"webgpu/shader/execution/binary/f16_addition.bin": "18815537",
"webgpu/shader/execution/binary/f16_logical.bin": "62ffb51f",
"webgpu/shader/execution/binary/f16_division.bin": "e4bf7770",
"webgpu/shader/execution/binary/f16_matrix_addition.bin": "ca4752e2",
"webgpu/shader/execution/binary/f16_matrix_matrix_multiplication.bin": "fec02413",
"webgpu/shader/execution/binary/f16_matrix_scalar_multiplication.bin": "1a7e0d08",
"webgpu/shader/execution/binary/f16_matrix_subtraction.bin": "8044743e",
"webgpu/shader/execution/binary/f16_matrix_vector_multiplication.bin": "ffb049e3",
"webgpu/shader/execution/binary/f16_multiplication.bin": "321b90f1",
"webgpu/shader/execution/binary/f16_remainder.bin": "bafa853",
"webgpu/shader/execution/binary/f16_subtraction.bin": "95a6af75",
"webgpu/shader/execution/binary/f32_addition.bin": "84b9178a",
"webgpu/shader/execution/binary/f32_logical.bin": "bc43ddfb",
"webgpu/shader/execution/binary/f32_division.bin": "2a526e73",
"webgpu/shader/execution/binary/f32_matrix_addition.bin": "23f30d9c",
"webgpu/shader/execution/binary/f32_matrix_matrix_multiplication.bin": "955042e6",
"webgpu/shader/execution/binary/f32_matrix_scalar_multiplication.bin": "61829041",
"webgpu/shader/execution/binary/f32_matrix_subtraction.bin": "2f60e0a",
"webgpu/shader/execution/binary/f32_matrix_vector_multiplication.bin": "3d6aba5e",
"webgpu/shader/execution/binary/f32_multiplication.bin": "2b4ddfb",
"webgpu/shader/execution/binary/f32_remainder.bin": "a3162fbe",
"webgpu/shader/execution/binary/f32_subtraction.bin": "5844472c",
"webgpu/shader/execution/binary/i32_arithmetic.bin": "77bd762d",
"webgpu/shader/execution/binary/i32_comparison.bin": "deaf3d06",
"webgpu/shader/execution/binary/u32_arithmetic.bin": "91ddc813",
"webgpu/shader/execution/binary/u32_comparison.bin": "82d7e10a",
"webgpu/shader/execution/abs.bin": "c2a08da0",
"webgpu/shader/execution/acos.bin": "ecb8f6e4",
"webgpu/shader/execution/acosh.bin": "e908c085",
"webgpu/shader/execution/asin.bin": "db1956dd",
"webgpu/shader/execution/asinh.bin": "d1c4370e",
"webgpu/shader/execution/atan.bin": "d32f84de",
"webgpu/shader/execution/atan2.bin": "c82ce2a9",
"webgpu/shader/execution/atanh.bin": "1d7fa05e",
"webgpu/shader/execution/bitcast.bin": "e6af5117",
"webgpu/shader/execution/ceil.bin": "6822702d",
"webgpu/shader/execution/clamp.bin": "2dcc8e33",
"webgpu/shader/execution/cos.bin": "1e4b5876",
"webgpu/shader/execution/cosh.bin": "88b43457",
"webgpu/shader/execution/cross.bin": "64b251e3",
"webgpu/shader/execution/degrees.bin": "ff5755de",
"webgpu/shader/execution/determinant.bin": "89ce1093",
"webgpu/shader/execution/distance.bin": "5694ecf1",
"webgpu/shader/execution/dot.bin": "60da4277",
"webgpu/shader/execution/exp.bin": "5ae18fc8",
"webgpu/shader/execution/exp2.bin": "ff8f009b",
"webgpu/shader/execution/faceForward.bin": "6ce196c1",
"webgpu/shader/execution/floor.bin": "addfc3d9",
"webgpu/shader/execution/fma.bin": "668f05ee",
"webgpu/shader/execution/fract.bin": "6d036c34",
"webgpu/shader/execution/frexp.bin": "3609ccd2",
"webgpu/shader/execution/inverseSqrt.bin": "b65957cd",
"webgpu/shader/execution/ldexp.bin": "99dcba57",
"webgpu/shader/execution/length.bin": "48edc788",
"webgpu/shader/execution/log.bin": "59d405b3",
"webgpu/shader/execution/log2.bin": "b897533e",
"webgpu/shader/execution/max.bin": "bb46b974",
"webgpu/shader/execution/min.bin": "e4e95641",
"webgpu/shader/execution/mix.bin": "4b781b3b",
"webgpu/shader/execution/modf.bin": "dda61537",
"webgpu/shader/execution/normalize.bin": "73a2bb69",
"webgpu/shader/execution/pack2x16float.bin": "d4a1d8f6",
"webgpu/shader/execution/pow.bin": "f4b1f7c6",
"webgpu/shader/execution/quantizeToF16.bin": "9632b1a3",
"webgpu/shader/execution/radians.bin": "838c408e",
"webgpu/shader/execution/reflect.bin": "401123c3",
"webgpu/shader/execution/refract.bin": "cf86546c",
"webgpu/shader/execution/round.bin": "d1cf1ebb",
"webgpu/shader/execution/saturate.bin": "6ecf8d76",
"webgpu/shader/execution/sign.bin": "f7757f54",
"webgpu/shader/execution/sin.bin": "aff5ff89",
"webgpu/shader/execution/sinh.bin": "10264f6",
"webgpu/shader/execution/smoothstep.bin": "cc165c8d",
"webgpu/shader/execution/sqrt.bin": "9288e28",
"webgpu/shader/execution/step.bin": "3e730ebc",
"webgpu/shader/execution/tan.bin": "b249b4ca",
"webgpu/shader/execution/tanh.bin": "add851dd",
"webgpu/shader/execution/transpose.bin": "ee64fd10",
"webgpu/shader/execution/trunc.bin": "b6c5fdcc",
"webgpu/shader/execution/unpack2x16float.bin": "46be8a57",
"webgpu/shader/execution/unpack2x16snorm.bin": "f2a50142",
"webgpu/shader/execution/unpack2x16unorm.bin": "6db99ed6",
"webgpu/shader/execution/unpack4x8snorm.bin": "4e88f425",
"webgpu/shader/execution/unpack4x8unorm.bin": "b818c7b",
"webgpu/shader/execution/unary/af_arithmetic.bin": "69e5897a",
"webgpu/shader/execution/unary/af_assignment.bin": "588f3b94",
"webgpu/shader/execution/unary/bool_conversion.bin": "7b22a4bf",
"webgpu/shader/execution/unary/f16_arithmetic.bin": "88bfdf25",
"webgpu/shader/execution/unary/f16_conversion.bin": "257326e2",
"webgpu/shader/execution/unary/f32_arithmetic.bin": "54315cef",
"webgpu/shader/execution/unary/f32_conversion.bin": "15bdedd7",
"webgpu/shader/execution/unary/i32_arithmetic.bin": "d8556f43",
"webgpu/shader/execution/unary/i32_complement.bin": "d044f52",
"webgpu/shader/execution/unary/i32_conversion.bin": "d1d94808",
"webgpu/shader/execution/unary/u32_complement.bin": "5458ccb1",
"webgpu/shader/execution/unary/u32_conversion.bin": "a7b4272e",
"webgpu/shader/execution/unary/ai_assignment.bin": "b15b5af8"
"webgpu/shader/execution/binary/af_addition.bin": "ccb14bc",
"webgpu/shader/execution/binary/af_logical.bin": "a7798554",
"webgpu/shader/execution/binary/af_division.bin": "9a6f489f",
"webgpu/shader/execution/binary/af_matrix_addition.bin": "cefab3ff",
"webgpu/shader/execution/binary/af_matrix_subtraction.bin": "5a9b991f",
"webgpu/shader/execution/binary/af_multiplication.bin": "fa6240ab",
"webgpu/shader/execution/binary/af_remainder.bin": "527b8da1",
"webgpu/shader/execution/binary/af_subtraction.bin": "4dd4ba53",
"webgpu/shader/execution/binary/f16_addition.bin": "c283565a",
"webgpu/shader/execution/binary/f16_logical.bin": "fcabca18",
"webgpu/shader/execution/binary/f16_division.bin": "b673bafa",
"webgpu/shader/execution/binary/f16_matrix_addition.bin": "9bed8ac3",
"webgpu/shader/execution/binary/f16_matrix_matrix_multiplication.bin": "dcb7c5bf",
"webgpu/shader/execution/binary/f16_matrix_scalar_multiplication.bin": "e86a5d43",
"webgpu/shader/execution/binary/f16_matrix_subtraction.bin": "e0f74455",
"webgpu/shader/execution/binary/f16_matrix_vector_multiplication.bin": "51d9230e",
"webgpu/shader/execution/binary/f16_multiplication.bin": "12ec3eba",
"webgpu/shader/execution/binary/f16_remainder.bin": "b4cd53da",
"webgpu/shader/execution/binary/f16_subtraction.bin": "9f64f3d6",
"webgpu/shader/execution/binary/f32_addition.bin": "74c023e8",
"webgpu/shader/execution/binary/f32_logical.bin": "d73ab838",
"webgpu/shader/execution/binary/f32_division.bin": "4bc4065",
"webgpu/shader/execution/binary/f32_matrix_addition.bin": "acc33a27",
"webgpu/shader/execution/binary/f32_matrix_matrix_multiplication.bin": "152a26f3",
"webgpu/shader/execution/binary/f32_matrix_scalar_multiplication.bin": "45a66dc6",
"webgpu/shader/execution/binary/f32_matrix_subtraction.bin": "86693196",
"webgpu/shader/execution/binary/f32_matrix_vector_multiplication.bin": "8ba8ca35",
"webgpu/shader/execution/binary/f32_multiplication.bin": "24b25fd4",
"webgpu/shader/execution/binary/f32_remainder.bin": "7b543346",
"webgpu/shader/execution/binary/f32_subtraction.bin": "bc8da7bc",
"webgpu/shader/execution/binary/i32_arithmetic.bin": "ef7d310a",
"webgpu/shader/execution/binary/i32_comparison.bin": "318121d",
"webgpu/shader/execution/binary/u32_arithmetic.bin": "8093b84b",
"webgpu/shader/execution/binary/u32_comparison.bin": "150df526",
"webgpu/shader/execution/abs.bin": "7e311b3e",
"webgpu/shader/execution/acos.bin": "54e7bf8d",
"webgpu/shader/execution/acosh.bin": "6099ab5b",
"webgpu/shader/execution/asin.bin": "589632cc",
"webgpu/shader/execution/asinh.bin": "d9d55786",
"webgpu/shader/execution/atan.bin": "d449855e",
"webgpu/shader/execution/atan2.bin": "57d00ef8",
"webgpu/shader/execution/atanh.bin": "9f608db7",
"webgpu/shader/execution/bitcast.bin": "f75b6266",
"webgpu/shader/execution/ceil.bin": "c686339c",
"webgpu/shader/execution/clamp.bin": "e1944aa7",
"webgpu/shader/execution/cos.bin": "27e97e31",
"webgpu/shader/execution/cosh.bin": "926e36f0",
"webgpu/shader/execution/cross.bin": "f284455c",
"webgpu/shader/execution/degrees.bin": "48b6ef5a",
"webgpu/shader/execution/determinant.bin": "c1ee6d6d",
"webgpu/shader/execution/distance.bin": "d4b781b4",
"webgpu/shader/execution/dot.bin": "651723a5",
"webgpu/shader/execution/exp.bin": "17c31b4c",
"webgpu/shader/execution/exp2.bin": "290646de",
"webgpu/shader/execution/faceForward.bin": "fa627025",
"webgpu/shader/execution/floor.bin": "712cd893",
"webgpu/shader/execution/fma.bin": "64ce30cd",
"webgpu/shader/execution/fract.bin": "9c547a6f",
"webgpu/shader/execution/frexp.bin": "436f2e97",
"webgpu/shader/execution/inverseSqrt.bin": "90a98179",
"webgpu/shader/execution/ldexp.bin": "5775c4a3",
"webgpu/shader/execution/length.bin": "84b4c484",
"webgpu/shader/execution/log.bin": "ba90bc0",
"webgpu/shader/execution/log2.bin": "ae16a4fe",
"webgpu/shader/execution/max.bin": "4f7ad303",
"webgpu/shader/execution/min.bin": "aeb7bea7",
"webgpu/shader/execution/mix.bin": "bbe558ab",
"webgpu/shader/execution/modf.bin": "fc6c37f0",
"webgpu/shader/execution/normalize.bin": "52976d80",
"webgpu/shader/execution/pack2x16float.bin": "4ee3f6ea",
"webgpu/shader/execution/pow.bin": "9fb4ee2d",
"webgpu/shader/execution/quantizeToF16.bin": "fe185575",
"webgpu/shader/execution/radians.bin": "22eb5c4b",
"webgpu/shader/execution/reflect.bin": "5af39e8d",
"webgpu/shader/execution/refract.bin": "c40ba7a6",
"webgpu/shader/execution/round.bin": "30b32737",
"webgpu/shader/execution/saturate.bin": "6fd2b413",
"webgpu/shader/execution/sign.bin": "aeb4e88",
"webgpu/shader/execution/sin.bin": "b50deb4d",
"webgpu/shader/execution/sinh.bin": "ae317c5b",
"webgpu/shader/execution/smoothstep.bin": "ded6e922",
"webgpu/shader/execution/sqrt.bin": "b8d90ae",
"webgpu/shader/execution/step.bin": "74be6db7",
"webgpu/shader/execution/tan.bin": "a576976b",
"webgpu/shader/execution/tanh.bin": "ed7608cc",
"webgpu/shader/execution/transpose.bin": "13a9a669",
"webgpu/shader/execution/trunc.bin": "41c88508",
"webgpu/shader/execution/unpack2x16float.bin": "76d610f5",
"webgpu/shader/execution/unpack2x16snorm.bin": "7b02a6da",
"webgpu/shader/execution/unpack2x16unorm.bin": "8e68c01c",
"webgpu/shader/execution/unpack4x8snorm.bin": "bb1d080b",
"webgpu/shader/execution/unpack4x8unorm.bin": "c332ed84",
"webgpu/shader/execution/unary/af_arithmetic.bin": "9c97f84f",
"webgpu/shader/execution/unary/af_assignment.bin": "69c034",
"webgpu/shader/execution/unary/bool_conversion.bin": "aa53b26e",
"webgpu/shader/execution/unary/f16_arithmetic.bin": "ac815f24",
"webgpu/shader/execution/unary/f16_conversion.bin": "24fa0a69",
"webgpu/shader/execution/unary/f32_arithmetic.bin": "d29873c7",
"webgpu/shader/execution/unary/f32_conversion.bin": "475c9ce6",
"webgpu/shader/execution/unary/i32_arithmetic.bin": "5afbeb30",
"webgpu/shader/execution/unary/i32_complement.bin": "55b95380",
"webgpu/shader/execution/unary/i32_conversion.bin": "b55abba0",
"webgpu/shader/execution/unary/u32_complement.bin": "d54d69de",
"webgpu/shader/execution/unary/u32_conversion.bin": "939ea6fb",
"webgpu/shader/execution/unary/ai_assignment.bin": "7fe7ab0b"
}
44 changes: 30 additions & 14 deletions src/webgpu/shader/execution/expression/call/builtin/max.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,25 +26,23 @@ import {
TypeU32,
i32,
u32,
abstractInt,
TypeAbstractInt,
} from '../../../../../util/conversion.js';
import { maxBigInt } from '../../../../../util/math.js';
import { Case } from '../../case.js';
import { allInputSources, onlyConstInputSource, run } from '../../expression.js';

import { abstractFloatBuiltin, builtin } from './builtin.js';
import { abstractFloatBuiltin, abstractIntBuiltin, builtin } from './builtin.js';
import { d } from './max.cache.js';

/** Generate set of max test cases from list of interesting values */
function generateTestCases(
values: Array<number>,
makeCase: (x: number, y: number) => Case
): Array<Case> {
const cases = new Array<Case>();
values.forEach(e => {
values.forEach(f => {
cases.push(makeCase(e, f));
function generateTestCases<Type>(values: Type[], makeCase: (x: Type, y: Type) => Case): Case[] {
return values.flatMap(e => {
return values.map(f => {
return makeCase(e, f);
});
});
return cases;
}

export const g = makeTestGroup(GPUTest);
Expand All @@ -53,9 +51,27 @@ g.test('abstract_int')
.specURL('https://www.w3.org/TR/WGSL/#integer-builtin-functions')
.desc(`abstract int tests`)
.params(u =>
u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4] as const)
u
.combine('inputSource', onlyConstInputSource)
.combine('vectorize', [undefined, 2, 3, 4] as const)
)
.unimplemented();
.fn(async t => {
const makeCase = (x: bigint, y: bigint): Case => {
return { input: [abstractInt(x), abstractInt(y)], expected: abstractInt(maxBigInt(x, y)) };
};

const test_values = [-0x70000000n, -2n, -1n, 0n, 1n, 2n, 0x70000000n];
const cases = generateTestCases(test_values, makeCase);

await run(
t,
abstractIntBuiltin('max'),
[TypeAbstractInt, TypeAbstractInt],
TypeAbstractInt,
t.params,
cases
);
});

g.test('u32')
.specURL('https://www.w3.org/TR/WGSL/#integer-builtin-functions')
Expand All @@ -68,7 +84,7 @@ g.test('u32')
return { input: [u32(x), u32(y)], expected: u32(Math.max(x, y)) };
};

const test_values: Array<number> = [0, 1, 2, 0x70000000, 0x80000000, 0xffffffff];
const test_values: number[] = [0, 1, 2, 0x70000000, 0x80000000, 0xffffffff];
const cases = generateTestCases(test_values, makeCase);

await run(t, builtin('max'), [TypeU32, TypeU32], TypeU32, t.params, cases);
Expand All @@ -85,7 +101,7 @@ g.test('i32')
return { input: [i32(x), i32(y)], expected: i32(Math.max(x, y)) };
};

const test_values: Array<number> = [-0x70000000, -2, -1, 0, 1, 2, 0x70000000];
const test_values: number[] = [-0x70000000, -2, -1, 0, 1, 2, 0x70000000];
const cases = generateTestCases(test_values, makeCase);

await run(t, builtin('max'), [TypeI32, TypeI32], TypeI32, t.params, cases);
Expand Down
4 changes: 4 additions & 0 deletions src/webgpu/util/math.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2286,3 +2286,7 @@ export function dotProduct(v1: readonly number[], v2: readonly number[]) {
export function absBigInt(v: bigint): bigint {
return v < 0n ? -v : v;
}
/** @returns the maximum from a list of bigints */
export function maxBigInt(...vals: bigint[]): bigint {
return vals.reduce((prev, cur) => (cur > prev ? cur : prev));
}

0 comments on commit 70b6ccc

Please sign in to comment.