@zephyr3d/device 0.2.4 → 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 (44) hide show
  1. package/dist/base_types.js +19 -79
  2. package/dist/base_types.js.map +1 -1
  3. package/dist/builder/ast.js +142 -162
  4. package/dist/builder/ast.js.map +1 -1
  5. package/dist/builder/base.js +29 -27
  6. package/dist/builder/base.js.map +1 -1
  7. package/dist/builder/builtinfunc.js +61 -7
  8. package/dist/builder/builtinfunc.js.map +1 -1
  9. package/dist/builder/constructors.js +3 -1
  10. package/dist/builder/constructors.js.map +1 -1
  11. package/dist/builder/errors.js +11 -11
  12. package/dist/builder/errors.js.map +1 -1
  13. package/dist/builder/misc.js +10 -0
  14. package/dist/builder/misc.js.map +1 -0
  15. package/dist/builder/programbuilder.js +62 -58
  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 +76 -75
  20. package/dist/builder/types.js.map +1 -1
  21. package/dist/device.js +220 -80
  22. package/dist/device.js.map +1 -1
  23. package/dist/gpuobject.js +84 -25
  24. package/dist/gpuobject.js.map +1 -1
  25. package/dist/helpers/drawtext.js +30 -25
  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 +33 -15
  30. package/dist/helpers/glyphmanager.js.map +1 -1
  31. package/dist/helpers/textureatlas.js +10 -8
  32. package/dist/helpers/textureatlas.js.map +1 -1
  33. package/dist/index.d.ts +465 -394
  34. package/dist/index.js +6 -5
  35. package/dist/index.js.map +1 -1
  36. package/dist/pool.js +69 -31
  37. package/dist/pool.js.map +1 -1
  38. package/dist/timer.js +3 -2
  39. package/dist/timer.js.map +1 -1
  40. package/dist/uniformdata.js +3 -3
  41. package/dist/uniformdata.js.map +1 -1
  42. package/dist/vertexdata.js +29 -3
  43. package/dist/vertexdata.js.map +1 -1
  44. package/package.json +80 -65
@@ -1,19 +1,14 @@
1
1
  import { ShaderPrecisionType, ASTPrimitive, DeclareType, getTextureSampleType, ASTArrayIndex, ASTScalar, ASTCast, ASTAssignment, ASTLValueArray, ASTLValueScalar, ASTShaderExpConstructor, ASTHash, ASTLValueHash } from './ast.js';
2
2
  import { PBPointerTypeInfo, PBAddressSpace, PBArrayTypeInfo, PBPrimitiveType, PBPrimitiveTypeInfo, typeI32 } from './types.js';
3
3
  import { PBASTError } from './errors.js';
4
+ import { getCurrentProgramBuilder } from './misc.js';
4
5
 
5
- let currentProgramBuilder = null;
6
6
  const constructorCache = new Map();
7
- /** @internal */ function setCurrentProgramBuilder(pb) {
8
- currentProgramBuilder = pb;
9
- }
10
- /** @internal */ function getCurrentProgramBuilder() {
11
- return currentProgramBuilder;
12
- }
13
7
  /** @internal */ function makeConstructor(typeFunc, elementType) {
14
8
  const wrappedTypeFunc = new Proxy(typeFunc, {
15
9
  get: function(target, prop) {
16
10
  if (typeof prop === 'symbol' || prop in target) {
11
+ // @ts-ignore 7015 */
17
12
  return target[prop];
18
13
  }
19
14
  let entries = constructorCache.get(typeFunc);
@@ -113,6 +108,7 @@ let uidExp = 0;
113
108
  this.$typeinfo = typeInfo;
114
109
  this.$qualifier = null;
115
110
  this.$precision = ShaderPrecisionType.NONE;
111
+ this.$sampleType = 'float';
116
112
  this.$ast = new ASTPrimitive(this);
117
113
  this.$inout = null;
118
114
  this.$memberCache = {};
@@ -143,9 +139,6 @@ let uidExp = 0;
143
139
  }
144
140
  set $group(val) {
145
141
  this.$_group = val;
146
- if (this.$_group === undefined) {
147
- debugger;
148
- }
149
142
  }
150
143
  /**
151
144
  * Point out that the variable should be in uniform address space
@@ -283,7 +276,7 @@ let uidExp = 0;
283
276
  if (!varType.isArrayType() && (!varType.isPrimitiveType() || !varType.isVectorType() && !varType.isMatrixType())) {
284
277
  throw new Error('at() function must be used with array types');
285
278
  }
286
- let elementType = null;
279
+ let elementType;
287
280
  let dimension;
288
281
  if (varType.isArrayType()) {
289
282
  elementType = varType.elementType;
@@ -294,6 +287,8 @@ let uidExp = 0;
294
287
  } else if (varType.isMatrixType()) {
295
288
  elementType = PBPrimitiveTypeInfo.getCachedTypeInfo(varType.resizeType(1, varType.cols));
296
289
  dimension = varType.rows;
290
+ } else {
291
+ throw new Error('at() source type is not indexable');
297
292
  }
298
293
  const result = new PBShaderExp('', elementType);
299
294
  if (typeof index === 'number') {
@@ -323,18 +318,19 @@ let uidExp = 0;
323
318
  * @param val - value to set
324
319
  */ setAt(index, val) {
325
320
  const varType = this.$ast.getType();
326
- if (!varType.isArrayType()) {
321
+ if (!varType.isArrayType() && !(varType.isPrimitiveType() && varType.isVectorType())) {
327
322
  throw new Error('setAt() function must be used with array types');
328
323
  }
329
324
  if (typeof index === 'number') {
330
325
  if (!Number.isInteger(index)) {
331
326
  throw new Error('setAt() array index must be integer type');
332
327
  }
333
- if (index < 0 || varType.dimension > 0 && index >= varType.dimension) {
328
+ const dimension = varType.isArrayType() ? varType.dimension : varType.cols;
329
+ if (index < 0 || dimension > 0 && index >= dimension) {
334
330
  throw new Error('setAt() array index out of bounds');
335
331
  }
336
332
  }
337
- currentProgramBuilder.getCurrentScope().$ast.statements.push(new ASTAssignment(new ASTLValueArray(new ASTLValueScalar(this.$ast), typeof index === 'number' ? new ASTScalar(index, typeI32) : index.$ast, varType.elementType), val instanceof PBShaderExp ? val.$ast : val));
333
+ getCurrentProgramBuilder().getCurrentScope().$ast.statements.push(new ASTAssignment(new ASTLValueArray(new ASTLValueScalar(this.$ast), typeof index === 'number' ? new ASTScalar(index, typeI32) : index.$ast, varType.isArrayType() ? varType.elementType : new PBPrimitiveTypeInfo(varType.scalarType)), val instanceof PBShaderExp ? val.$ast : val));
338
334
  }
339
335
  /**
340
336
  * Point out that the variable should be in high precision
@@ -381,7 +377,7 @@ let uidExp = 0;
381
377
  * Get type name of this variable
382
378
  * @returns The type name of this variable
383
379
  */ getTypeName() {
384
- return this.$ast.getType().toTypeName(currentProgramBuilder.getDevice().type);
380
+ return this.$ast.getType().toTypeName(getCurrentProgramBuilder().getDevice().type);
385
381
  }
386
382
  /** @internal */ $get(prop) {
387
383
  if (typeof prop === 'string') {
@@ -396,30 +392,36 @@ let uidExp = 0;
396
392
  if (varType.isStructType()) {
397
393
  const elementIndex = varType.structMembers.findIndex((val)=>val.name === prop);
398
394
  if (elementIndex < 0) {
399
- throw new Error(`unknown struct member '${prop}'`);
395
+ return undefined;
400
396
  }
401
397
  const element = varType.structMembers[elementIndex];
402
398
  if (element.type.isStructType()) {
403
- const ctor = currentProgramBuilder.structInfo.structs[element.type.structName];
404
- exp = ctor.call(currentProgramBuilder, `${this.$str}.${prop}`);
399
+ const ctor = getCurrentProgramBuilder().structInfo.structs[element.type.structName];
400
+ exp = ctor.call(getCurrentProgramBuilder(), `${this.$str}.${prop}`);
405
401
  } else {
406
402
  exp = new PBShaderExp(`${this.$str}.${prop}`, element.type);
407
403
  }
408
404
  exp.$ast = new ASTHash(this.$ast, prop, element.type);
409
405
  } else {
410
- if (!varType.isPrimitiveType() || !varType.isVectorType()) {
411
- throw new Error(`invalid index operation: ${this.$ast.toString(currentProgramBuilder.getDevice().type)}[${prop}]`);
406
+ if (!varType.isPrimitiveType() || !varType.isVectorType() && !varType.isScalarType()) {
407
+ throw new Error(`invalid index operation: ${this.$ast.toString(getCurrentProgramBuilder().getDevice().type)}[${prop}]`);
412
408
  }
413
409
  if (prop.length === 0 || prop.length > 4 || [
414
410
  ...prop
415
411
  ].some((val)=>'xyzw'.slice(0, varType.cols).indexOf(val) < 0) && [
416
412
  ...prop
417
413
  ].some((val)=>'rgba'.slice(0, varType.cols).indexOf(val) < 0)) {
418
- throw new Error(`unknown swizzle target: ${this.$ast.toString(currentProgramBuilder.getDevice().type)}[${prop}]`);
414
+ throw new Error(`unknown swizzle target: ${this.$ast.toString(getCurrentProgramBuilder().getDevice().type)}[${prop}]`);
419
415
  }
420
416
  const type = PBPrimitiveTypeInfo.getCachedTypeInfo(varType.resizeType(1, prop.length));
421
417
  exp = new PBShaderExp('', type);
422
- exp.$ast = new ASTHash(this.$ast, prop, type);
418
+ if (varType.cols === 1) {
419
+ exp.$ast = new ASTShaderExpConstructor(type, [
420
+ this.$ast
421
+ ]);
422
+ } else {
423
+ exp.$ast = new ASTHash(this.$ast, prop, type);
424
+ }
423
425
  }
424
426
  } else {
425
427
  if (varType.isArrayType()) {
@@ -462,7 +464,7 @@ let uidExp = 0;
462
464
  throw new Error(`unknown struct member '${prop}`);
463
465
  }
464
466
  const element = varType.structMembers[elementIndex];
465
- let dstAST;
467
+ let dstAST = null;
466
468
  if (typeof value === 'number' || typeof value === 'boolean') {
467
469
  if (!element.type.isPrimitiveType() || !element.type.isScalarType()) {
468
470
  throw new Error(`can not set struct member '${prop}: invalid value type`);
@@ -474,7 +476,7 @@ let uidExp = 0;
474
476
  if (!dstAST) {
475
477
  throw new Error(`can not set struct member '${prop}: invalid value type`);
476
478
  }
477
- currentProgramBuilder.getCurrentScope().$ast.statements.push(new ASTAssignment(new ASTLValueHash(new ASTLValueScalar(this.$ast), prop, element.type), dstAST));
479
+ getCurrentProgramBuilder().getCurrentScope().$ast.statements.push(new ASTAssignment(new ASTLValueHash(new ASTLValueScalar(this.$ast), prop, element.type), dstAST));
478
480
  } else {
479
481
  // FIXME: WGSL does not support l-value swizzling
480
482
  if (prop.length > 1 || 'xyzw'.indexOf(prop) < 0 && 'rgba'.indexOf(prop) < 0) {
@@ -484,7 +486,7 @@ let uidExp = 0;
484
486
  throw new Error(`invalid index operation: ${this.$str}[${num}]`);
485
487
  }
486
488
  const type = PBPrimitiveTypeInfo.getCachedTypeInfo(varType.scalarType);
487
- currentProgramBuilder.getCurrentScope().$ast.statements.push(new ASTAssignment(new ASTLValueHash(new ASTLValueScalar(this.$ast), prop, type), value instanceof PBShaderExp ? value.$ast : value));
489
+ getCurrentProgramBuilder().getCurrentScope().$ast.statements.push(new ASTAssignment(new ASTLValueHash(new ASTLValueScalar(this.$ast), prop, type), value instanceof PBShaderExp ? value.$ast : value));
488
490
  }
489
491
  } else {
490
492
  if (varType.isArrayType()) {
@@ -499,7 +501,7 @@ let uidExp = 0;
499
501
  throw new Error(`invalid matrix column vector assignment: ${this.$str}[${num}]`);
500
502
  }
501
503
  const type = PBPrimitiveTypeInfo.getCachedTypeInfo(varType.resizeType(1, varType.cols));
502
- currentProgramBuilder.getCurrentScope().$ast.statements.push(new ASTAssignment(new ASTLValueArray(new ASTLValueScalar(this.$ast), new ASTScalar(num, typeI32), type), value.$ast));
504
+ getCurrentProgramBuilder().getCurrentScope().$ast.statements.push(new ASTAssignment(new ASTLValueArray(new ASTLValueScalar(this.$ast), new ASTScalar(num, typeI32), type), value.$ast));
503
505
  } else {
504
506
  throw new Error(`invalid index operation: ${this.$str}[${num}]`);
505
507
  }
@@ -511,5 +513,5 @@ let uidExp = 0;
511
513
  }
512
514
  }
513
515
 
514
- export { PBShaderExp, Proxiable, getCurrentProgramBuilder, makeConstructor, setCurrentProgramBuilder };
516
+ export { PBShaderExp, Proxiable, makeConstructor };
515
517
  //# sourceMappingURL=base.js.map
@@ -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, 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
  }
@@ -62,7 +65,7 @@ function callBuiltin(pb, name, ...args) {
62
65
  function genMatrixType(name, shaderTypeMask, r, args) {
63
66
  const result = [];
64
67
  for(let i = 0; i < genMatrixTypeList.length; i++){
65
- const returnType = r || genMatrixTypeList[i];
68
+ const returnType = genMatrixTypeList[i];
66
69
  const argTypes = args.map((arg)=>{
67
70
  return {
68
71
  type: arg || genMatrixTypeList[i]
@@ -1005,6 +1008,26 @@ const builtinFunctionsAll = {
1005
1008
  ])
1006
1009
  ]
1007
1010
  },
1011
+ saturate: {
1012
+ overloads: [],
1013
+ normalizeFunc (pb, name, ...args) {
1014
+ if (args.length !== 1) {
1015
+ throw new PBParamLengthError('saturate');
1016
+ }
1017
+ if (!(args[0] instanceof PBShaderExp)) {
1018
+ throw new PBParamValueError('saturate', 'x');
1019
+ }
1020
+ const argType = args[0].$ast.getType();
1021
+ if (!argType.isPrimitiveType() || !argType.isScalarType() && !argType.isVectorType()) {
1022
+ throw new PBParamTypeError('saturate', 'x');
1023
+ }
1024
+ // @ts-ignore 7053
1025
+ const a = argType.isScalarType() ? 0 : pb[`vec${argType.cols}`](0);
1026
+ // @ts-ignore 7053
1027
+ const b = argType.isScalarType() ? 1 : pb[`vec${argType.cols}`](1);
1028
+ return pb.clamp(args[0], a, b);
1029
+ }
1030
+ },
1008
1031
  mix: {
1009
1032
  overloads: [
1010
1033
  ...genType('mix', MASK_ALL, 0, [
@@ -1662,22 +1685,50 @@ const builtinFunctionsAll = {
1662
1685
  3,
1663
1686
  3
1664
1687
  ], true),
1665
- ...genType('mix', MASK_WEBGL2, 0, [
1688
+ ...genType('mix', MASK_WEBGL, 0, [
1666
1689
  0,
1667
1690
  0,
1668
1691
  3
1669
1692
  ]),
1670
- ...genType('mix', MASK_WEBGL2, 1, [
1693
+ ...genType('mix', MASK_WEBGL, 1, [
1671
1694
  1,
1672
1695
  1,
1673
1696
  3
1674
1697
  ]),
1675
- ...genType('mix', MASK_WEBGL2, 2, [
1698
+ ...genType('mix', MASK_WEBGL, 2, [
1676
1699
  2,
1677
1700
  2,
1678
1701
  3
1679
1702
  ])
1680
- ]
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
+ }
1681
1732
  },
1682
1733
  floatBitsToInt: {
1683
1734
  overloads: genType('floatBitsToInt', MASK_WEBGL2, 1, [
@@ -4378,6 +4429,7 @@ for (const name of [
4378
4429
  'atomicXor',
4379
4430
  'atomicExchange'
4380
4431
  ]){
4432
+ // @ts-ignore 7053
4381
4433
  builtinFunctionsAll[name] = {
4382
4434
  overloades: [],
4383
4435
  normalizeFunc (pb, name, ...args) {
@@ -4437,7 +4489,9 @@ for (const name of [
4437
4489
  }
4438
4490
  /** @internal */ function setBuiltinFuncs(cls) {
4439
4491
  for (const k of Object.keys(builtinFunctionsAll)){
4492
+ // @ts-ignore 7053
4440
4493
  cls.prototype[k] = function(...args) {
4494
+ // @ts-ignore 7053
4441
4495
  const normalizeFunc = builtinFunctionsAll?.[k]?.normalizeFunc || callBuiltin;
4442
4496
  return normalizeFunc(this, k, ...args);
4443
4497
  };