typegpu
Version:
A thin layer between JS and WebGPU/WGSL that improves development experience and allows for faster iteration.
67 lines (66 loc) • 2.52 kB
JavaScript
import { dualImpl } from "../core/function/dualImpl.js";
import { stitch } from "../core/resolve/stitch.js";
const derivativeNormalError = 'Derivative builtins are not allowed on the CPU';
export const dpdx = dualImpl({
name: 'dpdx',
normalImpl: derivativeNormalError,
signature: (value) => ({ argTypes: [value], returnType: value }),
codegenImpl: (_ctx, [value]) => stitch `dpdx(${value})`,
sideEffects: false,
});
export const dpdxCoarse = dualImpl({
name: 'dpdxCoarse',
normalImpl: derivativeNormalError,
signature: (value) => ({ argTypes: [value], returnType: value }),
codegenImpl: (_ctx, [value]) => stitch `dpdxCoarse(${value})`,
sideEffects: false,
});
export const dpdxFine = dualImpl({
name: 'dpdxFine',
normalImpl: derivativeNormalError,
signature: (value) => ({ argTypes: [value], returnType: value }),
codegenImpl: (_ctx, [value]) => stitch `dpdxFine(${value})`,
sideEffects: false,
});
export const dpdy = dualImpl({
name: 'dpdy',
normalImpl: derivativeNormalError,
signature: (value) => ({ argTypes: [value], returnType: value }),
codegenImpl: (_ctx, [value]) => stitch `dpdy(${value})`,
sideEffects: false,
});
export const dpdyCoarse = dualImpl({
name: 'dpdyCoarse',
normalImpl: derivativeNormalError,
signature: (value) => ({ argTypes: [value], returnType: value }),
codegenImpl: (_ctx, [value]) => stitch `dpdyCoarse(${value})`,
sideEffects: false,
});
export const dpdyFine = dualImpl({
name: 'dpdyFine',
normalImpl: derivativeNormalError,
signature: (value) => ({ argTypes: [value], returnType: value }),
codegenImpl: (_ctx, [value]) => stitch `dpdyFine(${value})`,
sideEffects: false,
});
export const fwidth = dualImpl({
name: 'fwidth',
normalImpl: derivativeNormalError,
signature: (value) => ({ argTypes: [value], returnType: value }),
codegenImpl: (_ctx, [value]) => stitch `fwidth(${value})`,
sideEffects: false,
});
export const fwidthCoarse = dualImpl({
name: 'fwidthCoarse',
normalImpl: derivativeNormalError,
signature: (value) => ({ argTypes: [value], returnType: value }),
codegenImpl: (_ctx, [value]) => stitch `fwidthCoarse(${value})`,
sideEffects: false,
});
export const fwidthFine = dualImpl({
name: 'fwidthFine',
normalImpl: derivativeNormalError,
signature: (value) => ({ argTypes: [value], returnType: value }),
codegenImpl: (_ctx, [value]) => stitch `fwidthFine(${value})`,
sideEffects: false,
});