UNPKG

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