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