Skip to content

Commit

Permalink
wgsl: Implement AbstractInt max execution tests (#3385)
Browse files Browse the repository at this point in the history
Issue #1297
  • Loading branch information
zoddicus authored Feb 13, 2024
1 parent b212dfe commit 4d4c7f4
Show file tree
Hide file tree
Showing 3 changed files with 140 additions and 124 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": "56e73232",
"webgpu/shader/execution/binary/af_logical.bin": "dc84fec2",
"webgpu/shader/execution/binary/af_division.bin": "b99f45a9",
"webgpu/shader/execution/binary/af_matrix_addition.bin": "67fc289e",
"webgpu/shader/execution/binary/af_matrix_subtraction.bin": "e533cd16",
"webgpu/shader/execution/binary/af_multiplication.bin": "b963600",
"webgpu/shader/execution/binary/af_remainder.bin": "4951978",
"webgpu/shader/execution/binary/af_subtraction.bin": "f0bd33da",
"webgpu/shader/execution/binary/f16_addition.bin": "7004a06e",
"webgpu/shader/execution/binary/f16_logical.bin": "cf61b9f0",
"webgpu/shader/execution/binary/f16_division.bin": "d67ffcf4",
"webgpu/shader/execution/binary/f16_matrix_addition.bin": "872caecc",
"webgpu/shader/execution/binary/f16_matrix_matrix_multiplication.bin": "d4c1fa65",
"webgpu/shader/execution/binary/f16_matrix_scalar_multiplication.bin": "410aa928",
"webgpu/shader/execution/binary/f16_matrix_subtraction.bin": "9fea0f32",
"webgpu/shader/execution/binary/f16_matrix_vector_multiplication.bin": "22245ae6",
"webgpu/shader/execution/binary/f16_multiplication.bin": "bf8b1386",
"webgpu/shader/execution/binary/f16_remainder.bin": "2b2ecca8",
"webgpu/shader/execution/binary/f16_subtraction.bin": "92db6c3b",
"webgpu/shader/execution/binary/f32_addition.bin": "2ad33d40",
"webgpu/shader/execution/binary/f32_logical.bin": "168e00ad",
"webgpu/shader/execution/binary/f32_division.bin": "cda4b47f",
"webgpu/shader/execution/binary/f32_matrix_addition.bin": "a60b0194",
"webgpu/shader/execution/binary/f32_matrix_matrix_multiplication.bin": "15ae3f35",
"webgpu/shader/execution/binary/f32_matrix_scalar_multiplication.bin": "1c2d0770",
"webgpu/shader/execution/binary/f32_matrix_subtraction.bin": "5f458964",
"webgpu/shader/execution/binary/f32_matrix_vector_multiplication.bin": "3ad4b122",
"webgpu/shader/execution/binary/f32_multiplication.bin": "2cfa41d7",
"webgpu/shader/execution/binary/f32_remainder.bin": "d881a0b5",
"webgpu/shader/execution/binary/f32_subtraction.bin": "5519529",
"webgpu/shader/execution/binary/i32_arithmetic.bin": "1ebfac8e",
"webgpu/shader/execution/binary/i32_comparison.bin": "246410e0",
"webgpu/shader/execution/binary/u32_arithmetic.bin": "5ba346a7",
"webgpu/shader/execution/binary/u32_comparison.bin": "f32cc89a",
"webgpu/shader/execution/abs.bin": "cf7035bb",
"webgpu/shader/execution/acos.bin": "f51b6639",
"webgpu/shader/execution/acosh.bin": "8703b0b9",
"webgpu/shader/execution/asin.bin": "b37659e4",
"webgpu/shader/execution/asinh.bin": "6c077b4d",
"webgpu/shader/execution/atan.bin": "d2cac8e5",
"webgpu/shader/execution/atan2.bin": "a664062f",
"webgpu/shader/execution/atanh.bin": "78678528",
"webgpu/shader/execution/bitcast.bin": "8e6fc660",
"webgpu/shader/execution/ceil.bin": "c3845564",
"webgpu/shader/execution/clamp.bin": "7fe63f9f",
"webgpu/shader/execution/cos.bin": "53e1ecb4",
"webgpu/shader/execution/cosh.bin": "60835146",
"webgpu/shader/execution/cross.bin": "ec9c38bc",
"webgpu/shader/execution/degrees.bin": "dba80a4",
"webgpu/shader/execution/determinant.bin": "df4961fb",
"webgpu/shader/execution/distance.bin": "f1d9a859",
"webgpu/shader/execution/dot.bin": "e645066f",
"webgpu/shader/execution/exp.bin": "365d8b77",
"webgpu/shader/execution/exp2.bin": "6315ce6a",
"webgpu/shader/execution/faceForward.bin": "73136fee",
"webgpu/shader/execution/floor.bin": "a9f45296",
"webgpu/shader/execution/fma.bin": "3ca02e6f",
"webgpu/shader/execution/fract.bin": "ca1a0fe5",
"webgpu/shader/execution/frexp.bin": "43885066",
"webgpu/shader/execution/inverseSqrt.bin": "de8d2609",
"webgpu/shader/execution/ldexp.bin": "d83280fa",
"webgpu/shader/execution/length.bin": "22d7feee",
"webgpu/shader/execution/log.bin": "b5255c2c",
"webgpu/shader/execution/log2.bin": "28bce946",
"webgpu/shader/execution/max.bin": "f336583c",
"webgpu/shader/execution/min.bin": "a0ed442a",
"webgpu/shader/execution/mix.bin": "761f1414",
"webgpu/shader/execution/modf.bin": "415c2c6d",
"webgpu/shader/execution/normalize.bin": "a1ee9fd1",
"webgpu/shader/execution/pack2x16float.bin": "e9c1e049",
"webgpu/shader/execution/pow.bin": "3ae9fddb",
"webgpu/shader/execution/quantizeToF16.bin": "29d70202",
"webgpu/shader/execution/radians.bin": "66df45b8",
"webgpu/shader/execution/reflect.bin": "74c93416",
"webgpu/shader/execution/refract.bin": "db1b6cd7",
"webgpu/shader/execution/round.bin": "6e17fee7",
"webgpu/shader/execution/saturate.bin": "4bd72628",
"webgpu/shader/execution/sign.bin": "516bf087",
"webgpu/shader/execution/sin.bin": "ab201566",
"webgpu/shader/execution/sinh.bin": "d174ff0d",
"webgpu/shader/execution/smoothstep.bin": "c841fdd0",
"webgpu/shader/execution/sqrt.bin": "270f222c",
"webgpu/shader/execution/step.bin": "c69ecf72",
"webgpu/shader/execution/tan.bin": "75633db4",
"webgpu/shader/execution/tanh.bin": "dec6ccb3",
"webgpu/shader/execution/transpose.bin": "a5376a18",
"webgpu/shader/execution/trunc.bin": "cb0fb7d",
"webgpu/shader/execution/unpack2x16float.bin": "f7c17562",
"webgpu/shader/execution/unpack2x16snorm.bin": "900c6570",
"webgpu/shader/execution/unpack2x16unorm.bin": "ce74966b",
"webgpu/shader/execution/unpack4x8snorm.bin": "23003de1",
"webgpu/shader/execution/unpack4x8unorm.bin": "d957b699",
"webgpu/shader/execution/unary/af_arithmetic.bin": "8eb3b38f",
"webgpu/shader/execution/unary/af_assignment.bin": "8b75cfc4",
"webgpu/shader/execution/unary/bool_conversion.bin": "91745a47",
"webgpu/shader/execution/unary/f16_arithmetic.bin": "8f3849cd",
"webgpu/shader/execution/unary/f16_conversion.bin": "b18bf8ca",
"webgpu/shader/execution/unary/f32_arithmetic.bin": "9aaa3916",
"webgpu/shader/execution/unary/f32_conversion.bin": "e435fc67",
"webgpu/shader/execution/unary/i32_arithmetic.bin": "b61cf109",
"webgpu/shader/execution/unary/i32_complement.bin": "fb8983d2",
"webgpu/shader/execution/unary/i32_conversion.bin": "912e87a6",
"webgpu/shader/execution/unary/u32_complement.bin": "57794fd7",
"webgpu/shader/execution/unary/u32_conversion.bin": "eabaa756",
"webgpu/shader/execution/unary/ai_assignment.bin": "e2db3247"
"webgpu/shader/execution/binary/af_addition.bin": "e5c17c8c",
"webgpu/shader/execution/binary/af_logical.bin": "d02ed356",
"webgpu/shader/execution/binary/af_division.bin": "ecbfc42c",
"webgpu/shader/execution/binary/af_matrix_addition.bin": "fc088c43",
"webgpu/shader/execution/binary/af_matrix_subtraction.bin": "a80767d2",
"webgpu/shader/execution/binary/af_multiplication.bin": "512e875c",
"webgpu/shader/execution/binary/af_remainder.bin": "35708d73",
"webgpu/shader/execution/binary/af_subtraction.bin": "7a7d8859",
"webgpu/shader/execution/binary/f16_addition.bin": "9907b22f",
"webgpu/shader/execution/binary/f16_logical.bin": "f51647a",
"webgpu/shader/execution/binary/f16_division.bin": "a4b4b596",
"webgpu/shader/execution/binary/f16_matrix_addition.bin": "26cd1a3b",
"webgpu/shader/execution/binary/f16_matrix_matrix_multiplication.bin": "b3b798d7",
"webgpu/shader/execution/binary/f16_matrix_scalar_multiplication.bin": "8d4a8b67",
"webgpu/shader/execution/binary/f16_matrix_subtraction.bin": "277e52d4",
"webgpu/shader/execution/binary/f16_matrix_vector_multiplication.bin": "27eb1a2f",
"webgpu/shader/execution/binary/f16_multiplication.bin": "1602ae27",
"webgpu/shader/execution/binary/f16_remainder.bin": "6f0c3a6c",
"webgpu/shader/execution/binary/f16_subtraction.bin": "187afd81",
"webgpu/shader/execution/binary/f32_addition.bin": "a6f8b35e",
"webgpu/shader/execution/binary/f32_logical.bin": "90a201d6",
"webgpu/shader/execution/binary/f32_division.bin": "b73b6009",
"webgpu/shader/execution/binary/f32_matrix_addition.bin": "d6ea5868",
"webgpu/shader/execution/binary/f32_matrix_matrix_multiplication.bin": "b15aea1f",
"webgpu/shader/execution/binary/f32_matrix_scalar_multiplication.bin": "a43ed12c",
"webgpu/shader/execution/binary/f32_matrix_subtraction.bin": "d07629b9",
"webgpu/shader/execution/binary/f32_matrix_vector_multiplication.bin": "b14ec0e8",
"webgpu/shader/execution/binary/f32_multiplication.bin": "6bfc2599",
"webgpu/shader/execution/binary/f32_remainder.bin": "9d9f27d2",
"webgpu/shader/execution/binary/f32_subtraction.bin": "c1b0fc93",
"webgpu/shader/execution/binary/i32_arithmetic.bin": "97a68c9",
"webgpu/shader/execution/binary/i32_comparison.bin": "f3eb5051",
"webgpu/shader/execution/binary/u32_arithmetic.bin": "61983a8d",
"webgpu/shader/execution/binary/u32_comparison.bin": "8c08fad1",
"webgpu/shader/execution/abs.bin": "5d598ea2",
"webgpu/shader/execution/acos.bin": "f3b948fb",
"webgpu/shader/execution/acosh.bin": "be267adf",
"webgpu/shader/execution/asin.bin": "50a3ca9c",
"webgpu/shader/execution/asinh.bin": "dfdab533",
"webgpu/shader/execution/atan.bin": "e10a3fed",
"webgpu/shader/execution/atan2.bin": "9483868b",
"webgpu/shader/execution/atanh.bin": "fb49f9a5",
"webgpu/shader/execution/bitcast.bin": "342d31e4",
"webgpu/shader/execution/ceil.bin": "c54caec3",
"webgpu/shader/execution/clamp.bin": "fad50dea",
"webgpu/shader/execution/cos.bin": "b474375a",
"webgpu/shader/execution/cosh.bin": "bc6adf09",
"webgpu/shader/execution/cross.bin": "9b3ed927",
"webgpu/shader/execution/degrees.bin": "d39afaa0",
"webgpu/shader/execution/determinant.bin": "21dc31d9",
"webgpu/shader/execution/distance.bin": "ad9630e9",
"webgpu/shader/execution/dot.bin": "5fed0fe2",
"webgpu/shader/execution/exp.bin": "a1eb2a4a",
"webgpu/shader/execution/exp2.bin": "8ffefd36",
"webgpu/shader/execution/faceForward.bin": "26599c44",
"webgpu/shader/execution/floor.bin": "7d731a3f",
"webgpu/shader/execution/fma.bin": "a67941bd",
"webgpu/shader/execution/fract.bin": "52bdb3aa",
"webgpu/shader/execution/frexp.bin": "cf38f20f",
"webgpu/shader/execution/inverseSqrt.bin": "6ed0136d",
"webgpu/shader/execution/ldexp.bin": "69821bb",
"webgpu/shader/execution/length.bin": "f90faba4",
"webgpu/shader/execution/log.bin": "8f36e529",
"webgpu/shader/execution/log2.bin": "2423cfdb",
"webgpu/shader/execution/max.bin": "6bea6092",
"webgpu/shader/execution/min.bin": "17dd7386",
"webgpu/shader/execution/mix.bin": "de948e22",
"webgpu/shader/execution/modf.bin": "9a6ae129",
"webgpu/shader/execution/normalize.bin": "98404966",
"webgpu/shader/execution/pack2x16float.bin": "7a232f06",
"webgpu/shader/execution/pow.bin": "50c1518c",
"webgpu/shader/execution/quantizeToF16.bin": "4acafd64",
"webgpu/shader/execution/radians.bin": "ab0b4ebb",
"webgpu/shader/execution/reflect.bin": "d4edd90d",
"webgpu/shader/execution/refract.bin": "55d587bd",
"webgpu/shader/execution/round.bin": "239913af",
"webgpu/shader/execution/saturate.bin": "38a3dede",
"webgpu/shader/execution/sign.bin": "1a15fa60",
"webgpu/shader/execution/sin.bin": "45d8740b",
"webgpu/shader/execution/sinh.bin": "dd5e328b",
"webgpu/shader/execution/smoothstep.bin": "1a0f49d1",
"webgpu/shader/execution/sqrt.bin": "cce7c52a",
"webgpu/shader/execution/step.bin": "da66ffa",
"webgpu/shader/execution/tan.bin": "d3aa9b89",
"webgpu/shader/execution/tanh.bin": "b370d66e",
"webgpu/shader/execution/transpose.bin": "b8a9c228",
"webgpu/shader/execution/trunc.bin": "d38dfc52",
"webgpu/shader/execution/unpack2x16float.bin": "ecbff4ab",
"webgpu/shader/execution/unpack2x16snorm.bin": "55171d85",
"webgpu/shader/execution/unpack2x16unorm.bin": "9b66b0cf",
"webgpu/shader/execution/unpack4x8snorm.bin": "6c7ea28d",
"webgpu/shader/execution/unpack4x8unorm.bin": "7c035804",
"webgpu/shader/execution/unary/af_arithmetic.bin": "a307b4cd",
"webgpu/shader/execution/unary/af_assignment.bin": "4aa0e022",
"webgpu/shader/execution/unary/bool_conversion.bin": "445d60dc",
"webgpu/shader/execution/unary/f16_arithmetic.bin": "9aa19f03",
"webgpu/shader/execution/unary/f16_conversion.bin": "a14fa253",
"webgpu/shader/execution/unary/f32_arithmetic.bin": "f59a64a5",
"webgpu/shader/execution/unary/f32_conversion.bin": "3d4761f2",
"webgpu/shader/execution/unary/i32_arithmetic.bin": "4e683564",
"webgpu/shader/execution/unary/i32_complement.bin": "42dd5b8d",
"webgpu/shader/execution/unary/i32_conversion.bin": "70bd317b",
"webgpu/shader/execution/unary/u32_complement.bin": "b8dd9928",
"webgpu/shader/execution/unary/u32_conversion.bin": "750cf298",
"webgpu/shader/execution/unary/ai_assignment.bin": "8123c23d"
}
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
10 changes: 5 additions & 5 deletions src/webgpu/util/math.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2287,12 +2287,12 @@ export function absBigInt(v: bigint): bigint {
return v < 0n ? -v : v;
}

/** @returns the minimum from a list of bigints */
export function minBigInt(...vals: bigint[]): bigint {
return vals.reduce((prev, cur) => (cur < prev ? cur : prev));
}

/** @returns the maximum from a list of bigints */
export function maxBigInt(...vals: bigint[]): bigint {
return vals.reduce((prev, cur) => (cur > prev ? cur : prev));
}

/** @returns the minimum from a list of bigints */
export function minBigInt(...vals: bigint[]): bigint {
return vals.reduce((prev, cur) => (cur < prev ? cur : prev));
}

0 comments on commit 4d4c7f4

Please sign in to comment.