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
JavaScript
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,
});