UNPKG

typegpu

Version:

A thin layer between JS and WebGPU/WGSL that improves development experience and allows for faster iteration.

23 lines (22 loc) 927 B
import { dualImpl } from "../core/function/dualImpl.js"; import { abstractInt, u32 } from "../data/numeric.js"; import { ptrFn } from "../data/ptr.js"; import { isRef } from "../data/ref.js"; import { isPtr, isWgslArray } from "../data/wgslTypes.js"; const sizeOfPointedToArray = (dataType) => isPtr(dataType) && isWgslArray(dataType.inner) ? dataType.inner.elementCount : 0; export const arrayLength = dualImpl({ name: 'arrayLength', signature: (arg) => { const ptrArg = isPtr(arg) ? arg : ptrFn(arg); return { argTypes: [ptrArg], returnType: sizeOfPointedToArray(ptrArg) > 0 ? abstractInt : u32, }; }, normalImpl: (a) => (isRef(a) ? a.$.length : a.length), codegenImpl(ctx, [a]) { const length = sizeOfPointedToArray(a.dataType); return length > 0 ? `${length}` : ctx.gen.emitCall('arrayLength', [], [a]); }, sideEffects: false, });