@zephyr3d/device 0.2.5 → 0.2.7
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.
- package/dist/base_types.js +12 -13
- package/dist/base_types.js.map +1 -1
- package/dist/builder/ast.js +34 -48
- package/dist/builder/ast.js.map +1 -1
- package/dist/builder/base.js +6 -2
- package/dist/builder/base.js.map +1 -1
- package/dist/builder/builtinfunc.js +42 -6
- package/dist/builder/builtinfunc.js.map +1 -1
- package/dist/builder/constructors.js +2 -0
- package/dist/builder/constructors.js.map +1 -1
- package/dist/builder/errors.js +4 -4
- package/dist/builder/errors.js.map +1 -1
- package/dist/builder/misc.js +1 -1
- package/dist/builder/misc.js.map +1 -1
- package/dist/builder/programbuilder.js +18 -27
- package/dist/builder/programbuilder.js.map +1 -1
- package/dist/builder/reflection.js +1 -1
- package/dist/builder/reflection.js.map +1 -1
- package/dist/builder/types.js +7 -6
- package/dist/builder/types.js.map +1 -1
- package/dist/device.js +148 -39
- package/dist/device.js.map +1 -1
- package/dist/gpuobject.js +2 -1
- package/dist/gpuobject.js.map +1 -1
- package/dist/helpers/drawtext.js +29 -25
- package/dist/helpers/drawtext.js.map +1 -1
- package/dist/helpers/font.js.map +1 -1
- package/dist/helpers/glyphmanager.js +26 -8
- package/dist/helpers/glyphmanager.js.map +1 -1
- package/dist/helpers/textureatlas.js +7 -3
- package/dist/helpers/textureatlas.js.map +1 -1
- package/dist/index.d.ts +290 -266
- package/dist/pool.js +15 -6
- package/dist/pool.js.map +1 -1
- package/dist/timer.js +3 -2
- package/dist/timer.js.map +1 -1
- package/dist/uniformdata.js +1 -1
- package/dist/uniformdata.js.map +1 -1
- package/dist/vertexdata.js +2 -2
- package/dist/vertexdata.js.map +1 -1
- package/package.json +80 -80
package/dist/builder/base.js
CHANGED
|
@@ -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
|
|
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`);
|
package/dist/builder/base.js.map
CHANGED
|
@@ -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":"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"}
|
|
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,
|
|
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
|
-
|
|
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',
|
|
1688
|
+
...genType('mix', MASK_WEBGL, 0, [
|
|
1684
1689
|
0,
|
|
1685
1690
|
0,
|
|
1686
1691
|
3
|
|
1687
1692
|
]),
|
|
1688
|
-
...genType('mix',
|
|
1693
|
+
...genType('mix', MASK_WEBGL, 1, [
|
|
1689
1694
|
1,
|
|
1690
1695
|
1,
|
|
1691
1696
|
3
|
|
1692
1697
|
]),
|
|
1693
|
-
...genType('mix',
|
|
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
|
};
|