@zephyr3d/device 0.2.5 → 0.2.6

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 (41) hide show
  1. package/dist/base_types.js +12 -13
  2. package/dist/base_types.js.map +1 -1
  3. package/dist/builder/ast.js +34 -48
  4. package/dist/builder/ast.js.map +1 -1
  5. package/dist/builder/base.js +6 -2
  6. package/dist/builder/base.js.map +1 -1
  7. package/dist/builder/builtinfunc.js +42 -6
  8. package/dist/builder/builtinfunc.js.map +1 -1
  9. package/dist/builder/constructors.js +2 -0
  10. package/dist/builder/constructors.js.map +1 -1
  11. package/dist/builder/errors.js +4 -4
  12. package/dist/builder/errors.js.map +1 -1
  13. package/dist/builder/misc.js +1 -1
  14. package/dist/builder/misc.js.map +1 -1
  15. package/dist/builder/programbuilder.js +18 -27
  16. package/dist/builder/programbuilder.js.map +1 -1
  17. package/dist/builder/reflection.js +1 -1
  18. package/dist/builder/reflection.js.map +1 -1
  19. package/dist/builder/types.js +7 -6
  20. package/dist/builder/types.js.map +1 -1
  21. package/dist/device.js +150 -39
  22. package/dist/device.js.map +1 -1
  23. package/dist/gpuobject.js +2 -1
  24. package/dist/gpuobject.js.map +1 -1
  25. package/dist/helpers/drawtext.js +29 -25
  26. package/dist/helpers/drawtext.js.map +1 -1
  27. package/dist/helpers/font.js.map +1 -1
  28. package/dist/helpers/glyphmanager.js +26 -8
  29. package/dist/helpers/glyphmanager.js.map +1 -1
  30. package/dist/helpers/textureatlas.js +7 -3
  31. package/dist/helpers/textureatlas.js.map +1 -1
  32. package/dist/index.d.ts +290 -266
  33. package/dist/pool.js +15 -6
  34. package/dist/pool.js.map +1 -1
  35. package/dist/timer.js +3 -2
  36. package/dist/timer.js.map +1 -1
  37. package/dist/uniformdata.js +1 -1
  38. package/dist/uniformdata.js.map +1 -1
  39. package/dist/vertexdata.js +2 -2
  40. package/dist/vertexdata.js.map +1 -1
  41. package/package.json +80 -80
@@ -8,6 +8,7 @@ const constructorCache = new Map();
8
8
  const wrappedTypeFunc = new Proxy(typeFunc, {
9
9
  get: function(target, prop) {
10
10
  if (typeof prop === 'symbol' || prop in target) {
11
+ // @ts-ignore 7015 */
11
12
  return target[prop];
12
13
  }
13
14
  let entries = constructorCache.get(typeFunc);
@@ -107,6 +108,7 @@ let uidExp = 0;
107
108
  this.$typeinfo = typeInfo;
108
109
  this.$qualifier = null;
109
110
  this.$precision = ShaderPrecisionType.NONE;
111
+ this.$sampleType = 'float';
110
112
  this.$ast = new ASTPrimitive(this);
111
113
  this.$inout = null;
112
114
  this.$memberCache = {};
@@ -274,7 +276,7 @@ let uidExp = 0;
274
276
  if (!varType.isArrayType() && (!varType.isPrimitiveType() || !varType.isVectorType() && !varType.isMatrixType())) {
275
277
  throw new Error('at() function must be used with array types');
276
278
  }
277
- let elementType = null;
279
+ let elementType;
278
280
  let dimension;
279
281
  if (varType.isArrayType()) {
280
282
  elementType = varType.elementType;
@@ -285,6 +287,8 @@ let uidExp = 0;
285
287
  } else if (varType.isMatrixType()) {
286
288
  elementType = PBPrimitiveTypeInfo.getCachedTypeInfo(varType.resizeType(1, varType.cols));
287
289
  dimension = varType.rows;
290
+ } else {
291
+ throw new Error('at() source type is not indexable');
288
292
  }
289
293
  const result = new PBShaderExp('', elementType);
290
294
  if (typeof index === 'number') {
@@ -460,7 +464,7 @@ let uidExp = 0;
460
464
  throw new Error(`unknown struct member '${prop}`);
461
465
  }
462
466
  const element = varType.structMembers[elementIndex];
463
- let dstAST;
467
+ let dstAST = null;
464
468
  if (typeof value === 'number' || typeof value === 'boolean') {
465
469
  if (!element.type.isPrimitiveType() || !element.type.isScalarType()) {
466
470
  throw new Error(`can not set struct member '${prop}: invalid value type`);
@@ -1 +1 @@
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":";;;;;AA8BA,MAAMA,mBAAiF,IAAIC,GAAAA,EAAAA;AAmB3F,iBACO,SAASC,eAAmBC,CAAAA,QAAwB,EAAEC,WAA0B,EAAA;IACrF,MAAMC,eAAAA,GAAkB,IAAIC,KAAAA,CAAMH,QAAU,EAAA;QAC1CI,GAAK,EAAA,SAAUC,MAAM,EAAEC,IAAI,EAAA;AACzB,YAAA,IAAI,OAAOA,IAAAA,KAAS,QAAYA,IAAAA,IAAAA,IAAQD,MAAQ,EAAA;gBAC9C,OAAOA,MAAM,CAACC,IAAK,CAAA;AACrB;YACA,IAAIC,OAAAA,GAAUV,gBAAiBO,CAAAA,GAAG,CAACJ,QAAAA,CAAAA;AACnC,YAAA,IAAI,CAACO,OAAS,EAAA;AACZA,gBAAAA,OAAAA,GAAU,EAAC;gBACXV,gBAAiBW,CAAAA,GAAG,CAACR,QAAUO,EAAAA,OAAAA,CAAAA;AACjC;YACA,IAAIE,IAAAA,GAAOF,OAAO,CAACD,IAAK,CAAA;AACxB,YAAA,IAAI,CAACG,IAAM,EAAA;AACT,gBAAA,IACER,WAAYS,CAAAA,eAAe,EAC3BT,IAAAA,WAAAA,CAAYU,YAAY,EACxBV,IAAAA,WAAAA,CAAYW,WAAW,EAAA,IACvBX,WAAYY,CAAAA,WAAW,EACvBZ,IAAAA,WAAAA,CAAYa,WAAW,EACvB,EAAA;AACA,oBAAA,IAAIR,SAAS,KAAO,EAAA;AAClB,wBAAA,MAAMS,WAAc,GAAA,IAAIC,iBAAkBf,CAAAA,WAAAA,EAAagB,eAAeC,QAAQ,CAAA;wBAC9ET,IAAO,GAAA,SAASU,WAAkC,CAAA,GAAGC,IAAW,EAAA;4BAC9D,IAAIA,IAAAA,CAAKC,MAAM,KAAK,CAAA,IAAK,OAAOD,IAAI,CAAC,CAAE,CAAA,KAAK,QAAU,EAAA;AACpD,gCAAA,OAAO,IAAIE,WAAAA,CAAYF,IAAI,CAAC,EAAE,EAAEL,WAAAA,CAAAA;6BAC3B,MAAA;AACL,gCAAA,MAAM,IAAIQ,KAAAA,CAAM,CAAC,gCAAgC,CAAC,CAAA;AACpD;AACF,yBAAA;qBACK,MAAA;AACL,wBAAA,MAAMC,MAAMC,MAAOnB,CAAAA,IAAAA,CAAAA;AACnB,wBAAA,IAAImB,MAAOC,CAAAA,SAAS,CAACF,GAAAA,CAAAA,IAAQA,OAAO,CAAG,EAAA;4BACrC,MAAMG,SAAAA,GAAY,IAAIC,eAAAA,CAAgB3B,WAAauB,EAAAA,GAAAA,CAAAA;AACnD,4BAAA,MAAMK,aAAgB,GAAA,SAASC,SAAgC,CAAA,GAAGV,IAAW,EAAA;gCAC3E,IAAIA,IAAAA,CAAKC,MAAM,KAAK,CAAA,IAAK,OAAOD,IAAI,CAAC,CAAE,CAAA,KAAK,QAAU,EAAA;AACpD,oCAAA,OAAO,IAAIE,WAAAA,CAAYF,IAAI,CAAC,EAAE,EAAEO,SAAAA,CAAAA;iCAC3B,MAAA;oCACL,MAAMI,GAAAA,GAAM,IAAIT,WAAAA,CAAY,EAAIK,EAAAA,SAAAA,CAAAA;AAChCI,oCAAAA,GAAAA,CAAIC,IAAI,GAAG,IAAIC,uBACbF,CAAAA,GAAAA,CAAIG,SAAS,EACbd,IAAAA,CAAKe,GAAG,CAAC,CAACC,GAASA,GAAAA,GAAAA,YAAed,WAAcc,GAAAA,GAAAA,CAAIJ,IAAI,GAAGI,GAAAA,CAAAA,CAAAA;oCAE7D,OAAOL,GAAAA;AACT;AACF,6BAAA;AACAtB,4BAAAA,IAAAA,GAAOV,gBAAgB8B,aAAiCF,EAAAA,SAAAA,CAAAA;AAC1D;AACF;AACF;AACF;AACA,YAAA,IAAIlB,IAAM,EAAA;gBACRF,OAAO,CAACD,KAAK,GAAGG,IAAAA;AAClB;YACA,OAAOA,IAAAA;AACT;AACF,KAAA,CAAA;IACA,OAAOP,eAAAA;AACT;AAEA;;;AAGC,IACM,MAAemC,SAAAA,CAAAA;qBAEpB,KAAqC;IACrC,WAAc,EAAA;AACZ,QAAA,IAAI,CAACC,KAAK,GAAG,IAAInC,KAAAA,CAAM,IAAI,EAAE;YAC3BC,GAAK,EAAA,SAAUC,MAAM,EAAEC,IAAI,EAAA;AACzB,gBAAA,OAAO,OAAOA,IAAS,KAAA,QAAA,GAAWD,MAAOkC,CAAAA,IAAI,CAACjC,IAAQkC,CAAAA,GAAAA,SAAAA;AACxD,aAAA;AACAhC,YAAAA,GAAAA,EAAK,SAAUH,MAAM,EAAEC,IAAI,EAAEmC,KAAK,EAAA;AAChC,gBAAA,OAAO,OAAOnC,IAAS,KAAA,QAAA,GAAWD,OAAOqC,IAAI,CAACpC,MAAMmC,KAAS,CAAA,GAAA,KAAA;AAC/D;AACF,SAAA,CAAA;QACA,OAAO,IAAI,CAACH,KAAK;AACnB;AACA,IAAA,IAAIK,UAAgB,GAAA;QAClB,OAAO,IAAI,CAACL,KAAK;AACnB;AAKF;AAEA,IAAIM,MAAS,GAAA,CAAA;AAEb;;;IAIO,MAAMtB,WAAoBe,SAAAA,SAAAA,CAAAA;AAC/B,qBACAQ,IAAa;AACb,qBACAC,IAAa;AACb,qBACAC,SAAkB;AAClB,qBACAb,SAAsB;AACtB,qBACAc,OAAiB;AACjB,qBACAC,WAAwE;AACxE,qBACAC,UAAgC;AAChC,qBACAlB,IAAoB;AACpB,qBACAmB,MAAwB;AACxB,qBACAC,YAA0C;AAC1C,qBACAC,OAAwB;AACxB,qBACAC,KAA2B;AAC3B,qBACAC,OAAgB;AAChB,qBACAC,YAA0B;AAC1B,qBACAC,SAAmB;AACnB,qBACAC,SAAmB;AACnB,qBACAC,YAAqB;AAErB,qBACA,WAAA,CAAYC,GAAW,EAAEC,QAAoB,CAAE;QAC7C,KAAK,EAAA;AACL,QAAA,IAAI,CAACD,GAAAA,IAAOC,QAASC,CAAAA,aAAa,EAAI,EAAA;AACpC,YAAA,MAAM,IAAIvC,KAAM,CAAA,yCAAA,CAAA;AAClB;QACA,IAAI,CAACsB,IAAI,GAAGD,MAAAA,EAAAA;QACZ,IAAI,CAACE,IAAI,GAAGc,GAAO,IAAA,EAAA;QACnB,IAAI,CAACb,SAAS,GAAG,CAAA;QACjB,IAAI,CAACC,OAAO,GAAG,KAAA;QACf,IAAI,CAACd,SAAS,GAAG2B,QAAAA;QACjB,IAAI,CAACE,UAAU,GAAG,IAAA;AAClB,QAAA,IAAI,CAACb,UAAU,GAAGc,mBAAAA,CAAoBC,IAAI;AAC1C,QAAA,IAAI,CAACjC,IAAI,GAAG,IAAIkC,aAAa,IAAI,CAAA;QACjC,IAAI,CAACf,MAAM,GAAG,IAAA;QACd,IAAI,CAACC,YAAY,GAAG,EAAC;QACrB,IAAI,CAACC,OAAO,GAAG,IAAA;QACf,IAAI,CAACC,KAAK,GAAG,EAAE;QACf,IAAI,CAACC,OAAO,GAAG,IAAA;AACf,QAAA,IAAI,CAACC,YAAY,GAAGW,WAAAA,CAAYC,iBAAiB;QACjD,IAAI,CAACX,SAAS,GAAG,KAAA;QACjB,IAAI,CAACE,YAAY,GAAG,CAAA;QACpB,IAAI,CAACD,SAAS,GAAG,KAAA;QACjB,IAAIG,QAAAA,CAASQ,aAAa,EAAI,EAAA;YAC5B,IAAIR,QAAAA,CAASS,cAAc,EAAI,EAAA;gBAC7B,IAAI,CAACrB,WAAW,GAAG,OAAA;aACd,MAAA;AACL,gBAAA,MAAMsB,IAAIC,oBAAqBX,CAAAA,QAAAA,CAAAA;AAC/B,gBAAA,IAAIU,CAAEE,CAAAA,aAAa,KAAKC,eAAAA,CAAgBC,GAAG,EAAE;oBAC3C,IAAI,CAAC1B,WAAW,GAAG,MAAA;AACrB,iBAAA,MAAO,IAAIsB,CAAEE,CAAAA,aAAa,KAAKC,eAAAA,CAAgBE,GAAG,EAAE;oBAClD,IAAI,CAAC3B,WAAW,GAAG,MAAA;iBACd,MAAA;oBACL,IAAI,CAACA,WAAW,GAAG,OAAA;AACrB;AACF;AACF;AACF;AACA,IAAA,IAAI4B,MAAiB,GAAA;QACnB,OAAO,IAAI,CAACtB,OAAO;AACrB;IACA,IAAIsB,MAAAA,CAAOC,GAAW,EAAE;QACtB,IAAI,CAACvB,OAAO,GAAGuB,GAAAA;AACjB;AACA;;;;MAKAC,OAAAA,CAAQC,KAAa,EAAe;AAClC,QAAA,IAAI,CAACxB,YAAY,GAAGW,WAAAA,CAAYc,oBAAoB;QACpD,IAAI,CAACJ,MAAM,GAAGG,KAAAA;QACd,IAAI,CAACvB,SAAS,GAAG,KAAA;AACjB,QAAA,OAAO,IAAI;AACb;AACA;;;;AAIC,MACDyB,aAAcF,CAAAA,KAAa,EAAEG,WAAAA,GAAc,CAAC,EAAe;QACzD,IACE,CAAC,IAAI,CAACjD,SAAS,CAACxB,eAAe,EAAA,IAC/B,CAAC,IAAI,CAACwB,SAAS,CAACtB,WAAW,MAC3B,CAAC,IAAI,CAACsB,SAAS,CAACvB,YAAY,EAC5B,EAAA;AACA,YAAA,MAAM,IAAIyE,UAAAA,CACR,IAAI,CAACpD,IAAI,EACT,gFAAA,CAAA;AAEJ;AACA,QAAA,IAAI,CAACwB,YAAY,GAAGW,WAAAA,CAAYc,oBAAoB;QACpD,IAAI,CAACJ,MAAM,GAAGG,KAAAA;QACd,IAAI,CAACvB,SAAS,GAAG,IAAA;QACjB,IAAI,CAACE,YAAY,GAAGwB,WAAAA;AACpB,QAAA,OAAO,IAAI;AACb;AACA;;;;;;;AAOC,MACDE,SAAyB,GAAA;AACvB,QAAA,IAAI,CAAC7B,YAAY,GAAGW,WAAAA,CAAYmB,sBAAsB;AACtD,QAAA,OAAO,IAAI;AACb;AACA;;;;MAKAC,OAAAA,CAAQP,KAAa,EAAe;AAClC,QAAA,IAAI,CAAC,IAAI,CAAC9C,SAAS,CAACsD,cAAc,EAAI,EAAA;AACpC,YAAA,IAAI,IAAI,CAACtD,SAAS,CAACmC,aAAa,EAAI,EAAA;AAClC,gBAAA,IAAI,CAAC,IAAI,CAACnC,SAAS,CAACuD,gBAAgB,EAAI,EAAA;AACtC,oBAAA,MAAM,IAAIL,UAAAA,CAAW,IAAI,CAACpD,IAAI,EAAE,4CAAA,CAAA;AAClC;gBACA,OAAO,IAAI,CAAC+C,OAAO,CAACC,KAAAA,CAAAA;AACtB;AACA,YAAA,MAAM,IAAII,UAAAA,CAAW,IAAI,CAACpD,IAAI,EAAE,kDAAA,CAAA;AAClC;AACA,QAAA,IAAI,CAACwB,YAAY,GAAGW,WAAAA,CAAYuB,oBAAoB;QACpD,IAAI,CAACb,MAAM,GAAGG,KAAAA;QACd,IAAI,CAACvB,SAAS,GAAG,KAAA;QACjB,IAAI,CAACC,SAAS,GAAG,KAAA;AACjB,QAAA,OAAO,IAAI;AACb;AACA;;;;MAKAiC,eAAAA,CAAgBX,KAAa,EAAe;QAC1C,IAAI,CAACO,OAAO,CAACP,KAAAA,CAAAA;QACb,IAAI,CAACtB,SAAS,GAAG,IAAA;AACjB,QAAA,OAAO,IAAI;AACb;AACA;;;;AAIC,MACDkC,aAAcZ,CAAAA,KAAa,EAAEG,WAAAA,GAAc,CAAC,EAAe;AACzD,QAAA,IACE,CAAC,IAAI,CAACjD,SAAS,CAACxB,eAAe,EAAA,IAC/B,CAAC,IAAI,CAACwB,SAAS,CAACtB,WAAW,EAAA,IAC3B,CAAC,IAAI,CAACsB,SAAS,CAACvB,YAAY,EAAA,IAC5B,CAAC,IAAI,CAACuB,SAAS,CAACrB,WAAW,EAAA,IAC3B,CAAC,IAAI,CAACqB,SAAS,CAACpB,WAAW,EAC3B,EAAA;AACA,YAAA,MAAM,IAAIsE,UAAAA,CACR,IAAI,CAACpD,IAAI,EACT,gFAAA,CAAA;AAEJ;AACA,QAAA,IAAI,CAACwB,YAAY,GAAGW,WAAAA,CAAYuB,oBAAoB;QACpD,IAAI,CAACb,MAAM,GAAGG,KAAAA;QACd,IAAI,CAACvB,SAAS,GAAG,IAAA;QACjB,IAAI,CAACE,YAAY,GAAGwB,WAAAA;QACpB,IAAI,CAACzB,SAAS,GAAG,KAAA;AACjB,QAAA,OAAO,IAAI;AACb;AACA;;;;AAIC,MACDmC,qBAAsBb,CAAAA,KAAa,EAAEG,WAAAA,GAAc,CAAC,EAAe;QACjE,IAAI,CAACS,aAAa,CAACZ,KAAOG,EAAAA,WAAAA,CAAAA;QAC1B,IAAI,CAACzB,SAAS,GAAG,IAAA;AACjB,QAAA,OAAO,IAAI;AACb;IACAoC,KAAqB,GAAA;QACnB,IAAI,CAAC3C,MAAM,GAAG,OAAA;AACd,QAAA,OAAO,IAAI;AACb;IACA4C,GAAmB,GAAA;QACjB,IAAI,CAAC5C,MAAM,GAAG,KAAA;AACd,QAAA,OAAO,IAAI;AACb;AACA;;;;MAKA6C,MAAAA,CAAOC,IAAoB,EAAe;AACxC,QAAA,IAAI,CAACzC,YAAY,GAAGW,WAAAA,CAAY+B,eAAe;QAC/C,IAAI,CAAC7C,OAAO,GAAG4C,IAAAA;AACf,QAAA,OAAO,IAAI;AACb;AACA;;;;MAKAE,GAAAA,CAAI,GAAG/E,IAAyB,EAAe;QAC7CA,IAAKgF,CAAAA,OAAO,CAAC,CAACtB,GAAAA,GAAAA;AACZ,YAAA,IAAI,IAAI,CAACxB,KAAK,CAAC+C,OAAO,CAACvB,OAAO,CAAG,EAAA;AAC/B,gBAAA,IAAI,CAACxB,KAAK,CAACgD,IAAI,CAACxB,GAAAA,CAAAA;AAClB;AACF,SAAA,CAAA;AACA,QAAA,OAAO,IAAI;AACb;AACA;;;;MAKAyB,UAAAA,CAAWC,IAAgE,EAAe;AACxF,QAAA,IAAIA,IAAM,EAAA;YACR,IAAI,CAACvD,WAAW,GAAGuD,IAAAA;AACrB;AACA,QAAA,OAAO,IAAI;AACb;AACA;;;;MAKAC,EAAAA,CAAGC,KAA2B,EAAe;AAC3C,QAAA,MAAMC,OAAU,GAAA,IAAI,CAAC3E,IAAI,CAAC4E,OAAO,EAAA;AACjC,QAAA,IACE,CAACD,OAAQ/F,CAAAA,WAAW,EACnB,KAAA,CAAC+F,OAAQjG,CAAAA,eAAe,EAAO,IAAA,CAACiG,QAAQE,YAAY,EAAA,IAAM,CAACF,OAAQG,CAAAA,YAAY,EAAE,CAClF,EAAA;AACA,YAAA,MAAM,IAAIvF,KAAM,CAAA,6CAAA,CAAA;AAClB;AACA,QAAA,IAAItB,WAA0B,GAAA,IAAA;QAC9B,IAAI8G,SAAAA;QACJ,IAAIJ,OAAAA,CAAQ/F,WAAW,EAAI,EAAA;AACzBX,YAAAA,WAAAA,GAAc0G,QAAQ1G,WAAW;AACjC8G,YAAAA,SAAAA,GAAYJ,QAAQI,SAAS;SACxB,MAAA,IAAIJ,OAAQE,CAAAA,YAAY,EAAI,EAAA;AACjC5G,YAAAA,WAAAA,GAAc+G,oBAAoBC,iBAAiB,CAACN,OAAQO,CAAAA,UAAU,CAAC,CAAG,EAAA,CAAA,CAAA,CAAA;AAC1EH,YAAAA,SAAAA,GAAYJ,QAAQQ,IAAI;SACnB,MAAA,IAAIR,OAAQG,CAAAA,YAAY,EAAI,EAAA;YACjC7G,WAAc+G,GAAAA,mBAAAA,CAAoBC,iBAAiB,CAACN,OAAAA,CAAQO,UAAU,CAAC,CAAA,EAAGP,QAAQQ,IAAI,CAAA,CAAA;AACtFJ,YAAAA,SAAAA,GAAYJ,QAAQS,IAAI;AAC1B;QACA,MAAMC,MAAAA,GAAS,IAAI/F,WAAAA,CAAY,EAAIrB,EAAAA,WAAAA,CAAAA;QACnC,IAAI,OAAOyG,UAAU,QAAU,EAAA;AAC7B,YAAA,IAAI,CAACjF,MAAAA,CAAOC,SAAS,CAACgF,KAAQ,CAAA,EAAA;AAC5B,gBAAA,MAAM,IAAInF,KAAM,CAAA,uCAAA,CAAA;AAClB;AACA,YAAA,IAAImF,KAAQ,GAAA,CAAA,IAAMK,SAAY,GAAA,CAAA,IAAKL,SAASK,SAAY,EAAA;AACtD,gBAAA,MAAM,IAAIxF,KAAM,CAAA,gCAAA,CAAA;AAClB;YACA8F,MAAOrF,CAAAA,IAAI,GAAG,IAAIsF,aAAc,CAAA,IAAI,CAACtF,IAAI,EAAE,IAAIuF,SAAUb,CAAAA,KAAAA,EAAOc,OAAUvH,CAAAA,EAAAA,WAAAA,CAAAA;SACrE,MAAA;AACL,YAAA,MAAMuG,IAAOE,GAAAA,KAAAA,CAAM1E,IAAI,CAAC4E,OAAO,EAAA;AAC/B,YAAA,IAAI,CAACJ,IAAK9F,CAAAA,eAAe,MAAM,CAAC8F,IAAAA,CAAKiB,YAAY,EAAI,EAAA;AACnD,gBAAA,MAAM,IAAIlG,KAAM,CAAA,sCAAA,CAAA;AAClB;YACA,IAAImG,GAAAA,GAAMhB,MAAM1E,IAAI;YACpB,IAAIwE,IAAAA,CAAKmB,UAAU,KAAKjD,eAAgBC,CAAAA,GAAG,IAAI6B,IAAAA,CAAKmB,UAAU,KAAKjD,eAAgBE,CAAAA,GAAG,EAAE;gBACtF8C,GAAM,GAAA,IAAIE,QAAQF,GAAKF,EAAAA,OAAAA,CAAAA;AACzB;YACAH,MAAOrF,CAAAA,IAAI,GAAG,IAAIsF,aAAAA,CAAc,IAAI,CAACtF,IAAI,EAAE0F,GAAKzH,EAAAA,WAAAA,CAAAA;AAClD;QACA,OAAOoH,MAAAA;AACT;AACA;;;;AAIC,MACDQ,KAAMnB,CAAAA,KAA2B,EAAE5B,GAAmC,EAAQ;AAC5E,QAAA,MAAM6B,OAAU,GAAA,IAAI,CAAC3E,IAAI,CAAC4E,OAAO,EAAA;AACjC,QAAA,IAAI,CAACD,OAAAA,CAAQ/F,WAAW,EAAA,IAAM,EAAE+F,OAAQjG,CAAAA,eAAe,EAAMiG,IAAAA,OAAAA,CAAQE,YAAY,EAAC,CAAI,EAAA;AACpF,YAAA,MAAM,IAAItF,KAAM,CAAA,gDAAA,CAAA;AAClB;QACA,IAAI,OAAOmF,UAAU,QAAU,EAAA;AAC7B,YAAA,IAAI,CAACjF,MAAAA,CAAOC,SAAS,CAACgF,KAAQ,CAAA,EAAA;AAC5B,gBAAA,MAAM,IAAInF,KAAM,CAAA,0CAAA,CAAA;AAClB;YACA,MAAMwF,SAAAA,GAAYJ,QAAQ/F,WAAW,EAAA,GAAK+F,QAAQI,SAAS,GAAGJ,QAAQQ,IAAI;AAC1E,YAAA,IAAIT,KAAQ,GAAA,CAAA,IAAMK,SAAY,GAAA,CAAA,IAAKL,SAASK,SAAY,EAAA;AACtD,gBAAA,MAAM,IAAIxF,KAAM,CAAA,mCAAA,CAAA;AAClB;AACF;AACAuG,QAAAA,wBAAAA,EAAAA,CACGC,eAAe,EACf/F,CAAAA,IAAI,CAACgG,UAAU,CAAC1B,IAAI,CACnB,IAAI2B,cACF,IAAIC,cAAAA,CACF,IAAIC,eAAgB,CAAA,IAAI,CAACnG,IAAI,CAAA,EAC7B,OAAO0E,KAAU,KAAA,QAAA,GAAW,IAAIa,SAAUb,CAAAA,KAAAA,EAAOc,WAAWd,KAAM1E,CAAAA,IAAI,EACtE2E,OAAQ/F,CAAAA,WAAW,KAAK+F,OAAQ1G,CAAAA,WAAW,GAAG,IAAI+G,mBAAAA,CAAoBL,QAAQgB,UAAU,CAAA,CAAA,EAE1F7C,eAAexD,WAAcwD,GAAAA,GAAAA,CAAI9C,IAAI,GAAG8C,GAAAA,CAAAA,CAAAA;AAGhD;AACA;;;AAGC,MACDsD,KAAqB,GAAA;AACnB,QAAA,IAAI,CAAClF,UAAU,GAAGc,mBAAAA,CAAoBqE,IAAI;AAC1C,QAAA,OAAO,IAAI;AACb;AACA;;;AAGC,MACDC,OAAuB,GAAA;AACrB,QAAA,IAAI,CAACpF,UAAU,GAAGc,mBAAAA,CAAoBuE,MAAM;AAC5C,QAAA,OAAO,IAAI;AACb;AACA;;;AAGC,MACDC,IAAoB,GAAA;AAClB,QAAA,IAAI,CAACtF,UAAU,GAAGc,mBAAAA,CAAoByE,GAAG;AACzC,QAAA,OAAO,IAAI;AACb;AACA;;;AAGC,MACDC,aAAyB,GAAA;AACvB,QAAA,OAAO,IAAI,CAAC1G,IAAI,YAAYC,uBAA2B,IAAA,IAAI,CAACD,IAAI,CAACZ,IAAI,CAACC,MAAM,KAAK,CAAA;AACnF;AACA;;;AAGC,MACDsH,QAAoB,GAAA;AAClB,QAAA,MAAMhC,OAAU,GAAA,IAAI,CAAC3E,IAAI,CAAC4E,OAAO,EAAA;AACjC,QAAA,OAAOD,OAAQjG,CAAAA,eAAe,EAAMiG,IAAAA,OAAAA,CAAQE,YAAY,EAAA;AAC1D;AACA;;;AAGC,MACD+B,aAAwB,GAAA;AACtB,QAAA,MAAMjC,OAAU,GAAA,IAAI,CAAC3E,IAAI,CAAC4E,OAAO,EAAA;AACjC,QAAA,OAAOD,OAAQjG,CAAAA,eAAe,EAAKiG,GAAAA,OAAAA,CAAQQ,IAAI,GAAG,CAAA;AACpD;AACA;;;AAGC,MACD0B,WAAsB,GAAA;QACpB,OAAO,IAAI,CAAC7G,IAAI,CAAC4E,OAAO,EAAGkC,CAAAA,UAAU,CAAChB,wBAAAA,EAAAA,CAA2BiB,SAAS,EAAA,CAAGvC,IAAI,CAAA;AACnF;AACA,qBACUjE,IAAKjC,CAAAA,IAAY,EAAO;QAChC,IAAI,OAAOA,SAAS,QAAU,EAAA;AAC5B,YAAA,IAAIA,IAAI,CAAC,CAAA,CAAE,KAAK,GAAOA,IAAAA,IAAAA,IAAQ,IAAI,EAAE;gBACnC,OAAO,IAAI,CAACA,IAAK,CAAA;aACZ,MAAA;AACL,gBAAA,IAAIyB,GAAM,GAAA,IAAI,CAACqB,YAAY,CAAC9C,IAAK,CAAA;AACjC,gBAAA,IAAI,CAACyB,GAAK,EAAA;oBACR,MAAM4E,OAAAA,GAAU,IAAI,CAAC3E,IAAI,EAAE4E,OAAa,EAAA,IAAA,IAAI,CAAC1E,SAAS;AACtD,oBAAA,MAAM8G,MAAMvH,MAAOnB,CAAAA,IAAAA,CAAAA;oBACnB,IAAImB,MAAAA,CAAOwH,KAAK,CAACD,GAAM,CAAA,EAAA;wBACrB,IAAIrC,OAAAA,CAAQhG,YAAY,EAAI,EAAA;4BAC1B,MAAMuI,YAAAA,GAAevC,OAAQwC,CAAAA,aAAa,CAACC,SAAS,CAAC,CAACtE,GAAAA,GAAQA,GAAIuE,CAAAA,IAAI,KAAK/I,IAAAA,CAAAA;AAC3E,4BAAA,IAAI4I,eAAe,CAAG,EAAA;gCACpB,OAAO1G,SAAAA;AACT;AACA,4BAAA,MAAM8G,OAAU3C,GAAAA,OAAAA,CAAQwC,aAAa,CAACD,YAAa,CAAA;AACnD,4BAAA,IAAII,OAAQ9C,CAAAA,IAAI,CAAC7F,YAAY,EAAI,EAAA;gCAC/B,MAAMF,IAAAA,GAAOqH,wBAA2ByB,EAAAA,CAAAA,UAAU,CAACC,OAAO,CAACF,OAAQ9C,CAAAA,IAAI,CAACiD,UAAU,CAAC;gCACnF1H,GAAMtB,GAAAA,IAAAA,CAAKiJ,IAAI,CAAC5B,wBAA4B,EAAA,EAAA,CAAA,EAAG,IAAI,CAAChF,IAAI,CAAC,CAAC,EAAExC,IAAM,CAAA,CAAA,CAAA;6BAC7D,MAAA;AACLyB,gCAAAA,GAAAA,GAAM,IAAIT,WAAAA,CAAY,CAAG,EAAA,IAAI,CAACwB,IAAI,CAAC,CAAC,EAAExC,IAAAA,CAAAA,CAAM,EAAEgJ,OAAAA,CAAQ9C,IAAI,CAAA;AAC5D;4BACAzE,GAAIC,CAAAA,IAAI,GAAG,IAAI2H,OAAQ,CAAA,IAAI,CAAC3H,IAAI,EAAE1B,IAAMgJ,EAAAA,OAAAA,CAAQ9C,IAAI,CAAA;yBAC/C,MAAA;4BACL,IAAI,CAACG,OAAQjG,CAAAA,eAAe,EAAO,IAAA,CAACiG,OAAQE,CAAAA,YAAY,EAAM,IAAA,CAACF,OAAQc,CAAAA,YAAY,EAAK,EAAA;gCACtF,MAAM,IAAIlG,MACR,CAAC,yBAAyB,EAAE,IAAI,CAACS,IAAI,CAAC4H,QAAQ,CAC5C9B,wBAA2BiB,EAAAA,CAAAA,SAAS,GAAGvC,IAAI,CAAA,CAC3C,CAAC,EAAElG,IAAAA,CAAK,CAAC,CAAC,CAAA;AAEhB;AACA,4BAAA,IACEA,KAAKe,MAAM,KAAK,KAChBf,IAAKe,CAAAA,MAAM,GAAG,CACb,IAAA;AAAIf,gCAAAA,GAAAA;AAAK,6BAAA,CAACuJ,IAAI,CAAC,CAAC/E,GAAAA,GAAQ,OAAOgF,KAAK,CAAC,CAAGnD,EAAAA,OAAAA,CAAQQ,IAAI,CAAA,CAAEd,OAAO,CAACvB,OAAO,CACpE,CAAA,IAAA;AAAIxE,gCAAAA,GAAAA;AAAK,6BAAA,CAACuJ,IAAI,CAAC,CAAC/E,GAAAA,GAAQ,OAAOgF,KAAK,CAAC,CAAGnD,EAAAA,OAAAA,CAAQQ,IAAI,CAAA,CAAEd,OAAO,CAACvB,OAAO,CACvE,CAAA,EAAA;gCACA,MAAM,IAAIvD,MACR,CAAC,wBAAwB,EAAE,IAAI,CAACS,IAAI,CAAC4H,QAAQ,CAC3C9B,wBAA2BiB,EAAAA,CAAAA,SAAS,GAAGvC,IAAI,CAAA,CAC3C,CAAC,EAAElG,IAAAA,CAAK,CAAC,CAAC,CAAA;AAEhB;4BACA,MAAMkG,IAAAA,GAAOQ,oBAAoBC,iBAAiB,CAACN,QAAQO,UAAU,CAAC,CAAG5G,EAAAA,IAAAA,CAAKe,MAAM,CAAA,CAAA;4BACpFU,GAAM,GAAA,IAAIT,YAAY,EAAIkF,EAAAA,IAAAA,CAAAA;4BAC1B,IAAIG,OAAAA,CAAQQ,IAAI,KAAK,CAAG,EAAA;AACtBpF,gCAAAA,GAAAA,CAAIC,IAAI,GAAG,IAAIC,uBAAAA,CAAwBuE,IAAM,EAAA;AAAC,oCAAA,IAAI,CAACxE;AAAK,iCAAA,CAAA;6BACnD,MAAA;gCACLD,GAAIC,CAAAA,IAAI,GAAG,IAAI2H,OAAAA,CAAQ,IAAI,CAAC3H,IAAI,EAAE1B,IAAMkG,EAAAA,IAAAA,CAAAA;AAC1C;AACF;qBACK,MAAA;wBACL,IAAIG,OAAAA,CAAQ/F,WAAW,EAAI,EAAA;4BACzBmB,GAAM,GAAA,IAAI,CAAC0E,EAAE,CAACuC,GAAAA,CAAAA;AAChB,yBAAA,MAAO,IAAIrC,OAAQjG,CAAAA,eAAe,EAAMiG,IAAAA,OAAAA,CAAQE,YAAY,EAAI,EAAA;4BAC9D,IAAImC,GAAAA,IAAOrC,OAAQQ,CAAAA,IAAI,EAAE;AACvB,gCAAA,MAAM,IAAI5F,KAAAA,CAAM,CAAC,+BAA+B,EAAE,IAAI,CAACuB,IAAI,CAAC,CAAC,EAAEkG,GAAAA,CAAI,CAAC,CAAC,CAAA;AACvE;AACAjH,4BAAAA,GAAAA,GAAM,IAAI,CAACQ,IAAI,CAAC,MAAM,CAACyG,GAAI,CAAA,CAAA;AAC7B,yBAAA,MAAO,IAAIrC,OAAQjG,CAAAA,eAAe,EAAMiG,IAAAA,OAAAA,CAAQG,YAAY,EAAI,EAAA;4BAC9D,MAAMN,IAAAA,GAAOQ,oBAAoBC,iBAAiB,CAACN,QAAQO,UAAU,CAAC,CAAGP,EAAAA,OAAAA,CAAQQ,IAAI,CAAA,CAAA;4BACrFpF,GAAM,GAAA,IAAIT,YAAY,EAAIkF,EAAAA,IAAAA,CAAAA;4BAC1BzE,GAAIC,CAAAA,IAAI,GAAG,IAAIsF,aAAc,CAAA,IAAI,CAACtF,IAAI,EAAE,IAAIuF,SAAUyB,CAAAA,GAAAA,EAAKxB,OAAUhB,CAAAA,EAAAA,IAAAA,CAAAA;yBAChE,MAAA;AACL,4BAAA,MAAM,IAAIjF,KAAAA,CAAM,CAAC,yBAAyB,EAAE,IAAI,CAACuB,IAAI,CAAC,CAAC,EAAEkG,GAAAA,CAAI,CAAC,CAAC,CAAA;AACjE;AACF;AACA,oBAAA,IAAI,CAAC5F,YAAY,CAAC9C,IAAAA,CAAK,GAAGyB,GAAAA;AAC5B;gBACA,OAAOA,GAAAA;AACT;SACK,MAAA;YACL,OAAOS,SAAAA;AACT;AACF;AACA,qBACA,IAAUE,CAAKpC,IAAY,EAAEmC,KAAU,EAAW;QAChD,IAAI,OAAOnC,SAAS,QAAU,EAAA;AAC5B,YAAA,IAAIA,IAAI,CAAC,CAAA,CAAE,KAAK,GAAOA,IAAAA,IAAAA,IAAQ,IAAI,EAAE;gBACnC,IAAI,CAACA,KAAK,GAAGmC,KAAAA;aACR,MAAA;gBACL,IAAI,OAAOA,KAAU,KAAA,QAAA,IAAY,OAAOA,KAAAA,KAAU,aAAa,EAAEA,KAAiBnB,YAAAA,WAAU,CAAI,EAAA;AAC9F,oBAAA,MAAM,IAAIC,KAAAA,CAAM,CAAC,+BAA+B,CAAC,CAAA;AACnD;gBACA,MAAMoF,OAAAA,GAAU,IAAI,CAAC3E,IAAI,EAAE4E,OAAa,EAAA,IAAA,IAAI,CAAC1E,SAAS;AACtD,gBAAA,MAAM8G,MAAMvH,MAAOnB,CAAAA,IAAAA,CAAAA;gBACnB,IAAImB,MAAAA,CAAOwH,KAAK,CAACD,GAAM,CAAA,EAAA;oBACrB,IAAIrC,OAAAA,CAAQhG,YAAY,EAAI,EAAA;wBAC1B,MAAMuI,YAAAA,GAAevC,OAAQwC,CAAAA,aAAa,CAACC,SAAS,CAAC,CAACtE,GAAAA,GAAQA,GAAIuE,CAAAA,IAAI,KAAK/I,IAAAA,CAAAA;AAC3E,wBAAA,IAAI4I,eAAe,CAAG,EAAA;AACpB,4BAAA,MAAM,IAAI3H,KAAAA,CAAM,CAAC,uBAAuB,EAAEjB,IAAM,CAAA,CAAA,CAAA;AAClD;AACA,wBAAA,MAAMgJ,OAAU3C,GAAAA,OAAAA,CAAQwC,aAAa,CAACD,YAAa,CAAA;wBACnD,IAAIa,MAAAA;AACJ,wBAAA,IAAI,OAAOtH,KAAAA,KAAU,QAAY,IAAA,OAAOA,UAAU,SAAW,EAAA;4BAC3D,IAAI,CAAC6G,OAAQ9C,CAAAA,IAAI,CAAC9F,eAAe,EAAM,IAAA,CAAC4I,OAAQ9C,CAAAA,IAAI,CAACiB,YAAY,EAAI,EAAA;AACnE,gCAAA,MAAM,IAAIlG,KAAM,CAAA,CAAC,2BAA2B,EAAEjB,IAAAA,CAAK,oBAAoB,CAAC,CAAA;AAC1E;AACAyJ,4BAAAA,MAAAA,GAAS,IAAIxC,SAAAA,CAAU9E,KAAO6G,EAAAA,OAAAA,CAAQ9C,IAAI,CAAA;yBACrC,MAAA,IAAI/D,iBAAiBnB,WAAa,EAAA;AACvCyI,4BAAAA,MAAAA,GAAStH,MAAMT,IAAI;AACrB;AACA,wBAAA,IAAI,CAAC+H,MAAQ,EAAA;AACX,4BAAA,MAAM,IAAIxI,KAAM,CAAA,CAAC,2BAA2B,EAAEjB,IAAAA,CAAK,oBAAoB,CAAC,CAAA;AAC1E;wBACAwH,wBACGC,EAAAA,CAAAA,eAAe,GACf/F,IAAI,CAACgG,UAAU,CAAC1B,IAAI,CACnB,IAAI2B,aAAAA,CACF,IAAI+B,aAAc,CAAA,IAAI7B,gBAAgB,IAAI,CAACnG,IAAI,CAAG1B,EAAAA,IAAAA,EAAMgJ,OAAQ9C,CAAAA,IAAI,CACpEuD,EAAAA,MAAAA,CAAAA,CAAAA;qBAGD,MAAA;;AAEL,wBAAA,IAAIzJ,IAAKe,CAAAA,MAAM,GAAG,CAAA,IAAM,MAAOgF,CAAAA,OAAO,CAAC/F,IAAAA,CAAAA,GAAQ,CAAK,IAAA,MAAA,CAAO+F,OAAO,CAAC/F,QAAQ,CAAI,EAAA;AAC7E,4BAAA,MAAM,IAAIiB,KAAAA,CAAM,CAAC,yBAAyB,EAAE,IAAI,CAACuB,IAAI,CAAC,CAAC,EAAEkG,GAAAA,CAAI,CAAC,CAAC,CAAA;AACjE;AACA,wBAAA,IAAI,CAACrC,OAAQjG,CAAAA,eAAe,MAAM,CAACiG,OAAAA,CAAQE,YAAY,EAAI,EAAA;AACzD,4BAAA,MAAM,IAAItF,KAAAA,CAAM,CAAC,yBAAyB,EAAE,IAAI,CAACuB,IAAI,CAAC,CAAC,EAAEkG,GAAAA,CAAI,CAAC,CAAC,CAAA;AACjE;AACA,wBAAA,MAAMxC,IAAOQ,GAAAA,mBAAAA,CAAoBC,iBAAiB,CAACN,QAAQgB,UAAU,CAAA;wBACrEG,wBACGC,EAAAA,CAAAA,eAAe,EACf/F,CAAAA,IAAI,CAACgG,UAAU,CAAC1B,IAAI,CACnB,IAAI2B,aAAAA,CACF,IAAI+B,aAAAA,CAAc,IAAI7B,eAAgB,CAAA,IAAI,CAACnG,IAAI,CAAG1B,EAAAA,IAAAA,EAAMkG,OACxD/D,KAAiBnB,YAAAA,WAAAA,GAAcmB,KAAMT,CAAAA,IAAI,GAAGS,KAAAA,CAAAA,CAAAA;AAGpD;iBACK,MAAA;oBACL,IAAIkE,OAAAA,CAAQ/F,WAAW,EAAI,EAAA;wBACzB,IAAI,CAACiH,KAAK,CAACmB,GAAKvG,EAAAA,KAAAA,CAAAA;AAClB,qBAAA,MAAO,IAAIkE,OAAQjG,CAAAA,eAAe,EAAMiG,IAAAA,OAAAA,CAAQE,YAAY,EAAI,EAAA;wBAC9D,IAAImC,GAAAA,IAAOrC,OAAQQ,CAAAA,IAAI,EAAE;AACvB,4BAAA,MAAM,IAAI5F,KAAAA,CAAM,CAAC,+BAA+B,EAAE,IAAI,CAACuB,IAAI,CAAC,CAAC,EAAEkG,GAAAA,CAAI,CAAC,CAAC,CAAA;AACvE;AACA,wBAAA,IAAI,CAACtG,IAAI,CAAC,MAAM,CAACsG,IAAI,EAAEvG,KAAAA,CAAAA;AACzB,qBAAA,MAAO,IAAIkE,OAAQjG,CAAAA,eAAe,EAAMiG,IAAAA,OAAAA,CAAQG,YAAY,EAAI,EAAA;AAC9D,wBAAA,IAAI,EAAErE,KAAiBnB,YAAAA,WAAU,CAAI,EAAA;AACnC,4BAAA,MAAM,IAAIC,KAAAA,CAAM,CAAC,yCAAyC,EAAE,IAAI,CAACuB,IAAI,CAAC,CAAC,EAAEkG,GAAAA,CAAI,CAAC,CAAC,CAAA;AACjF;wBACA,MAAMxC,IAAAA,GAAOQ,oBAAoBC,iBAAiB,CAACN,QAAQO,UAAU,CAAC,CAAGP,EAAAA,OAAAA,CAAQQ,IAAI,CAAA,CAAA;wBACrFW,wBACGC,EAAAA,CAAAA,eAAe,EACf/F,CAAAA,IAAI,CAACgG,UAAU,CAAC1B,IAAI,CACnB,IAAI2B,aAAAA,CACF,IAAIC,cAAAA,CAAe,IAAIC,eAAgB,CAAA,IAAI,CAACnG,IAAI,CAAG,EAAA,IAAIuF,UAAUyB,GAAKxB,EAAAA,OAAAA,CAAAA,EAAUhB,IAChF/D,CAAAA,EAAAA,KAAAA,CAAMT,IAAI,CAAA,CAAA;qBAGX,MAAA;AACL,wBAAA,MAAM,IAAIT,KAAAA,CAAM,CAAC,yBAAyB,EAAE,IAAI,CAACuB,IAAI,CAAC,CAAC,EAAEkG,GAAAA,CAAI,CAAC,CAAC,CAAA;AACjE;AACF;AACF;YACA,OAAO,IAAA;AACT;QACA,OAAO,KAAA;AACT;AACF;;;;"}
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, TypeDetailInfo } 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\nimport type { Nullable } from '@zephyr3d/base';\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 extends TypeDetailInfo>(\r\n typeFunc: ShaderTypeFunc,\r\n elementType: PBTypeInfo<T>\r\n) {\r\n const wrappedTypeFunc = new Proxy(typeFunc, {\r\n get: function (target, prop): any {\r\n if (typeof prop === 'symbol' || prop in target) {\r\n // @ts-ignore 7015 */\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[]) {\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() {\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: Nullable<'out' | 'inout'>;\r\n /** @internal */\r\n $memberCache: Record<string, PBShaderExp>;\r\n /** @internal */\r\n $attrib: Nullable<VertexSemantic>;\r\n /** @internal */\r\n $tags: ShaderExpTagValue[];\r\n /** @internal */\r\n $_group: Nullable<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.$sampleType = 'float';\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() {\r\n return this.$_group;\r\n }\r\n set $group(val) {\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) {\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) {\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() {\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) {\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) {\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) {\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) {\r\n this.storageBuffer(group, bindingSize);\r\n this.$readonly = true;\r\n return this;\r\n }\r\n inout() {\r\n this.$inout = 'inout';\r\n return this;\r\n }\r\n out() {\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) {\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[]) {\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') {\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) {\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;\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 } else {\r\n throw new Error('at() source type is not indexable');\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) {\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() {\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() {\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() {\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() {\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() {\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() {\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() {\r\n return this.$ast.getType().toTypeName(getCurrentProgramBuilder()!.getDevice().type);\r\n }\r\n /** @internal */\r\n protected $get(prop: string) {\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) {\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: Nullable<ASTExpression> = null;\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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"}
@@ -1,4 +1,4 @@
1
- import { PBPrimitiveType, typeU32, typeF32, typeI32, typeAtomicI32, typeAtomicU32, typeVoid, PBFunctionTypeInfo, typeF32Vec2, typeF32Vec3, typeF32Vec4, typeI32Vec2, typeI32Vec3, typeI32Vec4, typeU32Vec2, typeU32Vec3, typeU32Vec4, typeMat2, typeMat3x2, typeMat4x2, typeMat2x3, typeMat3, typeMat4x3, typeMat2x4, typeMat3x4, typeMat4, typeFrexpResult, typeFrexpResultVec2, typeFrexpResultVec3, typeFrexpResultVec4, typeBool, typeTex1D, typeITex1D, typeUTex1D, typeTex2D, typeITex2D, typeUTex2D, typeTex2DArray, typeITex2DArray, typeUTex2DArray, typeTex3D, typeITex3D, typeUTex3D, typeTexCube, typeITexCube, typeUTexCube, typeTexCubeArray, typeITexCubeArray, typeUTexCubeArray, typeTexMultisampled2D, typeITexMultisampled2D, typeUTexMultisampled2D, typeTexDepth2D, typeTexDepth2DArray, typeTexDepthCube, typeTexDepthCubeArray, typeTexDepthMultisampled2D, typeTexStorage1D_rgba8unorm, typeTexStorage1D_rgba8snorm, typeTexStorage1D_rgba8uint, typeTexStorage1D_rgba8sint, typeTexStorage1D_rgba16uint, typeTexStorage1D_rgba16sint, typeTexStorage1D_rgba16float, typeTexStorage1D_rgba32uint, typeTexStorage1D_rgba32sint, typeTexStorage1D_rgba32float, typeTexStorage1D_rg32uint, typeTexStorage1D_rg32sint, typeTexStorage1D_rg32float, typeTexStorage1D_r32uint, typeTexStorage1D_r32sint, typeTexStorage1D_r32float, typeTexStorage2D_rgba8unorm, typeTexStorage2D_rgba8snorm, typeTexStorage2D_rgba8uint, typeTexStorage2D_rgba8sint, typeTexStorage2D_rgba16uint, typeTexStorage2D_rgba16sint, typeTexStorage2D_rgba16float, typeTexStorage2D_rgba32uint, typeTexStorage2D_rgba32sint, typeTexStorage2D_rgba32float, typeTexStorage2D_rg32uint, typeTexStorage2D_rg32sint, typeTexStorage2D_rg32float, typeTexStorage2D_r32uint, typeTexStorage2D_r32sint, typeTexStorage2D_r32float, typeTexStorage2DArray_rgba8unorm, typeTexStorage2DArray_rgba8snorm, typeTexStorage2DArray_rgba8uint, typeTexStorage2DArray_rgba8sint, typeTexStorage2DArray_rgba16uint, typeTexStorage2DArray_rgba16sint, typeTexStorage2DArray_rgba16float, typeTexStorage2DArray_rgba32uint, typeTexStorage2DArray_rgba32sint, typeTexStorage2DArray_rgba32float, typeTexStorage2DArray_rg32uint, typeTexStorage2DArray_rg32sint, typeTexStorage2DArray_rg32float, typeTexStorage2DArray_r32uint, typeTexStorage2DArray_r32sint, typeTexStorage2DArray_r32float, typeTexStorage3D_rgba8unorm, typeTexStorage3D_rgba8snorm, typeTexStorage3D_rgba8uint, typeTexStorage3D_rgba8sint, typeTexStorage3D_rgba16uint, typeTexStorage3D_rgba16sint, typeTexStorage3D_rgba16float, typeTexStorage3D_rgba32uint, typeTexStorage3D_rgba32sint, typeTexStorage3D_rgba32float, typeTexStorage3D_rg32uint, typeTexStorage3D_rg32sint, typeTexStorage3D_rg32float, typeTexStorage3D_r32uint, typeTexStorage3D_r32sint, typeTexStorage3D_r32float, typeSampler, typeSamplerComparison, typeTexStorage1D_bgra8unorm, typeTexStorage2D_bgra8unorm, typeTexStorage3D_bgra8unorm, typeTexExternal, typeBVec2, typeBVec3, typeBVec4 } from './types.js';
1
+ import { PBPrimitiveType, typeU32, typeBool, typeBVec2, typeBVec3, typeBVec4, typeF32, typeI32, typeAtomicI32, typeAtomicU32, typeVoid, PBFunctionTypeInfo, typeF32Vec2, typeF32Vec3, typeF32Vec4, typeI32Vec2, typeI32Vec3, typeI32Vec4, typeU32Vec2, typeU32Vec3, typeU32Vec4, typeMat2, typeMat3x2, typeMat4x2, typeMat2x3, typeMat3, typeMat4x3, typeMat2x4, typeMat3x4, typeMat4, typeFrexpResult, typeFrexpResultVec2, typeFrexpResultVec3, typeFrexpResultVec4, typeTex1D, typeITex1D, typeUTex1D, typeTex2D, typeITex2D, typeUTex2D, typeTex2DArray, typeITex2DArray, typeUTex2DArray, typeTex3D, typeITex3D, typeUTex3D, typeTexCube, typeITexCube, typeUTexCube, typeTexCubeArray, typeITexCubeArray, typeUTexCubeArray, typeTexMultisampled2D, typeITexMultisampled2D, typeUTexMultisampled2D, typeTexDepth2D, typeTexDepth2DArray, typeTexDepthCube, typeTexDepthCubeArray, typeTexDepthMultisampled2D, typeTexStorage1D_rgba8unorm, typeTexStorage1D_rgba8snorm, typeTexStorage1D_rgba8uint, typeTexStorage1D_rgba8sint, typeTexStorage1D_rgba16uint, typeTexStorage1D_rgba16sint, typeTexStorage1D_rgba16float, typeTexStorage1D_rgba32uint, typeTexStorage1D_rgba32sint, typeTexStorage1D_rgba32float, typeTexStorage1D_rg32uint, typeTexStorage1D_rg32sint, typeTexStorage1D_rg32float, typeTexStorage1D_r32uint, typeTexStorage1D_r32sint, typeTexStorage1D_r32float, typeTexStorage2D_rgba8unorm, typeTexStorage2D_rgba8snorm, typeTexStorage2D_rgba8uint, typeTexStorage2D_rgba8sint, typeTexStorage2D_rgba16uint, typeTexStorage2D_rgba16sint, typeTexStorage2D_rgba16float, typeTexStorage2D_rgba32uint, typeTexStorage2D_rgba32sint, typeTexStorage2D_rgba32float, typeTexStorage2D_rg32uint, typeTexStorage2D_rg32sint, typeTexStorage2D_rg32float, typeTexStorage2D_r32uint, typeTexStorage2D_r32sint, typeTexStorage2D_r32float, typeTexStorage2DArray_rgba8unorm, typeTexStorage2DArray_rgba8snorm, typeTexStorage2DArray_rgba8uint, typeTexStorage2DArray_rgba8sint, typeTexStorage2DArray_rgba16uint, typeTexStorage2DArray_rgba16sint, typeTexStorage2DArray_rgba16float, typeTexStorage2DArray_rgba32uint, typeTexStorage2DArray_rgba32sint, typeTexStorage2DArray_rgba32float, typeTexStorage2DArray_rg32uint, typeTexStorage2DArray_rg32sint, typeTexStorage2DArray_rg32float, typeTexStorage2DArray_r32uint, typeTexStorage2DArray_r32sint, typeTexStorage2DArray_r32float, typeTexStorage3D_rgba8unorm, typeTexStorage3D_rgba8snorm, typeTexStorage3D_rgba8uint, typeTexStorage3D_rgba8sint, typeTexStorage3D_rgba16uint, typeTexStorage3D_rgba16sint, typeTexStorage3D_rgba16float, typeTexStorage3D_rgba32uint, typeTexStorage3D_rgba32sint, typeTexStorage3D_rgba32float, typeTexStorage3D_rg32uint, typeTexStorage3D_rg32sint, typeTexStorage3D_rg32float, typeTexStorage3D_r32uint, typeTexStorage3D_r32sint, typeTexStorage3D_r32float, typeSampler, typeSamplerComparison, typeTexStorage1D_bgra8unorm, typeTexStorage2D_bgra8unorm, typeTexStorage3D_bgra8unorm, typeTexExternal } from './types.js';
2
2
  import { ASTScalar, ASTAddressOf, ASTFunction, ASTUnaryFunc, ASTBinaryFunc } from './ast.js';
3
3
  import { PBShaderExp } from './base.js';
4
4
  import { PBParamLengthError, PBDeviceNotSupport, PBParamValueError, PBParamTypeError, PBOverloadingMatchError } from './errors.js';
@@ -42,7 +42,10 @@ const genMatrixTypeList = [
42
42
  ];
43
43
  function matchFunctionOverloadings(pb, name, ...args) {
44
44
  const bit = pb.getDevice().type === 'webgl' ? MASK_WEBGL1 : pb.getDevice().type === 'webgl2' ? MASK_WEBGL2 : MASK_WEBGPU;
45
- const overloadings = builtinFunctionsAll?.[name].overloads.filter((val)=>!!(val[1] & bit)).map((val)=>val[0]);
45
+ // @ts-ignore 7053
46
+ const overloadings = builtinFunctionsAll[name].overloads// @ts-ignore 7006
47
+ .filter((val)=>!!(val[1] & bit))// @ts-ignore 7006
48
+ .map((val)=>val[0]);
46
49
  if (!overloadings || overloadings.length === 0) {
47
50
  throw new PBDeviceNotSupport(`builtin shader function '${name}'`);
48
51
  }
@@ -1018,7 +1021,9 @@ const builtinFunctionsAll = {
1018
1021
  if (!argType.isPrimitiveType() || !argType.isScalarType() && !argType.isVectorType()) {
1019
1022
  throw new PBParamTypeError('saturate', 'x');
1020
1023
  }
1024
+ // @ts-ignore 7053
1021
1025
  const a = argType.isScalarType() ? 0 : pb[`vec${argType.cols}`](0);
1026
+ // @ts-ignore 7053
1022
1027
  const b = argType.isScalarType() ? 1 : pb[`vec${argType.cols}`](1);
1023
1028
  return pb.clamp(args[0], a, b);
1024
1029
  }
@@ -1680,22 +1685,50 @@ const builtinFunctionsAll = {
1680
1685
  3,
1681
1686
  3
1682
1687
  ], true),
1683
- ...genType('mix', MASK_WEBGL2, 0, [
1688
+ ...genType('mix', MASK_WEBGL, 0, [
1684
1689
  0,
1685
1690
  0,
1686
1691
  3
1687
1692
  ]),
1688
- ...genType('mix', MASK_WEBGL2, 1, [
1693
+ ...genType('mix', MASK_WEBGL, 1, [
1689
1694
  1,
1690
1695
  1,
1691
1696
  3
1692
1697
  ]),
1693
- ...genType('mix', MASK_WEBGL2, 2, [
1698
+ ...genType('mix', MASK_WEBGL, 2, [
1694
1699
  2,
1695
1700
  2,
1696
1701
  3
1697
1702
  ])
1698
- ]
1703
+ ],
1704
+ normalizeFunc (pb, name, ...args) {
1705
+ if (pb.getDevice().type === 'webgl') {
1706
+ const cond = args[2];
1707
+ let newCond = null;
1708
+ if (typeof cond === 'boolean') {
1709
+ newCond = cond ? 1 : 0;
1710
+ } else if (typeof cond === 'number') {
1711
+ newCond = cond;
1712
+ } else if (cond instanceof PBShaderExp) {
1713
+ const type = cond.$ast.getType();
1714
+ if (type.typeId === typeBool.typeId) {
1715
+ newCond = pb.float(cond);
1716
+ } else if (type.typeId === typeBVec2.typeId) {
1717
+ newCond = pb.vec2(cond);
1718
+ } else if (type.typeId === typeBVec3.typeId) {
1719
+ newCond = pb.vec3(cond);
1720
+ } else if (type.typeId === typeBVec4.typeId) {
1721
+ newCond = pb.vec4(cond);
1722
+ }
1723
+ }
1724
+ if (newCond === null) {
1725
+ throw new PBParamValueError('select', 'cond');
1726
+ }
1727
+ return callBuiltin(pb, 'mix', args[0], args[1], newCond);
1728
+ } else {
1729
+ return callBuiltin(pb, name, ...args);
1730
+ }
1731
+ }
1699
1732
  },
1700
1733
  floatBitsToInt: {
1701
1734
  overloads: genType('floatBitsToInt', MASK_WEBGL2, 1, [
@@ -4396,6 +4429,7 @@ for (const name of [
4396
4429
  'atomicXor',
4397
4430
  'atomicExchange'
4398
4431
  ]){
4432
+ // @ts-ignore 7053
4399
4433
  builtinFunctionsAll[name] = {
4400
4434
  overloades: [],
4401
4435
  normalizeFunc (pb, name, ...args) {
@@ -4455,7 +4489,9 @@ for (const name of [
4455
4489
  }
4456
4490
  /** @internal */ function setBuiltinFuncs(cls) {
4457
4491
  for (const k of Object.keys(builtinFunctionsAll)){
4492
+ // @ts-ignore 7053
4458
4493
  cls.prototype[k] = function(...args) {
4494
+ // @ts-ignore 7053
4459
4495
  const normalizeFunc = builtinFunctionsAll?.[k]?.normalizeFunc || callBuiltin;
4460
4496
  return normalizeFunc(this, k, ...args);
4461
4497
  };