@zephyr3d/device 0.2.3 → 0.2.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/README.md +1 -1
  2. package/dist/base_types.js +7 -66
  3. package/dist/base_types.js.map +1 -1
  4. package/dist/builder/ast.js +121 -118
  5. package/dist/builder/ast.js.map +1 -1
  6. package/dist/builder/base.js +29 -25
  7. package/dist/builder/base.js.map +1 -1
  8. package/dist/builder/builtinfunc.js +62 -19
  9. package/dist/builder/builtinfunc.js.map +1 -1
  10. package/dist/builder/constructors.js +1 -1
  11. package/dist/builder/constructors.js.map +1 -1
  12. package/dist/builder/errors.js +7 -7
  13. package/dist/builder/errors.js.map +1 -1
  14. package/dist/builder/misc.js +10 -0
  15. package/dist/builder/misc.js.map +1 -0
  16. package/dist/builder/programbuilder.js +65 -34
  17. package/dist/builder/programbuilder.js.map +1 -1
  18. package/dist/builder/reflection.js.map +1 -1
  19. package/dist/builder/types.js +74 -74
  20. package/dist/builder/types.js.map +1 -1
  21. package/dist/device.js +72 -43
  22. package/dist/device.js.map +1 -1
  23. package/dist/gpuobject.js +82 -24
  24. package/dist/gpuobject.js.map +1 -1
  25. package/dist/helpers/drawtext.js +1 -0
  26. package/dist/helpers/drawtext.js.map +1 -1
  27. package/dist/helpers/font.js +1 -0
  28. package/dist/helpers/font.js.map +1 -1
  29. package/dist/helpers/glyphmanager.js +7 -7
  30. package/dist/helpers/glyphmanager.js.map +1 -1
  31. package/dist/helpers/textureatlas.js +3 -5
  32. package/dist/helpers/textureatlas.js.map +1 -1
  33. package/dist/index.d.ts +267 -204
  34. package/dist/index.js +6 -5
  35. package/dist/index.js.map +1 -1
  36. package/dist/pool.js +102 -45
  37. package/dist/pool.js.map +1 -1
  38. package/dist/timer.js.map +1 -1
  39. package/dist/uniformdata.js +2 -2
  40. package/dist/uniformdata.js.map +1 -1
  41. package/dist/vertexdata.js +27 -1
  42. package/dist/vertexdata.js.map +1 -1
  43. package/package.json +31 -19
@@ -1 +1 @@
1
- {"version":3,"file":"base.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"base.js","sources":["../../src/builder/base.ts"],"sourcesContent":["import type { ASTExpression } from './ast';\r\nimport {\r\n getTextureSampleType,\r\n ShaderPrecisionType,\r\n DeclareType,\r\n ASTPrimitive,\r\n ASTScalar,\r\n ASTArrayIndex,\r\n ASTLValueArray,\r\n ASTLValueHash,\r\n ASTLValueScalar,\r\n ASTHash,\r\n ASTShaderExpConstructor,\r\n ASTAssignment,\r\n ASTCast\r\n} from './ast';\r\nimport type { PBTypeInfo } from './types';\r\nimport {\r\n PBPrimitiveType,\r\n PBPrimitiveTypeInfo,\r\n PBArrayTypeInfo,\r\n PBPointerTypeInfo,\r\n PBAddressSpace,\r\n typeI32\r\n} from './types';\r\nimport { PBASTError } from './errors';\r\nimport type { VertexSemantic } from '../gpuobject';\r\nimport type { ProgramBuilder } from './programbuilder';\r\nimport { getCurrentProgramBuilder } from './misc';\r\n\r\nconst constructorCache: Map<ShaderTypeFunc, Record<string | symbol, ShaderTypeFunc>> = new Map();\r\n\r\n/** @public */\r\nexport interface ShaderExpTagRecord {\r\n [name: string]: ShaderExpTagValue;\r\n}\r\n/** @public */\r\nexport type ShaderExpTagValue = string[] | string | ShaderExpTagRecord;\r\n\r\n/**\r\n * type of a shader variable constructor\r\n * @public\r\n */\r\nexport type ShaderTypeFunc = {\r\n (...args: any[]): PBShaderExp;\r\n ptr: ShaderTypeFunc;\r\n [dim: number]: ShaderTypeFunc;\r\n};\r\n\r\n/** @internal */\r\nexport function makeConstructor<T>(typeFunc: ShaderTypeFunc, elementType: PBTypeInfo<T>): ShaderTypeFunc {\r\n const wrappedTypeFunc = new Proxy(typeFunc, {\r\n get: function (target, prop) {\r\n if (typeof prop === 'symbol' || prop in target) {\r\n return target[prop];\r\n }\r\n let entries = constructorCache.get(typeFunc);\r\n if (!entries) {\r\n entries = {};\r\n constructorCache.set(typeFunc, entries);\r\n }\r\n let ctor = entries[prop];\r\n if (!ctor) {\r\n if (\r\n elementType.isPrimitiveType() ||\r\n elementType.isStructType() ||\r\n elementType.isArrayType() ||\r\n elementType.isAtomicI32() ||\r\n elementType.isAtomicU32()\r\n ) {\r\n if (prop === 'ptr') {\r\n const pointerType = new PBPointerTypeInfo(elementType, PBAddressSpace.FUNCTION);\r\n ctor = function pointerCtor(this: ProgramBuilder, ...args: any[]) {\r\n if (args.length === 1 && typeof args[0] === 'string') {\r\n return new PBShaderExp(args[0], pointerType);\r\n } else {\r\n throw new Error(`Invalid pointer type constructor`);\r\n }\r\n } as ShaderTypeFunc;\r\n } else {\r\n const dim = Number(prop);\r\n if (Number.isInteger(dim) && dim >= 0) {\r\n const arrayType = new PBArrayTypeInfo(elementType, dim);\r\n const arrayTypeFunc = function arrayCtor(this: ProgramBuilder, ...args: any[]): PBShaderExp {\r\n if (args.length === 1 && typeof args[0] === 'string') {\r\n return new PBShaderExp(args[0], arrayType);\r\n } else {\r\n const exp = new PBShaderExp('', arrayType);\r\n exp.$ast = new ASTShaderExpConstructor(\r\n exp.$typeinfo,\r\n args.map((arg) => (arg instanceof PBShaderExp ? arg.$ast : arg))\r\n );\r\n return exp;\r\n }\r\n };\r\n ctor = makeConstructor(arrayTypeFunc as ShaderTypeFunc, arrayType);\r\n }\r\n }\r\n }\r\n }\r\n if (ctor) {\r\n entries[prop] = ctor;\r\n }\r\n return ctor;\r\n }\r\n });\r\n return wrappedTypeFunc;\r\n}\r\n\r\n/**\r\n * Base class for proxiable object\r\n * @public\r\n */\r\nexport abstract class Proxiable<T> {\r\n /** @internal */\r\n private readonly proxy: Proxiable<T>;\r\n constructor() {\r\n this.proxy = new Proxy(this, {\r\n get: function (target, prop) {\r\n return typeof prop === 'string' ? target.$get(prop) : undefined;\r\n },\r\n set: function (target, prop, value) {\r\n return typeof prop === 'string' ? target.$set(prop, value) : false;\r\n }\r\n }) as Proxiable<T>;\r\n return this.proxy;\r\n }\r\n get $thisProxy(): T {\r\n return this.proxy as unknown as T;\r\n }\r\n /** @internal */\r\n protected abstract $get(prop: string): any;\r\n /** @internal */\r\n protected abstract $set(prop: string, value: any): boolean;\r\n}\r\n\r\nlet uidExp = 0;\r\n\r\n/**\r\n * Base class for a expression in the shader\r\n * @public\r\n */\r\nexport class PBShaderExp extends Proxiable<PBShaderExp> {\r\n /** @internal */\r\n $uid: number;\r\n /** @internal */\r\n $str: string;\r\n /** @internal */\r\n $location: number;\r\n /** @internal */\r\n $typeinfo: PBTypeInfo;\r\n /** @internal */\r\n $global: boolean;\r\n /** @internal */\r\n $sampleType: 'depth' | 'sint' | 'uint' | 'float' | 'unfilterable-float';\r\n /** @internal */\r\n $precision: ShaderPrecisionType;\r\n /** @internal */\r\n $ast: ASTExpression;\r\n /** @internal */\r\n $inout: 'out' | 'inout';\r\n /** @internal */\r\n $memberCache: Record<string, PBShaderExp>;\r\n /** @internal */\r\n $attrib: VertexSemantic;\r\n /** @internal */\r\n $tags: ShaderExpTagValue[];\r\n /** @internal */\r\n $_group: number;\r\n /** @internal */\r\n $declareType: DeclareType;\r\n /** @internal */\r\n $isBuffer: boolean;\r\n /** @internal */\r\n $readonly: boolean;\r\n /** @internal */\r\n $bindingSize: number;\r\n [name: string]: any;\r\n /** @internal */\r\n constructor(str: string, typeInfo: PBTypeInfo) {\r\n super();\r\n if (!str && typeInfo.isPointerType()) {\r\n throw new Error('no default constructor for pointer type');\r\n }\r\n this.$uid = uidExp++;\r\n this.$str = str || '';\r\n this.$location = 0;\r\n this.$global = false;\r\n this.$typeinfo = typeInfo;\r\n this.$qualifier = null;\r\n this.$precision = ShaderPrecisionType.NONE;\r\n this.$ast = new ASTPrimitive(this);\r\n this.$inout = null;\r\n this.$memberCache = {};\r\n this.$attrib = null;\r\n this.$tags = [];\r\n this.$_group = null;\r\n this.$declareType = DeclareType.DECLARE_TYPE_NONE;\r\n this.$isBuffer = false;\r\n this.$bindingSize = 0;\r\n this.$readonly = false;\r\n if (typeInfo.isTextureType()) {\r\n if (typeInfo.isDepthTexture()) {\r\n this.$sampleType = 'depth';\r\n } else {\r\n const t = getTextureSampleType(typeInfo);\r\n if (t.primitiveType === PBPrimitiveType.I32) {\r\n this.$sampleType = 'sint';\r\n } else if (t.primitiveType === PBPrimitiveType.U32) {\r\n this.$sampleType = 'uint';\r\n } else {\r\n this.$sampleType = 'float';\r\n }\r\n }\r\n }\r\n }\r\n get $group(): number {\r\n return this.$_group;\r\n }\r\n set $group(val: number) {\r\n this.$_group = val;\r\n }\r\n /**\r\n * Point out that the variable should be in uniform address space\r\n * @param group - The bind group index\r\n * @returns self\r\n */\r\n uniform(group: number): PBShaderExp {\r\n this.$declareType = DeclareType.DECLARE_TYPE_UNIFORM;\r\n this.$group = group;\r\n this.$isBuffer = false;\r\n return this;\r\n }\r\n /**\r\n * Point out that the variable should be an uniform buffer\r\n * @param group - The bind group index\r\n * @returns self\r\n */\r\n uniformBuffer(group: number, bindingSize = 0): PBShaderExp {\r\n if (\r\n !this.$typeinfo.isPrimitiveType() &&\r\n !this.$typeinfo.isArrayType() &&\r\n !this.$typeinfo.isStructType()\r\n ) {\r\n throw new PBASTError(\r\n this.$ast,\r\n 'only primitive type, array type or structure type can be set as uniform buffer'\r\n );\r\n }\r\n this.$declareType = DeclareType.DECLARE_TYPE_UNIFORM;\r\n this.$group = group;\r\n this.$isBuffer = true;\r\n this.$bindingSize = bindingSize;\r\n return this;\r\n }\r\n /**\r\n * Point out that the variable should be in workgroup address space\r\n *\r\n * @remarks\r\n * WebGPU device only\r\n *\r\n * @returns self\r\n */\r\n workgroup(): PBShaderExp {\r\n this.$declareType = DeclareType.DECLARE_TYPE_WORKGROUP;\r\n return this;\r\n }\r\n /**\r\n * Point out that the variable should be in storage address space\r\n * @param group - The bind group index\r\n * @returns self\r\n */\r\n storage(group: number): PBShaderExp {\r\n if (!this.$typeinfo.isHostSharable()) {\r\n if (this.$typeinfo.isTextureType()) {\r\n if (!this.$typeinfo.isStorageTexture()) {\r\n throw new PBASTError(this.$ast, 'type cannot be declared as storage texture');\r\n }\r\n return this.uniform(group);\r\n }\r\n throw new PBASTError(this.$ast, 'type cannot be declared in storage address space');\r\n }\r\n this.$declareType = DeclareType.DECLARE_TYPE_STORAGE;\r\n this.$group = group;\r\n this.$isBuffer = false;\r\n this.$readonly = false;\r\n return this;\r\n }\r\n /**\r\n * Point out that the variable is read-only and should be in storage address space\r\n * @param group - The bind group index\r\n * @returns self\r\n */\r\n storageReadonly(group: number): PBShaderExp {\r\n this.storage(group);\r\n this.$readonly = true;\r\n return this;\r\n }\r\n /**\r\n * Point out that the variable should be a storage buffer\r\n * @param group - The bind group index\r\n * @returns self\r\n */\r\n storageBuffer(group: number, bindingSize = 0): PBShaderExp {\r\n if (\r\n !this.$typeinfo.isPrimitiveType() &&\r\n !this.$typeinfo.isArrayType() &&\r\n !this.$typeinfo.isStructType() &&\r\n !this.$typeinfo.isAtomicI32() &&\r\n !this.$typeinfo.isAtomicU32()\r\n ) {\r\n throw new PBASTError(\r\n this.$ast,\r\n 'only primitive type, array type or structure type can be set as storage buffer'\r\n );\r\n }\r\n this.$declareType = DeclareType.DECLARE_TYPE_STORAGE;\r\n this.$group = group;\r\n this.$isBuffer = true;\r\n this.$bindingSize = bindingSize;\r\n this.$readonly = false;\r\n return this;\r\n }\r\n /**\r\n * Point out that the variable is read-only and should be a storage buffer\r\n * @param group - The bind group index\r\n * @returns self\r\n */\r\n storageBufferReadonly(group: number, bindingSize = 0): PBShaderExp {\r\n this.storageBuffer(group, bindingSize);\r\n this.$readonly = true;\r\n return this;\r\n }\r\n inout(): PBShaderExp {\r\n this.$inout = 'inout';\r\n return this;\r\n }\r\n out(): PBShaderExp {\r\n this.$inout = 'out';\r\n return this;\r\n }\r\n /**\r\n * Point out that the variable is a input vertex attribute\r\n * @param attr - The vertex semantic\r\n * @returns self\r\n */\r\n attrib(attr: VertexSemantic): PBShaderExp {\r\n this.$declareType = DeclareType.DECLARE_TYPE_IN;\r\n this.$attrib = attr;\r\n return this;\r\n }\r\n /**\r\n * Create tags for the variable\r\n * @param args - tags\r\n * @returns self\r\n */\r\n tag(...args: ShaderExpTagValue[]): PBShaderExp {\r\n args.forEach((val) => {\r\n if (this.$tags.indexOf(val) < 0) {\r\n this.$tags.push(val);\r\n }\r\n });\r\n return this;\r\n }\r\n /**\r\n * Set sample type for the variable if the variable is of type texture\r\n * @param type - sample type\r\n * @returns self\r\n */\r\n sampleType(type: 'float' | 'unfilterable-float' | 'sint' | 'uint' | 'depth'): PBShaderExp {\r\n if (type) {\r\n this.$sampleType = type;\r\n }\r\n return this;\r\n }\r\n /**\r\n * Get element in the array by index\r\n * @param index - index of the element\r\n * @returns the element variable\r\n */\r\n at(index: number | PBShaderExp): PBShaderExp {\r\n const varType = this.$ast.getType();\r\n if (\r\n !varType.isArrayType() &&\r\n (!varType.isPrimitiveType() || (!varType.isVectorType() && !varType.isMatrixType()))\r\n ) {\r\n throw new Error('at() function must be used with array types');\r\n }\r\n let elementType: PBTypeInfo = null;\r\n let dimension: number;\r\n if (varType.isArrayType()) {\r\n elementType = varType.elementType;\r\n dimension = varType.dimension;\r\n } else if (varType.isVectorType()) {\r\n elementType = PBPrimitiveTypeInfo.getCachedTypeInfo(varType.resizeType(1, 1));\r\n dimension = varType.cols;\r\n } else if (varType.isMatrixType()) {\r\n elementType = PBPrimitiveTypeInfo.getCachedTypeInfo(varType.resizeType(1, varType.cols));\r\n dimension = varType.rows;\r\n }\r\n const result = new PBShaderExp('', elementType);\r\n if (typeof index === 'number') {\r\n if (!Number.isInteger(index)) {\r\n throw new Error('at() array index must be integer type');\r\n }\r\n if (index < 0 || (dimension > 0 && index >= dimension)) {\r\n throw new Error('at() array index out of bounds');\r\n }\r\n result.$ast = new ASTArrayIndex(this.$ast, new ASTScalar(index, typeI32), elementType);\r\n } else {\r\n const type = index.$ast.getType();\r\n if (!type.isPrimitiveType() || !type.isScalarType()) {\r\n throw new Error('at() array index must be scalar type');\r\n }\r\n let ast = index.$ast;\r\n if (type.scalarType !== PBPrimitiveType.I32 && type.scalarType !== PBPrimitiveType.U32) {\r\n ast = new ASTCast(ast, typeI32);\r\n }\r\n result.$ast = new ASTArrayIndex(this.$ast, ast, elementType);\r\n }\r\n return result;\r\n }\r\n /**\r\n * Set element in the array by index\r\n * @param index - index of the element\r\n * @param val - value to set\r\n */\r\n setAt(index: number | PBShaderExp, val: number | boolean | PBShaderExp): void {\r\n const varType = this.$ast.getType();\r\n if (!varType.isArrayType() && !(varType.isPrimitiveType() && varType.isVectorType())) {\r\n throw new Error('setAt() function must be used with array types');\r\n }\r\n if (typeof index === 'number') {\r\n if (!Number.isInteger(index)) {\r\n throw new Error('setAt() array index must be integer type');\r\n }\r\n const dimension = varType.isArrayType() ? varType.dimension : varType.cols;\r\n if (index < 0 || (dimension > 0 && index >= dimension)) {\r\n throw new Error('setAt() array index out of bounds');\r\n }\r\n }\r\n getCurrentProgramBuilder()\r\n .getCurrentScope()\r\n .$ast.statements.push(\r\n new ASTAssignment(\r\n new ASTLValueArray(\r\n new ASTLValueScalar(this.$ast),\r\n typeof index === 'number' ? new ASTScalar(index, typeI32) : index.$ast,\r\n varType.isArrayType() ? varType.elementType : new PBPrimitiveTypeInfo(varType.scalarType)\r\n ),\r\n val instanceof PBShaderExp ? val.$ast : val\r\n )\r\n );\r\n }\r\n /**\r\n * Point out that the variable should be in high precision\r\n * @returns self\r\n */\r\n highp(): PBShaderExp {\r\n this.$precision = ShaderPrecisionType.HIGH;\r\n return this;\r\n }\r\n /**\r\n * Points out that the variable should be in medium precision\r\n * @returns self\r\n */\r\n mediump(): PBShaderExp {\r\n this.$precision = ShaderPrecisionType.MEDIUM;\r\n return this;\r\n }\r\n /**\r\n * Points out that the variable should be in low precision\r\n * @returns self\r\n */\r\n lowp(): PBShaderExp {\r\n this.$precision = ShaderPrecisionType.LOW;\r\n return this;\r\n }\r\n /**\r\n * Whether this is a constructor\r\n * @returns true if this is a constructor\r\n */\r\n isConstructor(): boolean {\r\n return this.$ast instanceof ASTShaderExpConstructor && this.$ast.args.length === 0;\r\n }\r\n /**\r\n * Determine if this variable is of vector type\r\n * @returns true if the variable is of vector type, otherwise false\r\n */\r\n isVector(): boolean {\r\n const varType = this.$ast.getType();\r\n return varType.isPrimitiveType() && varType.isVectorType();\r\n }\r\n /**\r\n * Get vector component count of the variable if this variable is of vector type\r\n * @returns the vector component count\r\n */\r\n numComponents(): number {\r\n const varType = this.$ast.getType();\r\n return varType.isPrimitiveType() ? varType.cols : 0;\r\n }\r\n /**\r\n * Get type name of this variable\r\n * @returns The type name of this variable\r\n */\r\n getTypeName(): string {\r\n return this.$ast.getType().toTypeName(getCurrentProgramBuilder().getDevice().type);\r\n }\r\n /** @internal */\r\n protected $get(prop: string): any {\r\n if (typeof prop === 'string') {\r\n if (prop[0] === '$' || prop in this) {\r\n return this[prop];\r\n } else {\r\n let exp = this.$memberCache[prop];\r\n if (!exp) {\r\n const varType = this.$ast?.getType() || this.$typeinfo;\r\n const num = Number(prop);\r\n if (Number.isNaN(num)) {\r\n if (varType.isStructType()) {\r\n const elementIndex = varType.structMembers.findIndex((val) => val.name === prop);\r\n if (elementIndex < 0) {\r\n return undefined;\r\n }\r\n const element = varType.structMembers[elementIndex];\r\n if (element.type.isStructType()) {\r\n const ctor = getCurrentProgramBuilder().structInfo.structs[element.type.structName];\r\n exp = ctor.call(getCurrentProgramBuilder(), `${this.$str}.${prop}`);\r\n } else {\r\n exp = new PBShaderExp(`${this.$str}.${prop}`, element.type);\r\n }\r\n exp.$ast = new ASTHash(this.$ast, prop, element.type);\r\n } else {\r\n if (!varType.isPrimitiveType() || (!varType.isVectorType() && !varType.isScalarType())) {\r\n throw new Error(\r\n `invalid index operation: ${this.$ast.toString(\r\n getCurrentProgramBuilder().getDevice().type\r\n )}[${prop}]`\r\n );\r\n }\r\n if (\r\n prop.length === 0 ||\r\n prop.length > 4 ||\r\n ([...prop].some((val) => 'xyzw'.slice(0, varType.cols).indexOf(val) < 0) &&\r\n [...prop].some((val) => 'rgba'.slice(0, varType.cols).indexOf(val) < 0))\r\n ) {\r\n throw new Error(\r\n `unknown swizzle target: ${this.$ast.toString(\r\n getCurrentProgramBuilder().getDevice().type\r\n )}[${prop}]`\r\n );\r\n }\r\n const type = PBPrimitiveTypeInfo.getCachedTypeInfo(varType.resizeType(1, prop.length));\r\n exp = new PBShaderExp('', type);\r\n if (varType.cols === 1) {\r\n exp.$ast = new ASTShaderExpConstructor(type, [this.$ast]);\r\n } else {\r\n exp.$ast = new ASTHash(this.$ast, prop, type);\r\n }\r\n }\r\n } else {\r\n if (varType.isArrayType()) {\r\n exp = this.at(num);\r\n } else if (varType.isPrimitiveType() && varType.isVectorType()) {\r\n if (num >= varType.cols) {\r\n throw new Error(`component index out of bounds: ${this.$str}[${num}]`);\r\n }\r\n exp = this.$get('xyzw'[num]);\r\n } else if (varType.isPrimitiveType() && varType.isMatrixType()) {\r\n const type = PBPrimitiveTypeInfo.getCachedTypeInfo(varType.resizeType(1, varType.cols));\r\n exp = new PBShaderExp('', type);\r\n exp.$ast = new ASTArrayIndex(this.$ast, new ASTScalar(num, typeI32), type);\r\n } else {\r\n throw new Error(`invalid index operation: ${this.$str}[${num}]`);\r\n }\r\n }\r\n this.$memberCache[prop] = exp;\r\n }\r\n return exp;\r\n }\r\n } else {\r\n return undefined;\r\n }\r\n }\r\n /** @internal */\r\n protected $set(prop: string, value: any): boolean {\r\n if (typeof prop === 'string') {\r\n if (prop[0] === '$' || prop in this) {\r\n this[prop] = value;\r\n } else {\r\n if (typeof value !== 'number' && typeof value !== 'boolean' && !(value instanceof PBShaderExp)) {\r\n throw new Error(`Invalid output value assignment`);\r\n }\r\n const varType = this.$ast?.getType() || this.$typeinfo;\r\n const num = Number(prop);\r\n if (Number.isNaN(num)) {\r\n if (varType.isStructType()) {\r\n const elementIndex = varType.structMembers.findIndex((val) => val.name === prop);\r\n if (elementIndex < 0) {\r\n throw new Error(`unknown struct member '${prop}`);\r\n }\r\n const element = varType.structMembers[elementIndex];\r\n let dstAST: ASTExpression;\r\n if (typeof value === 'number' || typeof value === 'boolean') {\r\n if (!element.type.isPrimitiveType() || !element.type.isScalarType()) {\r\n throw new Error(`can not set struct member '${prop}: invalid value type`);\r\n }\r\n dstAST = new ASTScalar(value, element.type);\r\n } else if (value instanceof PBShaderExp) {\r\n dstAST = value.$ast;\r\n }\r\n if (!dstAST) {\r\n throw new Error(`can not set struct member '${prop}: invalid value type`);\r\n }\r\n getCurrentProgramBuilder()\r\n .getCurrentScope()\r\n .$ast.statements.push(\r\n new ASTAssignment(\r\n new ASTLValueHash(new ASTLValueScalar(this.$ast), prop, element.type),\r\n dstAST\r\n )\r\n );\r\n } else {\r\n // FIXME: WGSL does not support l-value swizzling\r\n if (prop.length > 1 || ('xyzw'.indexOf(prop) < 0 && 'rgba'.indexOf(prop) < 0)) {\r\n throw new Error(`invalid index operation: ${this.$str}[${num}]`);\r\n }\r\n if (!varType.isPrimitiveType() || !varType.isVectorType()) {\r\n throw new Error(`invalid index operation: ${this.$str}[${num}]`);\r\n }\r\n const type = PBPrimitiveTypeInfo.getCachedTypeInfo(varType.scalarType);\r\n getCurrentProgramBuilder()\r\n .getCurrentScope()\r\n .$ast.statements.push(\r\n new ASTAssignment(\r\n new ASTLValueHash(new ASTLValueScalar(this.$ast), prop, type),\r\n value instanceof PBShaderExp ? value.$ast : value\r\n )\r\n );\r\n }\r\n } else {\r\n if (varType.isArrayType()) {\r\n this.setAt(num, value);\r\n } else if (varType.isPrimitiveType() && varType.isVectorType()) {\r\n if (num >= varType.cols) {\r\n throw new Error(`component index out of bounds: ${this.$str}[${num}]`);\r\n }\r\n this.$set('xyzw'[num], value);\r\n } else if (varType.isPrimitiveType() && varType.isMatrixType()) {\r\n if (!(value instanceof PBShaderExp)) {\r\n throw new Error(`invalid matrix column vector assignment: ${this.$str}[${num}]`);\r\n }\r\n const type = PBPrimitiveTypeInfo.getCachedTypeInfo(varType.resizeType(1, varType.cols));\r\n getCurrentProgramBuilder()\r\n .getCurrentScope()\r\n .$ast.statements.push(\r\n new ASTAssignment(\r\n new ASTLValueArray(new ASTLValueScalar(this.$ast), new ASTScalar(num, typeI32), type),\r\n value.$ast\r\n )\r\n );\r\n } else {\r\n throw new Error(`invalid index operation: ${this.$str}[${num}]`);\r\n }\r\n }\r\n }\r\n return true;\r\n }\r\n return false;\r\n }\r\n}\r\n"],"names":["constructorCache","Map","makeConstructor","typeFunc","elementType","wrappedTypeFunc","Proxy","get","target","prop","entries","set","ctor","isPrimitiveType","isStructType","isArrayType","isAtomicI32","isAtomicU32","pointerType","PBPointerTypeInfo","PBAddressSpace","FUNCTION","pointerCtor","args","length","PBShaderExp","Error","dim","Number","isInteger","arrayType","PBArrayTypeInfo","arrayTypeFunc","arrayCtor","exp","$ast","ASTShaderExpConstructor","$typeinfo","map","arg","Proxiable","proxy","$get","undefined","value","$set","$thisProxy","uidExp","$uid","$str","$location","$global","$sampleType","$precision","$inout","$memberCache","$attrib","$tags","$_group","$declareType","$isBuffer","$readonly","$bindingSize","str","typeInfo","isPointerType","$qualifier","ShaderPrecisionType","NONE","ASTPrimitive","DeclareType","DECLARE_TYPE_NONE","isTextureType","isDepthTexture","t","getTextureSampleType","primitiveType","PBPrimitiveType","I32","U32","$group","val","uniform","group","DECLARE_TYPE_UNIFORM","uniformBuffer","bindingSize","PBASTError","workgroup","DECLARE_TYPE_WORKGROUP","storage","isHostSharable","isStorageTexture","DECLARE_TYPE_STORAGE","storageReadonly","storageBuffer","storageBufferReadonly","inout","out","attrib","attr","DECLARE_TYPE_IN","tag","forEach","indexOf","push","sampleType","type","at","index","varType","getType","isVectorType","isMatrixType","dimension","PBPrimitiveTypeInfo","getCachedTypeInfo","resizeType","cols","rows","result","ASTArrayIndex","ASTScalar","typeI32","isScalarType","ast","scalarType","ASTCast","setAt","getCurrentProgramBuilder","getCurrentScope","statements","ASTAssignment","ASTLValueArray","ASTLValueScalar","highp","HIGH","mediump","MEDIUM","lowp","LOW","isConstructor","isVector","numComponents","getTypeName","toTypeName","getDevice","num","isNaN","elementIndex","structMembers","findIndex","name","element","structInfo","structs","structName","call","ASTHash","toString","some","slice","dstAST","ASTLValueHash"],"mappings":"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"}
@@ -62,7 +62,7 @@ function callBuiltin(pb, name, ...args) {
62
62
  function genMatrixType(name, shaderTypeMask, r, args) {
63
63
  const result = [];
64
64
  for(let i = 0; i < genMatrixTypeList.length; i++){
65
- const returnType = r || genMatrixTypeList[i];
65
+ const returnType = genMatrixTypeList[i];
66
66
  const argTypes = args.map((arg)=>{
67
67
  return {
68
68
  type: arg || genMatrixTypeList[i]
@@ -1005,6 +1005,24 @@ const builtinFunctionsAll = {
1005
1005
  ])
1006
1006
  ]
1007
1007
  },
1008
+ saturate: {
1009
+ overloads: [],
1010
+ normalizeFunc (pb, name, ...args) {
1011
+ if (args.length !== 1) {
1012
+ throw new PBParamLengthError('saturate');
1013
+ }
1014
+ if (!(args[0] instanceof PBShaderExp)) {
1015
+ throw new PBParamValueError('saturate', 'x');
1016
+ }
1017
+ const argType = args[0].$ast.getType();
1018
+ if (!argType.isPrimitiveType() || !argType.isScalarType() && !argType.isVectorType()) {
1019
+ throw new PBParamTypeError('saturate', 'x');
1020
+ }
1021
+ const a = argType.isScalarType() ? 0 : pb[`vec${argType.cols}`](0);
1022
+ const b = argType.isScalarType() ? 1 : pb[`vec${argType.cols}`](1);
1023
+ return pb.clamp(args[0], a, b);
1024
+ }
1025
+ },
1008
1026
  mix: {
1009
1027
  overloads: [
1010
1028
  ...genType('mix', MASK_ALL, 0, [
@@ -2896,15 +2914,28 @@ const builtinFunctionsAll = {
2896
2914
  ])
2897
2915
  ],
2898
2916
  normalizeFunc (pb, name, ...args) {
2917
+ if (args.length === 0) {
2918
+ throw new PBParamLengthError('textureArrayLoad');
2919
+ }
2920
+ const tex = args[0];
2921
+ if (!(tex instanceof PBShaderExp)) {
2922
+ throw new PBParamValueError('textureArrayLoad', 'tex');
2923
+ }
2924
+ const texType = tex.$ast.getType();
2925
+ if (!texType.isTextureType()) {
2926
+ throw new PBParamTypeError('textureArrayLoad', 'tex');
2927
+ }
2899
2928
  if (pb.getDevice().type === 'webgl2') {
2900
2929
  if (args.length !== 4) {
2901
2930
  throw new PBParamLengthError('textureArrayLoad');
2902
2931
  }
2903
- const tex = args[0];
2904
2932
  const coords = pb.ivec3(args[1], args[2]);
2905
2933
  const level = args[3];
2906
2934
  return callBuiltin(pb, name, tex, coords, level);
2907
2935
  } else {
2936
+ if (texType.isStorageTexture()) {
2937
+ texType.readable = true;
2938
+ }
2908
2939
  return callBuiltin(pb, name, ...args);
2909
2940
  }
2910
2941
  }
@@ -3176,101 +3207,113 @@ const builtinFunctionsAll = {
3176
3207
  overloads: [
3177
3208
  ...genType('textureStore', MASK_WEBGPU, typeVoid, [
3178
3209
  typeTexStorage2DArray_rgba8unorm,
3179
- typeI32Vec2,
3210
+ typeU32Vec2,
3180
3211
  typeI32,
3181
3212
  typeF32Vec4
3182
3213
  ]),
3183
3214
  ...genType('textureStore', MASK_WEBGPU, typeVoid, [
3184
3215
  typeTexStorage2DArray_rgba8snorm,
3185
- typeI32Vec2,
3216
+ typeU32Vec2,
3186
3217
  typeI32,
3187
3218
  typeF32Vec4
3188
3219
  ]),
3189
3220
  ...genType('textureStore', MASK_WEBGPU, typeVoid, [
3190
3221
  typeTexStorage2DArray_rgba8uint,
3191
- typeI32Vec2,
3222
+ typeU32Vec2,
3192
3223
  typeI32,
3193
3224
  typeU32Vec4
3194
3225
  ]),
3195
3226
  ...genType('textureStore', MASK_WEBGPU, typeVoid, [
3196
3227
  typeTexStorage2DArray_rgba8sint,
3197
- typeI32Vec2,
3228
+ typeU32Vec2,
3198
3229
  typeI32,
3199
3230
  typeI32Vec4
3200
3231
  ]),
3201
3232
  ...genType('textureStore', MASK_WEBGPU, typeVoid, [
3202
3233
  typeTexStorage2DArray_rgba16uint,
3203
- typeI32Vec2,
3234
+ typeU32Vec2,
3204
3235
  typeI32,
3205
3236
  typeU32Vec4
3206
3237
  ]),
3207
3238
  ...genType('textureStore', MASK_WEBGPU, typeVoid, [
3208
3239
  typeTexStorage2DArray_rgba16sint,
3209
- typeI32Vec2,
3240
+ typeU32Vec2,
3210
3241
  typeI32,
3211
3242
  typeI32Vec4
3212
3243
  ]),
3213
3244
  ...genType('textureStore', MASK_WEBGPU, typeVoid, [
3214
3245
  typeTexStorage2DArray_rgba16float,
3215
- typeI32Vec2,
3246
+ typeU32Vec2,
3216
3247
  typeI32,
3217
3248
  typeF32Vec4
3218
3249
  ]),
3219
3250
  ...genType('textureStore', MASK_WEBGPU, typeVoid, [
3220
3251
  typeTexStorage2DArray_rgba32uint,
3221
- typeI32Vec2,
3252
+ typeU32Vec2,
3222
3253
  typeI32,
3223
3254
  typeU32Vec4
3224
3255
  ]),
3225
3256
  ...genType('textureStore', MASK_WEBGPU, typeVoid, [
3226
3257
  typeTexStorage2DArray_rgba32sint,
3227
- typeI32Vec2,
3258
+ typeU32Vec2,
3228
3259
  typeI32,
3229
3260
  typeI32Vec4
3230
3261
  ]),
3231
3262
  ...genType('textureStore', MASK_WEBGPU, typeVoid, [
3232
3263
  typeTexStorage2DArray_rgba32float,
3233
- typeI32Vec2,
3264
+ typeU32Vec2,
3234
3265
  typeI32,
3235
3266
  typeF32Vec4
3236
3267
  ]),
3237
3268
  ...genType('textureStore', MASK_WEBGPU, typeVoid, [
3238
3269
  typeTexStorage2DArray_rg32uint,
3239
- typeI32Vec2,
3270
+ typeU32Vec2,
3240
3271
  typeI32,
3241
3272
  typeU32Vec4
3242
3273
  ]),
3243
3274
  ...genType('textureStore', MASK_WEBGPU, typeVoid, [
3244
3275
  typeTexStorage2DArray_rg32sint,
3245
- typeI32Vec2,
3276
+ typeU32Vec2,
3246
3277
  typeI32,
3247
3278
  typeI32Vec4
3248
3279
  ]),
3249
3280
  ...genType('textureStore', MASK_WEBGPU, typeVoid, [
3250
3281
  typeTexStorage2DArray_rg32float,
3251
- typeI32Vec2,
3282
+ typeU32Vec2,
3252
3283
  typeI32,
3253
3284
  typeF32Vec4
3254
3285
  ]),
3255
3286
  ...genType('textureStore', MASK_WEBGPU, typeVoid, [
3256
3287
  typeTexStorage2DArray_r32uint,
3257
- typeI32Vec2,
3288
+ typeU32Vec2,
3258
3289
  typeI32,
3259
3290
  typeU32Vec4
3260
3291
  ]),
3261
3292
  ...genType('textureStore', MASK_WEBGPU, typeVoid, [
3262
3293
  typeTexStorage2DArray_r32sint,
3263
- typeI32Vec2,
3294
+ typeU32Vec2,
3264
3295
  typeI32,
3265
3296
  typeI32Vec4
3266
3297
  ]),
3267
3298
  ...genType('textureStore', MASK_WEBGPU, typeVoid, [
3268
3299
  typeTexStorage2DArray_r32float,
3269
- typeI32Vec2,
3300
+ typeU32Vec2,
3270
3301
  typeI32,
3271
3302
  typeF32Vec4
3272
3303
  ])
3273
- ]
3304
+ ],
3305
+ normalizeFunc (pb, name, ...args) {
3306
+ if (pb.getDevice().type === 'webgpu') {
3307
+ const tex = args[0];
3308
+ if (tex instanceof PBShaderExp) {
3309
+ const texType = tex.$ast.getType();
3310
+ if (texType?.isTextureType() && texType.isStorageTexture()) {
3311
+ texType.writable = true;
3312
+ }
3313
+ }
3314
+ }
3315
+ return callBuiltin(pb, name, ...args);
3316
+ }
3274
3317
  },
3275
3318
  // textureNumLayers(tex: PBShaderExp);
3276
3319
  textureNumLayers: {