Skip to content

Commit

Permalink
wgsl: Implement AbstractInt abs execution tests (#3372)
Browse files Browse the repository at this point in the history
Issue #1297
  • Loading branch information
zoddicus authored Feb 7, 2024
1 parent 82e3f48 commit 6493b87
Show file tree
Hide file tree
Showing 21 changed files with 234 additions and 178 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": "aa27047a",
"webgpu/shader/execution/binary/af_logical.bin": "1be45a15",
"webgpu/shader/execution/binary/af_division.bin": "1d5478a3",
"webgpu/shader/execution/binary/af_matrix_addition.bin": "22e327bb",
"webgpu/shader/execution/binary/af_matrix_subtraction.bin": "535adbcf",
"webgpu/shader/execution/binary/af_multiplication.bin": "a1a524dd",
"webgpu/shader/execution/binary/af_remainder.bin": "64da4005",
"webgpu/shader/execution/binary/af_subtraction.bin": "7499bd8f",
"webgpu/shader/execution/binary/f16_addition.bin": "a79e7634",
"webgpu/shader/execution/binary/f16_logical.bin": "6d6d84f0",
"webgpu/shader/execution/binary/f16_division.bin": "8dad99dd",
"webgpu/shader/execution/binary/f16_matrix_addition.bin": "dfff55ea",
"webgpu/shader/execution/binary/f16_matrix_matrix_multiplication.bin": "ef3d6371",
"webgpu/shader/execution/binary/f16_matrix_scalar_multiplication.bin": "474d4d62",
"webgpu/shader/execution/binary/f16_matrix_subtraction.bin": "9f65b81e",
"webgpu/shader/execution/binary/f16_matrix_vector_multiplication.bin": "a7c61fa8",
"webgpu/shader/execution/binary/f16_multiplication.bin": "3ec0a3fa",
"webgpu/shader/execution/binary/f16_remainder.bin": "eff48d50",
"webgpu/shader/execution/binary/f16_subtraction.bin": "a0308540",
"webgpu/shader/execution/binary/f32_addition.bin": "8e83afd5",
"webgpu/shader/execution/binary/f32_logical.bin": "4125d7f7",
"webgpu/shader/execution/binary/f32_division.bin": "60d96931",
"webgpu/shader/execution/binary/f32_matrix_addition.bin": "10925c0f",
"webgpu/shader/execution/binary/f32_matrix_matrix_multiplication.bin": "bc662f4b",
"webgpu/shader/execution/binary/f32_matrix_scalar_multiplication.bin": "6cc9356",
"webgpu/shader/execution/binary/f32_matrix_subtraction.bin": "6122185c",
"webgpu/shader/execution/binary/f32_matrix_vector_multiplication.bin": "fba16690",
"webgpu/shader/execution/binary/f32_multiplication.bin": "864c571a",
"webgpu/shader/execution/binary/f32_remainder.bin": "3426f2d",
"webgpu/shader/execution/binary/f32_subtraction.bin": "210cf552",
"webgpu/shader/execution/binary/i32_arithmetic.bin": "c2ec2f0d",
"webgpu/shader/execution/binary/i32_comparison.bin": "49ca656",
"webgpu/shader/execution/binary/u32_arithmetic.bin": "75343a93",
"webgpu/shader/execution/binary/u32_comparison.bin": "d686732c",
"webgpu/shader/execution/abs.bin": "4897157f",
"webgpu/shader/execution/acos.bin": "b1569965",
"webgpu/shader/execution/acosh.bin": "7aed8429",
"webgpu/shader/execution/asin.bin": "6dd6d472",
"webgpu/shader/execution/asinh.bin": "ed7035da",
"webgpu/shader/execution/atan.bin": "6471489d",
"webgpu/shader/execution/atan2.bin": "5ca1736c",
"webgpu/shader/execution/atanh.bin": "d914536a",
"webgpu/shader/execution/bitcast.bin": "411d035b",
"webgpu/shader/execution/ceil.bin": "c1d71a4a",
"webgpu/shader/execution/clamp.bin": "b419a6af",
"webgpu/shader/execution/cos.bin": "915d48e6",
"webgpu/shader/execution/cosh.bin": "ac2e16ef",
"webgpu/shader/execution/cross.bin": "2a28bf13",
"webgpu/shader/execution/degrees.bin": "8cb08f02",
"webgpu/shader/execution/determinant.bin": "5123cd87",
"webgpu/shader/execution/distance.bin": "5922de8d",
"webgpu/shader/execution/dot.bin": "179cb14c",
"webgpu/shader/execution/exp.bin": "5b8a41ac",
"webgpu/shader/execution/exp2.bin": "79f67b6f",
"webgpu/shader/execution/faceForward.bin": "bef1acc1",
"webgpu/shader/execution/floor.bin": "4ab82df2",
"webgpu/shader/execution/fma.bin": "3d1e954f",
"webgpu/shader/execution/fract.bin": "87b4e968",
"webgpu/shader/execution/frexp.bin": "8a5719ed",
"webgpu/shader/execution/inverseSqrt.bin": "a4e761a1",
"webgpu/shader/execution/ldexp.bin": "405cd0e8",
"webgpu/shader/execution/length.bin": "49306c8d",
"webgpu/shader/execution/log.bin": "1da6254",
"webgpu/shader/execution/log2.bin": "453872cb",
"webgpu/shader/execution/max.bin": "3733f691",
"webgpu/shader/execution/min.bin": "ec95807c",
"webgpu/shader/execution/mix.bin": "6ad867d0",
"webgpu/shader/execution/modf.bin": "f5f3d76c",
"webgpu/shader/execution/normalize.bin": "1129c001",
"webgpu/shader/execution/pack2x16float.bin": "21ef7dac",
"webgpu/shader/execution/pow.bin": "c683aef1",
"webgpu/shader/execution/quantizeToF16.bin": "928a0377",
"webgpu/shader/execution/radians.bin": "96d83aad",
"webgpu/shader/execution/reflect.bin": "a9e90f92",
"webgpu/shader/execution/refract.bin": "6bcf301c",
"webgpu/shader/execution/round.bin": "848a274f",
"webgpu/shader/execution/saturate.bin": "ba26c060",
"webgpu/shader/execution/sign.bin": "b5491fd0",
"webgpu/shader/execution/sin.bin": "6a5ccc2e",
"webgpu/shader/execution/sinh.bin": "87fdbef0",
"webgpu/shader/execution/smoothstep.bin": "79d09859",
"webgpu/shader/execution/sqrt.bin": "80e706d7",
"webgpu/shader/execution/step.bin": "5d1e998e",
"webgpu/shader/execution/tan.bin": "5fb554c8",
"webgpu/shader/execution/tanh.bin": "36f0abea",
"webgpu/shader/execution/transpose.bin": "f093512c",
"webgpu/shader/execution/trunc.bin": "b4e061",
"webgpu/shader/execution/unpack2x16float.bin": "7e352e7b",
"webgpu/shader/execution/unpack2x16snorm.bin": "1dd02f60",
"webgpu/shader/execution/unpack2x16unorm.bin": "fc393ee2",
"webgpu/shader/execution/unpack4x8snorm.bin": "c2dfa32c",
"webgpu/shader/execution/unpack4x8unorm.bin": "e657b33a",
"webgpu/shader/execution/unary/af_arithmetic.bin": "df9fb9ed",
"webgpu/shader/execution/unary/af_assignment.bin": "9f6a07fa",
"webgpu/shader/execution/unary/bool_conversion.bin": "740698f1",
"webgpu/shader/execution/unary/f16_arithmetic.bin": "2d6ff5f9",
"webgpu/shader/execution/unary/f16_conversion.bin": "bf5e8c3c",
"webgpu/shader/execution/unary/f32_arithmetic.bin": "1170ad1b",
"webgpu/shader/execution/unary/f32_conversion.bin": "83d099ec",
"webgpu/shader/execution/unary/i32_arithmetic.bin": "8bb3b84d",
"webgpu/shader/execution/unary/i32_complement.bin": "e5fe3ec6",
"webgpu/shader/execution/unary/i32_conversion.bin": "a2c4961",
"webgpu/shader/execution/unary/u32_complement.bin": "11bcaed",
"webgpu/shader/execution/unary/u32_conversion.bin": "55f3f929",
"webgpu/shader/execution/unary/ai_assignment.bin": "4c502a7e"
"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"
}
Binary file modified src/resources/cache/webgpu/shader/execution/abs.bin
Binary file not shown.
35 changes: 22 additions & 13 deletions src/webgpu/shader/execution/expression/call/builtin/abs.cache.ts
Original file line number Diff line number Diff line change
@@ -1,17 +1,26 @@
import { abstractInt } from '../../../../../util/conversion.js';
import { FP } from '../../../../../util/floating_point.js';
import { makeCaseCache } from '../../case_cache.js';
import { absBigInt, fullI64Range } from '../../../../../util/math.js';
import { CaseListBuilder, makeCaseCache } from '../../case_cache.js';

// Cases: [f32|f16|abstract]
const cases = (['f32', 'f16', 'abstract'] as const)
.map(trait => ({
[`${trait}`]: () => {
return FP[trait].generateScalarToIntervalCases(
FP[trait].scalarRange(),
'unfiltered',
FP[trait].absInterval
);
},
}))
.reduce((a, b) => ({ ...a, ...b }), {});
// Cases: [f32|f16|abstract_float|abstract_int]
const cases: Record<string, CaseListBuilder> = {
...(['f32', 'f16', 'abstract'] as const)
.map(trait => ({
[`${trait === 'abstract' ? 'abstract_float' : trait}`]: () => {
return FP[trait].generateScalarToIntervalCases(
FP[trait].scalarRange(),
'unfiltered',
FP[trait].absInterval
);
},
}))
.reduce((a, b) => ({ ...a, ...b }), {}),
abstract_int: () => {
return fullI64Range().map(e => {
return { input: abstractInt(e), expected: abstractInt(absBigInt(e)) };
});
},
};

export const d = makeCaseCache('abs', cases);
23 changes: 18 additions & 5 deletions src/webgpu/shader/execution/expression/call/builtin/abs.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,21 +26,27 @@ import {
TypeU32,
u32Bits,
TypeAbstractFloat,
TypeAbstractInt,
} from '../../../../../util/conversion.js';
import { allInputSources, onlyConstInputSource, run } from '../../expression.js';

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

export const g = makeTestGroup(GPUTest);

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 cases = await d.get('abstract_int');
await run(t, abstractIntBuiltin('abs'), [TypeAbstractInt], TypeAbstractInt, t.params, cases);
});

g.test('u32')
.specURL('https://www.w3.org/TR/WGSL/#integer-builtin-functions')
Expand Down Expand Up @@ -148,8 +154,15 @@ g.test('abstract_float')
.combine('vectorize', [undefined, 2, 3, 4] as const)
)
.fn(async t => {
const cases = await d.get('abstract');
await run(t, abstractBuiltin('abs'), [TypeAbstractFloat], TypeAbstractFloat, t.params, cases);
const cases = await d.get('abstract_float');
await run(
t,
abstractFloatBuiltin('abs'),
[TypeAbstractFloat],
TypeAbstractFloat,
t.params,
cases
);
});

g.test('f32')
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import {
abstractFloatShaderBuilder,
abstractIntShaderBuilder,
basicExpressionBuilder,
basicExpressionWithPredeclarationBuilder,
ShaderBuilder,
Expand All @@ -11,10 +12,15 @@ export function builtin(name: string): ShaderBuilder {
}

/* @returns a ShaderBuilder that calls the builtin with the given name that returns AbstractFloats */
export function abstractBuiltin(name: string): ShaderBuilder {
export function abstractFloatBuiltin(name: string): ShaderBuilder {
return abstractFloatShaderBuilder(values => `${name}(${values.join(', ')})`);
}

/* @returns a ShaderBuilder that calls the builtin with the given name that returns AbstractInts */
export function abstractIntBuiltin(name: string): ShaderBuilder {
return abstractIntShaderBuilder(values => `${name}(${values.join(', ')})`);
}

/* @returns a ShaderBuilder that calls the builtin with the given name and has given predeclaration */
export function builtinWithPredeclaration(name: string, predeclaration: string): ShaderBuilder {
return basicExpressionWithPredeclarationBuilder(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ import {
} from '../../../../../util/conversion.js';
import { allInputSources, onlyConstInputSource, run } from '../../expression.js';

import { abstractBuiltin, builtin } from './builtin.js';
import { abstractFloatBuiltin, builtin } from './builtin.js';
import { d } from './clamp.cache.js';

export const g = makeTestGroup(GPUTest);
Expand Down Expand Up @@ -71,7 +71,7 @@ g.test('abstract_float')
const cases = await d.get('abstract_const');
await run(
t,
abstractBuiltin('clamp'),
abstractFloatBuiltin('clamp'),
[TypeAbstractFloat, TypeAbstractFloat, TypeAbstractFloat],
TypeAbstractFloat,
t.params,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import { GPUTest } from '../../../../../gpu_test.js';
import { TypeAbstractFloat, TypeF16, TypeF32, TypeVec } from '../../../../../util/conversion.js';
import { allInputSources, onlyConstInputSource, run } from '../../expression.js';

import { abstractBuiltin, builtin } from './builtin.js';
import { abstractFloatBuiltin, builtin } from './builtin.js';
import { d } from './cross.cache.js';

export const g = makeTestGroup(GPUTest);
Expand All @@ -24,7 +24,7 @@ g.test('abstract_float')
const cases = await d.get('abstract_const');
await run(
t,
abstractBuiltin('cross'),
abstractFloatBuiltin('cross'),
[TypeVec(3, TypeAbstractFloat), TypeVec(3, TypeAbstractFloat)],
TypeVec(3, TypeAbstractFloat),
t.params,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import { GPUTest } from '../../../../../gpu_test.js';
import { TypeAbstractFloat, TypeF16, TypeF32 } from '../../../../../util/conversion.js';
import { allInputSources, onlyConstInputSource, run } from '../../expression.js';

import { abstractBuiltin, builtin } from './builtin.js';
import { abstractFloatBuiltin, builtin } from './builtin.js';
import { d } from './degrees.cache.js';

export const g = makeTestGroup(GPUTest);
Expand All @@ -29,7 +29,7 @@ g.test('abstract_float')
const cases = await d.get('abstract_const');
await run(
t,
abstractBuiltin('degrees'),
abstractFloatBuiltin('degrees'),
[TypeAbstractFloat],
TypeAbstractFloat,
t.params,
Expand Down
Loading

0 comments on commit 6493b87

Please sign in to comment.