src/webgpu/shader/execution/expression/binary/u32_arithmetic.cache.ts (285 lines of code) (raw):

import { sparseU32Range, vectorU32Range } from '../../../../util/math.js'; import { generateBinaryToU32Cases, generateU32VectorBinaryToVectorCases, generateVectorU32BinaryToVectorCases, } from '../case.js'; import { makeCaseCache } from '../case_cache.js'; function u32_add(x: number, y: number): number | undefined { return x + y; } function u32_subtract(x: number, y: number): number | undefined { return x - y; } function u32_multiply(x: number, y: number): number | undefined { return Math.imul(x, y); } function u32_divide_non_const(x: number, y: number): number | undefined { if (y === 0) { return x; } return x / y; } function u32_divide_const(x: number, y: number): number | undefined { if (y === 0) { return undefined; } return x / y; } function u32_remainder_non_const(x: number, y: number): number | undefined { if (y === 0) { return 0; } return x % y; } function u32_remainder_const(x: number, y: number): number | undefined { if (y === 0) { return undefined; } return x % y; } export const d = makeCaseCache('binary/u32_arithmetic', { addition: () => { return generateBinaryToU32Cases(sparseU32Range(), sparseU32Range(), u32_add); }, subtraction: () => { return generateBinaryToU32Cases(sparseU32Range(), sparseU32Range(), u32_subtract); }, multiplication: () => { return generateBinaryToU32Cases(sparseU32Range(), sparseU32Range(), u32_multiply); }, division_non_const: () => { return generateBinaryToU32Cases(sparseU32Range(), sparseU32Range(), u32_divide_non_const); }, division_const: () => { return generateBinaryToU32Cases(sparseU32Range(), sparseU32Range(), u32_divide_const); }, remainder_non_const: () => { return generateBinaryToU32Cases(sparseU32Range(), sparseU32Range(), u32_remainder_non_const); }, remainder_const: () => { return generateBinaryToU32Cases(sparseU32Range(), sparseU32Range(), u32_remainder_const); }, addition_scalar_vector2: () => { return generateU32VectorBinaryToVectorCases(sparseU32Range(), vectorU32Range(2), u32_add); }, addition_scalar_vector3: () => { return generateU32VectorBinaryToVectorCases(sparseU32Range(), vectorU32Range(3), u32_add); }, addition_scalar_vector4: () => { return generateU32VectorBinaryToVectorCases(sparseU32Range(), vectorU32Range(4), u32_add); }, addition_vector2_scalar: () => { return generateVectorU32BinaryToVectorCases(vectorU32Range(2), sparseU32Range(), u32_add); }, addition_vector3_scalar: () => { return generateVectorU32BinaryToVectorCases(vectorU32Range(3), sparseU32Range(), u32_add); }, addition_vector4_scalar: () => { return generateVectorU32BinaryToVectorCases(vectorU32Range(4), sparseU32Range(), u32_add); }, subtraction_scalar_vector2: () => { return generateU32VectorBinaryToVectorCases(sparseU32Range(), vectorU32Range(2), u32_subtract); }, subtraction_scalar_vector3: () => { return generateU32VectorBinaryToVectorCases(sparseU32Range(), vectorU32Range(3), u32_subtract); }, subtraction_scalar_vector4: () => { return generateU32VectorBinaryToVectorCases(sparseU32Range(), vectorU32Range(4), u32_subtract); }, subtraction_vector2_scalar: () => { return generateVectorU32BinaryToVectorCases(vectorU32Range(2), sparseU32Range(), u32_subtract); }, subtraction_vector3_scalar: () => { return generateVectorU32BinaryToVectorCases(vectorU32Range(3), sparseU32Range(), u32_subtract); }, subtraction_vector4_scalar: () => { return generateVectorU32BinaryToVectorCases(vectorU32Range(4), sparseU32Range(), u32_subtract); }, multiplication_scalar_vector2: () => { return generateU32VectorBinaryToVectorCases(sparseU32Range(), vectorU32Range(2), u32_multiply); }, multiplication_scalar_vector3: () => { return generateU32VectorBinaryToVectorCases(sparseU32Range(), vectorU32Range(3), u32_multiply); }, multiplication_scalar_vector4: () => { return generateU32VectorBinaryToVectorCases(sparseU32Range(), vectorU32Range(4), u32_multiply); }, multiplication_vector2_scalar: () => { return generateVectorU32BinaryToVectorCases(vectorU32Range(2), sparseU32Range(), u32_multiply); }, multiplication_vector3_scalar: () => { return generateVectorU32BinaryToVectorCases(vectorU32Range(3), sparseU32Range(), u32_multiply); }, multiplication_vector4_scalar: () => { return generateVectorU32BinaryToVectorCases(vectorU32Range(4), sparseU32Range(), u32_multiply); }, division_scalar_vector2_non_const: () => { return generateU32VectorBinaryToVectorCases( sparseU32Range(), vectorU32Range(2), u32_divide_non_const ); }, division_scalar_vector3_non_const: () => { return generateU32VectorBinaryToVectorCases( sparseU32Range(), vectorU32Range(3), u32_divide_non_const ); }, division_scalar_vector4_non_const: () => { return generateU32VectorBinaryToVectorCases( sparseU32Range(), vectorU32Range(4), u32_divide_non_const ); }, division_vector2_scalar_non_const: () => { return generateVectorU32BinaryToVectorCases( vectorU32Range(2), sparseU32Range(), u32_divide_non_const ); }, division_vector3_scalar_non_const: () => { return generateVectorU32BinaryToVectorCases( vectorU32Range(3), sparseU32Range(), u32_divide_non_const ); }, division_vector4_scalar_non_const: () => { return generateVectorU32BinaryToVectorCases( vectorU32Range(4), sparseU32Range(), u32_divide_non_const ); }, division_scalar_vector2_const: () => { return generateU32VectorBinaryToVectorCases( sparseU32Range(), vectorU32Range(2), u32_divide_const ); }, division_scalar_vector3_const: () => { return generateU32VectorBinaryToVectorCases( sparseU32Range(), vectorU32Range(3), u32_divide_const ); }, division_scalar_vector4_const: () => { return generateU32VectorBinaryToVectorCases( sparseU32Range(), vectorU32Range(4), u32_divide_const ); }, division_vector2_scalar_const: () => { return generateVectorU32BinaryToVectorCases( vectorU32Range(2), sparseU32Range(), u32_divide_const ); }, division_vector3_scalar_const: () => { return generateVectorU32BinaryToVectorCases( vectorU32Range(3), sparseU32Range(), u32_divide_const ); }, division_vector4_scalar_const: () => { return generateVectorU32BinaryToVectorCases( vectorU32Range(4), sparseU32Range(), u32_divide_const ); }, remainder_scalar_vector2_non_const: () => { return generateU32VectorBinaryToVectorCases( sparseU32Range(), vectorU32Range(2), u32_remainder_non_const ); }, remainder_scalar_vector3_non_const: () => { return generateU32VectorBinaryToVectorCases( sparseU32Range(), vectorU32Range(3), u32_remainder_non_const ); }, remainder_scalar_vector4_non_const: () => { return generateU32VectorBinaryToVectorCases( sparseU32Range(), vectorU32Range(4), u32_remainder_non_const ); }, remainder_vector2_scalar_non_const: () => { return generateVectorU32BinaryToVectorCases( vectorU32Range(2), sparseU32Range(), u32_remainder_non_const ); }, remainder_vector3_scalar_non_const: () => { return generateVectorU32BinaryToVectorCases( vectorU32Range(3), sparseU32Range(), u32_remainder_non_const ); }, remainder_vector4_scalar_non_const: () => { return generateVectorU32BinaryToVectorCases( vectorU32Range(4), sparseU32Range(), u32_remainder_non_const ); }, remainder_scalar_vector2_const: () => { return generateU32VectorBinaryToVectorCases( sparseU32Range(), vectorU32Range(2), u32_remainder_const ); }, remainder_scalar_vector3_const: () => { return generateU32VectorBinaryToVectorCases( sparseU32Range(), vectorU32Range(3), u32_remainder_const ); }, remainder_scalar_vector4_const: () => { return generateU32VectorBinaryToVectorCases( sparseU32Range(), vectorU32Range(4), u32_remainder_const ); }, remainder_vector2_scalar_const: () => { return generateVectorU32BinaryToVectorCases( vectorU32Range(2), sparseU32Range(), u32_remainder_const ); }, remainder_vector3_scalar_const: () => { return generateVectorU32BinaryToVectorCases( vectorU32Range(3), sparseU32Range(), u32_remainder_const ); }, remainder_vector4_scalar_const: () => { return generateVectorU32BinaryToVectorCases( vectorU32Range(4), sparseU32Range(), u32_remainder_const ); }, });