typegpu
Version:
A thin layer between JS and WebGPU/WGSL that improves development experience and allows for faster iteration.
45 lines (44 loc) • 1.5 kB
JavaScript
import { $internal } from "../shared/symbols.js";
import { originToPtrParams } from "./snippet.js";
export function ptrFn(inner) {
return INTERNAL_createPtr('function', inner, 'read-write');
}
export function ptrPrivate(inner) {
return INTERNAL_createPtr('private', inner, 'read-write');
}
export function ptrWorkgroup(inner) {
return INTERNAL_createPtr('workgroup', inner, 'read-write');
}
export function ptrStorage(inner, access = 'read') {
return INTERNAL_createPtr('storage', inner, access);
}
export function ptrUniform(inner) {
return INTERNAL_createPtr('uniform', inner, 'read');
}
export function ptrHandle(inner) {
return INTERNAL_createPtr('handle', inner, 'read');
}
export function INTERNAL_createPtr(addressSpace, inner, access, implicit = false) {
return {
[$internal]: {},
type: 'ptr',
addressSpace,
inner,
access,
implicit,
toString: () => `ptr<${addressSpace}, ${inner}, ${access}>`,
};
}
export function createPtrFromOrigin(origin, innerDataType) {
const ptrParams = originToPtrParams[origin];
if (ptrParams) {
return INTERNAL_createPtr(ptrParams.space, innerDataType, ptrParams.access);
}
return undefined;
}
export function implicitFrom(ptr) {
return INTERNAL_createPtr(ptr.addressSpace, ptr.inner, ptr.access, /* implicit */ true);
}
export function explicitFrom(ptr) {
return INTERNAL_createPtr(ptr.addressSpace, ptr.inner, ptr.access, /* implicit */ false);
}