@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.
Files changed (41) hide show
  1. package/dist/base_types.js +12 -13
  2. package/dist/base_types.js.map +1 -1
  3. package/dist/builder/ast.js +34 -48
  4. package/dist/builder/ast.js.map +1 -1
  5. package/dist/builder/base.js +6 -2
  6. package/dist/builder/base.js.map +1 -1
  7. package/dist/builder/builtinfunc.js +42 -6
  8. package/dist/builder/builtinfunc.js.map +1 -1
  9. package/dist/builder/constructors.js +2 -0
  10. package/dist/builder/constructors.js.map +1 -1
  11. package/dist/builder/errors.js +4 -4
  12. package/dist/builder/errors.js.map +1 -1
  13. package/dist/builder/misc.js +1 -1
  14. package/dist/builder/misc.js.map +1 -1
  15. package/dist/builder/programbuilder.js +18 -27
  16. package/dist/builder/programbuilder.js.map +1 -1
  17. package/dist/builder/reflection.js +1 -1
  18. package/dist/builder/reflection.js.map +1 -1
  19. package/dist/builder/types.js +7 -6
  20. package/dist/builder/types.js.map +1 -1
  21. package/dist/device.js +148 -39
  22. package/dist/device.js.map +1 -1
  23. package/dist/gpuobject.js +2 -1
  24. package/dist/gpuobject.js.map +1 -1
  25. package/dist/helpers/drawtext.js +29 -25
  26. package/dist/helpers/drawtext.js.map +1 -1
  27. package/dist/helpers/font.js.map +1 -1
  28. package/dist/helpers/glyphmanager.js +26 -8
  29. package/dist/helpers/glyphmanager.js.map +1 -1
  30. package/dist/helpers/textureatlas.js +7 -3
  31. package/dist/helpers/textureatlas.js.map +1 -1
  32. package/dist/index.d.ts +290 -266
  33. package/dist/pool.js +15 -6
  34. package/dist/pool.js.map +1 -1
  35. package/dist/timer.js +3 -2
  36. package/dist/timer.js.map +1 -1
  37. package/dist/uniformdata.js +1 -1
  38. package/dist/uniformdata.js.map +1 -1
  39. package/dist/vertexdata.js +2 -2
  40. package/dist/vertexdata.js.map +1 -1
  41. package/package.json +80 -80
@@ -1 +1 @@
1
- {"version":3,"file":"programbuilder.js","sources":["../../src/builder/programbuilder.ts"],"sourcesContent":["import type { AbstractDevice, ShaderKind } from '../base_types';\r\nimport { ShaderType } from '../base_types';\r\nimport type { GPUProgram, BindGroupLayout, BindGroupLayoutEntry, VertexSemantic } from '../gpuobject';\r\nimport { MAX_BINDING_GROUPS, getVertexAttribByName } from '../gpuobject';\r\nimport type { PBReflectionTagGetter } from './reflection';\r\nimport { PBReflection } from './reflection';\r\nimport type { ShaderExpTagValue, ShaderTypeFunc } from './base';\r\nimport { PBShaderExp, makeConstructor, Proxiable } from './base';\r\nimport * as AST from './ast';\r\nimport * as errors from './errors';\r\nimport { setBuiltinFuncs } from './builtinfunc';\r\nimport { setConstructors } from './constructors';\r\nimport type { PBPrimitiveTypeInfo, PBStructLayout, PBTextureTypeInfo, PBTypeInfo } from './types';\r\nimport {\r\n PBArrayTypeInfo,\r\n PBFunctionTypeInfo,\r\n PBPrimitiveType,\r\n PBSamplerAccessMode,\r\n PBStructTypeInfo,\r\n typeBool,\r\n typeF32,\r\n typeFrexpResult,\r\n typeFrexpResultVec2,\r\n typeFrexpResultVec3,\r\n typeFrexpResultVec4,\r\n typeI32,\r\n typeU32,\r\n typeVoid,\r\n typeTex2D,\r\n typeTexCube,\r\n typeTex2DArray,\r\n PBPointerTypeInfo,\r\n PBAddressSpace\r\n} from './types';\r\n\r\nimport type { StorageTextureConstructor } from './constructors';\r\nimport { getCurrentProgramBuilder, setCurrentProgramBuilder } from './misc';\r\n\r\nconst COMPUTE_UNIFORM_NAME = 'zUBC';\r\nconst COMPUTE_STORAGE_NAME = 'zSBC';\r\nconst VERTEX_UNIFORM_NAME = 'zUBV';\r\nconst FRAGMENT_UNIFORM_NAME = 'zUBF';\r\nconst SHARED_UNIFORM_NAME = 'zUBA';\r\nconst VERTEX_STORAGE_NAME = 'zSBV';\r\nconst FRAGMENT_STORAGE_NAME = 'zSBF';\r\nconst SHARED_STORAGE_NAME = 'zSBA';\r\ninterface UniformInfo {\r\n group: number;\r\n binding: number;\r\n mask: number;\r\n block?: {\r\n name: string;\r\n bindingSize: number;\r\n exp: PBShaderExp;\r\n };\r\n texture?: {\r\n autoBindSampler: 'sample' | 'comparison';\r\n exp: PBShaderExp;\r\n };\r\n sampler?: PBShaderExp;\r\n}\r\n\r\n/**\r\n * Non-array value type of shader expression\r\n * @public\r\n */\r\nexport type ExpValueNonArrayType = number | boolean | PBShaderExp;\r\n/**\r\n * Value type for shader of shader expression\r\n * @public\r\n */\r\nexport type ExpValueType = ExpValueNonArrayType | Array<ExpValueType>;\r\n\r\nconst input_prefix = 'zVSInput_';\r\nconst output_prefix_vs = 'zVSOutput_';\r\nconst output_prefix_fs = 'zFSOutput_';\r\n\r\n/**\r\n * Render program build options\r\n * @public\r\n */\r\nexport interface PBRenderOptions {\r\n /** program label for debugging */\r\n label?: string;\r\n /**\r\n * Vertex shader generator.\r\n * @param this - Global scope object of the vertex shader\r\n * @param pb - The program builder instance\r\n */\r\n vertex(this: PBGlobalScope, pb: ProgramBuilder);\r\n /**\r\n * Fragment shader generator.\r\n * @param this - Global scope object of the fragment shader\r\n * @param pb - The program builder instance\r\n */\r\n fragment(this: PBGlobalScope, pb: ProgramBuilder);\r\n}\r\n\r\n/**\r\n * Compute program build options\r\n * @public\r\n */\r\nexport interface PBComputeOptions {\r\n /** program label for debugging */\r\n label?: string;\r\n /** workgroup size */\r\n workgroupSize: [number, number, number];\r\n /** compute shader */\r\n compute(this: PBGlobalScope, pb: ProgramBuilder);\r\n}\r\n\r\ntype StructDef = {\r\n structs: Record<string, ShaderTypeFunc>;\r\n types: AST.ASTStructDefine[];\r\n};\r\n\r\n/**\r\n * The program builder interface\r\n * @public\r\n */\r\nexport interface ProgramBuilder {\r\n /** Get the device */\r\n getDevice(): AbstractDevice;\r\n /** Gets the global scope */\r\n getGlobalScope(): PBGlobalScope;\r\n /** Gets the current scope */\r\n getCurrentScope<T extends PBScope = PBScope>(): T;\r\n /**\r\n * Query the global variable by the name\r\n * @param name - Name of the variable\r\n * @returns The variable or null if not exists\r\n */\r\n queryGlobal(name: string): PBShaderExp;\r\n /**\r\n * Query the global variable by the name\r\n * @param name - Name of the variable\r\n * @returns The variable or null if not exists\r\n */\r\n $query(name: string): PBShaderExp;\r\n /**\r\n * Generates shader codes for a render program\r\n * @param options - The build options\r\n * @returns a tuple made by vertex shader source, fragment shader source, bind group layouts and vertex attributes used, or null if build faild\r\n */\r\n buildRender(options: PBRenderOptions): readonly [string, string, BindGroupLayout[], number[]];\r\n /**\r\n * Generates shader code for a compute program\r\n * @param options - The build programs\r\n * @returns a tuple made by compute shader source and bind group layouts, or null if build failed\r\n */\r\n buildCompute(options: PBComputeOptions): readonly [string, BindGroupLayout[]];\r\n /**\r\n * Creates a shader program for render\r\n * @param options - The build options\r\n * @returns The created program or null if build failed\r\n */\r\n buildRenderProgram(options: PBRenderOptions): GPUProgram;\r\n /**\r\n * Creates a shader program for compute\r\n * @param options - The build options\r\n * @returns The created program or null if build failed\r\n */\r\n buildComputeProgram(options: PBComputeOptions): GPUProgram;\r\n /**\r\n * Creates a structure type variable\r\n * @param structName - Name of the structure type\r\n * @param instanceName - Name of the variable\r\n * @returns the created variable\r\n */\r\n struct(structName: string, instanceName: string): PBShaderExp;\r\n /**\r\n * Defines a structure type\r\n * @param members - Members of the structure\r\n * @param structName - Name of the type, if not given, the name will be automatically generated\r\n * @returns The structure type constructor\r\n */\r\n defineStruct(members: PBShaderExp[], structName?: string): ShaderTypeFunc;\r\n /**\r\n * Defines a structure type\r\n * @param structType - The structure type info\r\n * @returns The structure type constructor\r\n */\r\n defineStructByType(structType: PBStructTypeInfo): ShaderTypeFunc;\r\n /**\r\n * Creates a 'discard' statement\r\n */\r\n discard(): void;\r\n /**\r\n * Creates a function\r\n * @param name - Name of the function\r\n * @param params - Parameters of the function\r\n * @param body - The generator function\r\n */\r\n func(name: string, params: PBShaderExp[], body?: (this: PBFunctionScope) => void): void;\r\n /**\r\n * Create the main entry function of the shader\r\n * @param body - The shader generator function\r\n */\r\n main(body?: (this: PBFunctionScope) => void): void;\r\n /**\r\n * Create an 'AddressOf' expression for WGSL\r\n * @param ref - The reference variable\r\n * @returns the 'AddressOf' expression\r\n */\r\n addressOf(ref: PBShaderExp): PBShaderExp;\r\n /**\r\n * Creates a 'referenceOf' expression for WGSL\r\n * @param ptr - The pointer variable\r\n * @returns the 'referenceOf' expression\r\n */\r\n referenceOf(ptr: PBShaderExp): PBShaderExp;\r\n /** Atomic int type variable constructors */\r\n atomic_int: {\r\n (): PBShaderExp;\r\n (rhs: number): PBShaderExp;\r\n (rhs: boolean): PBShaderExp;\r\n (rhs: PBShaderExp): PBShaderExp;\r\n (name: string): PBShaderExp;\r\n ptr: ShaderTypeFunc;\r\n [dim: number]: ShaderTypeFunc;\r\n };\r\n /** Atomic uint type variable constructors */\r\n atomic_uint: {\r\n (): PBShaderExp;\r\n (rhs: number): PBShaderExp;\r\n (rhs: boolean): PBShaderExp;\r\n (rhs: PBShaderExp): PBShaderExp;\r\n (name: string): PBShaderExp;\r\n ptr: ShaderTypeFunc;\r\n [dim: number]: ShaderTypeFunc;\r\n };\r\n /** float type variable constructors */\r\n float: {\r\n (): PBShaderExp;\r\n (rhs: number): PBShaderExp;\r\n (rhs: boolean): PBShaderExp;\r\n (rhs: PBShaderExp): PBShaderExp;\r\n (name: string): PBShaderExp;\r\n ptr: ShaderTypeFunc;\r\n [dim: number]: ShaderTypeFunc;\r\n };\r\n /** int type variable constructors */\r\n int: {\r\n (): PBShaderExp;\r\n (rhs: number | boolean | PBShaderExp | string): PBShaderExp;\r\n ptr: ShaderTypeFunc;\r\n [dim: number]: ShaderTypeFunc;\r\n };\r\n /** uint type variable constructors */\r\n uint: {\r\n (): PBShaderExp;\r\n (rhs: number | boolean | PBShaderExp | string): PBShaderExp;\r\n ptr: ShaderTypeFunc;\r\n [dim: number]: ShaderTypeFunc;\r\n };\r\n /** boolean type variable constructors */\r\n bool: {\r\n (): PBShaderExp;\r\n (rhs: number | boolean | PBShaderExp | string): PBShaderExp;\r\n ptr: ShaderTypeFunc;\r\n [dim: number]: ShaderTypeFunc;\r\n };\r\n /** vec2 type variable constructors */\r\n vec2: {\r\n (): PBShaderExp;\r\n (rhs: number | PBShaderExp | string): PBShaderExp;\r\n (x: number | PBShaderExp, y: number | PBShaderExp): PBShaderExp;\r\n ptr: ShaderTypeFunc;\r\n [dim: number]: ShaderTypeFunc;\r\n };\r\n /** ivec2 type variable constructors */\r\n ivec2: {\r\n (): PBShaderExp;\r\n (rhs: number | PBShaderExp | string): PBShaderExp;\r\n (x: number | PBShaderExp, y: number | PBShaderExp): PBShaderExp;\r\n ptr: ShaderTypeFunc;\r\n [dim: number]: ShaderTypeFunc;\r\n };\r\n /** uvec2 type variable constructors */\r\n uvec2: {\r\n (): PBShaderExp;\r\n (rhs: number | PBShaderExp | string): PBShaderExp;\r\n (x: number | PBShaderExp, y: number | PBShaderExp): PBShaderExp;\r\n ptr: ShaderTypeFunc;\r\n [dim: number]: ShaderTypeFunc;\r\n };\r\n /** bvec2 type variable constructors */\r\n bvec2: {\r\n (): PBShaderExp;\r\n (rhs: number | boolean | PBShaderExp | string): PBShaderExp;\r\n (x: number | boolean | PBShaderExp, y: number | boolean | PBShaderExp): PBShaderExp;\r\n ptr: ShaderTypeFunc;\r\n [dim: number]: ShaderTypeFunc;\r\n };\r\n /** vec3 type variable constructors */\r\n vec3: {\r\n (): PBShaderExp;\r\n (name: string): PBShaderExp;\r\n (x: number | PBShaderExp): PBShaderExp;\r\n (x: number | PBShaderExp, y: number | PBShaderExp, z: number | PBShaderExp): PBShaderExp;\r\n (x: number | PBShaderExp, yz: PBShaderExp): PBShaderExp;\r\n (xy: PBShaderExp, z: number | PBShaderExp): PBShaderExp;\r\n ptr: ShaderTypeFunc;\r\n [dim: number]: ShaderTypeFunc;\r\n };\r\n /** ivec3 type variable constructors */\r\n ivec3: {\r\n (): PBShaderExp;\r\n (name: string): PBShaderExp;\r\n (x: number | PBShaderExp): PBShaderExp;\r\n (x: number | PBShaderExp, y: number | PBShaderExp, z: number | PBShaderExp): PBShaderExp;\r\n (x: number | PBShaderExp, yz: PBShaderExp): PBShaderExp;\r\n (xy: PBShaderExp, z: number | PBShaderExp): PBShaderExp;\r\n ptr: ShaderTypeFunc;\r\n [dim: number]: ShaderTypeFunc;\r\n };\r\n /** uvec3 type variable constructors */\r\n uvec3: {\r\n (): PBShaderExp;\r\n (name: string): PBShaderExp;\r\n (x: number | PBShaderExp): PBShaderExp;\r\n (x: number | PBShaderExp, y: number | PBShaderExp, z: number | PBShaderExp): PBShaderExp;\r\n (x: number | PBShaderExp, yz: PBShaderExp): PBShaderExp;\r\n (xy: PBShaderExp, z: number | PBShaderExp): PBShaderExp;\r\n ptr: ShaderTypeFunc;\r\n [dim: number]: ShaderTypeFunc;\r\n };\r\n /** bvec3 type variable constructors */\r\n bvec3: {\r\n (): PBShaderExp;\r\n (name: string): PBShaderExp;\r\n (x: boolean | PBShaderExp): PBShaderExp;\r\n (x: boolean | PBShaderExp, y: boolean | PBShaderExp, z: boolean | PBShaderExp): PBShaderExp;\r\n (x: boolean | PBShaderExp, yz: PBShaderExp): PBShaderExp;\r\n (xy: PBShaderExp, z: boolean | PBShaderExp): PBShaderExp;\r\n ptr: ShaderTypeFunc;\r\n [dim: number]: ShaderTypeFunc;\r\n };\r\n /** vec4 type variable constructors */\r\n vec4: {\r\n (): PBShaderExp;\r\n (name: string): PBShaderExp;\r\n (x: number | PBShaderExp): PBShaderExp;\r\n (\r\n x: number | PBShaderExp,\r\n y: number | PBShaderExp,\r\n z: number | PBShaderExp,\r\n w: number | PBShaderExp\r\n ): PBShaderExp;\r\n (x: number | PBShaderExp, y: number | PBShaderExp, zw: PBShaderExp): PBShaderExp;\r\n (x: number | PBShaderExp, yz: PBShaderExp, w: number | PBShaderExp): PBShaderExp;\r\n (x: number | PBShaderExp, yzw: PBShaderExp): PBShaderExp;\r\n (xy: PBShaderExp, z: number | PBShaderExp, w: number | PBShaderExp): PBShaderExp;\r\n (xy: PBShaderExp, zw: PBShaderExp): PBShaderExp;\r\n (xyz: PBShaderExp, w: number | PBShaderExp): PBShaderExp;\r\n ptr: ShaderTypeFunc;\r\n [dim: number]: ShaderTypeFunc;\r\n };\r\n /** ivec4 type variable constructors */\r\n ivec4: {\r\n (): PBShaderExp;\r\n (name: string): PBShaderExp;\r\n (x: number | PBShaderExp): PBShaderExp;\r\n (\r\n x: number | PBShaderExp,\r\n y: number | PBShaderExp,\r\n z: number | PBShaderExp,\r\n w: number | PBShaderExp\r\n ): PBShaderExp;\r\n (x: number | PBShaderExp, y: number | PBShaderExp, zw: PBShaderExp): PBShaderExp;\r\n (x: number | PBShaderExp, yz: PBShaderExp, w: number | PBShaderExp): PBShaderExp;\r\n (x: number | PBShaderExp, yzw: PBShaderExp): PBShaderExp;\r\n (xy: PBShaderExp, z: number | PBShaderExp, w: number | PBShaderExp): PBShaderExp;\r\n (xy: PBShaderExp, zw: PBShaderExp): PBShaderExp;\r\n (xyz: PBShaderExp, w: number | PBShaderExp): PBShaderExp;\r\n ptr: ShaderTypeFunc;\r\n [dim: number]: ShaderTypeFunc;\r\n };\r\n /** uvec4 type variable constructors */\r\n uvec4: {\r\n (): PBShaderExp;\r\n (name: string): PBShaderExp;\r\n (x: number | PBShaderExp): PBShaderExp;\r\n (\r\n x: number | PBShaderExp,\r\n y: number | PBShaderExp,\r\n z: number | PBShaderExp,\r\n w: number | PBShaderExp\r\n ): PBShaderExp;\r\n (x: number | PBShaderExp, y: number | PBShaderExp, zw: PBShaderExp): PBShaderExp;\r\n (x: number | PBShaderExp, yz: PBShaderExp, w: number | PBShaderExp): PBShaderExp;\r\n (x: number | PBShaderExp, yzw: PBShaderExp): PBShaderExp;\r\n (xy: PBShaderExp, z: number | PBShaderExp, w: number | PBShaderExp): PBShaderExp;\r\n (xy: PBShaderExp, zw: PBShaderExp): PBShaderExp;\r\n (xyz: PBShaderExp, w: number | PBShaderExp): PBShaderExp;\r\n ptr: ShaderTypeFunc;\r\n [dim: number]: ShaderTypeFunc;\r\n };\r\n /** bvec4 type variable constructors */\r\n bvec4: {\r\n (): PBShaderExp;\r\n (name: string): PBShaderExp;\r\n (x: boolean | PBShaderExp): PBShaderExp;\r\n (\r\n x: boolean | PBShaderExp,\r\n y: boolean | PBShaderExp,\r\n z: boolean | PBShaderExp,\r\n w: boolean | PBShaderExp\r\n ): PBShaderExp;\r\n (x: boolean | PBShaderExp, y: boolean | PBShaderExp, zw: PBShaderExp): PBShaderExp;\r\n (x: boolean | PBShaderExp, yz: PBShaderExp, w: boolean | PBShaderExp): PBShaderExp;\r\n (x: boolean | PBShaderExp, yzw: PBShaderExp): PBShaderExp;\r\n (xy: PBShaderExp, z: boolean | PBShaderExp, w: boolean | PBShaderExp): PBShaderExp;\r\n (xy: PBShaderExp, zw: PBShaderExp): PBShaderExp;\r\n (xyz: PBShaderExp, w: boolean | PBShaderExp): PBShaderExp;\r\n ptr: ShaderTypeFunc;\r\n [dim: number]: ShaderTypeFunc;\r\n };\r\n /** mat2 type variable constructors */\r\n mat2: {\r\n (): PBShaderExp;\r\n (name: string): PBShaderExp;\r\n (\r\n m00: number | PBShaderExp,\r\n m01: number | PBShaderExp,\r\n m10: number | PBShaderExp,\r\n m11: number | PBShaderExp\r\n ): PBShaderExp;\r\n (m0: PBShaderExp, m1: PBShaderExp): PBShaderExp;\r\n ptr: ShaderTypeFunc;\r\n [dim: number]: ShaderTypeFunc;\r\n };\r\n /** mat2x3 type variable constructors */\r\n mat2x3: {\r\n (): PBShaderExp;\r\n (name: string): PBShaderExp;\r\n (\r\n m00: number | PBShaderExp,\r\n m01: number | PBShaderExp,\r\n m02: number | PBShaderExp,\r\n m10: number | PBShaderExp,\r\n m11: number | PBShaderExp,\r\n m12: number | PBShaderExp\r\n ): PBShaderExp;\r\n (m0: PBShaderExp, m1: PBShaderExp): PBShaderExp;\r\n ptr: ShaderTypeFunc;\r\n [dim: number]: ShaderTypeFunc;\r\n };\r\n /** mat2x4 type variable constructors */\r\n mat2x4: {\r\n (): PBShaderExp;\r\n (name: string): PBShaderExp;\r\n (\r\n m00: number | PBShaderExp,\r\n m01: number | PBShaderExp,\r\n m02: number | PBShaderExp,\r\n m03: number | PBShaderExp,\r\n m10: number | PBShaderExp,\r\n m11: number | PBShaderExp,\r\n m12: number | PBShaderExp,\r\n m13: number | PBShaderExp\r\n ): PBShaderExp;\r\n (m0: PBShaderExp, m1: PBShaderExp): PBShaderExp;\r\n ptr: ShaderTypeFunc;\r\n [dim: number]: ShaderTypeFunc;\r\n };\r\n /** mat3 type variable constructors */\r\n mat3: {\r\n (): PBShaderExp;\r\n (name: string): PBShaderExp;\r\n (\r\n m00: number | PBShaderExp,\r\n m01: number | PBShaderExp,\r\n m02: number | PBShaderExp,\r\n m10: number | PBShaderExp,\r\n m11: number | PBShaderExp,\r\n m12: number | PBShaderExp,\r\n m20: number | PBShaderExp,\r\n m21: number | PBShaderExp,\r\n m22: number | PBShaderExp\r\n ): PBShaderExp;\r\n (m0: PBShaderExp, m1: PBShaderExp, m2: PBShaderExp): PBShaderExp;\r\n ptr: ShaderTypeFunc;\r\n [dim: number]: ShaderTypeFunc;\r\n };\r\n /** mat3x2 type variable constructors */\r\n mat3x2: {\r\n (): PBShaderExp;\r\n (name: string): PBShaderExp;\r\n (\r\n m00: number | PBShaderExp,\r\n m01: number | PBShaderExp,\r\n m10: number | PBShaderExp,\r\n m11: number | PBShaderExp,\r\n m20: number | PBShaderExp,\r\n m21: number | PBShaderExp\r\n ): PBShaderExp;\r\n (m0: PBShaderExp, m1: PBShaderExp, m2: PBShaderExp): PBShaderExp;\r\n ptr: ShaderTypeFunc;\r\n [dim: number]: ShaderTypeFunc;\r\n };\r\n /** mat3x4 type variable constructors */\r\n mat3x4: {\r\n (): PBShaderExp;\r\n (name: string): PBShaderExp;\r\n (\r\n m00: number | PBShaderExp,\r\n m01: number | PBShaderExp,\r\n m02: number | PBShaderExp,\r\n m03: number | PBShaderExp,\r\n m10: number | PBShaderExp,\r\n m11: number | PBShaderExp,\r\n m12: number | PBShaderExp,\r\n m13: number | PBShaderExp,\r\n m20: number | PBShaderExp,\r\n m21: number | PBShaderExp,\r\n m22: number | PBShaderExp,\r\n m23: number | PBShaderExp\r\n ): PBShaderExp;\r\n (m0: PBShaderExp, m1: PBShaderExp, m2: PBShaderExp): PBShaderExp;\r\n ptr: ShaderTypeFunc;\r\n [dim: number]: ShaderTypeFunc;\r\n };\r\n /** mat4 type variable constructors */\r\n mat4: {\r\n (): PBShaderExp;\r\n (name: string): PBShaderExp;\r\n (\r\n m00: number | PBShaderExp,\r\n m01: number | PBShaderExp,\r\n m02: number | PBShaderExp,\r\n m03: number | PBShaderExp,\r\n m10: number | PBShaderExp,\r\n m11: number | PBShaderExp,\r\n m12: number | PBShaderExp,\r\n m13: number | PBShaderExp,\r\n m20: number | PBShaderExp,\r\n m21: number | PBShaderExp,\r\n m22: number | PBShaderExp,\r\n m23: number | PBShaderExp,\r\n m30: number | PBShaderExp,\r\n m31: number | PBShaderExp,\r\n m32: number | PBShaderExp,\r\n m33: number | PBShaderExp\r\n ): PBShaderExp;\r\n (m0: PBShaderExp, m1: PBShaderExp, m2: PBShaderExp, m3: PBShaderExp): PBShaderExp;\r\n ptr: ShaderTypeFunc;\r\n [dim: number]: ShaderTypeFunc;\r\n };\r\n /** mat4x2 type variable constructors */\r\n mat4x2: {\r\n (): PBShaderExp;\r\n (name: string): PBShaderExp;\r\n (\r\n m00: number | PBShaderExp,\r\n m01: number | PBShaderExp,\r\n m10: number | PBShaderExp,\r\n m11: number | PBShaderExp,\r\n m20: number | PBShaderExp,\r\n m21: number | PBShaderExp,\r\n m30: number | PBShaderExp,\r\n m31: number | PBShaderExp\r\n ): PBShaderExp;\r\n (m0: PBShaderExp, m1: PBShaderExp, m2: PBShaderExp, m3: PBShaderExp): PBShaderExp;\r\n ptr: ShaderTypeFunc;\r\n [dim: number]: ShaderTypeFunc;\r\n };\r\n /** mat4x3 type variable constructors */\r\n mat4x3: {\r\n (): PBShaderExp;\r\n (name: string): PBShaderExp;\r\n (\r\n m00: number | PBShaderExp,\r\n m01: number | PBShaderExp,\r\n m02: number | PBShaderExp,\r\n m10: number | PBShaderExp,\r\n m11: number | PBShaderExp,\r\n m12: number | PBShaderExp,\r\n m20: number | PBShaderExp,\r\n m21: number | PBShaderExp,\r\n m22: number | PBShaderExp,\r\n m30: number | PBShaderExp,\r\n m31: number | PBShaderExp,\r\n m32: number | PBShaderExp\r\n ): PBShaderExp;\r\n (m0: PBShaderExp, m1: PBShaderExp, m2: PBShaderExp, m3: PBShaderExp): PBShaderExp;\r\n ptr: ShaderTypeFunc;\r\n [dim: number]: ShaderTypeFunc;\r\n };\r\n /** tex1D type variable constructors */\r\n tex1D(rhs?: string): PBShaderExp;\r\n /** tex2D type variable constructors */\r\n tex2D(rhs?: string): PBShaderExp;\r\n /** tex3D type variable constructors */\r\n tex3D(rhs?: string): PBShaderExp;\r\n /** texCube type variable constructors */\r\n texCube(rhs?: string): PBShaderExp;\r\n /** texExternal type variable constructors */\r\n texExternal(rhs?: string): PBShaderExp;\r\n /** tex2DShadow type variable constructors */\r\n tex2DShadow(rhs?: string): PBShaderExp;\r\n /** texCubeShadow type variable constructors */\r\n texCubeShadow(rhs?: string): PBShaderExp;\r\n /** tex2DArray type variable constructors */\r\n tex2DArray(rhs?: string): PBShaderExp;\r\n /** tex2DArrayShadow type variable constructors */\r\n tex2DArrayShadow(rhs?: string): PBShaderExp;\r\n /** itex1D type variable constructors */\r\n itex1D(rhs?: string): PBShaderExp;\r\n /** itex2D type variable constructors */\r\n itex2D(rhs?: string): PBShaderExp;\r\n /** itex3D type variable constructors */\r\n itex3D(rhs?: string): PBShaderExp;\r\n /** itexCube type variable constructors */\r\n itexCube(rhs?: string): PBShaderExp;\r\n /** itex2DArray type variable constructors */\r\n itex2DArray(rhs?: string): PBShaderExp;\r\n /** utex1D type variable constructors */\r\n utex1D(rhs?: string): PBShaderExp;\r\n /** utex2D type variable constructors */\r\n utex2D(rhs?: string): PBShaderExp;\r\n /** utex3D type variable constructors */\r\n utex3D(rhs?: string): PBShaderExp;\r\n /** utexCube type variable constructors */\r\n utexCube(rhs?: string): PBShaderExp;\r\n /** utex2DArray type variable constructors */\r\n utex2DArray(rhs?: string): PBShaderExp;\r\n /** texStorage1D type variable constructors */\r\n texStorage1D: StorageTextureConstructor;\r\n /** texStorage2D type variable constructors */\r\n texStorage2D: StorageTextureConstructor;\r\n /** texStorage2DArray type variable constructors */\r\n texStorage2DArray: StorageTextureConstructor;\r\n /** texStorage3D type variable constructors */\r\n texStorage3D: StorageTextureConstructor;\r\n /** sampler type variable constructors */\r\n sampler(rhs?: string): PBShaderExp;\r\n /** samplerComparison type variable constructors */\r\n samplerComparison(rhs?: string): PBShaderExp;\r\n /** Same as radians builtin function in GLSL and WGSL */\r\n radians(val: number | PBShaderExp): PBShaderExp;\r\n /** Same as degrees builtin function in GLSL and WGSL */\r\n degrees(val: number | PBShaderExp): PBShaderExp;\r\n /** Same as sin builtin function in GLSL and WGSL */\r\n sin(val: number | PBShaderExp): PBShaderExp;\r\n /** Same as cos builtin function in GLSL and WGSL */\r\n cos(val: number | PBShaderExp): PBShaderExp;\r\n /** Same as tan builtin function in GLSL and WGSL */\r\n tan(val: number | PBShaderExp): PBShaderExp;\r\n /** Same as asin builtin function in GLSL and WGSL */\r\n asin(val: number | PBShaderExp): PBShaderExp;\r\n /** Same as acos builtin function in GLSL and WGSL */\r\n acos(val: number | PBShaderExp): PBShaderExp;\r\n /** Same as atan builtin function in GLSL and WGSL */\r\n atan(val: number | PBShaderExp): PBShaderExp;\r\n /** Same as atan builtin function in GLSL and atan2 builtin function in WGSL */\r\n atan2(y: number | PBShaderExp, x: number | PBShaderExp): PBShaderExp;\r\n /** Same as sinh builtin function in GLSL and WGSL */\r\n sinh(val: number | PBShaderExp): PBShaderExp;\r\n /** Same as cosh builtin function in GLSL and WGSL */\r\n cosh(val: number | PBShaderExp): PBShaderExp;\r\n /** Same as tanh builtin function in GLSL and WGSL */\r\n tanh(val: number | PBShaderExp): PBShaderExp;\r\n /** Same as asinh builtin function in GLSL and WGSL */\r\n asinh(val: number | PBShaderExp): PBShaderExp;\r\n /** Same as acosh builtin function in GLSL and WGSL */\r\n acosh(val: number | PBShaderExp): PBShaderExp;\r\n /** Same as atanh builtin function in GLSL and WGSL */\r\n atanh(val: number | PBShaderExp): PBShaderExp;\r\n /** Same as pow builtin function in GLSL and WGSL */\r\n pow(x: number | PBShaderExp, y: number | PBShaderExp): PBShaderExp;\r\n /** Same as exp builtin function in GLSL and WGSL */\r\n exp(val: number | PBShaderExp): PBShaderExp;\r\n /** Same as exp2 builtin function in GLSL and WGSL */\r\n exp2(val: number | PBShaderExp): PBShaderExp;\r\n /** Same as log builtin function in GLSL and WGSL */\r\n log(val: number | PBShaderExp): PBShaderExp;\r\n /** Same as log2 builtin function in GLSL and WGSL */\r\n log2(val: number | PBShaderExp): PBShaderExp;\r\n /** Same as sqrt builtin function in GLSL and WGSL */\r\n sqrt(val: number | PBShaderExp): PBShaderExp;\r\n /** Same as inversesqrt builtin function in GLSL and WGSL */\r\n inverseSqrt(val: number | PBShaderExp): PBShaderExp;\r\n /** Same as abs builtin function in GLSL and WGSL */\r\n abs(val: number | PBShaderExp): PBShaderExp;\r\n /** Same as sign builtin function in GLSL and WGSL */\r\n sign(val: number | PBShaderExp): PBShaderExp;\r\n /** Same as floor builtin function in GLSL and WGSL */\r\n floor(val: number | PBShaderExp): PBShaderExp;\r\n /** Same as ceil builtin function in GLSL and WGSL */\r\n ceil(val: number | PBShaderExp): PBShaderExp;\r\n /** Same as fract builtin function in GLSL and WGSL */\r\n fract(val: number | PBShaderExp): PBShaderExp;\r\n /** Same as mod builtin function in GLSL and WGSL */\r\n mod(x: number | PBShaderExp, y: number | PBShaderExp): PBShaderExp;\r\n /** Same as fma builtin function in WGSL, only valid for WebGPU device */\r\n fma(x: number | PBShaderExp, y: number | PBShaderExp, z: number | PBShaderExp): PBShaderExp;\r\n /** Same as round builtin function in WGSL, only valid for WebGPU device */\r\n round(val: number | PBShaderExp): PBShaderExp;\r\n /** Same as trunc builtin function in WGSL, only valid for WebGPU device */\r\n trunc(val: number | PBShaderExp): PBShaderExp;\r\n /** Same as min builtin function in GLSL and WGSL */\r\n min(x: number | PBShaderExp, y: number | PBShaderExp): PBShaderExp;\r\n /** Same as max builtin function in GLSL and WGSL */\r\n max(x: number | PBShaderExp, y: number | PBShaderExp): PBShaderExp;\r\n /** Same as clamp builtin function in GLSL and WGSL */\r\n clamp(x: number | PBShaderExp, y: number | PBShaderExp, z: number | PBShaderExp): PBShaderExp;\r\n /** Clamp to [0, 1] */\r\n saturate(x: PBShaderExp): PBShaderExp;\r\n /** Same as mix builtin function in GLSL and WGSL */\r\n mix(x: number | PBShaderExp, y: number | PBShaderExp, z: number | PBShaderExp): PBShaderExp;\r\n /** Same as step builtin function in GLSL and WGSL */\r\n step(x: number | PBShaderExp, y: number | PBShaderExp): PBShaderExp;\r\n /** Same as smoothstep builtin function in GLSL and WGSL */\r\n smoothStep(x: number | PBShaderExp, y: number | PBShaderExp, z: number | PBShaderExp): PBShaderExp;\r\n /** Same as isnan builtin function in GLSL, only valid for WebGL2 device */\r\n isnan(x: number | PBShaderExp): PBShaderExp;\r\n /** Same as isinf builtin function in GLSL, only valid for WebGL2 device */\r\n isinf(x: number | PBShaderExp): PBShaderExp;\r\n /** add two values */\r\n add_2(x: number | PBShaderExp, y: number | PBShaderExp);\r\n /** add a couple of values togeter */\r\n add(x: number | PBShaderExp, y: number | PBShaderExp, ...rest: (number | PBShaderExp)[]);\r\n /** subtract two values */\r\n sub(x: number | PBShaderExp, y: number | PBShaderExp);\r\n /** multiply two values */\r\n mul_2(x: number | PBShaderExp, y: number | PBShaderExp);\r\n /** multiply a couple of values togeter */\r\n mul(x: number | PBShaderExp, y: number | PBShaderExp, ...rest: (number | PBShaderExp)[]);\r\n /** divide the first number by the second number */\r\n div(x: number | PBShaderExp, y: number | PBShaderExp);\r\n /** Same as length builtin function in GLSL and WGSL */\r\n length(x: number | PBShaderExp): PBShaderExp;\r\n /** Same as distance builtin function in GLSL and WGSL */\r\n distance(x: number | PBShaderExp, y: number | PBShaderExp): PBShaderExp;\r\n /** Same as dot builtin function in GLSL and WGSL */\r\n dot(x: PBShaderExp, y: PBShaderExp): PBShaderExp;\r\n /** Same as cross builtin function in GLSL and WGSL */\r\n cross(x: PBShaderExp, y: PBShaderExp): PBShaderExp;\r\n /** Same as normalize builtin function in GLSL and WGSL. */\r\n normalize(x: PBShaderExp): PBShaderExp;\r\n /** Same as faceForward builtin function in WGSL, only valid for WebGPU device */\r\n faceForward(x: PBShaderExp, y: PBShaderExp, z: PBShaderExp): PBShaderExp;\r\n /** Same as reflect builtin function in GLSL and WGSL */\r\n reflect(x: PBShaderExp, y: PBShaderExp): PBShaderExp;\r\n /** Same as refract builtin function in GLSL and WGSL */\r\n refract(x: PBShaderExp, y: PBShaderExp, z: number | PBShaderExp): PBShaderExp;\r\n /** Same as frexp builtin function in WGSL, only valid for WebGPU device */\r\n frexp(x: number | PBShaderExp): PBShaderExp;\r\n /** Same as outerProduct builtin function in GLSL, only valid for WebGL2 device */\r\n outerProduct(x: PBShaderExp, y: PBShaderExp): PBShaderExp;\r\n /** Same as transpose builtin function in GLSL and WGSL, only valid for WebGL2 and WebGPU device */\r\n transpose(mat: PBShaderExp): PBShaderExp;\r\n /** Same as determinant builtin function in GLSL and WGSL, only valid for WebGL2 and WebGPU device */\r\n determinant(mat: PBShaderExp): PBShaderExp;\r\n /** Same as inverse builtin function in GLSL, only valid for WebGL2 device */\r\n inverse(mat: PBShaderExp): PBShaderExp;\r\n /** return true if x is less than y, otherwise false */\r\n lessThan(x: number | PBShaderExp, y: number | PBShaderExp): PBShaderExp;\r\n /** return true if x is less than or equals y, otherwise false, per component */\r\n lessThanEqual(x: number | PBShaderExp, y: number | PBShaderExp): PBShaderExp;\r\n /** return true if x is greater than y, otherwise false, per component */\r\n greaterThan(x: number | PBShaderExp, y: number | PBShaderExp): PBShaderExp;\r\n /** return true if x is greater than or equals y, otherwise false, per component */\r\n greaterThanEqual(x: number | PBShaderExp, y: number | PBShaderExp): PBShaderExp;\r\n /** return true if x equals y, otherwise false, per component */\r\n compEqual(x: PBShaderExp, y: PBShaderExp): PBShaderExp;\r\n /** return true if x is not equal to y, otherwise false, per component */\r\n compNotEqual(x: PBShaderExp, y: PBShaderExp): PBShaderExp;\r\n /** return true if x equals y, otherwise false */\r\n equal(x: PBShaderExp | number, y: PBShaderExp | number): PBShaderExp;\r\n /** return true if x is not equal to y, otherwise false */\r\n notEqual(x: PBShaderExp | number, y: PBShaderExp | number): PBShaderExp;\r\n /** return x && y */\r\n and_2(x: PBShaderExp | number | boolean, y: PBShaderExp | number | boolean): PBShaderExp;\r\n /** return x && y && ... */\r\n and(\r\n x: PBShaderExp | number | boolean,\r\n y: PBShaderExp | number | boolean,\r\n ...rest: (PBShaderExp | number | boolean)[]\r\n );\r\n /** return x & y, per component */\r\n compAnd(x: PBShaderExp | number, y: PBShaderExp | number): PBShaderExp;\r\n /** return x ^ y, per component */\r\n compXor(x: PBShaderExp | number, y: PBShaderExp | number): PBShaderExp;\r\n /** return x || y */\r\n or_2(x: PBShaderExp | boolean, y: PBShaderExp | boolean): PBShaderExp;\r\n /** return x || y */\r\n or(x: PBShaderExp | boolean, y: PBShaderExp | boolean, ...rest: (PBShaderExp | boolean)[]): PBShaderExp;\r\n /** return x || y, per component */\r\n compOr(x: PBShaderExp | number | boolean, y: PBShaderExp | number | boolean): PBShaderExp;\r\n /** check whether any element of a boolean vector is true */\r\n any(x: PBShaderExp): PBShaderExp;\r\n /** check whether all elements of a boolean vector are true */\r\n all(x: PBShaderExp): PBShaderExp;\r\n /** logically invert a boolean vector */\r\n not(x: boolean | PBShaderExp): PBShaderExp;\r\n /** return the negate of the given value */\r\n neg(x: number | PBShaderExp): PBShaderExp;\r\n /** shift arithmetic left, not valid for WebGL1 device */\r\n sal(a: number | PBShaderExp, b: number | PBShaderExp);\r\n /** shift arithmetic right, not valid for WebGL1 device */\r\n sar(a: number | PBShaderExp, b: number | PBShaderExp);\r\n /** Same as the arrayLength builtin function in WGSL, only valid for WebGPU device */\r\n arrayLength(x: PBShaderExp): PBShaderExp;\r\n /** Same as the select builtin function in WGSL, only valid for WebGPU device */\r\n select(x: number | PBShaderExp, y: number | PBShaderExp, cond: boolean | PBShaderExp): PBShaderExp;\r\n /** Same as floatBitsToInt builtin function in GLSL, only valid for WebGL2 device and WebGPU device */\r\n floatBitsToInt(x: number | PBShaderExp): PBShaderExp;\r\n /** Same as floatBitsToUint builtin function in GLSL, only valid for WebGL2 device and WebGPU device */\r\n floatBitsToUint(x: number | PBShaderExp): PBShaderExp;\r\n /** Same as intBitsToFloat builtin function in GLSL, only valid for WebGL2 device and WebGPU device */\r\n intBitsToFloat(x: number | PBShaderExp): PBShaderExp;\r\n /** Same as uintBitsToFloat builtin function in GLSL, only valid for WebGL2 device and WebGPU device */\r\n uintBitsToFloat(x: number | PBShaderExp): PBShaderExp;\r\n /** Same as pack4x8snorm builtin function in WGSL, only valid for WebGPU device */\r\n pack4x8snorm(x: PBShaderExp): PBShaderExp;\r\n /** Same as unpack4x8snorm builtin function in WGSL, only valid for WebGPU device */\r\n unpack4x8snorm(x: number | PBShaderExp): PBShaderExp;\r\n /** Same as pack4x8unorm builtin function in WGSL, only valid for WebGPU device */\r\n pack4x8unorm(x: PBShaderExp): PBShaderExp;\r\n /** Same as unpack4x8unorm builtin function in WGSL, only valid for WebGPU device */\r\n unpack4x8unorm(x: number | PBShaderExp): PBShaderExp;\r\n /** Same as pack2x16snom builtin function in WGSL, only valid for WebGPU device */\r\n pack2x16snorm(x: PBShaderExp): PBShaderExp;\r\n /** Same as unpack2x16snorm builtin function in WGSL, only valid for WebGPU device */\r\n unpack2x16snorm(x: number | PBShaderExp): PBShaderExp;\r\n /** Same as pack2x16unorm builtin function in WGSL, only valid for WebGPU device */\r\n pack2x16unorm(x: PBShaderExp): PBShaderExp;\r\n /** Same as unpack2x16unorm builtin function in WGSL, only valid for WebGPU device */\r\n unpack2x16unorm(x: number | PBShaderExp): PBShaderExp;\r\n /** Same as pack2x16float builtin function in WGSL, only valid for WebGPU device */\r\n pack2x16float(x: PBShaderExp): PBShaderExp;\r\n /** Same as unpack2x16float builtin function in WGSL, only valid for WebGPU device */\r\n unpack2x16float(x: number | PBShaderExp): PBShaderExp;\r\n /** Same as matrixCompMult builtin function in GLSL, only valid for WebGL/WebGL2 device */\r\n matrixCompMult(x: PBShaderExp, y: PBShaderExp): PBShaderExp;\r\n /** Same as dFdx builtin function in GLSL and dpdx builtin function in WGSL */\r\n dpdx(x: PBShaderExp): PBShaderExp;\r\n /** Same as dFdy builtin function in GLSL and dpdy builtin function in WGSL */\r\n dpdy(x: PBShaderExp): PBShaderExp;\r\n /** Same as fwidth builtin function in GLSL and WGSL */\r\n fwidth(x: PBShaderExp): PBShaderExp;\r\n /** Same as dFdx builtin function in GLSL and dpdxCoarse builtin function in WGSL */\r\n dpdxCoarse(x: PBShaderExp): PBShaderExp;\r\n /** Same as dFdx builtin function in GLSL and dpdxFine builtin function in WGSL */\r\n dpdxFine(x: PBShaderExp): PBShaderExp;\r\n /** Same as dFdy builtin function in GLSL and dpdyCoarse builtin function in WGSL */\r\n dpdyCoarse(x: PBShaderExp): PBShaderExp;\r\n /** Same as dFdy builtin function in GLSL and dpdyFine builtin function in WGSL */\r\n dpdyFine(x: PBShaderExp): PBShaderExp;\r\n /** Same as textureSize builtin function in GLSL and textureDimensions builtin function in WGSL, only valid for WebGL2 device and WebGPU device */\r\n textureDimensions(tex: PBShaderExp, level?: number | PBShaderExp): PBShaderExp;\r\n /** Same as textureGather builtin function in WGSL, only valid for WebGPU device */\r\n textureGather(tex: PBShaderExp, sampler: PBShaderExp, coords: PBShaderExp): PBShaderExp;\r\n /** Same as textureGather builtin function in WGSL, only valid for WebGPU device */\r\n textureGather(\r\n component: number | PBShaderExp,\r\n tex: PBShaderExp,\r\n sampler: PBShaderExp,\r\n coords: PBShaderExp\r\n ): PBShaderExp;\r\n /** Same as textureGather builtin function in WGSL, only valid for WebGPU device */\r\n textureArrayGather(\r\n tex: PBShaderExp,\r\n sampler: PBShaderExp,\r\n coords: PBShaderExp,\r\n arrayIndex: number | PBShaderExp\r\n ): PBShaderExp;\r\n /** Same as textureGather builtin function in WGSL, only valid for WebGPU device */\r\n textureArrayGather(\r\n component: number | PBShaderExp,\r\n tex: PBShaderExp,\r\n sampler: PBShaderExp,\r\n coords: PBShaderExp,\r\n arrayIndex: number | PBShaderExp\r\n ): PBShaderExp;\r\n /** Same as textureGatherCompare builtin function in WGSL, only valid for WebGPU device */\r\n textureGatherCompare(\r\n tex: PBShaderExp,\r\n samplerCompare: PBShaderExp,\r\n coords: PBShaderExp,\r\n depthRef: number | PBShaderExp\r\n ): PBShaderExp;\r\n /** Same as textureGatherCompare builtin function in WGSL, only valid for WebGPU device */\r\n textureArrayGatherCompare(\r\n tex: PBShaderExp,\r\n samplerCompare: PBShaderExp,\r\n coords: PBShaderExp,\r\n arrayIndex: number | PBShaderExp,\r\n depthRef: number | PBShaderExp\r\n ): PBShaderExp;\r\n /** Same as texelFetch builtin function in GLSL and textureLoad builtin function in WGSL, only valid for WebGL2 and WebGPU device */\r\n textureLoad(\r\n tex: PBShaderExp,\r\n coords: number | PBShaderExp,\r\n levelOrSampleIndex: number | PBShaderExp\r\n ): PBShaderExp;\r\n /** Same as texelFetch builtin function in GLSL and textureLoad builtin function in WGSL, only valid for WebGL2 and WebGPU device */\r\n textureArrayLoad(\r\n tex: PBShaderExp,\r\n coords: number | PBShaderExp,\r\n arrayIndex: number | PBShaderExp,\r\n level: number | PBShaderExp\r\n ): PBShaderExp;\r\n /** Same as textureStore builtin function in WGSL, only valid for WebGPU device */\r\n textureStore(tex: PBShaderExp, coords: number | PBShaderExp, value: PBShaderExp): void;\r\n /** Same as textureStore builtin function in WGSL, only valid for WebGPU device */\r\n textureArrayStore(\r\n tex: PBShaderExp,\r\n coords: PBShaderExp,\r\n arrayIndex: number | PBShaderExp,\r\n value: PBShaderExp\r\n ): void;\r\n /** Same as textureNumLayers builtin function in WGSL, only valid for WebGPU device */\r\n textureNumLayers(tex: PBShaderExp): PBShaderExp;\r\n /** Same as textureNumLevels builtin function in WGSL, only valid for WebGPU device */\r\n textureNumLevels(tex: PBShaderExp): PBShaderExp;\r\n /** Same as textureNumSamples builtin function in WGSL, only valid for WebGPU device */\r\n textureNumSamples(tex: PBShaderExp): PBShaderExp;\r\n /** Same as textureSample builtin function in WebGPU and texture/texture2D/textureCube builtin function in GLSL */\r\n textureSample(tex: PBShaderExp, coords: number | PBShaderExp): PBShaderExp;\r\n /** Same as textureSample builtin function in WebGPU and texture builtin function in GLSL, only valid for WebGL2 and WebGPU device */\r\n textureArraySample(tex: PBShaderExp, coords: PBShaderExp, arrayIndex: number | PBShaderExp): PBShaderExp;\r\n /** Same as textureSampleBias builtin function in WebGPU and texture/texture2D/textureCube builtin function in GLSL */\r\n textureSampleBias(tex: PBShaderExp, coords: PBShaderExp, bias: number | PBShaderExp): PBShaderExp;\r\n /** Same as textureSampleBias builtin function in WebGPU and texture builtin function in GLSL, only valid for WebGL2 and WebGPU device */\r\n textureArraySampleBias(\r\n tex: PBShaderExp,\r\n coords: PBShaderExp,\r\n arrayIndex: number | PBShaderExp,\r\n bias: number | PBShaderExp\r\n ): PBShaderExp;\r\n /** Same as textureSampleCompare builtin function in WebGPU and texture builtin function in GLSL, only valid for WebGL2 and WebGPU device */\r\n textureSampleCompare(tex: PBShaderExp, coords: PBShaderExp, depthRef: number | PBShaderExp): PBShaderExp;\r\n /** Same as textureSampleCompare builtin function in WebGPU and texture builtin function in GLSL, only valid for WebGL2 and WebGPU device */\r\n textureArraySampleCompare(\r\n tex: PBShaderExp,\r\n coords: PBShaderExp,\r\n arrayIndex: number | PBShaderExp,\r\n depthRef: number | PBShaderExp\r\n ): PBShaderExp;\r\n /** Same as textureSampleLevel builtin function in WebGPU and textureLod/texture2DLodExt/textureCubeLodExt builtin function in GLSL */\r\n textureSampleLevel(tex: PBShaderExp, coords: PBShaderExp): PBShaderExp;\r\n /** Same as textureSampleLevel builtin function in WebGPU and textureLod/texture2DLodExt/textureCubeLodExt builtin function in GLSL */\r\n textureSampleLevel(tex: PBShaderExp, coords: PBShaderExp, level: number | PBShaderExp): PBShaderExp;\r\n /** Same as textureSampleLevel builtin function in WebGPU and textureLod builtin function in GLSL, only valid for WebGL2 and WebGPU device */\r\n textureArraySampleLevel(\r\n tex: PBShaderExp,\r\n coords: PBShaderExp,\r\n arrayIndex: number | PBShaderExp,\r\n level: number | PBShaderExp\r\n ): PBShaderExp;\r\n /** Same as textureSampleCompareLevel builtin function in WebGPU and texture/textureLod builtin function in GLSL, only valid for WebGL2 and WebGPU device */\r\n textureSampleCompareLevel(\r\n tex: PBShaderExp,\r\n coords: PBShaderExp,\r\n depthRef: number | PBShaderExp\r\n ): PBShaderExp;\r\n /** Same as textureSampleCompareLevel builtin function in WebGPU and texture builtin function in GLSL, only valid for WebGL2 and WebGPU device */\r\n textureArraySampleCompareLevel(\r\n tex: PBShaderExp,\r\n coords: PBShaderExp,\r\n arrayIndex: number | PBShaderExp,\r\n depthRef: number | PBShaderExp\r\n ): PBShaderExp;\r\n /** Same as textureSampleGrad builtin function in WebGPU and textureGrad/texture2DGradExt/textureCubeGradExt builtin function in GLSL */\r\n textureSampleGrad(tex: PBShaderExp, coords: PBShaderExp, ddx: PBShaderExp, ddy: PBShaderExp): PBShaderExp;\r\n /** Same as textureSampleGrad builtin function in WebGPU and textureGrad builtin function in GLSL, only valid for WebGL2 and WebGPU device */\r\n textureArraySampleGrad(\r\n tex: PBShaderExp,\r\n coords: PBShaderExp,\r\n arrayIndex: number | PBShaderExp,\r\n ddx: PBShaderExp,\r\n ddy: PBShaderExp\r\n ): PBShaderExp;\r\n /** Same as storageBarrier builtin function in WebGPU, only valid for WebGPU device */\r\n storageBarrier(): void;\r\n /** Same as workgroupBarrier builtin function in WebGPU, only valid for WebGPU device */\r\n workgroupBarrier(): void;\r\n /** atomicLoad, only valid for WebGPU device */\r\n atomicLoad(ptr: PBShaderExp);\r\n /** atomicStore, only valid for WebGPU device */\r\n atomicStore(ptr: PBShaderExp, value: number | PBShaderExp);\r\n /** atomicAdd, only valid for WebGPU device */\r\n atomicAdd(ptr: PBShaderExp, value: number | PBShaderExp): PBShaderExp;\r\n /** atomicSub, only valid for WebGPU device */\r\n atomicSub(ptr: PBShaderExp, value: number | PBShaderExp): PBShaderExp;\r\n /** atomicMax, only valid for WebGPU device */\r\n atomicMax(ptr: PBShaderExp, value: number | PBShaderExp): PBShaderExp;\r\n /** atomicMin, only valid for WebGPU device */\r\n atomicMin(ptr: PBShaderExp, value: number | PBShaderExp): PBShaderExp;\r\n /** atomicAnd, only valid for WebGPU device */\r\n atomicAnd(ptr: PBShaderExp, value: number | PBShaderExp): PBShaderExp;\r\n /** atomicOr, only valid for WebGPU device */\r\n atomicOr(ptr: PBShaderExp, value: number | PBShaderExp): PBShaderExp;\r\n /** atomicXor, only valid for WebGPU device */\r\n atomicXor(ptr: PBShaderExp, value: number | PBShaderExp): PBShaderExp;\r\n /** atomicExchange, only valid for WebGPU device */\r\n atomicExchange(ptr: PBShaderExp, value: number | PBShaderExp): PBShaderExp;\r\n}\r\n\r\n/**\r\n * The program builder class\r\n * @public\r\n */\r\nexport class ProgramBuilder {\r\n /** @internal */\r\n _device: AbstractDevice;\r\n /** @internal */\r\n _workgroupSize: [number, number, number];\r\n /** @internal */\r\n _scopeStack: PBScope[] = [];\r\n /** @internal */\r\n _shaderType: ShaderType = ShaderType.Vertex | ShaderType.Fragment | ShaderType.Compute;\r\n /** @internal */\r\n _structInfo: Record<number, StructDef>;\r\n /** @internal */\r\n _uniforms: UniformInfo[];\r\n /** @internal */\r\n _globalScope: PBGlobalScope;\r\n /** @internal */\r\n _builtinScope: PBBuiltinScope;\r\n /** @internal */\r\n _inputScope: PBInputScope;\r\n /** @internal */\r\n _outputScope: PBOutputScope;\r\n /** @internal */\r\n _inputs: [string, AST.ASTDeclareVar][];\r\n /** @internal */\r\n _outputs: [string, AST.ASTDeclareVar][];\r\n /** @internal */\r\n _vertexAttributes: number[];\r\n /** @internal */\r\n _depthRangeCorrection: boolean;\r\n /** @internal */\r\n _emulateDepthClamp: boolean;\r\n /** @internal */\r\n _lastError: string;\r\n /** @internal */\r\n _reflection: PBReflection;\r\n /** @internal */\r\n _autoStructureTypeIndex: number;\r\n /** @internal */\r\n _nameMap: Record<string, string>[];\r\n /**\r\n * Creates a program builder for given device\r\n * @param device - The device\r\n */\r\n constructor(device: AbstractDevice) {\r\n this._device = device;\r\n this._workgroupSize = null;\r\n this._structInfo = {};\r\n this._uniforms = [];\r\n this._scopeStack = [];\r\n this._globalScope = null;\r\n this._builtinScope = null;\r\n this._inputScope = null;\r\n this._outputScope = null;\r\n this._inputs = [];\r\n this._outputs = [];\r\n this._vertexAttributes = [];\r\n this._depthRangeCorrection = device.type === 'webgpu';\r\n this._emulateDepthClamp = false;\r\n this._lastError = null;\r\n this._reflection = new PBReflection(this);\r\n this._autoStructureTypeIndex = 0;\r\n this._nameMap = [];\r\n }\r\n /** Get last error */\r\n get lastError(): string {\r\n return this._lastError;\r\n }\r\n /** @internal */\r\n get shaderType(): ShaderType {\r\n return this._shaderType;\r\n }\r\n /** Current shader kind */\r\n get shaderKind(): ShaderKind {\r\n return this._shaderType === ShaderType.Vertex\r\n ? 'vertex'\r\n : this._shaderType === ShaderType.Fragment\r\n ? 'fragment'\r\n : this._shaderType === ShaderType.Compute\r\n ? 'compute'\r\n : null;\r\n }\r\n /** Gets the global scope */\r\n getGlobalScope(): PBGlobalScope {\r\n return this._globalScope;\r\n }\r\n /** @internal */\r\n get builtinScope(): PBBuiltinScope {\r\n return this._builtinScope;\r\n }\r\n /** @internal */\r\n get inputScope(): PBInputScope {\r\n return this._inputScope;\r\n }\r\n /** @internal */\r\n get outputScope(): PBOutputScope {\r\n return this._outputScope;\r\n }\r\n /** @internal */\r\n get depthRangeCorrection(): boolean {\r\n return this._depthRangeCorrection;\r\n }\r\n get emulateDepthClamp(): boolean {\r\n return this._emulateDepthClamp;\r\n }\r\n set emulateDepthClamp(val: boolean) {\r\n this._emulateDepthClamp = val;\r\n }\r\n /** Get the shader code reflection interface */\r\n getReflection(): PBReflection {\r\n return this._reflection;\r\n }\r\n /** Get the device */\r\n getDevice(): AbstractDevice {\r\n return this._device;\r\n }\r\n /** @internal */\r\n reset(): void {\r\n this._workgroupSize = null;\r\n this._structInfo = {};\r\n this._uniforms = [];\r\n this._scopeStack = [];\r\n this._globalScope = null;\r\n this._builtinScope = null;\r\n this._inputScope = null;\r\n this._outputScope = null;\r\n this._inputs = [];\r\n this._outputs = [];\r\n this._vertexAttributes = [];\r\n this._depthRangeCorrection = this._device.type === 'webgpu';\r\n this._reflection = new PBReflection(this);\r\n this._autoStructureTypeIndex = 0;\r\n this._nameMap = [];\r\n }\r\n /**\r\n * Query the global variable by the name\r\n * @param name - Name of the variable\r\n * @returns The variable or null if not exists\r\n */\r\n queryGlobal(name: string): PBShaderExp {\r\n return this.getReflection().tag(name);\r\n }\r\n /** @internal */\r\n pushScope(scope: PBScope) {\r\n this._scopeStack.unshift(scope);\r\n }\r\n /** @internal */\r\n popScope(): PBScope {\r\n return this._scopeStack.shift();\r\n }\r\n /** Gets the current scope */\r\n getCurrentScope<T extends PBScope = PBScope>(): T {\r\n return this._scopeStack[0] as T;\r\n }\r\n /** Gets the current function scope */\r\n getCurrentFunctionScope(): PBFunctionScope {\r\n let funcScope: PBScope = this.getCurrentScope();\r\n while (funcScope && !(funcScope instanceof PBFunctionScope)) {\r\n funcScope = funcScope.$parent;\r\n }\r\n return funcScope as PBFunctionScope;\r\n }\r\n /**\r\n * Generates shader codes for a render program\r\n * @param options - The build options\r\n * @returns a tuple made by vertex shader source, fragment shader source, bind group layouts and vertex attributes used, or null if build faild\r\n */\r\n buildRender(options: PBRenderOptions): readonly [string, string, BindGroupLayout[], number[]] {\r\n setCurrentProgramBuilder(this);\r\n this._lastError = null;\r\n this.defineInternalStructs();\r\n const ret = this.buildRenderSource(options);\r\n setCurrentProgramBuilder(null);\r\n this.reset();\r\n return ret;\r\n }\r\n /**\r\n * Generates shader code for a compute program\r\n * @param options - The build programs\r\n * @returns a tuple made by compute shader source and bind group layouts, or null if build failed\r\n */\r\n buildCompute(options: PBComputeOptions): readonly [string, BindGroupLayout[]] {\r\n setCurrentProgramBuilder(this);\r\n this._lastError = null;\r\n this._workgroupSize = options.workgroupSize;\r\n this.defineInternalStructs();\r\n const ret = this.buildComputeSource(options);\r\n setCurrentProgramBuilder(null);\r\n this.reset();\r\n return ret;\r\n }\r\n /**\r\n * Creates a shader program for render\r\n * @param options - The build options\r\n * @returns The created program or null if build failed\r\n */\r\n buildRenderProgram(options: PBRenderOptions): GPUProgram {\r\n const ret = this.buildRender(options);\r\n return ret\r\n ? this._device.createGPUProgram({\r\n type: 'render',\r\n label: options.label,\r\n params: {\r\n vs: ret[0],\r\n fs: ret[1],\r\n bindGroupLayouts: ret[2],\r\n vertexAttributes: ret[3]\r\n }\r\n })\r\n : null;\r\n }\r\n /**\r\n * Creates a shader program for compute\r\n * @param options - The build options\r\n * @returns The created program or null if build failed\r\n */\r\n buildComputeProgram(options: PBComputeOptions): GPUProgram {\r\n const ret = this.buildCompute(options);\r\n return ret\r\n ? this._device.createGPUProgram({\r\n type: 'compute',\r\n params: {\r\n source: ret[0],\r\n bindGroupLayouts: ret[1]\r\n }\r\n })\r\n : null;\r\n }\r\n /**\r\n * Creates a function\r\n * @param name - Name of the function\r\n * @param params - Parameters of the function\r\n * @param body - The generator function\r\n */\r\n func(name: string, params: PBShaderExp[], body?: (this: PBFunctionScope) => void) {\r\n this.getGlobalScope().$createFunctionIfNotExists(name, params, body);\r\n }\r\n /**\r\n * Create the main entry function of the shader\r\n * @param body - The shader generator function\r\n */\r\n main(body?: (this: PBFunctionScope) => void) {\r\n this.getGlobalScope().$mainFunc(body);\r\n }\r\n /**\r\n * Create an 'AddressOf' expression for WGSL\r\n * @param ref - The reference variable\r\n * @returns the 'AddressOf' expression\r\n */\r\n addressOf(ref: PBShaderExp): PBShaderExp {\r\n if (this._device.type !== 'webgpu') {\r\n throw new errors.PBDeviceNotSupport('pointer shader type');\r\n }\r\n if (!ref.$ast.isReference()) {\r\n throw new errors.PBReferenceValueRequired(ref);\r\n }\r\n const exp = new PBShaderExp('', ref.$ast.getType());\r\n exp.$ast = new AST.ASTAddressOf(ref.$ast);\r\n return exp;\r\n }\r\n /**\r\n * Creates a 'referenceOf' expression for WGSL\r\n * @param ptr - The pointer variable\r\n * @returns the 'referenceOf' expression\r\n */\r\n referenceOf(ptr: PBShaderExp): PBShaderExp {\r\n if (this._device.type !== 'webgpu') {\r\n throw new errors.PBDeviceNotSupport('pointer shader type');\r\n }\r\n if (!ptr.$ast.getType().isPointerType()) {\r\n throw new errors.PBPointerValueRequired(ptr);\r\n }\r\n const ast = new AST.ASTReferenceOf(ptr.$ast);\r\n const exp = new PBShaderExp('', ast.getType());\r\n exp.$ast = ast;\r\n return exp;\r\n }\r\n /**\r\n * Creates a structure type variable\r\n * @param structName - Name of the structure type\r\n * @param instanceName - Name of the variable\r\n * @returns the created variable\r\n */\r\n struct(structName: string, instanceName: string): PBShaderExp {\r\n let ctor: ShaderTypeFunc = null;\r\n for (const st of [ShaderType.Vertex, ShaderType.Fragment, ShaderType.Compute]) {\r\n if (st & this._shaderType) {\r\n const structInfo = this._structInfo[st];\r\n ctor = structInfo?.structs[structName];\r\n if (ctor) {\r\n break;\r\n }\r\n }\r\n }\r\n if (!ctor) {\r\n throw new errors.PBParamValueError('struct', 'structName', `Struct type ${structName} not exists`);\r\n }\r\n return ctor.call(this, instanceName);\r\n }\r\n /** @internal */\r\n isIdenticalStruct(a: PBStructTypeInfo, b: PBStructTypeInfo, checkName: boolean): boolean {\r\n if (checkName && a.structName && b.structName && a.structName !== b.structName) {\r\n return false;\r\n }\r\n if (a.structMembers.length !== b.structMembers.length) {\r\n return false;\r\n }\r\n for (let index = 0; index < a.structMembers.length; index++) {\r\n const val = a.structMembers[index];\r\n const other = b.structMembers[index];\r\n if (val.name !== other.name) {\r\n return false;\r\n }\r\n if (val.type.isStructType()) {\r\n if (!other.type.isStructType()) {\r\n return false;\r\n }\r\n if (!this.isIdenticalStruct(val.type, other.type, true)) {\r\n return false;\r\n }\r\n } else if (!val.type.isCompatibleType(other.type)) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n /** @internal */\r\n generateStructureName(): string {\r\n return `zStruct${this._autoStructureTypeIndex++}`;\r\n }\r\n /** @internal */\r\n getVertexAttributes(): number[] {\r\n return this._vertexAttributes;\r\n }\r\n /** @internal */\r\n defineHiddenStruct(type: PBStructTypeInfo) {\r\n for (const shaderType of [ShaderType.Vertex, ShaderType.Fragment, ShaderType.Compute]) {\r\n let structInfo = this._structInfo[shaderType];\r\n if (!structInfo) {\r\n structInfo = { structs: {}, types: [] };\r\n this._structInfo[shaderType] = structInfo;\r\n }\r\n if (structInfo.structs[type.structName]) {\r\n throw new errors.PBParamValueError(\r\n 'defineStruct',\r\n 'structName',\r\n `cannot re-define struct '${type.structName}'`\r\n );\r\n }\r\n structInfo.types.push(new AST.ASTStructDefine(type, true));\r\n }\r\n }\r\n // /**\r\n // * Defines an uniform buffer\r\n // * @param name - Name of the uniform buffer\r\n // * @param args - Members of the buffer structure\r\n // * @returns The structure type constructor\r\n // */\r\n // defineUniformBuffer(name: string, ...args: PBShaderExp[]): ShaderTypeFunc {\r\n // return this.defineStructOrUniformBuffer(name, 'std140', ...args);\r\n // }\r\n // /**\r\n // * Defines a structure type\r\n // * @param structName - Name of the type\r\n // * @param layout - The structure layout\r\n // * @param args - Members of the structure\r\n // * @returns The structure type constructor\r\n // */\r\n // defineStruct(structName: string, ...args: PBShaderExp[]): ShaderTypeFunc {\r\n // return this.defineStructOrUniformBuffer(structName, 'default', ...args);\r\n // }\r\n /**\r\n * Defines a structure type\r\n * @param members - Members of the structure\r\n * @param structName - Name of the type\r\n * @returns The structure type constructor\r\n */\r\n defineStruct(members: PBShaderExp[], structName?: string): ShaderTypeFunc {\r\n const layout = 'default';\r\n const structType = new PBStructTypeInfo(\r\n structName ?? '',\r\n layout,\r\n members.map((arg) => {\r\n if (\r\n !arg.$typeinfo.isPrimitiveType() &&\r\n !arg.$typeinfo.isArrayType() &&\r\n !arg.$typeinfo.isStructType() &&\r\n !arg.$typeinfo.isAtomicI32() &&\r\n !arg.$typeinfo.isAtomicU32()\r\n ) {\r\n throw new Error(`invalid struct member type: '${arg.$str}'`);\r\n }\r\n return {\r\n name: arg.$str,\r\n type: arg.$typeinfo\r\n };\r\n })\r\n );\r\n for (const shaderType of [ShaderType.Vertex, ShaderType.Fragment, ShaderType.Compute]) {\r\n let structDef: AST.ASTStructDefine = null;\r\n let ctor: ShaderTypeFunc = null;\r\n const structInfo = this._structInfo[shaderType];\r\n if (structInfo) {\r\n if (\r\n getCurrentProgramBuilder().shaderType === shaderType &&\r\n structInfo.structs[structType.structName]\r\n ) {\r\n throw new errors.PBParamValueError(\r\n 'defineStruct',\r\n 'structName',\r\n `cannot re-define struct '${structType.structName}'`\r\n );\r\n }\r\n for (const type of structInfo.types) {\r\n if (!type.builtin && this.isIdenticalStruct(type.getType(), structType, false)) {\r\n structDef = type;\r\n ctor = structInfo.structs[type.getType().structName];\r\n break;\r\n }\r\n }\r\n }\r\n if (structDef) {\r\n if (structDef.type.layout !== layout) {\r\n throw new Error(`Can not redefine struct ${structDef.type.structName} with different layout`);\r\n }\r\n if (shaderType !== getCurrentProgramBuilder().shaderType) {\r\n if (!this._structInfo[getCurrentProgramBuilder().shaderType]) {\r\n this._structInfo[getCurrentProgramBuilder().shaderType] = { structs: {}, types: [] };\r\n }\r\n if (this._structInfo[getCurrentProgramBuilder().shaderType].types.indexOf(structDef) < 0) {\r\n this._structInfo[getCurrentProgramBuilder().shaderType].types.push(structDef);\r\n this._structInfo[getCurrentProgramBuilder().shaderType].structs[structDef.getType().structName] =\r\n ctor;\r\n }\r\n }\r\n return ctor;\r\n }\r\n }\r\n return this.internalDefineStruct(\r\n structName ?? this.generateStructureName(),\r\n layout,\r\n this._shaderType,\r\n false,\r\n ...members\r\n );\r\n }\r\n /**\r\n * Defines a structure type\r\n * @param structType - The structure type info\r\n * @returns The structure type constructor\r\n */\r\n defineStructByType(structType: PBStructTypeInfo): ShaderTypeFunc {\r\n const typeCopy = structType.extends(structType.structName || this.generateStructureName(), []);\r\n for (const shaderType of [ShaderType.Vertex, ShaderType.Fragment, ShaderType.Compute]) {\r\n let structDef: AST.ASTStructDefine = null;\r\n let ctor: ShaderTypeFunc = null;\r\n const structInfo = this._structInfo[shaderType];\r\n if (structInfo) {\r\n if (getCurrentProgramBuilder().shaderType === shaderType && structInfo.structs[typeCopy.structName]) {\r\n throw new errors.PBParamValueError(\r\n 'defineStruct',\r\n 'structName',\r\n `cannot re-define struct '${typeCopy.structName}'`\r\n );\r\n }\r\n for (const type of structInfo.types) {\r\n if (!type.builtin && this.isIdenticalStruct(type.getType(), typeCopy, false)) {\r\n structDef = type;\r\n ctor = structInfo.structs[type.getType().structName];\r\n break;\r\n }\r\n }\r\n }\r\n if (structDef) {\r\n if (structDef.type.layout !== typeCopy.layout) {\r\n throw new Error(`Can not redefine struct ${structDef.type.structName} with different layout`);\r\n }\r\n if (shaderType !== getCurrentProgramBuilder().shaderType) {\r\n if (!this._structInfo[getCurrentProgramBuilder().shaderType]) {\r\n this._structInfo[getCurrentProgramBuilder().shaderType] = { structs: {}, types: [] };\r\n }\r\n this._structInfo[getCurrentProgramBuilder().shaderType].types.push(structDef);\r\n this._structInfo[getCurrentProgramBuilder().shaderType].structs[structDef.getType().structName] =\r\n ctor;\r\n }\r\n return ctor;\r\n }\r\n }\r\n return this.internalDefineStructByType(this._shaderType, false, typeCopy);\r\n }\r\n /** @internal */\r\n internalDefineStruct(\r\n structName: string,\r\n layout: PBStructLayout,\r\n shaderTypeMask: number,\r\n builtin: boolean,\r\n ...args: PBShaderExp[]\r\n ): ShaderTypeFunc {\r\n const structType = new PBStructTypeInfo(\r\n structName,\r\n layout,\r\n args.map((arg) => {\r\n if (\r\n !arg.$typeinfo.isPrimitiveType() &&\r\n !arg.$typeinfo.isArrayType() &&\r\n !arg.$typeinfo.isStructType() &&\r\n !arg.$typeinfo.isAtomicI32() &&\r\n !arg.$typeinfo.isAtomicU32()\r\n ) {\r\n throw new Error(`invalid struct member type: '${arg.$str}'`);\r\n }\r\n return {\r\n name: arg.$str,\r\n type: arg.$typeinfo\r\n };\r\n })\r\n );\r\n return this.internalDefineStructByType(shaderTypeMask, builtin, structType);\r\n }\r\n /** @internal */\r\n internalDefineStructByType(\r\n shaderTypeMask: number,\r\n builtin: boolean,\r\n structType: PBStructTypeInfo\r\n ): ShaderTypeFunc {\r\n const struct = makeConstructor(\r\n function structConstructor(...blockArgs: any[]) {\r\n let e: PBShaderExp;\r\n if (blockArgs.length === 1 && typeof blockArgs[0] === 'string') {\r\n e = new PBShaderExp(blockArgs[0], structType);\r\n } else {\r\n e = new PBShaderExp('', structType);\r\n e.$ast = new AST.ASTShaderExpConstructor(\r\n e.$typeinfo,\r\n blockArgs.map((arg) => (arg instanceof PBShaderExp ? arg.$ast : arg))\r\n );\r\n }\r\n return e;\r\n } as ShaderTypeFunc,\r\n structType\r\n );\r\n for (const shaderType of [ShaderType.Vertex, ShaderType.Fragment, ShaderType.Compute]) {\r\n if (shaderTypeMask & shaderType) {\r\n let structInfo = this._structInfo[shaderType];\r\n if (!structInfo) {\r\n structInfo = { structs: {}, types: [] };\r\n this._structInfo[shaderType] = structInfo;\r\n }\r\n if (structInfo.structs[structType.structName]) {\r\n throw new errors.PBParamValueError(\r\n 'defineStruct',\r\n 'structName',\r\n `cannot re-define struct '${structType.structName}'`\r\n );\r\n }\r\n structInfo.types.push(new AST.ASTStructDefine(structType, builtin));\r\n structInfo.structs[structType.structName] = struct;\r\n }\r\n }\r\n // this.changeStructLayout(structType, layout);\r\n return struct;\r\n }\r\n /** @internal */\r\n getFunction(name: string): AST.ASTFunction[] {\r\n return this._globalScope ? this._globalScope.$getFunctions(name) : null;\r\n }\r\n /** @internal */\r\n get structInfo(): StructDef {\r\n return this._structInfo[this._shaderType];\r\n }\r\n /** @internal */\r\n getBlockName(instanceName: string): string {\r\n return `ch_block_name_${instanceName}`;\r\n }\r\n /** @internal */\r\n defineBuiltinStruct(\r\n shaderType: ShaderType,\r\n inOrOut: 'in' | 'out'\r\n ): [ShaderTypeFunc, PBShaderExp, string, PBShaderExp] {\r\n const structName =\r\n inOrOut === 'in'\r\n ? AST.getBuiltinInputStructName(shaderType)\r\n : AST.getBuiltinOutputStructName(shaderType);\r\n const instanceName =\r\n inOrOut === 'in'\r\n ? AST.getBuiltinInputStructInstanceName(shaderType)\r\n : AST.getBuiltinOutputStructInstanceName(shaderType);\r\n const stage =\r\n shaderType === ShaderType.Vertex\r\n ? 'vertex'\r\n : shaderType === ShaderType.Fragment\r\n ? 'fragment'\r\n : 'compute';\r\n const builtinVars = AST.builtinVariables['webgpu'];\r\n const args: { name: string; type: PBPrimitiveTypeInfo | PBArrayTypeInfo | PBStructTypeInfo }[] = [];\r\n const prefix: string[] = [];\r\n for (const k in builtinVars) {\r\n if (builtinVars[k].stage === stage && builtinVars[k].inOrOut === inOrOut) {\r\n args.push({ name: builtinVars[k].name, type: builtinVars[k].type });\r\n prefix.push(`@builtin(${builtinVars[k].semantic}) `);\r\n }\r\n }\r\n const inoutList = inOrOut === 'in' ? this._inputs : this._outputs;\r\n for (const k of inoutList) {\r\n // for debug only\r\n if (!(k[1] instanceof AST.ASTDeclareVar)) {\r\n throw new errors.PBInternalError(\r\n 'defineBuiltinStruct() failed: input/output is not declare var ast node'\r\n );\r\n }\r\n const type = k[1].value.getType();\r\n if (!type.isPrimitiveType() && !type.isArrayType() && !type.isStructType()) {\r\n throw new Error(`invalid in/out variable type: '${k[1].value.name}'`);\r\n }\r\n args.push({ name: k[1].value.name, type: type });\r\n prefix.push(\r\n `@location(${k[1].value.value.$location}) ${\r\n type.isPrimitiveType() && type.isInteger() ? '@interpolate(flat) ' : ''\r\n }`\r\n );\r\n }\r\n if (args.length > 0) {\r\n const st = this.findStructType(structName, shaderType);\r\n if (st) {\r\n st.getType().reset(structName, 'default', args);\r\n st.prefix = prefix;\r\n return null;\r\n } else {\r\n const structType = this.internalDefineStructByType(\r\n this._shaderType,\r\n false,\r\n new PBStructTypeInfo(structName, 'default', args)\r\n );\r\n this.findStructType(structName, shaderType).prefix = prefix;\r\n const structInstance = this.struct(structName, instanceName);\r\n const structInstanceIN =\r\n inOrOut === 'in' ? this.struct(structName, AST.getBuiltinParamName(shaderType)) : structInstance;\r\n return [structType, structInstance, structName, structInstanceIN];\r\n }\r\n } else {\r\n return null;\r\n }\r\n }\r\n /** @internal */\r\n private defineInternalStructs() {\r\n this.defineHiddenStruct(typeFrexpResult);\r\n this.defineHiddenStruct(typeFrexpResultVec2);\r\n this.defineHiddenStruct(typeFrexpResultVec3);\r\n this.defineHiddenStruct(typeFrexpResultVec4);\r\n }\r\n /** @internal */\r\n private array(...args: ExpValueNonArrayType[]) {\r\n if (args.length === 0) {\r\n throw new errors.PBParamLengthError('array');\r\n }\r\n args = args.map((arg) => this.normalizeExpValue(arg));\r\n let typeok = true;\r\n let type: PBTypeInfo = null;\r\n let isBool = true;\r\n let isFloat = true;\r\n let isInt = true;\r\n let isUint = true;\r\n let isComposite = false;\r\n for (const arg of args) {\r\n if (arg instanceof PBShaderExp) {\r\n const argType = arg.$ast.getType();\r\n if (!argType.isConstructible()) {\r\n typeok = false;\r\n break;\r\n }\r\n if (!type) {\r\n type = argType;\r\n } else if (!argType.isCompatibleType(type)) {\r\n typeok = false;\r\n }\r\n }\r\n }\r\n if (typeok) {\r\n if (type && type.isPrimitiveType() && type.isScalarType()) {\r\n isBool = type.primitiveType === PBPrimitiveType.BOOL;\r\n isFloat = type.primitiveType === PBPrimitiveType.F32;\r\n isUint = type.primitiveType === PBPrimitiveType.U32;\r\n isInt = type.primitiveType === PBPrimitiveType.I32;\r\n } else if (type) {\r\n isBool = false;\r\n isFloat = false;\r\n isUint = false;\r\n isInt = false;\r\n isComposite = true;\r\n }\r\n for (const arg of args) {\r\n if (!(arg instanceof PBShaderExp) && isComposite) {\r\n typeok = false;\r\n break;\r\n }\r\n if (typeof arg === 'number') {\r\n isBool = false;\r\n if ((arg | 0) === arg) {\r\n if (arg < 0) {\r\n isUint = false;\r\n isInt = isInt && arg >= 0x80000000 >> 0;\r\n } else {\r\n isUint = isUint && arg <= 0xffffffff;\r\n isInt = isInt && arg <= 0x7fffffff;\r\n }\r\n }\r\n } else if (typeof arg === 'boolean') {\r\n isFloat = false;\r\n isInt = false;\r\n isUint = false;\r\n }\r\n }\r\n }\r\n if (typeok && !isComposite) {\r\n if (isBool) {\r\n type = typeBool;\r\n } else if (isInt) {\r\n type = typeI32;\r\n } else if (isUint) {\r\n type = typeU32;\r\n } else if (isFloat) {\r\n type = typeF32;\r\n }\r\n typeok = !!type;\r\n }\r\n if (!typeok) {\r\n throw new errors.PBParamTypeError('array');\r\n }\r\n if (!type.isPrimitiveType() && !type.isArrayType() && !type.isStructType()) {\r\n throw new errors.PBParamTypeError('array');\r\n }\r\n const arrayType = new PBArrayTypeInfo(type, args.length);\r\n const exp = new PBShaderExp('', arrayType);\r\n exp.$ast = new AST.ASTShaderExpConstructor(\r\n arrayType,\r\n args.map((arg) => {\r\n if (arg instanceof PBShaderExp) {\r\n return arg.$ast;\r\n }\r\n if (!type.isPrimitiveType() || !type.isScalarType()) {\r\n throw new errors.PBTypeCastError(arg, typeof arg, type);\r\n }\r\n return new AST.ASTScalar(arg, type);\r\n })\r\n );\r\n return exp;\r\n }\r\n /**\r\n * Creates a 'discard' statement\r\n */\r\n discard(): void {\r\n this.getCurrentScope().$ast.statements.push(new AST.ASTDiscard());\r\n }\r\n /** @internal */\r\n tagShaderExp(getter: PBReflectionTagGetter, tagValue: ShaderExpTagValue) {\r\n if (typeof tagValue === 'string') {\r\n this._reflection.tag(tagValue, getter);\r\n } else if (Array.isArray(tagValue)) {\r\n tagValue.forEach((tag) => this.tagShaderExp(getter, tag));\r\n } else {\r\n for (const k of Object.keys(tagValue)) {\r\n this.tagShaderExp((scope: PBGlobalScope) => {\r\n const value = getter(scope);\r\n return value[k];\r\n }, tagValue[k]);\r\n }\r\n }\r\n }\r\n /** @internal */\r\n in(location: number, name: string, variable: PBShaderExp): void {\r\n if (this._inputs[location]) {\r\n // input already exists, create an alias\r\n if (!this._inputScope[name]) {\r\n Object.defineProperty(this._inputScope, name, {\r\n get: function (this: PBInputScope) {\r\n return variable;\r\n },\r\n set: function () {\r\n throw new Error(`cannot assign to readonly variable: ${name}`);\r\n }\r\n });\r\n }\r\n //throw new Error(`input location ${location} already declared`);\r\n } else {\r\n variable.$location = location;\r\n variable.$declareType = AST.DeclareType.DECLARE_TYPE_IN;\r\n this._inputs[location] = [name, new AST.ASTDeclareVar(new AST.ASTPrimitive(variable))];\r\n Object.defineProperty(this._inputScope, name, {\r\n get: function (this: PBInputScope) {\r\n return variable;\r\n },\r\n set: function () {\r\n throw new Error(`cannot assign to readonly variable: ${name}`);\r\n }\r\n });\r\n variable.$tags.forEach((val) => this.tagShaderExp(() => variable, val));\r\n }\r\n }\r\n /** @internal */\r\n out(location: number, name: string, variable: PBShaderExp): void {\r\n if (this._outputs[location]) {\r\n throw new Error(`output location ${location} has already been used`);\r\n }\r\n variable.$location = location;\r\n variable.$declareType = AST.DeclareType.DECLARE_TYPE_OUT;\r\n this._outputs[location] = [name, new AST.ASTDeclareVar(new AST.ASTPrimitive(variable))];\r\n for (const prop of [name, String(location)]) {\r\n Object.defineProperty(this._outputScope, prop, {\r\n get: function (this: PBOutputScope) {\r\n return variable;\r\n },\r\n set: function (this: PBOutputScope, v) {\r\n getCurrentProgramBuilder()\r\n .getCurrentScope()\r\n .$ast.statements.push(\r\n new AST.ASTAssignment(\r\n new AST.ASTLValueScalar(variable.$ast),\r\n v instanceof PBShaderExp ? v.$ast : v\r\n )\r\n );\r\n }\r\n });\r\n }\r\n }\r\n /** @internal */\r\n getDefaultSampler(t: PBShaderExp, comparison: boolean): PBShaderExp {\r\n const u = this._uniforms.findIndex((val) => val.texture?.exp === t);\r\n if (u < 0) {\r\n return;\r\n //throw new Error('invalid texture uniform object');\r\n }\r\n const samplerType = comparison ? 'comparison' : 'sample';\r\n if (\r\n this._uniforms[u].texture.autoBindSampler &&\r\n this._uniforms[u].texture.autoBindSampler !== samplerType\r\n ) {\r\n throw new Error('multiple sampler not supported');\r\n }\r\n this._uniforms[u].texture.autoBindSampler = samplerType;\r\n if (this._device.type === 'webgpu') {\r\n const samplerName = AST.genSamplerName(t.$str, comparison);\r\n if (!this.getGlobalScope()[samplerName]) {\r\n throw new Error(`failed to find sampler name ${samplerName}`);\r\n }\r\n return this.getGlobalScope()[samplerName];\r\n } else {\r\n return null;\r\n }\r\n }\r\n /** @internal */\r\n normalizeExpValue(value: ExpValueType): ExpValueNonArrayType {\r\n if (Array.isArray(value)) {\r\n const converted = value.map((val) => (Array.isArray(val) ? this.normalizeExpValue(val) : val));\r\n return this.array(...converted);\r\n } else {\r\n return value;\r\n }\r\n }\r\n /** @internal */\r\n guessExpValueType(value: ExpValueType): PBTypeInfo {\r\n const val = this.normalizeExpValue(value);\r\n if (typeof val === 'boolean') {\r\n return typeBool;\r\n } else if (typeof val === 'number') {\r\n if (!Number.isInteger(val)) {\r\n return typeF32;\r\n } else if (val >= 0x80000000 >> 1 && val <= 0x7fffffff) {\r\n return typeI32;\r\n } else if (val >= 0 && val <= 0xffffffff) {\r\n return typeU32;\r\n } else {\r\n throw new errors.PBValueOutOfRange(val);\r\n }\r\n } else if (val instanceof PBShaderExp) {\r\n return val.$ast?.getType() || val.$typeinfo;\r\n }\r\n }\r\n /** @internal */\r\n findStructType(name: string, shaderType: number): AST.ASTStructDefine {\r\n for (const st of [ShaderType.Vertex, ShaderType.Fragment, ShaderType.Compute]) {\r\n if (st & shaderType) {\r\n const structInfo = this._structInfo[st];\r\n if (structInfo) {\r\n for (const t of structInfo.types) {\r\n if (t.type.structName === name) {\r\n return t;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n /** @internal */\r\n findStructConstructor(name: string, shaderType: number): ShaderTypeFunc {\r\n for (const st of [ShaderType.Vertex, ShaderType.Fragment, ShaderType.Compute]) {\r\n if (st & shaderType) {\r\n const structInfo = this._structInfo[st];\r\n if (structInfo && structInfo.structs?.[name]) {\r\n return structInfo.structs[name];\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n /** @internal */\r\n private buildComputeSource(options: PBComputeOptions) {\r\n try {\r\n this._lastError = null;\r\n this._shaderType = ShaderType.Compute;\r\n this._scopeStack = [];\r\n this._globalScope = new PBGlobalScope();\r\n this._builtinScope = new PBBuiltinScope();\r\n this._inputs = [];\r\n this._outputs = [];\r\n this._inputScope = new PBInputScope();\r\n this._outputScope = new PBOutputScope();\r\n this._reflection.clear();\r\n this.generate(options.compute);\r\n // this.removeUnusedSamplerBindings(this._globalScope);\r\n this.mergeUniformsCompute(this._globalScope);\r\n this.updateUniformBindings([this._globalScope], [ShaderType.Compute]);\r\n return [\r\n this.generateComputeSource(this._globalScope, this._builtinScope),\r\n this.createBindGroupLayouts(options.label)\r\n ] as const;\r\n } catch (err) {\r\n if (err instanceof errors.PBError) {\r\n this._lastError = err.getMessage(this._device.type);\r\n console.error(this._lastError);\r\n return null;\r\n } else if (err instanceof Error) {\r\n this._lastError = err.toString();\r\n console.error(this._lastError);\r\n return null;\r\n } else {\r\n this._lastError = Object.prototype.toString.call(err);\r\n console.error(`Error: ${this._lastError}`);\r\n return null;\r\n }\r\n }\r\n }\r\n /** @internal */\r\n private buildRenderSource(options: PBRenderOptions) {\r\n try {\r\n this._lastError = null;\r\n\r\n this._shaderType = ShaderType.Vertex;\r\n this._scopeStack = [];\r\n this._globalScope = new PBGlobalScope();\r\n this._builtinScope = new PBBuiltinScope();\r\n this._inputs = [];\r\n this._outputs = [];\r\n this._inputScope = new PBInputScope();\r\n this._outputScope = new PBOutputScope();\r\n this._reflection.clear();\r\n this.generate(options.vertex);\r\n const vertexScope = this._globalScope;\r\n const vertexBuiltinScope = this._builtinScope;\r\n const vertexInputs = this._inputs;\r\n const vertexOutputs = this._outputs;\r\n if (this._device.type === 'webgpu') {\r\n // this.removeUnusedSamplerBindings(vertexScope);\r\n }\r\n\r\n this._shaderType = ShaderType.Fragment;\r\n this._scopeStack = [];\r\n this._globalScope = new PBGlobalScope();\r\n this._builtinScope = new PBBuiltinScope();\r\n this._inputs = [];\r\n this._outputs = [];\r\n this._inputScope = new PBInputScope();\r\n this._outputScope = new PBOutputScope();\r\n this._reflection.clear();\r\n vertexOutputs.forEach((val, index) => {\r\n this.in(\r\n index,\r\n val[0],\r\n new PBShaderExp(val[1].value.name, val[1].value.getType()).tag(...val[1].value.value.$tags)\r\n );\r\n });\r\n this.generate(options.fragment);\r\n const fragScope = this._globalScope;\r\n const fragBuiltinScope = this._builtinScope;\r\n const fragInputs = this._inputs;\r\n const fragOutputs = this._outputs;\r\n if (this._device.type === 'webgpu') {\r\n // this.removeUnusedSamplerBindings(fragScope);\r\n }\r\n\r\n this.mergeUniforms(vertexScope, fragScope);\r\n this.updateUniformBindings([vertexScope, fragScope], [ShaderType.Vertex, ShaderType.Fragment]);\r\n\r\n return [\r\n this.generateRenderSource(\r\n ShaderType.Vertex,\r\n vertexScope,\r\n vertexBuiltinScope,\r\n vertexInputs.map((val) => val[1]),\r\n vertexOutputs.map((val) => val[1])\r\n ),\r\n this.generateRenderSource(\r\n ShaderType.Fragment,\r\n fragScope,\r\n fragBuiltinScope,\r\n fragInputs.map((val) => val[1]),\r\n fragOutputs.map((val) => val[1])\r\n ),\r\n this.createBindGroupLayouts(options.label),\r\n this._vertexAttributes\r\n ] as const;\r\n } catch (err) {\r\n if (err instanceof errors.PBError) {\r\n this._lastError = err.getMessage(this._device.type);\r\n console.error(this._lastError);\r\n return null;\r\n } else if (err instanceof Error) {\r\n this._lastError = err.toString();\r\n console.error(this._lastError);\r\n return null;\r\n } else {\r\n this._lastError = Object.prototype.toString.call(err);\r\n console.error(`Error: ${this._lastError}`);\r\n return null;\r\n }\r\n }\r\n }\r\n /** @internal */\r\n private generate(body?: (this: PBGlobalScope, pb: ProgramBuilder) => void): void {\r\n this.pushScope(this._globalScope);\r\n if (this._emulateDepthClamp && this._shaderType === ShaderType.Vertex) {\r\n this._globalScope.$outputs.clamppedDepth = this.float().tag('CLAMPPED_DEPTH');\r\n }\r\n body?.call(this._globalScope, this);\r\n this.popScope();\r\n\r\n // Global delcarations should be at the first\r\n this._globalScope.$ast.statements = [\r\n ...this._globalScope.$ast.statements.filter(\r\n (val) => val instanceof AST.ASTDeclareVar || val instanceof AST.ASTAssignment\r\n ),\r\n ...this._globalScope.$ast.statements.filter(\r\n (val) => !(val instanceof AST.ASTDeclareVar) && !(val instanceof AST.ASTAssignment)\r\n )\r\n ];\r\n }\r\n /** @internal */\r\n private generateRenderSource(\r\n shaderType: ShaderType,\r\n scope: PBGlobalScope,\r\n builtinScope: PBBuiltinScope,\r\n inputs: AST.ShaderAST[],\r\n outputs: AST.ShaderAST[]\r\n ) {\r\n const context = {\r\n type: shaderType,\r\n mrt: shaderType === ShaderType.Fragment && outputs.length > 1,\r\n defines: [],\r\n extensions: new Set<string>(),\r\n builtins: [...builtinScope.$_usedBuiltins],\r\n types: this._structInfo[shaderType]?.types || [],\r\n typeReplacement: new Map(),\r\n inputs: inputs,\r\n outputs: outputs,\r\n global: scope,\r\n vertexAttributes: this._vertexAttributes,\r\n workgroupSize: null\r\n };\r\n switch (this._device.type) {\r\n case 'webgl':\r\n for (const u of this._uniforms) {\r\n if (u.texture) {\r\n const type = u.texture.exp.$ast.getType();\r\n if (type.isTextureType() && type.isDepthTexture()) {\r\n if (u.texture.autoBindSampler === 'comparison') {\r\n throw new errors.PBDeviceNotSupport('depth texture comparison');\r\n }\r\n if (u.texture.autoBindSampler === 'sample') {\r\n if (type.is2DTexture()) {\r\n context.typeReplacement.set(u.texture.exp, typeTex2D);\r\n } else if (type.isCubeTexture()) {\r\n context.typeReplacement.set(u.texture.exp, typeTexCube);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return scope.$ast.toWebGL('', context);\r\n case 'webgl2':\r\n for (const u of this._uniforms) {\r\n if (u.texture) {\r\n const type = u.texture.exp.$ast.getType();\r\n if (type.isTextureType() && type.isDepthTexture() && u.texture.autoBindSampler === 'sample') {\r\n if (type.is2DTexture()) {\r\n context.typeReplacement.set(\r\n u.texture.exp,\r\n type.isArrayTexture() ? typeTex2DArray : typeTex2D\r\n );\r\n } else if (type.isCubeTexture()) {\r\n context.typeReplacement.set(u.texture.exp, typeTexCube);\r\n }\r\n }\r\n }\r\n }\r\n return scope.$ast.toWebGL2('', context);\r\n case 'webgpu':\r\n return scope.$ast.toWGSL('', context);\r\n default:\r\n return null;\r\n }\r\n }\r\n /** @internal */\r\n private generateComputeSource(scope: PBGlobalScope, builtinScope: PBBuiltinScope) {\r\n const context = {\r\n type: ShaderType.Compute,\r\n mrt: false,\r\n defines: [],\r\n extensions: new Set<string>(),\r\n builtins: [...builtinScope.$_usedBuiltins],\r\n types: this._structInfo[ShaderType.Compute]?.types || [],\r\n typeReplacement: null,\r\n inputs: [],\r\n outputs: [],\r\n global: scope,\r\n vertexAttributes: [],\r\n workgroupSize: this._workgroupSize\r\n };\r\n return scope.$ast.toWGSL('', context);\r\n }\r\n /** @internal */\r\n private mergeUniformsCompute(globalScope: PBGlobalScope) {\r\n const uniformList: { member: PBShaderExp; uniform: number }[][] = [];\r\n for (let i = 0; i < this._uniforms.length; i++) {\r\n const u = this._uniforms[i];\r\n if (\r\n u.block &&\r\n (u.block.exp.$declareType === AST.DeclareType.DECLARE_TYPE_UNIFORM ||\r\n u.block.exp.$declareType === AST.DeclareType.DECLARE_TYPE_STORAGE)\r\n ) {\r\n if (u.block.exp.$typeinfo.isStructType() && u.block.exp.$isBuffer) {\r\n continue;\r\n }\r\n if (!uniformList[u.group]) {\r\n uniformList[u.group] = [];\r\n }\r\n const exp = new PBShaderExp(u.block.exp.$str, u.block.exp.$ast.getType());\r\n exp.$declareType = u.block.exp.$declareType;\r\n exp.$isBuffer = u.block.exp.$isBuffer;\r\n exp.$bindingSize = u.block.exp.$bindingSize;\r\n exp.$readonly = u.block.exp.$readonly;\r\n uniformList[u.group].push({ member: exp, uniform: i });\r\n }\r\n }\r\n for (const k in uniformList) {\r\n if (uniformList[k].length > 0) {\r\n const types = ['std140', 'std430'] as PBStructLayout[];\r\n const nameList = [COMPUTE_UNIFORM_NAME, COMPUTE_STORAGE_NAME];\r\n const ulist: { member: PBShaderExp; uniform: number }[][] = [\r\n uniformList[k].filter((val) => val.member.$declareType === AST.DeclareType.DECLARE_TYPE_UNIFORM),\r\n uniformList[k].filter((val) => val.member.$declareType === AST.DeclareType.DECLARE_TYPE_STORAGE)\r\n ];\r\n for (let i = 0; i < 2; i++) {\r\n if (ulist[i].length === 0) {\r\n continue;\r\n }\r\n const nonBufferList = ulist[i].filter((val) => !val.member.$isBuffer);\r\n const bufferList = ulist[i].filter((val) => val.member.$isBuffer);\r\n const allLists = [nonBufferList, ...bufferList.map((val) => [val])];\r\n for (let p = 0; p < allLists.length; p++) {\r\n if (allLists[p].length === 0) {\r\n continue;\r\n }\r\n const uname = `${nameList[i]}_${k}_${p}`;\r\n const structName = this.generateStructureName();\r\n const t = getCurrentProgramBuilder().internalDefineStruct(\r\n structName,\r\n types[i],\r\n ShaderType.Compute,\r\n false,\r\n ...allLists[p].map((val) => val.member)\r\n );\r\n const readonly = i > 0 ? allLists[p].findIndex((val) => !val.member.$readonly) < 0 : true;\r\n const exp = t();\r\n if (i === 0) {\r\n exp.uniformBuffer(Number(k), p > 0 ? allLists[p][0].member.$bindingSize : 0);\r\n } else {\r\n exp.storageBuffer(Number(k), p > 0 ? allLists[p][0].member.$bindingSize : 0);\r\n exp.$readonly = readonly;\r\n }\r\n globalScope[uname] = exp;\r\n const index = this._uniforms.findIndex((val) => val.block?.name === uname);\r\n this._uniforms[index].mask = ShaderType.Compute;\r\n let nameMap = this._nameMap[Number(k)];\r\n if (!nameMap) {\r\n nameMap = {};\r\n this._nameMap[Number(k)] = nameMap;\r\n }\r\n let writable = false;\r\n for (let n = allLists[p].length - 1; n >= 0; n--) {\r\n const u = allLists[p][n];\r\n const exp = this._uniforms[u.uniform].block.exp;\r\n nameMap[exp.$str] = uname;\r\n exp.$str = `${uname}.${exp.$str}`;\r\n writable ||= exp.$ast.isWritable();\r\n }\r\n if (writable) {\r\n globalScope[uname].$ast.markWritable();\r\n }\r\n }\r\n }\r\n }\r\n }\r\n this._uniforms = this._uniforms.filter((val) => {\r\n return !val.block || (val.block.exp.$typeinfo.isStructType() && val.block.exp.$isBuffer);\r\n //return !val.block || val.block.exp.$isBuffer;\r\n /*\r\n if (!val.block || (val.block.exp.$declareType !== AST.DeclareType.DECLARE_TYPE_UNIFORM && val.block.exp.$declareType !== AST.DeclareType.DECLARE_TYPE_STORAGE)) {\r\n return true;\r\n }\r\n const type = val.block.exp.$ast.getType();\r\n return (\r\n type.isTextureType() ||\r\n type.isSamplerType() ||\r\n (type.isStructType() && (type.detail.layout === 'std140' || type.detail.layout === 'std430'))\r\n );\r\n */\r\n });\r\n }\r\n /** @internal */\r\n private mergeUniforms(globalScopeVertex: PBGlobalScope, globalScopeFragmet: PBGlobalScope) {\r\n const vertexUniformList: { member: PBShaderExp; uniform: number }[][] = [];\r\n const fragUniformList: { member: PBShaderExp; uniform: number }[][] = [];\r\n const sharedUniformList: { member: PBShaderExp; uniform: number }[][] = [];\r\n //const vertexUniformList: { members: PBShaderExp[]; uniforms: number[] }[] = [];\r\n //const fragUniformList: { members: PBShaderExp[]; uniforms: number[] }[] = [];\r\n //const sharedUniformList: { members: PBShaderExp[]; uniforms: number[] }[] = [];\r\n for (let i = 0; i < this._uniforms.length; i++) {\r\n const u = this._uniforms[i];\r\n if (\r\n u.block &&\r\n (u.block.exp.$declareType === AST.DeclareType.DECLARE_TYPE_UNIFORM ||\r\n u.block.exp.$declareType === AST.DeclareType.DECLARE_TYPE_STORAGE)\r\n ) {\r\n if (u.block.exp.$typeinfo.isStructType() && u.block.exp.$isBuffer) {\r\n continue;\r\n }\r\n const v = !!(u.mask & ShaderType.Vertex);\r\n const f = !!(u.mask & ShaderType.Fragment);\r\n if (v && f) {\r\n if (!sharedUniformList[u.group]) {\r\n sharedUniformList[u.group] = []; //{ members: [], uniforms: [] };\r\n }\r\n const exp = new PBShaderExp(u.block.exp.$str, u.block.exp.$ast.getType());\r\n exp.$declareType = u.block.exp.$declareType;\r\n exp.$isBuffer = u.block.exp.$isBuffer;\r\n exp.$bindingSize = u.block.exp.$bindingSize;\r\n exp.$readonly = u.block.exp.$readonly;\r\n sharedUniformList[u.group].push({ member: exp, uniform: i });\r\n //sharedUniformList[u.group].uniforms.push(i);\r\n } else if (v) {\r\n if (!vertexUniformList[u.group]) {\r\n vertexUniformList[u.group] = []; //{ members: [], uniforms: [] };\r\n }\r\n const exp = new PBShaderExp(u.block.exp.$str, u.block.exp.$ast.getType());\r\n exp.$declareType = u.block.exp.$declareType;\r\n exp.$isBuffer = u.block.exp.$isBuffer;\r\n exp.$bindingSize = u.block.exp.$bindingSize;\r\n exp.$readonly = u.block.exp.$readonly;\r\n vertexUniformList[u.group].push({ member: exp, uniform: i });\r\n //vertexUniformList[u.group].uniforms.push(i);\r\n } else if (f) {\r\n if (!fragUniformList[u.group]) {\r\n fragUniformList[u.group] = []; //{ members: [], uniforms: [] };\r\n }\r\n const exp = new PBShaderExp(u.block.exp.$str, u.block.exp.$ast.getType());\r\n exp.$declareType = u.block.exp.$declareType;\r\n exp.$isBuffer = u.block.exp.$isBuffer;\r\n exp.$bindingSize = u.block.exp.$bindingSize;\r\n exp.$readonly = u.block.exp.$readonly;\r\n fragUniformList[u.group].push({ member: exp, uniform: i }); //members.push(exp);\r\n //fragUniformList[u.group].uniforms.push(i);\r\n }\r\n }\r\n }\r\n const uniformLists = [vertexUniformList, fragUniformList, sharedUniformList];\r\n const nameListUniform = [VERTEX_UNIFORM_NAME, FRAGMENT_UNIFORM_NAME, SHARED_UNIFORM_NAME];\r\n const nameListStorage = [VERTEX_STORAGE_NAME, FRAGMENT_STORAGE_NAME, SHARED_STORAGE_NAME];\r\n const maskList = [ShaderType.Vertex, ShaderType.Fragment, ShaderType.Vertex | ShaderType.Fragment];\r\n for (let i = 0; i < 3; i++) {\r\n for (const k in uniformLists[i]) {\r\n if (uniformLists[i][k]?.length > 0) {\r\n const ulist: { member: PBShaderExp; uniform: number }[][] = [\r\n uniformLists[i][k].filter(\r\n (val) => val.member.$declareType === AST.DeclareType.DECLARE_TYPE_UNIFORM\r\n ),\r\n uniformLists[i][k].filter(\r\n (val) => val.member.$declareType === AST.DeclareType.DECLARE_TYPE_STORAGE\r\n )\r\n ];\r\n const nameList: string[][] = [nameListUniform, nameListStorage];\r\n const layoutList: PBStructLayout[] = ['std140', 'std430'];\r\n for (let j = 0; j < 2; j++) {\r\n if (ulist[j].length === 0) {\r\n continue;\r\n }\r\n const nonBufferList = ulist[j].filter((val) => !val.member.$isBuffer);\r\n const bufferList = ulist[j].filter((val) => val.member.$isBuffer);\r\n const allLists = [nonBufferList, ...bufferList.map((val) => [val])];\r\n for (let p = 0; p < allLists.length; p++) {\r\n if (allLists[p].length === 0) {\r\n continue;\r\n }\r\n const uname = `${nameList[j][i]}_${k}_${p}`;\r\n const structName = this.generateStructureName();\r\n const t = getCurrentProgramBuilder().internalDefineStruct(\r\n structName,\r\n layoutList[j],\r\n maskList[i],\r\n false,\r\n ...allLists[p].map((val) => val.member)\r\n );\r\n const readonly = j > 0 ? allLists[p].findIndex((val) => !val.member.$readonly) < 0 : true;\r\n if (maskList[i] & ShaderType.Vertex) {\r\n const exp = t();\r\n if (j > 0 && !readonly) {\r\n throw new Error(`Storage buffer in vertex shader must be read-only`);\r\n }\r\n if (j === 0) {\r\n exp.uniformBuffer(Number(k), p > 0 ? allLists[p][0].member.$bindingSize : 0);\r\n } else {\r\n exp.storageBuffer(Number(k), p > 0 ? allLists[p][0].member.$bindingSize : 0);\r\n exp.$readonly = readonly;\r\n }\r\n globalScopeVertex[uname] = exp;\r\n }\r\n if (maskList[i] & ShaderType.Fragment) {\r\n const exp = t();\r\n if (j === 0) {\r\n exp.uniformBuffer(Number(k), p > 0 ? allLists[p][0].member.$bindingSize : 0);\r\n } else {\r\n exp.storageBuffer(Number(k), p > 0 ? allLists[p][0].member.$bindingSize : 0);\r\n exp.$readonly = readonly;\r\n }\r\n globalScopeFragmet[uname] = exp;\r\n }\r\n const index = this._uniforms.findIndex((val) => val.block?.name === uname);\r\n this._uniforms[index].mask = maskList[i];\r\n let nameMap = this._nameMap[Number(k)];\r\n if (!nameMap) {\r\n nameMap = {};\r\n this._nameMap[Number(k)] = nameMap;\r\n }\r\n let writable = false;\r\n for (let n = allLists[p].length - 1; n >= 0; n--) {\r\n const u = allLists[p][n];\r\n const exp = this._uniforms[u.uniform].block.exp;\r\n nameMap[exp.$str] = uname;\r\n exp.$str = `${uname}.${exp.$str}`;\r\n writable ||= exp.$ast.isWritable();\r\n }\r\n if (writable) {\r\n if (maskList[i] & ShaderType.Vertex) {\r\n globalScopeVertex[uname].$ast.markWritable();\r\n } else {\r\n globalScopeFragmet[uname].$ast.markWritable();\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n this._uniforms = this._uniforms.filter((val) => {\r\n return !val.block || (val.block.exp.$typeinfo.isStructType() && val.block.exp.$isBuffer);\r\n /*\r\n if (!val.block) {\r\n return true;\r\n }\r\n const type = val.block.exp.$ast.getType();\r\n return (\r\n type.isTextureType() ||\r\n type.isSamplerType() ||\r\n (type.isStructType() && (type.detail.layout === 'std140' || type.detail.layout === 'std430'))\r\n );\r\n */\r\n });\r\n }\r\n /** @internal */\r\n private updateUniformBindings(scopes: PBGlobalScope[], shaderTypes: ShaderType[]) {\r\n this._uniforms = this._uniforms.filter((val) => !!val.mask);\r\n const bindings: number[] = Array.from<number>({ length: MAX_BINDING_GROUPS }).fill(0);\r\n for (const u of this._uniforms) {\r\n u.binding = bindings[u.group]++;\r\n }\r\n for (let i = 0; i < scopes.length; i++) {\r\n const scope = scopes[i];\r\n const type = shaderTypes[i];\r\n for (const u of this._uniforms) {\r\n if (u.mask & type) {\r\n const uniforms = (scope.$ast as AST.ASTGlobalScope).uniforms;\r\n const name = u.block ? u.block.name : u.texture ? u.texture.exp.$str : u.sampler.$str;\r\n const index = uniforms.findIndex((val) => val.value.name === name);\r\n if (index < 0) {\r\n throw new Error(`updateUniformBindings() failed: unable to find uniform ${name}`);\r\n }\r\n (uniforms[index] as AST.ASTDeclareVar).binding = u.binding;\r\n }\r\n }\r\n }\r\n }\r\n /** @internal */\r\n private createBindGroupLayouts(label: string): BindGroupLayout[] {\r\n const layouts: BindGroupLayout[] = [];\r\n const dynamicOffsetIndex = [0, 0, 0, 0];\r\n for (const uniformInfo of this._uniforms) {\r\n let layout = layouts[uniformInfo.group];\r\n if (!layout) {\r\n layout = {\r\n label: `${label || 'unknown'}[${uniformInfo.group}]`,\r\n entries: []\r\n };\r\n if (this._nameMap[uniformInfo.group]) {\r\n layout.nameMap = this._nameMap[uniformInfo.group];\r\n }\r\n layouts[uniformInfo.group] = layout;\r\n }\r\n const entry: BindGroupLayoutEntry = {\r\n binding: uniformInfo.binding,\r\n visibility: uniformInfo.mask,\r\n type: null,\r\n name: ''\r\n };\r\n if (uniformInfo.block) {\r\n entry.type = (uniformInfo.block.exp.$typeinfo as PBStructTypeInfo).clone(\r\n this.getBlockName(uniformInfo.block.name)\r\n );\r\n const isStorage = uniformInfo.block.exp.$declareType === AST.DeclareType.DECLARE_TYPE_STORAGE;\r\n entry.buffer = {\r\n type: isStorage ? (uniformInfo.block.exp.$readonly ? 'read-only-storage' : 'storage') : 'uniform',\r\n minBindingSize: uniformInfo.block.bindingSize,\r\n hasDynamicOffset: !!uniformInfo.block.bindingSize,\r\n uniformLayout: entry.type.toBufferLayout(0, (entry.type as PBStructTypeInfo).layout),\r\n dynamicOffsetIndex: uniformInfo.block.bindingSize ? dynamicOffsetIndex[uniformInfo.group]++ : -1\r\n };\r\n entry.name = uniformInfo.block.name;\r\n } else if (uniformInfo.texture) {\r\n entry.type = uniformInfo.texture.exp.$typeinfo;\r\n if (!entry.type.isTextureType()) {\r\n throw new Error('internal error');\r\n }\r\n if (entry.type.isStorageTexture()) {\r\n let viewDimension: typeof entry.texture.viewDimension;\r\n if (entry.type.isArrayTexture()) {\r\n viewDimension = entry.type.isCubeTexture() ? 'cube-array' : '2d-array';\r\n } else if (entry.type.is3DTexture()) {\r\n viewDimension = '3d';\r\n } else if (entry.type.isCubeTexture()) {\r\n viewDimension = 'cube';\r\n } else if (entry.type.is1DTexture()) {\r\n viewDimension = '1d';\r\n } else {\r\n viewDimension = '2d';\r\n }\r\n entry.storageTexture = {\r\n access: 'write-only',\r\n viewDimension: viewDimension,\r\n format: entry.type.storageTexelFormat\r\n };\r\n } else if (entry.type.isExternalTexture()) {\r\n entry.externalTexture = {\r\n autoBindSampler: uniformInfo.texture.autoBindSampler\r\n ? AST.genSamplerName(uniformInfo.texture.exp.$str, false)\r\n : null\r\n };\r\n } else {\r\n const sampleType =\r\n this._device.type === 'webgpu'\r\n ? uniformInfo.texture.exp.$sampleType\r\n : uniformInfo.texture.autoBindSampler && entry.type.isDepthTexture()\r\n ? 'float'\r\n : uniformInfo.texture.exp.$sampleType;\r\n let viewDimension: typeof entry.texture.viewDimension;\r\n if (entry.type.isArrayTexture()) {\r\n viewDimension = entry.type.isCubeTexture() ? 'cube-array' : '2d-array';\r\n } else if (entry.type.is3DTexture()) {\r\n viewDimension = '3d';\r\n } else if (entry.type.isCubeTexture()) {\r\n viewDimension = 'cube';\r\n } else if (entry.type.is1DTexture()) {\r\n viewDimension = '1d';\r\n } else {\r\n viewDimension = '2d';\r\n }\r\n entry.texture = {\r\n sampleType: sampleType,\r\n viewDimension: viewDimension,\r\n multisampled: false,\r\n autoBindSampler: null,\r\n autoBindSamplerComparison: null\r\n };\r\n if (this._device.type === 'webgpu' || uniformInfo.texture.autoBindSampler === 'sample') {\r\n entry.texture.autoBindSampler = AST.genSamplerName(uniformInfo.texture.exp.$str, false);\r\n }\r\n if (\r\n (this._device.type === 'webgpu' && entry.type.isDepthTexture()) ||\r\n uniformInfo.texture.autoBindSampler === 'comparison'\r\n ) {\r\n entry.texture.autoBindSamplerComparison = AST.genSamplerName(uniformInfo.texture.exp.$str, true);\r\n }\r\n }\r\n entry.name = uniformInfo.texture.exp.$str;\r\n } else if (uniformInfo.sampler) {\r\n entry.type = uniformInfo.sampler.$typeinfo;\r\n if (!entry.type.isSamplerType()) {\r\n throw new Error('internal error');\r\n }\r\n entry.sampler = {\r\n type:\r\n entry.type.accessMode === PBSamplerAccessMode.SAMPLE\r\n ? uniformInfo.sampler.$sampleType === 'float'\r\n ? 'filtering'\r\n : 'non-filtering'\r\n : 'comparison'\r\n };\r\n entry.name = uniformInfo.sampler.$str;\r\n } else {\r\n throw new errors.PBInternalError('invalid uniform entry type');\r\n }\r\n layout.entries.push(entry);\r\n }\r\n for (let i = 0; i < layouts.length; i++) {\r\n if (!layouts[i]) {\r\n layouts[i] = {\r\n label: `${label || 'unknown'}[${i}]`,\r\n entries: []\r\n };\r\n }\r\n }\r\n return layouts;\r\n }\r\n /** @internal */\r\n _getFunctionOverload(\r\n funcName: string,\r\n args: ExpValueNonArrayType[]\r\n ): [AST.ASTFunction, AST.ASTExpression[]] {\r\n const thisArgs = args.filter((val) => {\r\n if (val instanceof PBShaderExp) {\r\n const type = val.$ast.getType();\r\n if (\r\n type.isStructType() &&\r\n this._structInfo[this._shaderType]?.types.findIndex((t) => t.type.structName === type.structName) <\r\n 0\r\n ) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n });\r\n const fn = this.getGlobalScope().$getFunctions(funcName);\r\n return fn ? this._matchFunctionOverloading(fn, thisArgs) : null;\r\n }\r\n /** @internal */\r\n _matchFunctionOverloading(\r\n overloadings: AST.ASTFunction[],\r\n args: ExpValueNonArrayType[]\r\n ): [AST.ASTFunction, AST.ASTExpression[]] {\r\n for (const overload of overloadings) {\r\n if (args.length !== overload.funcType.argTypes.length) {\r\n continue;\r\n }\r\n const result: AST.ASTExpression[] = [];\r\n let matches = true;\r\n for (let i = 0; i < args.length; i++) {\r\n const argInfo = overload.funcType.argTypes[i];\r\n const argType =\r\n argInfo.byRef && argInfo.type instanceof PBPointerTypeInfo\r\n ? argInfo.type.pointerType\r\n : argInfo.type;\r\n const arg = args[i];\r\n if (typeof arg === 'boolean') {\r\n if (!argType.isPrimitiveType() || argType.primitiveType !== PBPrimitiveType.BOOL) {\r\n matches = false;\r\n break;\r\n }\r\n result.push(new AST.ASTScalar(arg, typeBool));\r\n } else if (typeof arg === 'number') {\r\n if (\r\n !argType.isPrimitiveType() ||\r\n !argType.isScalarType() ||\r\n argType.scalarType === PBPrimitiveType.BOOL\r\n ) {\r\n matches = false;\r\n break;\r\n }\r\n if (argType.scalarType === PBPrimitiveType.I32) {\r\n if (!Number.isInteger(arg) || arg < 0x80000000 >> 0 || arg > 0x7fffffff) {\r\n matches = false;\r\n break;\r\n }\r\n result.push(new AST.ASTScalar(arg, typeI32));\r\n } else if (argType.scalarType === PBPrimitiveType.U32) {\r\n if (!Number.isInteger(arg) || arg < 0 || arg > 0xffffffff) {\r\n matches = false;\r\n break;\r\n }\r\n result.push(new AST.ASTScalar(arg, typeU32));\r\n } else {\r\n result.push(new AST.ASTScalar(arg, argType));\r\n }\r\n } else {\r\n if (!argType.isCompatibleType(arg.$ast.getType())) {\r\n matches = false;\r\n break;\r\n }\r\n result.push(arg.$ast);\r\n }\r\n }\r\n if (matches) {\r\n return [overload, result];\r\n }\r\n }\r\n return null;\r\n }\r\n /** @internal */\r\n $callFunction(funcName: string, args: AST.ASTExpression[], func: AST.ASTFunction): PBShaderExp {\r\n if (this.getCurrentScope() === this.getGlobalScope()) {\r\n throw new errors.PBNonScopedFunctionCall(funcName);\r\n }\r\n const exp = new PBShaderExp('', func.returnType);\r\n exp.$ast = new AST.ASTCallFunction(funcName, args, func, getCurrentProgramBuilder().getDevice().type);\r\n this.getCurrentScope().$ast.statements.push(exp.$ast);\r\n return exp;\r\n }\r\n /** @internal */\r\n $callFunctionNoCheck(funcName: string, args: AST.ASTExpression[], retType: PBTypeInfo): PBShaderExp {\r\n if (this.getCurrentScope() === this.getGlobalScope()) {\r\n throw new errors.PBNonScopedFunctionCall(funcName);\r\n }\r\n const exp = new PBShaderExp('', retType);\r\n exp.$ast = new AST.ASTCallFunction(\r\n funcName,\r\n args,\r\n null,\r\n getCurrentProgramBuilder().getDevice().type,\r\n retType\r\n );\r\n this.getCurrentScope().$ast.statements.push(exp.$ast);\r\n return exp;\r\n }\r\n}\r\n\r\n/**\r\n * Base class for scope of the shader program\r\n * @public\r\n */\r\nexport class PBScope extends Proxiable<PBScope> {\r\n /** @internal */\r\n protected $_variables: Record<string, PBShaderExp>;\r\n /** @internal */\r\n protected $_parentScope: PBScope;\r\n /** @internal */\r\n protected $_AST: AST.ASTScope;\r\n /** @internal */\r\n protected $_localScope: PBLocalScope;\r\n [props: string]: any;\r\n /** @internal */\r\n constructor(astScope: AST.ASTScope, parent?: PBScope) {\r\n super();\r\n this.$_parentScope = parent || null;\r\n this.$_variables = {};\r\n this.$_AST = astScope;\r\n this.$_localScope = null;\r\n }\r\n /** Get the program builder */\r\n get $builder(): ProgramBuilder {\r\n return getCurrentProgramBuilder();\r\n }\r\n /** Returns the scope of the builtin variables */\r\n get $builtins(): PBBuiltinScope {\r\n return getCurrentProgramBuilder().builtinScope;\r\n }\r\n /** Returns the scope of the input variables */\r\n get $inputs(): PBInputScope {\r\n return getCurrentProgramBuilder().inputScope;\r\n }\r\n /** Returns the scope of the output variables */\r\n get $outputs(): PBOutputScope {\r\n return getCurrentProgramBuilder().outputScope;\r\n }\r\n /** @internal */\r\n get $parent(): PBScope {\r\n return this.$_parentScope;\r\n }\r\n /** @internal */\r\n get $ast(): AST.ASTScope {\r\n return this.$_AST;\r\n }\r\n /** @internal */\r\n set $ast(ast: AST.ASTScope) {\r\n this.$_AST = ast;\r\n }\r\n /**\r\n * Get the input vertex attribute by specified semantic\r\n *\r\n * @remarks\r\n * Can only be called only in vertex shader\r\n *\r\n * @param semantic - The vertex semantic\r\n * @returns The input vertex attribute or null if not exists\r\n */\r\n $getVertexAttrib(semantic: VertexSemantic): PBShaderExp {\r\n return this.$inputs.$getVertexAttrib(semantic); // getCurrentProgramBuilder().getReflection().attribute(semantic);\r\n }\r\n /** Get the current local scope */\r\n get $l(): PBLocalScope {\r\n return this.$_getLocalScope();\r\n }\r\n /** Get the global scope */\r\n get $g(): PBGlobalScope {\r\n return this.$_getGlobalScope();\r\n }\r\n /** @internal */\r\n $local(variable: PBShaderExp, init?: ExpValueType): void {\r\n const initNonArray = getCurrentProgramBuilder().normalizeExpValue(init);\r\n variable.$global = this instanceof PBGlobalScope;\r\n this.$_declare(variable, initNonArray);\r\n }\r\n /** @internal */\r\n $touch(exp: PBShaderExp): void {\r\n this.$ast.statements.push(new AST.ASTTouch(exp.$ast));\r\n }\r\n /**\r\n * Query the global variable by the name\r\n * @param name - Name of the variable\r\n * @returns The variable or null if not exists\r\n */\r\n $query(name: string): PBShaderExp {\r\n return this.$builder.getReflection().tag(name);\r\n }\r\n /** @internal */\r\n $_declareInternal(variable: PBShaderExp, init?: ExpValueNonArrayType): AST.ShaderAST {\r\n const key = variable.$str;\r\n if (this.$_variables[key]) {\r\n throw new Error(`cannot re-declare variable '${key}'`);\r\n }\r\n if (!(variable.$ast instanceof AST.ASTPrimitive)) {\r\n throw new Error(\r\n `invalid variable declaration: '${variable.$ast.toString(\r\n getCurrentProgramBuilder().getDevice().type\r\n )}'`\r\n );\r\n }\r\n const varType = variable.$typeinfo;\r\n if (varType.isPointerType()) {\r\n if (!init) {\r\n throw new Error(`cannot declare pointer type variable without initialization: '${variable.$str}'`);\r\n }\r\n if (!(init instanceof PBShaderExp)) {\r\n throw new Error(`invalid initialization for pointer type declaration: '${variable.$str}`);\r\n }\r\n const initType = init.$ast.getType();\r\n if (!initType.isPointerType() || !varType.pointerType.isCompatibleType(initType.pointerType)) {\r\n throw new Error(`incompatible pointer type assignment: '${variable.$str}'`);\r\n }\r\n variable.$typeinfo = initType;\r\n }\r\n this.$_registerVar(variable, key);\r\n if (init === undefined || init === null) {\r\n return new AST.ASTDeclareVar(variable.$ast as AST.ASTPrimitive);\r\n } else {\r\n if (\r\n init instanceof PBShaderExp &&\r\n init.$ast instanceof AST.ASTShaderExpConstructor &&\r\n init.$ast.args.length === 0\r\n ) {\r\n if (!init.$ast.getType().isCompatibleType(variable.$ast.getType())) {\r\n throw new errors.PBTypeCastError(init, init.$ast.getType(), variable.$ast.getType());\r\n }\r\n return new AST.ASTDeclareVar(variable.$ast as AST.ASTPrimitive);\r\n } else {\r\n return new AST.ASTAssignment(\r\n new AST.ASTLValueDeclare(variable.$ast as AST.ASTPrimitive),\r\n init instanceof PBShaderExp ? init.$ast : init\r\n );\r\n }\r\n }\r\n }\r\n /** @internal */\r\n $_findOrSetUniform(variable: PBShaderExp): PBShaderExp {\r\n const name = variable.$str;\r\n const uniformInfo: UniformInfo = {\r\n group: variable.$group,\r\n binding: 0,\r\n mask: 0\r\n };\r\n if (variable.$typeinfo.isTextureType()) {\r\n uniformInfo.texture = {\r\n autoBindSampler: null,\r\n exp: variable\r\n };\r\n } else if (variable.$typeinfo.isSamplerType()) {\r\n uniformInfo.sampler = variable;\r\n } else {\r\n uniformInfo.block = {\r\n name: name,\r\n bindingSize: variable.$bindingSize,\r\n exp: variable\r\n };\r\n // throw new Error(`unsupported uniform type: ${name}`);\r\n }\r\n let found = false;\r\n for (const u of getCurrentProgramBuilder()._uniforms) {\r\n if (u.group !== uniformInfo.group) {\r\n continue;\r\n }\r\n if (\r\n uniformInfo.block &&\r\n u.block &&\r\n u.block.name === uniformInfo.block.name &&\r\n u.block.exp.$typeinfo.isCompatibleType(uniformInfo.block.exp.$typeinfo)\r\n ) {\r\n u.mask |= getCurrentProgramBuilder().shaderType;\r\n variable = u.block.exp;\r\n // u.block.exp = variable;\r\n found = true;\r\n break;\r\n }\r\n if (\r\n uniformInfo.texture &&\r\n u.texture &&\r\n uniformInfo.texture.exp.$str === u.texture.exp.$str &&\r\n uniformInfo.texture.exp.$typeinfo.isCompatibleType(u.texture.exp.$typeinfo)\r\n ) {\r\n u.mask |= getCurrentProgramBuilder().shaderType;\r\n variable = u.texture.exp;\r\n // u.texture.exp = variable;\r\n found = true;\r\n break;\r\n }\r\n if (\r\n uniformInfo.sampler &&\r\n u.sampler &&\r\n uniformInfo.sampler.$str === u.sampler.$str &&\r\n uniformInfo.sampler.$typeinfo.isCompatibleType(u.sampler.$typeinfo)\r\n ) {\r\n u.mask |= getCurrentProgramBuilder().shaderType;\r\n variable = u.sampler;\r\n // u.sampler = variable;\r\n found = true;\r\n break;\r\n }\r\n }\r\n if (!found) {\r\n uniformInfo.mask = getCurrentProgramBuilder().shaderType;\r\n getCurrentProgramBuilder()._uniforms.push(uniformInfo);\r\n }\r\n if (\r\n uniformInfo.texture &&\r\n !(uniformInfo.texture.exp.$typeinfo as PBTextureTypeInfo).isStorageTexture() &&\r\n getCurrentProgramBuilder().getDevice().type === 'webgpu'\r\n ) {\r\n // webgpu requires explicit sampler bindings\r\n const isDepth = variable.$typeinfo.isTextureType() && variable.$typeinfo.isDepthTexture();\r\n const samplerName = AST.genSamplerName(variable.$str, false);\r\n const samplerExp = getCurrentProgramBuilder()\r\n .sampler(samplerName)\r\n .uniform(uniformInfo.group)\r\n .sampleType(variable.$sampleType);\r\n samplerExp.$sampleType = variable.$sampleType;\r\n this.$local(samplerExp);\r\n if (isDepth) {\r\n const samplerNameComp = AST.genSamplerName(variable.$str, true);\r\n const samplerExpComp = getCurrentProgramBuilder()\r\n .samplerComparison(samplerNameComp)\r\n .uniform(uniformInfo.group)\r\n .sampleType(variable.$sampleType);\r\n this.$local(samplerExpComp);\r\n }\r\n }\r\n return variable;\r\n }\r\n /** @internal */\r\n $_declare(variable: PBShaderExp, init?: ExpValueNonArrayType): void {\r\n if (this.$_variables[variable.$str]) {\r\n throw new errors.PBASTError(variable.$ast, 'cannot re-declare variable');\r\n }\r\n if (\r\n variable.$declareType === AST.DeclareType.DECLARE_TYPE_UNIFORM ||\r\n variable.$declareType === AST.DeclareType.DECLARE_TYPE_STORAGE\r\n ) {\r\n const name = (variable.$ast as AST.ASTPrimitive).name;\r\n if (!(this instanceof PBGlobalScope)) {\r\n throw new Error(`uniform or storage variables can only be declared within global scope: ${name}`);\r\n }\r\n if (\r\n variable.$declareType === AST.DeclareType.DECLARE_TYPE_UNIFORM &&\r\n !variable.$typeinfo.isTextureType() &&\r\n !variable.$typeinfo.isSamplerType() &&\r\n (!variable.$typeinfo.isConstructible() || !variable.$typeinfo.isHostSharable())\r\n ) {\r\n throw new errors.PBASTError(\r\n variable.$ast,\r\n `type '${variable.$typeinfo.toTypeName(\r\n getCurrentProgramBuilder().getDevice().type\r\n )}' cannot be declared in uniform address space`\r\n );\r\n }\r\n if (variable.$declareType === AST.DeclareType.DECLARE_TYPE_STORAGE) {\r\n if (getCurrentProgramBuilder().getDevice().type !== 'webgpu') {\r\n throw new errors.PBDeviceNotSupport('storage buffer binding');\r\n } else if (!variable.$typeinfo.isHostSharable()) {\r\n throw new errors.PBASTError(\r\n variable.$ast,\r\n `type '${variable.$typeinfo.toTypeName(\r\n getCurrentProgramBuilder().getDevice().type\r\n )}' cannot be declared in storage address space`\r\n );\r\n }\r\n }\r\n const originalType: PBPrimitiveTypeInfo | PBArrayTypeInfo = null;\r\n /*\r\n if (\r\n variable.$declareType === AST.DeclareType.DECLARE_TYPE_STORAGE &&\r\n (variable.$typeinfo.isPrimitiveType() || variable.$typeinfo.isArrayType() || variable.$typeinfo.isAtomicI32() || variable.$typeinfo.isAtomicU32())\r\n ) {\r\n originalType = variable.$typeinfo as PBPrimitiveTypeInfo | PBArrayTypeInfo;\r\n const wrappedStruct = getCurrentProgramBuilder().defineStruct(null, new PBShaderExp('value', originalType));\r\n variable.$typeinfo = wrappedStruct().$typeinfo;\r\n }\r\n */\r\n variable = this.$_findOrSetUniform(variable);\r\n const ast = this.$_declareInternal(variable) as AST.ASTDeclareVar;\r\n if (originalType) {\r\n variable.$ast = new AST.ASTHash(variable.$ast, 'value', originalType);\r\n }\r\n ast.group = variable.$group;\r\n ast.binding = 0;\r\n ast.blockName = getCurrentProgramBuilder().getBlockName(name);\r\n const type = variable.$typeinfo;\r\n if (\r\n (type.isStructType() && variable.$isBuffer) ||\r\n type.isTextureType() ||\r\n type.isSamplerType() ||\r\n (type.isStructType() && (type.detail.layout === 'std140' || type.detail.layout === 'std430'))\r\n ) {\r\n (this.$ast as AST.ASTGlobalScope).uniforms.push(ast);\r\n }\r\n variable.$tags.forEach((val) => {\r\n getCurrentProgramBuilder().tagShaderExp(() => variable, val);\r\n });\r\n } else {\r\n const ast = this.$_declareInternal(variable, init);\r\n this.$ast.statements.push(ast);\r\n }\r\n }\r\n /** @internal */\r\n $_registerVar(variable: PBShaderExp, name?: string) {\r\n const key = name || variable.$str;\r\n const options: any = {\r\n configurable: true,\r\n get: function (this: PBScope) {\r\n return variable;\r\n },\r\n set: function (this: PBScope, val: number | PBShaderExp) {\r\n getCurrentProgramBuilder()\r\n .getCurrentScope()\r\n .$ast.statements.push(\r\n new AST.ASTAssignment(\r\n new AST.ASTLValueScalar(variable.$ast),\r\n val instanceof PBShaderExp ? val.$ast : val\r\n )\r\n );\r\n }\r\n };\r\n Object.defineProperty(this, key, options);\r\n this.$_variables[key] = variable;\r\n }\r\n /** @internal */\r\n $localGet(prop: string): any {\r\n if (typeof prop === 'string' && (prop[0] === '$' || prop in this)) {\r\n return this[prop];\r\n }\r\n return undefined;\r\n }\r\n /** @internal */\r\n $localSet(prop: string, value: any): boolean {\r\n if (prop[0] === '$' || prop in this) {\r\n this[prop] = value;\r\n return true;\r\n }\r\n return false;\r\n }\r\n /** @internal */\r\n protected $get(prop: string): any {\r\n const ret = this.$localGet(prop);\r\n return ret === undefined && this.$_parentScope ? this.$_parentScope.$thisProxy.$get(prop) : ret;\r\n }\r\n /** @internal */\r\n protected $set(prop: string, value: any): boolean {\r\n if (prop[0] === '$') {\r\n this[prop] = value;\r\n return true;\r\n } else {\r\n let scope: PBScope = this;\r\n while (scope && !(prop in scope)) {\r\n scope = scope.$_parentScope;\r\n }\r\n if (scope) {\r\n scope[prop] = value;\r\n return true;\r\n } else {\r\n if (this.$l) {\r\n this.$l[prop] = value;\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n /** @internal */\r\n protected $_getLocalScope(): PBLocalScope {\r\n if (!this.$_localScope) {\r\n this.$_localScope = new PBLocalScope(this);\r\n }\r\n return this.$_localScope;\r\n }\r\n /** @internal */\r\n protected $_getGlobalScope(): PBGlobalScope {\r\n return this.$builder.getGlobalScope();\r\n }\r\n}\r\n\r\n/**\r\n * The local scope of a shader\r\n * @public\r\n */\r\nexport class PBLocalScope extends PBScope {\r\n /** @internal */\r\n $_scope: PBScope;\r\n [props: string]: any;\r\n constructor(scope: PBScope) {\r\n super(null, null);\r\n this.$_scope = scope;\r\n }\r\n /** @internal */\r\n protected $get(prop: string): any {\r\n return prop[0] === '$' ? this[prop] : this.$_scope.$localGet(prop);\r\n }\r\n /** @internal */\r\n protected $set(prop: string, value: any): boolean {\r\n if (prop[0] === '$') {\r\n this[prop] = value;\r\n return true;\r\n }\r\n if (\r\n !(this.$_scope instanceof PBGlobalScope) &&\r\n value instanceof PBShaderExp &&\r\n (value.isConstructor() ||\r\n (value.$typeinfo.isTextureType() && value.$ast instanceof AST.ASTPrimitive && !value.$ast.name)) &&\r\n (value.$declareType === AST.DeclareType.DECLARE_TYPE_UNIFORM ||\r\n value.$declareType === AST.DeclareType.DECLARE_TYPE_STORAGE)\r\n ) {\r\n // We are setting uniform a uniform, should invoke in the global scope\r\n this.$g[prop] = value;\r\n return true;\r\n }\r\n const val = this.$_scope.$localGet(prop);\r\n if (val === undefined) {\r\n const type = getCurrentProgramBuilder().guessExpValueType(value);\r\n if (type.isCompatibleType(typeVoid)) {\r\n throw new Error(`Cannot assign void type to '${prop}'`);\r\n }\r\n const exp = new PBShaderExp(prop, type);\r\n if (value instanceof PBShaderExp && !this.$_scope.$parent) {\r\n exp.$declareType = value.$declareType;\r\n exp.$isBuffer = value.$isBuffer;\r\n exp.$bindingSize = value.$bindingSize;\r\n exp.$readonly = value.$readonly;\r\n exp.$group = value.$group;\r\n exp.$attrib = value.$attrib;\r\n exp.$sampleType = value.$sampleType;\r\n exp.$precision = value.$precision;\r\n exp.tag(...value.$tags);\r\n }\r\n this.$_scope.$local(exp, value);\r\n return true;\r\n } else {\r\n return this.$_scope.$localSet(prop, value);\r\n }\r\n }\r\n /** @internal */\r\n $_getLocalScope(): PBLocalScope {\r\n return this;\r\n }\r\n}\r\n\r\n/**\r\n * The builtin scope of a shader\r\n * @public\r\n */\r\nexport interface PBBuiltinScope {\r\n position: PBShaderExp;\r\n pointSize: PBShaderExp | number;\r\n fragDepth: PBShaderExp | number;\r\n readonly fragCoord: PBShaderExp;\r\n readonly frontFacing: PBShaderExp;\r\n readonly vertexIndex: PBShaderExp;\r\n readonly instanceIndex: PBShaderExp;\r\n readonly localInvocationId: PBShaderExp;\r\n readonly globalInvocationId: PBShaderExp;\r\n readonly workGroupId: PBShaderExp;\r\n readonly numWorkGroups: PBShaderExp;\r\n readonly sampleMaskIn: PBShaderExp;\r\n sampleMaskOut: PBShaderExp;\r\n readonly sampleIndex: PBShaderExp;\r\n}\r\n\r\n/**\r\n * The builtin scope of a shader\r\n * @public\r\n */\r\nexport class PBBuiltinScope extends PBScope {\r\n /** @internal */\r\n $_usedBuiltins: Set<string>;\r\n /** @internal */\r\n $_builtinVars: Record<string, PBShaderExp>;\r\n constructor() {\r\n super(null);\r\n this.$_usedBuiltins = new Set();\r\n const isWebGPU = getCurrentProgramBuilder().getDevice().type === 'webgpu';\r\n if (!isWebGPU) {\r\n this.$_builtinVars = {};\r\n const v = AST.builtinVariables[getCurrentProgramBuilder().getDevice().type];\r\n for (const k in v) {\r\n const info = v[k];\r\n this.$_builtinVars[k] = new PBShaderExp(info.name, info.type);\r\n }\r\n }\r\n const v = AST.builtinVariables[getCurrentProgramBuilder().getDevice().type];\r\n const that = this;\r\n for (const k of Object.keys(v)) {\r\n Object.defineProperty(this, k, {\r\n get: function () {\r\n return that.$getBuiltinVar(k);\r\n },\r\n set: function (v) {\r\n if (typeof v !== 'number' && !(v instanceof PBShaderExp)) {\r\n throw new Error(`Invalid output value assignment`);\r\n }\r\n const exp = that.$getBuiltinVar(k);\r\n getCurrentProgramBuilder()\r\n .getCurrentScope()\r\n .$ast.statements.push(\r\n new AST.ASTAssignment(new AST.ASTLValueScalar(exp.$ast), v instanceof PBShaderExp ? v.$ast : v)\r\n );\r\n }\r\n });\r\n }\r\n }\r\n /** @internal */\r\n protected $_getLocalScope(): PBLocalScope {\r\n return null;\r\n }\r\n /** @internal */\r\n private $getBuiltinVar(name: string) {\r\n const pb = getCurrentProgramBuilder();\r\n this.$_usedBuiltins.add(name);\r\n const isWebGPU = pb.getDevice().type === 'webgpu';\r\n if (isWebGPU) {\r\n const v = AST.builtinVariables[pb.getDevice().type];\r\n const info = v[name];\r\n const inout = info.inOrOut;\r\n if (inout === 'in') {\r\n return pb.getCurrentFunctionScope()[AST.getBuiltinParamName(pb.shaderType)][info.name];\r\n }\r\n const structName =\r\n inout === 'in'\r\n ? AST.getBuiltinInputStructInstanceName(pb.shaderType)\r\n : AST.getBuiltinOutputStructInstanceName(pb.shaderType);\r\n const scope = pb.getCurrentScope();\r\n if (!scope[structName] || !scope[structName][info.name]) {\r\n throw new Error(`invalid use of builtin variable ${name}`);\r\n }\r\n return scope[structName][info.name];\r\n } else {\r\n if (pb.getDevice().type === 'webgl2' && (name === 'vertexIndex' || name === 'instanceIndex')) {\r\n return pb.uint(this.$_builtinVars[name]);\r\n } else {\r\n return this.$_builtinVars[name];\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * The input scope of a shader\r\n * @public\r\n */\r\nexport class PBInputScope extends PBScope {\r\n /** @internal */\r\n private $_names: Record<string, string>;\r\n private $_aliases: Record<string, string>;\r\n /** @internal */\r\n constructor() {\r\n super(null);\r\n this.$_names = {};\r\n this.$_aliases = {};\r\n }\r\n /** @internal */\r\n $getVertexAttrib(attrib: VertexSemantic): PBShaderExp {\r\n const name = this.$_names[attrib];\r\n return name ? this[name] : null;\r\n }\r\n /** @internal */\r\n protected $_getLocalScope(): PBLocalScope {\r\n return null;\r\n }\r\n /** @internal */\r\n protected $get(prop: string) {\r\n if (prop[0] === '$') {\r\n return this[prop];\r\n }\r\n if (this.$_aliases[prop]) {\r\n prop = this.$_aliases[prop];\r\n }\r\n const pb = this.$builder;\r\n if (pb.getDevice().type === 'webgpu') {\r\n const param = pb.getCurrentFunctionScope()[AST.getBuiltinParamName(pb.shaderType)];\r\n const prefix = pb.shaderKind === 'vertex' ? input_prefix : output_prefix_vs;\r\n const name = `${prefix}${prop}`;\r\n if ((param.$typeinfo as PBStructTypeInfo).structMembers.findIndex((val) => val.name === name) < 0) {\r\n return undefined;\r\n }\r\n return param[`${prefix}${prop}`];\r\n }\r\n return super.$get(prop);\r\n }\r\n /** @internal */\r\n protected $set(prop: string, value: any): boolean {\r\n if (prop[0] === '$') {\r\n this[prop] = value;\r\n } else {\r\n if (!(value instanceof PBShaderExp)) {\r\n throw new Error(`invalid vertex input value`);\r\n }\r\n const st = getCurrentProgramBuilder().shaderType;\r\n if (st !== ShaderType.Vertex) {\r\n throw new Error(`shader input variables can only be declared in vertex shader: \"${prop}\"`);\r\n }\r\n const attrib = getVertexAttribByName(value.$attrib);\r\n if (attrib === undefined) {\r\n throw new Error(`can not declare shader input variable: invalid vertex attribute: \"${prop}\"`);\r\n }\r\n if (getCurrentProgramBuilder()._vertexAttributes.indexOf(attrib) >= 0) {\r\n const lastName = this.$_names[value.$attrib];\r\n if (prop !== lastName) {\r\n const p = this[lastName] as PBShaderExp;\r\n if (p.$typeinfo.typeId !== value.$typeinfo.typeId) {\r\n throw new Error(\r\n `can not declare shader input variable: attribute already declared with different type: \"${prop}\"`\r\n );\r\n }\r\n this.$_aliases[prop] = lastName;\r\n }\r\n return true;\r\n }\r\n if (!(value instanceof PBShaderExp) || !(value.$ast instanceof AST.ASTShaderExpConstructor)) {\r\n throw new Error(`invalid shader input variable declaration: \"${prop}\"`);\r\n }\r\n const type = value.$ast.getType();\r\n if (!type.isPrimitiveType() || type.isMatrixType() || type.primitiveType === PBPrimitiveType.BOOL) {\r\n throw new Error(`type cannot be used as pipeline input/output: ${prop}`);\r\n }\r\n this.$_names[value.$attrib] = prop;\r\n const location = getCurrentProgramBuilder()._inputs.length;\r\n const exp = new PBShaderExp(`${input_prefix}${prop}`, type).tag(...value.$tags);\r\n getCurrentProgramBuilder().in(location, prop, exp);\r\n getCurrentProgramBuilder()._vertexAttributes.push(attrib);\r\n //getCurrentProgramBuilder().getReflection().setAttrib(value.$attrib, exp);\r\n // modify input struct for webgpu\r\n if (getCurrentProgramBuilder().getDevice().type === 'webgpu') {\r\n if (getCurrentProgramBuilder().findStructType(AST.getBuiltinInputStructName(st), st)) {\r\n getCurrentProgramBuilder().defineBuiltinStruct(st, 'in');\r\n }\r\n }\r\n }\r\n return true;\r\n }\r\n}\r\n\r\n/**\r\n * The output scope of a shader\r\n * @public\r\n */\r\nexport class PBOutputScope extends PBScope {\r\n constructor() {\r\n super(null);\r\n }\r\n /** @internal */\r\n protected $_getLocalScope(): PBLocalScope {\r\n return null;\r\n }\r\n /** @internal */\r\n protected $set(prop: string, value: any): boolean {\r\n if (prop[0] === '$' /* || prop in this*/) {\r\n this[prop] = value;\r\n } else {\r\n const pb = getCurrentProgramBuilder();\r\n if (!(prop in this)) {\r\n if (\r\n pb.getCurrentScope() === pb.getGlobalScope() &&\r\n (!(value instanceof PBShaderExp) || !(value.$ast instanceof AST.ASTShaderExpConstructor))\r\n ) {\r\n throw new Error(`invalid shader output variable declaration: ${prop}`);\r\n }\r\n const type = value.$ast.getType();\r\n if (!type.isPrimitiveType() || type.isMatrixType() || type.primitiveType === PBPrimitiveType.BOOL) {\r\n throw new Error(`type cannot be used as pipeline input/output: ${prop}`);\r\n }\r\n const location = pb._outputs.length;\r\n pb.out(\r\n location,\r\n prop,\r\n new PBShaderExp(\r\n `${pb.shaderKind === 'vertex' ? output_prefix_vs : output_prefix_fs}${prop}`,\r\n type\r\n ).tag(...value.$tags)\r\n );\r\n // modify output struct for webgpu\r\n if (getCurrentProgramBuilder().getDevice().type === 'webgpu') {\r\n const st = getCurrentProgramBuilder().shaderType;\r\n if (getCurrentProgramBuilder().findStructType(AST.getBuiltinInputStructName(st), st)) {\r\n getCurrentProgramBuilder().defineBuiltinStruct(st, 'out');\r\n }\r\n }\r\n }\r\n if (getCurrentProgramBuilder().getCurrentScope() !== getCurrentProgramBuilder().getGlobalScope()) {\r\n const ast = value.$ast;\r\n if (!(ast instanceof AST.ASTShaderExpConstructor) || ast.args.length > 0) {\r\n this[prop] = value;\r\n }\r\n }\r\n }\r\n return true;\r\n }\r\n}\r\n\r\n/**\r\n * The global scope of a shader\r\n * @public\r\n */\r\nexport class PBGlobalScope extends PBScope {\r\n /** @internal */\r\n $_inputStructInfo: [ShaderTypeFunc, PBShaderExp, string, PBShaderExp];\r\n /** @internal */\r\n constructor() {\r\n super(new AST.ASTGlobalScope());\r\n this.$_inputStructInfo = null;\r\n }\r\n /** @internal */\r\n get $inputStructInfo(): [ShaderTypeFunc, PBShaderExp, string, PBShaderExp] {\r\n if (!this.$_inputStructInfo) {\r\n this.$_inputStructInfo = this.$builder.defineBuiltinStruct(this.$builder.shaderType, 'in');\r\n }\r\n return this.$_inputStructInfo;\r\n }\r\n /** @internal */\r\n get $inputStruct(): ShaderTypeFunc {\r\n return this.$inputStructInfo[0];\r\n }\r\n /** @internal */\r\n $mainFunc(body?: (this: PBFunctionScope) => void) {\r\n const pb = getCurrentProgramBuilder();\r\n if (pb.getDevice().type === 'webgpu') {\r\n const inputStruct = this.$inputStructInfo;\r\n //this.$local(inputStruct[1]);\r\n const isCompute = pb.shaderType === ShaderType.Compute;\r\n const outputStruct = isCompute ? null : pb.defineBuiltinStruct(pb.shaderType, 'out');\r\n if (outputStruct) {\r\n this.$local(outputStruct[1]);\r\n }\r\n // this.$internalCreateFunction('chMainStub', [], false, body);\r\n this.$internalCreateFunction(\r\n 'main',\r\n inputStruct ? [inputStruct[3]] : [],\r\n true,\r\n function (this: PBFunctionScope) {\r\n /*\r\n if (inputStruct) {\r\n this[inputStruct[1].$str] = this[inputStruct[3].$str];\r\n }\r\n */\r\n if (pb.shaderType === ShaderType.Fragment && pb.emulateDepthClamp) {\r\n this.$builtins.fragDepth = pb.clamp(this.$inputs.clamppedDepth, 0, 1);\r\n }\r\n body?.call(this);\r\n //this.chMainStub();\r\n if (pb.shaderType === ShaderType.Vertex) {\r\n if (pb.depthRangeCorrection) {\r\n this.$builtins.position.z = pb.mul(\r\n pb.add(this.$builtins.position.z, this.$builtins.position.w),\r\n 0.5\r\n );\r\n }\r\n if (pb.emulateDepthClamp) {\r\n //z = gl_Position.z / gl_Position.w;\r\n //z = (gl_DepthRange.diff * z + gl_DepthRange.near + gl_DepthRange.far) * 0.5;\r\n this.$outputs.clamppedDepth = pb.div(this.$builtins.position.z, this.$builtins.position.w);\r\n this.$builtins.position.z = 0;\r\n }\r\n }\r\n\r\n if (!isCompute) {\r\n this.$return(outputStruct[1]);\r\n }\r\n }\r\n );\r\n } else {\r\n this.$internalCreateFunction('main', [], true, function () {\r\n if (pb.shaderType === ShaderType.Fragment && pb.emulateDepthClamp) {\r\n this.$builtins.fragDepth = pb.clamp(this.$inputs.clamppedDepth, 0, 1);\r\n }\r\n body?.call(this);\r\n if (pb.shaderType === ShaderType.Vertex && pb.emulateDepthClamp) {\r\n this.$outputs.clamppedDepth = pb.div(\r\n pb.add(pb.div(this.$builtins.position.z, this.$builtins.position.w), 1),\r\n 2\r\n );\r\n this.$builtins.position.z = 0;\r\n }\r\n });\r\n }\r\n }\r\n /** @internal */\r\n $createFunctionIfNotExists(name: string, params: PBShaderExp[], body?: (this: PBFunctionScope) => void) {\r\n this.$internalCreateFunction(name, params, false, body);\r\n }\r\n /** @internal */\r\n $getFunctions(name: string): AST.ASTFunction[] {\r\n return (this.$ast as AST.ASTGlobalScope).findFunctions(name);\r\n }\r\n /** @internal */\r\n $getCurrentFunctionScope(): PBScope {\r\n let scope = getCurrentProgramBuilder().getCurrentScope();\r\n while (scope && !(scope instanceof PBFunctionScope)) {\r\n scope = scope.$parent;\r\n }\r\n return scope;\r\n }\r\n /** @internal */\r\n private $internalCreateFunction(\r\n this: PBGlobalScope,\r\n name: string,\r\n params: PBShaderExp[],\r\n isMain: boolean,\r\n body?: (this: PBFunctionScope) => void\r\n ) {\r\n const pb = getCurrentProgramBuilder();\r\n if (pb.getDevice().type === 'webgpu' && !isMain) {\r\n params.push(this.$inputStruct(AST.getBuiltinParamName(pb.shaderType)));\r\n }\r\n params.forEach((param) => {\r\n if (!(param.$ast instanceof AST.ASTPrimitive)) {\r\n throw new Error(`${name}(): invalid function definition`);\r\n }\r\n let ast: AST.ASTPrimitive | AST.ASTReferenceOf = param.$ast;\r\n if (param.$inout) {\r\n if (getCurrentProgramBuilder().getDevice().type === 'webgpu') {\r\n param.$typeinfo = new PBPointerTypeInfo(param.$typeinfo, PBAddressSpace.UNKNOWN);\r\n }\r\n ast = new AST.ASTReferenceOf(param.$ast);\r\n }\r\n param.$ast = new AST.ASTFunctionParameter(ast);\r\n });\r\n const overloads = this.$getFunctions(name);\r\n const currentFunctionScope = this.$getCurrentFunctionScope();\r\n const astFunc = new AST.ASTFunction(\r\n name,\r\n params.map((val) => val.$ast as AST.ASTFunctionParameter),\r\n isMain,\r\n null,\r\n false\r\n );\r\n if (currentFunctionScope) {\r\n const curIndex = this.$ast.statements.indexOf(currentFunctionScope.$ast);\r\n if (curIndex < 0) {\r\n throw new Error('Internal error');\r\n }\r\n this.$ast.statements.splice(curIndex, 0, astFunc);\r\n } else {\r\n this.$ast.statements.push(astFunc);\r\n }\r\n new PBFunctionScope(this, params, astFunc, body);\r\n\r\n if (!astFunc.returnType) {\r\n astFunc.returnType = typeVoid;\r\n }\r\n astFunc.funcType = new PBFunctionTypeInfo(\r\n astFunc.name,\r\n astFunc.returnType,\r\n params.map((param) => {\r\n const ast = param.$ast as AST.ASTFunctionParameter;\r\n return ast.paramAST instanceof AST.ASTReferenceOf\r\n ? {\r\n type: ast.paramAST.value.getType(),\r\n byRef: ast.paramAST instanceof AST.ASTReferenceOf\r\n }\r\n : {\r\n type: ast.paramAST.getType(),\r\n byRef: false\r\n };\r\n })\r\n );\r\n for (const overload of overloads) {\r\n if (overload.funcType.argHash === astFunc.funcType.argHash) {\r\n if (overload.returnType.isCompatibleType(astFunc.returnType)) {\r\n // Function signature already exists\r\n // console.warn(`Function '${name}' already exists`);\r\n this.$ast.statements.splice(this.$ast.statements.indexOf(astFunc), 1);\r\n return;\r\n } else {\r\n throw new Error(`Invalid function overloading: ${name}`);\r\n }\r\n }\r\n }\r\n if (overloads.length === 0) {\r\n Object.defineProperty(this, name, {\r\n get: function () {\r\n const func = this.$getFunctions(name);\r\n if (func.length === 0) {\r\n throw new Error(`function ${name} not found`);\r\n }\r\n return (...args: ExpValueType[]) => {\r\n let inputArg: PBShaderExp = null;\r\n if (pb.getDevice().type === 'webgpu') {\r\n let funcScope = pb.getCurrentScope();\r\n while (funcScope && !(funcScope instanceof PBFunctionScope)) {\r\n funcScope = funcScope.$parent;\r\n }\r\n const funcArgs = (funcScope.$ast as AST.ASTFunction).args;\r\n const arg = funcArgs[funcArgs.length - 1].paramAST;\r\n const name = (arg as AST.ASTPrimitive).name;\r\n inputArg = funcScope[name];\r\n }\r\n const argsNonArray = (inputArg ? [...args, inputArg] : args).map((val) =>\r\n pb.normalizeExpValue(val)\r\n );\r\n const funcType = pb._getFunctionOverload(name, argsNonArray);\r\n if (!funcType) {\r\n throw new Error(\r\n `ERROR: no matching overloads for function ${name}(${argsNonArray\r\n .map((val) => {\r\n if (val instanceof PBShaderExp) {\r\n return val.$ast?.getType()?.toTypeName() ?? '?';\r\n } else {\r\n return typeof val;\r\n }\r\n })\r\n .join(', ')})`\r\n );\r\n }\r\n return getCurrentProgramBuilder().$callFunction(name, funcType[1], funcType[0]);\r\n };\r\n }\r\n });\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Scope that is inside a function\r\n * @public\r\n */\r\nexport class PBInsideFunctionScope extends PBScope {\r\n /** @internal */\r\n constructor(parent: PBGlobalScope | PBInsideFunctionScope) {\r\n super(new AST.ASTScope(), parent);\r\n }\r\n /**\r\n * Creates a 'return' statement\r\n * @param retval - The return value\r\n */\r\n $return(retval?: ExpValueType) {\r\n const functionScope = this.findOwnerFunction();\r\n const astFunc = functionScope.$ast as AST.ASTFunction;\r\n let returnType: PBTypeInfo = null;\r\n const retValNonArray = getCurrentProgramBuilder().normalizeExpValue(retval);\r\n if (retValNonArray !== undefined && retValNonArray !== null) {\r\n if (typeof retValNonArray === 'number') {\r\n if (astFunc.returnType) {\r\n if (\r\n astFunc.returnType.isPrimitiveType() &&\r\n astFunc.returnType.isScalarType() &&\r\n !astFunc.returnType.isCompatibleType(typeBool)\r\n ) {\r\n returnType = astFunc.returnType;\r\n }\r\n }\r\n if (!returnType) {\r\n if (Number.isInteger(retValNonArray)) {\r\n if (retValNonArray < 0) {\r\n if (retValNonArray < 0x80000000 >> 0) {\r\n throw new Error(`function ${astFunc.name}: invalid return value: ${retValNonArray}`);\r\n }\r\n returnType = typeI32;\r\n } else {\r\n if (retValNonArray > 0xffffffff) {\r\n throw new Error(`function ${astFunc.name}: invalid return value: ${retValNonArray}`);\r\n }\r\n returnType = retValNonArray <= 0x7fffffff ? typeI32 : typeU32;\r\n }\r\n } else {\r\n returnType = typeF32;\r\n }\r\n }\r\n } else if (typeof retValNonArray === 'boolean') {\r\n returnType = typeBool;\r\n } else {\r\n returnType = retValNonArray.$ast.getType();\r\n }\r\n } else {\r\n returnType = typeVoid;\r\n }\r\n if (returnType.isPointerType()) {\r\n throw new Error('function can not return pointer type');\r\n }\r\n if (!astFunc.returnType) {\r\n astFunc.returnType = returnType;\r\n } else if (!astFunc.returnType.isCompatibleType(returnType)) {\r\n throw new Error(\r\n `function ${astFunc.name}: return type must be ${\r\n astFunc.returnType?.toTypeName(getCurrentProgramBuilder().getDevice().type) || 'void'\r\n }`\r\n );\r\n }\r\n let returnValue: AST.ASTExpression = null;\r\n if (retValNonArray !== undefined && retValNonArray !== null) {\r\n if (retValNonArray instanceof PBShaderExp) {\r\n returnValue = retValNonArray.$ast;\r\n } else {\r\n if (!returnType.isPrimitiveType() || !returnType.isScalarType()) {\r\n throw new errors.PBTypeCastError(retValNonArray, typeof retValNonArray, returnType);\r\n }\r\n returnValue = new AST.ASTScalar(retValNonArray, returnType);\r\n }\r\n }\r\n this.$ast.statements.push(new AST.ASTReturn(returnValue));\r\n }\r\n /**\r\n * Creates a new scope\r\n * @param body - Generator function for the scope\r\n * @returns The created scope\r\n */\r\n $scope(body: (this: PBInsideFunctionScope) => void): PBInsideFunctionScope {\r\n const astScope = new AST.ASTNakedScope();\r\n this.$ast.statements.push(astScope);\r\n return new PBNakedScope(this, astScope, body);\r\n }\r\n /**\r\n * Creates an 'if' statement\r\n * @param condition - Condition expression for the if statement\r\n * @param body - Generator function for the scope inside the if statement\r\n * @returns The scope inside the if statement\r\n */\r\n $if(condition: ExpValueNonArrayType, body: (this: PBIfScope) => void): PBIfScope {\r\n const astIf = new AST.ASTIf(\r\n 'if',\r\n condition instanceof PBShaderExp\r\n ? condition.$ast\r\n : new AST.ASTScalar(condition, typeof condition === 'number' ? typeF32 : typeBool)\r\n );\r\n this.$ast.statements.push(astIf);\r\n return new PBIfScope(this, astIf, body);\r\n }\r\n /**\r\n * Creates a select statement: condition ? first : second\r\n * @param condition - Condition expression\r\n * @param first - The first value\r\n * @param second - The second value\r\n * @returns The first value if condition evaluates to true, otherwise returns the second value\r\n */\r\n $choice(\r\n condition: ExpValueNonArrayType,\r\n first: ExpValueNonArrayType,\r\n second: ExpValueNonArrayType\r\n ): PBShaderExp {\r\n const ast = new AST.ASTSelect(\r\n condition instanceof PBShaderExp ? condition.$ast : condition,\r\n first instanceof PBShaderExp ? first.$ast : first,\r\n second instanceof PBShaderExp ? second.$ast : second\r\n );\r\n const exp = new PBShaderExp('', ast.getType());\r\n exp.$ast = ast;\r\n return exp;\r\n }\r\n /** Creates a 'break' statement */\r\n $break() {\r\n this.$ast.statements.push(new AST.ASTBreak());\r\n }\r\n /** Creates a 'continue' statement */\r\n $continue() {\r\n this.$ast.statements.push(new AST.ASTContinue());\r\n }\r\n /**\r\n * Creates a 'for' statement\r\n * @param counter - The repeat counter variable declaration\r\n * @param init - initial value of the repeat counter variable\r\n * @param end - end value of the counter exclusive\r\n * @param body - Generator function for the scope that inside the for statement\r\n */\r\n $for(\r\n counter: PBShaderExp,\r\n init: number | PBShaderExp,\r\n end: number | PBShaderExp,\r\n open?: boolean | ((this: PBForScope) => void),\r\n reverse?: boolean | ((this: PBForScope) => void),\r\n body?: (this: PBForScope) => void\r\n ) {\r\n const initializerType = counter.$ast.getType();\r\n if (!initializerType.isPrimitiveType() || !initializerType.isScalarType()) {\r\n throw new errors.PBASTError(counter.$ast, 'invalid for range initializer type');\r\n }\r\n const initval = init instanceof PBShaderExp ? init.$ast : new AST.ASTScalar(init, initializerType);\r\n if (typeof open === 'function') {\r\n body = open;\r\n open = true;\r\n reverse = false;\r\n } else if (typeof reverse === 'function') {\r\n body = reverse;\r\n open = !!open;\r\n reverse = false;\r\n } else {\r\n open = !!open;\r\n reverse = !!reverse;\r\n }\r\n const astFor = new AST.ASTRange(\r\n counter.$ast as AST.ASTPrimitive,\r\n initval,\r\n end instanceof PBShaderExp ? end.$ast : new AST.ASTScalar(end, initializerType),\r\n open,\r\n reverse\r\n );\r\n this.$ast.statements.push(astFor);\r\n new PBForScope(this, counter, end, astFor, body);\r\n }\r\n /**\r\n * Creates a 'do..while' statement\r\n * @param body - Generator function for the scope that inside the do..while statment\r\n * @returns The scope that inside the do..while statement\r\n */\r\n $do(body: (this: PBDoWhileScope) => void): PBDoWhileScope {\r\n if (this.$builder.getDevice().type === 'webgl') {\r\n throw new Error(`No do-while() loop support for WebGL1.0 device`);\r\n }\r\n const astDoWhile = new AST.ASTDoWhile(null);\r\n this.$ast.statements.push(astDoWhile);\r\n return new PBDoWhileScope(this, astDoWhile, body);\r\n }\r\n /**\r\n * Creates a 'while' statement\r\n * @param condition - Condition expression for the while statement\r\n * @param body - Generator function for the scope that inside the while statement\r\n */\r\n $while(condition: ExpValueNonArrayType, body: (this: PBWhileScope) => void) {\r\n const astWhile = new AST.ASTWhile(\r\n condition instanceof PBShaderExp\r\n ? condition.$ast\r\n : new AST.ASTScalar(condition, typeof condition === 'number' ? typeF32 : typeBool)\r\n );\r\n this.$ast.statements.push(astWhile);\r\n new PBWhileScope(this, astWhile, body);\r\n }\r\n /** @internal */\r\n private findOwnerFunction(): PBFunctionScope {\r\n for (let scope: PBScope = this; scope; scope = scope.$parent) {\r\n if (scope instanceof PBFunctionScope) {\r\n return scope;\r\n }\r\n }\r\n return null;\r\n }\r\n /** Gets main function scope */\r\n $getMainScope(): PBFunctionScope {\r\n for (let scope: PBScope = this; scope; scope = scope.$parent) {\r\n if (scope instanceof PBFunctionScope && scope.$isMain()) {\r\n return scope;\r\n }\r\n }\r\n return null;\r\n }\r\n}\r\n\r\n/**\r\n * Scope that insides a function\r\n * @public\r\n */\r\nexport class PBFunctionScope extends PBInsideFunctionScope {\r\n /** @internal */\r\n $typeinfo: PBFunctionTypeInfo;\r\n /** @internal */\r\n constructor(\r\n parent: PBGlobalScope,\r\n params: PBShaderExp[],\r\n ast: AST.ASTScope,\r\n body?: (this: PBFunctionScope) => void\r\n ) {\r\n super(parent);\r\n this.$ast = ast;\r\n for (const param of params) {\r\n if (this.$_variables[param.$str]) {\r\n throw new Error('Duplicate function parameter name is not allowed');\r\n }\r\n this.$_registerVar(param);\r\n }\r\n getCurrentProgramBuilder().pushScope(this);\r\n body?.call(this);\r\n getCurrentProgramBuilder().popScope();\r\n }\r\n $isMain(): boolean {\r\n return (this.$ast as AST.ASTFunction).isMainFunc;\r\n }\r\n}\r\n\r\n/**\r\n * Scope that insides a while statement\r\n * @public\r\n */\r\nexport class PBWhileScope extends PBInsideFunctionScope {\r\n /** @internal */\r\n constructor(parent: PBInsideFunctionScope, ast: AST.ASTScope, body: (this: PBWhileScope) => void) {\r\n super(parent);\r\n this.$ast = ast;\r\n getCurrentProgramBuilder().pushScope(this);\r\n body?.call(this);\r\n getCurrentProgramBuilder().popScope();\r\n }\r\n}\r\n\r\n/**\r\n * Scope that insides a do..while statement\r\n * @public\r\n */\r\nexport class PBDoWhileScope extends PBInsideFunctionScope {\r\n /** @internal */\r\n constructor(parent: PBInsideFunctionScope, ast: AST.ASTScope, body: (this: PBDoWhileScope) => void) {\r\n super(parent);\r\n this.$ast = ast;\r\n getCurrentProgramBuilder().pushScope(this);\r\n body?.call(this);\r\n getCurrentProgramBuilder().popScope();\r\n }\r\n $while(condition: ExpValueNonArrayType) {\r\n (this.$ast as AST.ASTDoWhile).condition =\r\n condition instanceof PBShaderExp\r\n ? condition.$ast\r\n : new AST.ASTScalar(condition, typeof condition === 'number' ? typeF32 : typeBool);\r\n }\r\n}\r\n\r\n/**\r\n * Scope that insides a for statement\r\n * @public\r\n */\r\nexport class PBForScope extends PBInsideFunctionScope {\r\n /** @internal */\r\n constructor(\r\n parent: PBGlobalScope | PBInsideFunctionScope,\r\n counter: PBShaderExp,\r\n count: number | PBShaderExp,\r\n ast: AST.ASTScope,\r\n body: (this: PBForScope) => void\r\n ) {\r\n super(parent);\r\n this.$ast = ast;\r\n this.$_registerVar(counter);\r\n getCurrentProgramBuilder().pushScope(this);\r\n body?.call(this);\r\n getCurrentProgramBuilder().popScope();\r\n }\r\n}\r\n\r\n/**\r\n * A naked scope\r\n * @public\r\n */\r\nexport class PBNakedScope extends PBInsideFunctionScope {\r\n /** @internal */\r\n constructor(parent: PBInsideFunctionScope, ast: AST.ASTScope, body: (this: PBNakedScope) => void) {\r\n super(parent);\r\n this.$ast = ast;\r\n getCurrentProgramBuilder().pushScope(this);\r\n body?.call(this);\r\n getCurrentProgramBuilder().popScope();\r\n }\r\n}\r\n\r\n/**\r\n * Scope that insides an if statement\r\n * @public\r\n */\r\nexport class PBIfScope extends PBInsideFunctionScope {\r\n /** @internal */\r\n constructor(parent: PBInsideFunctionScope, ast: AST.ASTScope, body: (this: PBIfScope) => void) {\r\n super(parent);\r\n this.$ast = ast;\r\n getCurrentProgramBuilder().pushScope(this);\r\n body?.call(this);\r\n getCurrentProgramBuilder().popScope();\r\n }\r\n /**\r\n * Creates an 'else if' branch\r\n * @param condition - Condition expression for the else if branch\r\n * @param body - Generator function for the scope that insides the else if statement\r\n * @returns The scope that insides the else if statement\r\n */\r\n $elseif(condition: ExpValueNonArrayType, body: (this: PBIfScope) => void): PBIfScope {\r\n const astElseIf = new AST.ASTIf(\r\n 'else if',\r\n condition instanceof PBShaderExp\r\n ? condition.$ast\r\n : new AST.ASTScalar(condition, typeof condition === 'number' ? typeF32 : typeBool)\r\n );\r\n (this.$ast as AST.ASTIf).nextElse = astElseIf;\r\n return new PBIfScope(this.$_parentScope as PBInsideFunctionScope, astElseIf, body);\r\n }\r\n /**\r\n * Creates an 'else' branch\r\n * @param body - Generator function for the scope that insides the else statement\r\n */\r\n $else(body: (this: PBIfScope) => void): void {\r\n const astElse = new AST.ASTIf('else', null);\r\n (this.$ast as AST.ASTIf).nextElse = astElse;\r\n new PBIfScope(this.$_parentScope as PBInsideFunctionScope, astElse, body);\r\n }\r\n}\r\n\r\nsetBuiltinFuncs(ProgramBuilder);\r\nsetConstructors(ProgramBuilder);\r\n"],"names":["COMPUTE_UNIFORM_NAME","COMPUTE_STORAGE_NAME","VERTEX_UNIFORM_NAME","FRAGMENT_UNIFORM_NAME","SHARED_UNIFORM_NAME","VERTEX_STORAGE_NAME","FRAGMENT_STORAGE_NAME","SHARED_STORAGE_NAME","input_prefix","output_prefix_vs","output_prefix_fs","ProgramBuilder","_device","_workgroupSize","_scopeStack","_shaderType","ShaderType","Vertex","Fragment","Compute","_structInfo","_uniforms","_globalScope","_builtinScope","_inputScope","_outputScope","_inputs","_outputs","_vertexAttributes","_depthRangeCorrection","_emulateDepthClamp","_lastError","_reflection","_autoStructureTypeIndex","_nameMap","device","type","PBReflection","lastError","shaderType","shaderKind","getGlobalScope","builtinScope","inputScope","outputScope","depthRangeCorrection","emulateDepthClamp","val","getReflection","getDevice","reset","queryGlobal","name","tag","pushScope","scope","unshift","popScope","shift","getCurrentScope","getCurrentFunctionScope","funcScope","PBFunctionScope","$parent","buildRender","options","setCurrentProgramBuilder","defineInternalStructs","ret","buildRenderSource","buildCompute","workgroupSize","buildComputeSource","buildRenderProgram","createGPUProgram","label","params","vs","fs","bindGroupLayouts","vertexAttributes","buildComputeProgram","source","func","body","$createFunctionIfNotExists","main","$mainFunc","addressOf","ref","errors","$ast","isReference","exp","PBShaderExp","getType","AST","referenceOf","ptr","isPointerType","ast","struct","structName","instanceName","ctor","st","structInfo","structs","call","isIdenticalStruct","a","b","checkName","structMembers","length","index","other","isStructType","isCompatibleType","generateStructureName","getVertexAttributes","defineHiddenStruct","types","push","defineStruct","members","layout","structType","PBStructTypeInfo","map","arg","$typeinfo","isPrimitiveType","isArrayType","isAtomicI32","isAtomicU32","Error","$str","structDef","getCurrentProgramBuilder","builtin","indexOf","internalDefineStruct","defineStructByType","typeCopy","extends","internalDefineStructByType","shaderTypeMask","args","makeConstructor","structConstructor","blockArgs","e","getFunction","$getFunctions","getBlockName","defineBuiltinStruct","inOrOut","stage","builtinVars","prefix","k","semantic","inoutList","value","$location","isInteger","findStructType","structInstance","structInstanceIN","typeFrexpResult","typeFrexpResultVec2","typeFrexpResultVec3","typeFrexpResultVec4","array","normalizeExpValue","typeok","isBool","isFloat","isInt","isUint","isComposite","argType","isConstructible","isScalarType","primitiveType","PBPrimitiveType","BOOL","F32","U32","I32","typeBool","typeI32","typeU32","typeF32","arrayType","PBArrayTypeInfo","discard","statements","tagShaderExp","getter","tagValue","Array","isArray","forEach","Object","keys","in","location","variable","defineProperty","get","set","$declareType","DECLARE_TYPE_IN","$tags","out","DECLARE_TYPE_OUT","prop","String","v","getDefaultSampler","t","comparison","u","findIndex","texture","samplerType","autoBindSampler","samplerName","converted","guessExpValueType","Number","findStructConstructor","PBGlobalScope","PBBuiltinScope","PBInputScope","PBOutputScope","clear","generate","compute","mergeUniformsCompute","updateUniformBindings","generateComputeSource","createBindGroupLayouts","err","getMessage","console","error","toString","prototype","vertex","vertexScope","vertexBuiltinScope","vertexInputs","vertexOutputs","fragment","fragScope","fragBuiltinScope","fragInputs","fragOutputs","mergeUniforms","generateRenderSource","$outputs","clamppedDepth","float","filter","inputs","outputs","context","mrt","defines","extensions","Set","builtins","$_usedBuiltins","typeReplacement","Map","global","isTextureType","isDepthTexture","is2DTexture","typeTex2D","isCubeTexture","typeTexCube","toWebGL","isArrayTexture","typeTex2DArray","toWebGL2","toWGSL","globalScope","uniformList","i","block","DECLARE_TYPE_UNIFORM","DECLARE_TYPE_STORAGE","$isBuffer","group","$bindingSize","$readonly","member","uniform","nameList","ulist","nonBufferList","bufferList","allLists","p","uname","readonly","uniformBuffer","storageBuffer","mask","nameMap","writable","n","isWritable","markWritable","globalScopeVertex","globalScopeFragmet","vertexUniformList","fragUniformList","sharedUniformList","f","uniformLists","nameListUniform","nameListStorage","maskList","layoutList","j","scopes","shaderTypes","bindings","from","MAX_BINDING_GROUPS","fill","binding","uniforms","sampler","layouts","dynamicOffsetIndex","uniformInfo","entries","entry","visibility","clone","isStorage","buffer","minBindingSize","bindingSize","hasDynamicOffset","uniformLayout","toBufferLayout","isStorageTexture","viewDimension","is3DTexture","is1DTexture","storageTexture","access","format","storageTexelFormat","isExternalTexture","externalTexture","sampleType","$sampleType","multisampled","autoBindSamplerComparison","isSamplerType","accessMode","PBSamplerAccessMode","SAMPLE","_getFunctionOverload","funcName","thisArgs","fn","_matchFunctionOverloading","overloadings","overload","funcType","argTypes","result","matches","argInfo","byRef","PBPointerTypeInfo","pointerType","scalarType","$callFunction","returnType","$callFunctionNoCheck","retType","PBScope","Proxiable","astScope","parent","$_parentScope","$_variables","$_AST","$_localScope","$builder","$builtins","$inputs","$getVertexAttrib","$l","$_getLocalScope","$g","$_getGlobalScope","$local","init","initNonArray","$global","$_declare","$touch","$query","$_declareInternal","key","varType","initType","$_registerVar","undefined","$_findOrSetUniform","$group","found","isDepth","samplerExp","samplerNameComp","samplerExpComp","samplerComparison","isHostSharable","toTypeName","blockName","detail","configurable","$localGet","$localSet","$get","$thisProxy","$set","PBLocalScope","$_scope","isConstructor","typeVoid","$attrib","$precision","$_builtinVars","isWebGPU","info","that","$getBuiltinVar","pb","add","inout","uint","$_aliases","$_names","attrib","param","getVertexAttribByName","lastName","typeId","isMatrixType","$_inputStructInfo","$inputStructInfo","$inputStruct","inputStruct","isCompute","outputStruct","$internalCreateFunction","fragDepth","clamp","position","z","mul","w","div","$return","findFunctions","$getCurrentFunctionScope","isMain","$inout","PBAddressSpace","UNKNOWN","overloads","currentFunctionScope","astFunc","curIndex","splice","PBFunctionTypeInfo","paramAST","argHash","inputArg","funcArgs","argsNonArray","join","PBInsideFunctionScope","retval","functionScope","findOwnerFunction","retValNonArray","returnValue","$scope","PBNakedScope","$if","condition","astIf","PBIfScope","$choice","first","second","$break","$continue","$for","counter","end","open","reverse","initializerType","initval","astFor","PBForScope","$do","astDoWhile","PBDoWhileScope","$while","astWhile","PBWhileScope","$getMainScope","$isMain","isMainFunc","count","$elseif","astElseIf","nextElse","$else","astElse","setBuiltinFuncs","setConstructors"],"mappings":"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"}
1
+ {"version":3,"file":"programbuilder.js","sources":["../../src/builder/programbuilder.ts"],"sourcesContent":["import type { AbstractDevice, ShaderKind } from '../base_types';\r\nimport { ShaderType } from '../base_types';\r\nimport type { GPUProgram, BindGroupLayout, BindGroupLayoutEntry, VertexSemantic } from '../gpuobject';\r\nimport { MAX_BINDING_GROUPS, getVertexAttribByName } from '../gpuobject';\r\nimport type { PBReflectionTagGetter } from './reflection';\r\nimport { PBReflection } from './reflection';\r\nimport type { ShaderExpTagValue, ShaderTypeFunc } from './base';\r\nimport { PBShaderExp, makeConstructor, Proxiable } from './base';\r\nimport * as AST from './ast';\r\nimport * as errors from './errors';\r\nimport { setBuiltinFuncs } from './builtinfunc';\r\nimport { setConstructors } from './constructors';\r\nimport type { PBPrimitiveTypeInfo, PBStructLayout, PBTextureTypeInfo, PBTypeInfo } from './types';\r\nimport {\r\n PBArrayTypeInfo,\r\n PBFunctionTypeInfo,\r\n PBPrimitiveType,\r\n PBSamplerAccessMode,\r\n PBStructTypeInfo,\r\n typeBool,\r\n typeF32,\r\n typeFrexpResult,\r\n typeFrexpResultVec2,\r\n typeFrexpResultVec3,\r\n typeFrexpResultVec4,\r\n typeI32,\r\n typeU32,\r\n typeVoid,\r\n typeTex2D,\r\n typeTexCube,\r\n typeTex2DArray,\r\n PBPointerTypeInfo,\r\n PBAddressSpace\r\n} from './types';\r\n\r\nimport type { StorageTextureConstructor } from './constructors';\r\nimport { getCurrentProgramBuilder, setCurrentProgramBuilder } from './misc';\r\nimport type { Nullable } from '@zephyr3d/base';\r\n\r\nconst COMPUTE_UNIFORM_NAME = 'zUBC';\r\nconst COMPUTE_STORAGE_NAME = 'zSBC';\r\nconst VERTEX_UNIFORM_NAME = 'zUBV';\r\nconst FRAGMENT_UNIFORM_NAME = 'zUBF';\r\nconst SHARED_UNIFORM_NAME = 'zUBA';\r\nconst VERTEX_STORAGE_NAME = 'zSBV';\r\nconst FRAGMENT_STORAGE_NAME = 'zSBF';\r\nconst SHARED_STORAGE_NAME = 'zSBA';\r\ninterface UniformInfo {\r\n group: number;\r\n binding: number;\r\n mask: number;\r\n block?: {\r\n name: string;\r\n bindingSize: number;\r\n exp: PBShaderExp;\r\n };\r\n texture?: {\r\n autoBindSampler: Nullable<'sample' | 'comparison'>;\r\n exp: PBShaderExp;\r\n };\r\n sampler?: PBShaderExp;\r\n}\r\n\r\n/**\r\n * Non-array value type of shader expression\r\n * @public\r\n */\r\nexport type ExpValueNonArrayType = number | boolean | PBShaderExp;\r\n/**\r\n * Value type for shader of shader expression\r\n * @public\r\n */\r\nexport type ExpValueType = ExpValueNonArrayType | Array<ExpValueType>;\r\n\r\nconst input_prefix = 'zVSInput_';\r\nconst output_prefix_vs = 'zVSOutput_';\r\nconst output_prefix_fs = 'zFSOutput_';\r\n\r\n/**\r\n * Render program build options\r\n * @public\r\n */\r\nexport interface PBRenderOptions {\r\n /** program label for debugging */\r\n label?: string;\r\n /**\r\n * Vertex shader generator.\r\n * @param this - Global scope object of the vertex shader\r\n * @param pb - The program builder instance\r\n */\r\n vertex(this: PBGlobalScope, pb: ProgramBuilder): void;\r\n /**\r\n * Fragment shader generator.\r\n * @param this - Global scope object of the fragment shader\r\n * @param pb - The program builder instance\r\n */\r\n fragment(this: PBGlobalScope, pb: ProgramBuilder): void;\r\n}\r\n\r\n/**\r\n * Compute program build options\r\n * @public\r\n */\r\nexport interface PBComputeOptions {\r\n /** program label for debugging */\r\n label?: string;\r\n /** workgroup size */\r\n workgroupSize: [number, number, number];\r\n /** compute shader */\r\n compute(this: PBGlobalScope, pb: ProgramBuilder): void;\r\n}\r\n\r\ntype StructDef = {\r\n structs: Record<string, ShaderTypeFunc>;\r\n types: AST.ASTStructDefine[];\r\n};\r\n\r\n/**\r\n * The program builder interface\r\n * @public\r\n */\r\nexport interface ProgramBuilder {\r\n /** Get the device */\r\n getDevice(): AbstractDevice;\r\n /** Gets the global scope */\r\n getGlobalScope(): PBGlobalScope;\r\n /** Gets the current scope */\r\n getCurrentScope<T extends PBScope = PBScope>(): T;\r\n /**\r\n * Query the global variable by the name\r\n * @param name - Name of the variable\r\n * @returns The variable or null if not exists\r\n */\r\n queryGlobal(name: string): PBShaderExp;\r\n /**\r\n * Query the global variable by the name\r\n * @param name - Name of the variable\r\n * @returns The variable or null if not exists\r\n */\r\n $query(name: string): PBShaderExp;\r\n /**\r\n * Generates shader codes for a render program\r\n * @param options - The build options\r\n * @returns a tuple made by vertex shader source, fragment shader source, bind group layouts and vertex attributes used, or null if build faild\r\n */\r\n buildRender(options: PBRenderOptions): readonly [string, string, BindGroupLayout[], number[]];\r\n /**\r\n * Generates shader code for a compute program\r\n * @param options - The build programs\r\n * @returns a tuple made by compute shader source and bind group layouts, or null if build failed\r\n */\r\n buildCompute(options: PBComputeOptions): readonly [string, BindGroupLayout[]];\r\n /**\r\n * Creates a shader program for render\r\n * @param options - The build options\r\n * @returns The created program or null if build failed\r\n */\r\n buildRenderProgram(options: PBRenderOptions): GPUProgram;\r\n /**\r\n * Creates a shader program for compute\r\n * @param options - The build options\r\n * @returns The created program or null if build failed\r\n */\r\n buildComputeProgram(options: PBComputeOptions): GPUProgram;\r\n /**\r\n * Creates a structure type variable\r\n * @param structName - Name of the structure type\r\n * @param instanceName - Name of the variable\r\n * @returns the created variable\r\n */\r\n struct(structName: string, instanceName: string): PBShaderExp;\r\n /**\r\n * Defines a structure type\r\n * @param members - Members of the structure\r\n * @param structName - Name of the type, if not given, the name will be automatically generated\r\n * @returns The structure type constructor\r\n */\r\n defineStruct(members: PBShaderExp[], structName?: string): ShaderTypeFunc;\r\n /**\r\n * Defines a structure type\r\n * @param structType - The structure type info\r\n * @returns The structure type constructor\r\n */\r\n defineStructByType(structType: PBStructTypeInfo): ShaderTypeFunc;\r\n /**\r\n * Creates a 'discard' statement\r\n */\r\n discard(): void;\r\n /**\r\n * Creates a function\r\n * @param name - Name of the function\r\n * @param params - Parameters of the function\r\n * @param body - The generator function\r\n */\r\n func(name: string, params: PBShaderExp[], body?: (this: PBFunctionScope) => void): void;\r\n /**\r\n * Create the main entry function of the shader\r\n * @param body - The shader generator function\r\n */\r\n main(body?: (this: PBFunctionScope) => void): void;\r\n /**\r\n * Create an 'AddressOf' expression for WGSL\r\n * @param ref - The reference variable\r\n * @returns the 'AddressOf' expression\r\n */\r\n addressOf(ref: PBShaderExp): PBShaderExp;\r\n /**\r\n * Creates a 'referenceOf' expression for WGSL\r\n * @param ptr - The pointer variable\r\n * @returns the 'referenceOf' expression\r\n */\r\n referenceOf(ptr: PBShaderExp): PBShaderExp;\r\n /** Atomic int type variable constructors */\r\n atomic_int: {\r\n (): PBShaderExp;\r\n (rhs: number): PBShaderExp;\r\n (rhs: boolean): PBShaderExp;\r\n (rhs: PBShaderExp): PBShaderExp;\r\n (name: string): PBShaderExp;\r\n ptr: ShaderTypeFunc;\r\n [dim: number]: ShaderTypeFunc;\r\n };\r\n /** Atomic uint type variable constructors */\r\n atomic_uint: {\r\n (): PBShaderExp;\r\n (rhs: number): PBShaderExp;\r\n (rhs: boolean): PBShaderExp;\r\n (rhs: PBShaderExp): PBShaderExp;\r\n (name: string): PBShaderExp;\r\n ptr: ShaderTypeFunc;\r\n [dim: number]: ShaderTypeFunc;\r\n };\r\n /** float type variable constructors */\r\n float: {\r\n (): PBShaderExp;\r\n (rhs: number): PBShaderExp;\r\n (rhs: boolean): PBShaderExp;\r\n (rhs: PBShaderExp): PBShaderExp;\r\n (name: string): PBShaderExp;\r\n ptr: ShaderTypeFunc;\r\n [dim: number]: ShaderTypeFunc;\r\n };\r\n /** int type variable constructors */\r\n int: {\r\n (): PBShaderExp;\r\n (rhs: number | boolean | PBShaderExp | string): PBShaderExp;\r\n ptr: ShaderTypeFunc;\r\n [dim: number]: ShaderTypeFunc;\r\n };\r\n /** uint type variable constructors */\r\n uint: {\r\n (): PBShaderExp;\r\n (rhs: number | boolean | PBShaderExp | string): PBShaderExp;\r\n ptr: ShaderTypeFunc;\r\n [dim: number]: ShaderTypeFunc;\r\n };\r\n /** boolean type variable constructors */\r\n bool: {\r\n (): PBShaderExp;\r\n (rhs: number | boolean | PBShaderExp | string): PBShaderExp;\r\n ptr: ShaderTypeFunc;\r\n [dim: number]: ShaderTypeFunc;\r\n };\r\n /** vec2 type variable constructors */\r\n vec2: {\r\n (): PBShaderExp;\r\n (rhs: number | PBShaderExp | string): PBShaderExp;\r\n (x: number | PBShaderExp, y: number | PBShaderExp): PBShaderExp;\r\n ptr: ShaderTypeFunc;\r\n [dim: number]: ShaderTypeFunc;\r\n };\r\n /** ivec2 type variable constructors */\r\n ivec2: {\r\n (): PBShaderExp;\r\n (rhs: number | PBShaderExp | string): PBShaderExp;\r\n (x: number | PBShaderExp, y: number | PBShaderExp): PBShaderExp;\r\n ptr: ShaderTypeFunc;\r\n [dim: number]: ShaderTypeFunc;\r\n };\r\n /** uvec2 type variable constructors */\r\n uvec2: {\r\n (): PBShaderExp;\r\n (rhs: number | PBShaderExp | string): PBShaderExp;\r\n (x: number | PBShaderExp, y: number | PBShaderExp): PBShaderExp;\r\n ptr: ShaderTypeFunc;\r\n [dim: number]: ShaderTypeFunc;\r\n };\r\n /** bvec2 type variable constructors */\r\n bvec2: {\r\n (): PBShaderExp;\r\n (rhs: number | boolean | PBShaderExp | string): PBShaderExp;\r\n (x: number | boolean | PBShaderExp, y: number | boolean | PBShaderExp): PBShaderExp;\r\n ptr: ShaderTypeFunc;\r\n [dim: number]: ShaderTypeFunc;\r\n };\r\n /** vec3 type variable constructors */\r\n vec3: {\r\n (): PBShaderExp;\r\n (name: string): PBShaderExp;\r\n (x: number | PBShaderExp): PBShaderExp;\r\n (x: number | PBShaderExp, y: number | PBShaderExp, z: number | PBShaderExp): PBShaderExp;\r\n (x: number | PBShaderExp, yz: PBShaderExp): PBShaderExp;\r\n (xy: PBShaderExp, z: number | PBShaderExp): PBShaderExp;\r\n ptr: ShaderTypeFunc;\r\n [dim: number]: ShaderTypeFunc;\r\n };\r\n /** ivec3 type variable constructors */\r\n ivec3: {\r\n (): PBShaderExp;\r\n (name: string): PBShaderExp;\r\n (x: number | PBShaderExp): PBShaderExp;\r\n (x: number | PBShaderExp, y: number | PBShaderExp, z: number | PBShaderExp): PBShaderExp;\r\n (x: number | PBShaderExp, yz: PBShaderExp): PBShaderExp;\r\n (xy: PBShaderExp, z: number | PBShaderExp): PBShaderExp;\r\n ptr: ShaderTypeFunc;\r\n [dim: number]: ShaderTypeFunc;\r\n };\r\n /** uvec3 type variable constructors */\r\n uvec3: {\r\n (): PBShaderExp;\r\n (name: string): PBShaderExp;\r\n (x: number | PBShaderExp): PBShaderExp;\r\n (x: number | PBShaderExp, y: number | PBShaderExp, z: number | PBShaderExp): PBShaderExp;\r\n (x: number | PBShaderExp, yz: PBShaderExp): PBShaderExp;\r\n (xy: PBShaderExp, z: number | PBShaderExp): PBShaderExp;\r\n ptr: ShaderTypeFunc;\r\n [dim: number]: ShaderTypeFunc;\r\n };\r\n /** bvec3 type variable constructors */\r\n bvec3: {\r\n (): PBShaderExp;\r\n (name: string): PBShaderExp;\r\n (x: boolean | PBShaderExp): PBShaderExp;\r\n (x: boolean | PBShaderExp, y: boolean | PBShaderExp, z: boolean | PBShaderExp): PBShaderExp;\r\n (x: boolean | PBShaderExp, yz: PBShaderExp): PBShaderExp;\r\n (xy: PBShaderExp, z: boolean | PBShaderExp): PBShaderExp;\r\n ptr: ShaderTypeFunc;\r\n [dim: number]: ShaderTypeFunc;\r\n };\r\n /** vec4 type variable constructors */\r\n vec4: {\r\n (): PBShaderExp;\r\n (name: string): PBShaderExp;\r\n (x: number | PBShaderExp): PBShaderExp;\r\n (\r\n x: number | PBShaderExp,\r\n y: number | PBShaderExp,\r\n z: number | PBShaderExp,\r\n w: number | PBShaderExp\r\n ): PBShaderExp;\r\n (x: number | PBShaderExp, y: number | PBShaderExp, zw: PBShaderExp): PBShaderExp;\r\n (x: number | PBShaderExp, yz: PBShaderExp, w: number | PBShaderExp): PBShaderExp;\r\n (x: number | PBShaderExp, yzw: PBShaderExp): PBShaderExp;\r\n (xy: PBShaderExp, z: number | PBShaderExp, w: number | PBShaderExp): PBShaderExp;\r\n (xy: PBShaderExp, zw: PBShaderExp): PBShaderExp;\r\n (xyz: PBShaderExp, w: number | PBShaderExp): PBShaderExp;\r\n ptr: ShaderTypeFunc;\r\n [dim: number]: ShaderTypeFunc;\r\n };\r\n /** ivec4 type variable constructors */\r\n ivec4: {\r\n (): PBShaderExp;\r\n (name: string): PBShaderExp;\r\n (x: number | PBShaderExp): PBShaderExp;\r\n (\r\n x: number | PBShaderExp,\r\n y: number | PBShaderExp,\r\n z: number | PBShaderExp,\r\n w: number | PBShaderExp\r\n ): PBShaderExp;\r\n (x: number | PBShaderExp, y: number | PBShaderExp, zw: PBShaderExp): PBShaderExp;\r\n (x: number | PBShaderExp, yz: PBShaderExp, w: number | PBShaderExp): PBShaderExp;\r\n (x: number | PBShaderExp, yzw: PBShaderExp): PBShaderExp;\r\n (xy: PBShaderExp, z: number | PBShaderExp, w: number | PBShaderExp): PBShaderExp;\r\n (xy: PBShaderExp, zw: PBShaderExp): PBShaderExp;\r\n (xyz: PBShaderExp, w: number | PBShaderExp): PBShaderExp;\r\n ptr: ShaderTypeFunc;\r\n [dim: number]: ShaderTypeFunc;\r\n };\r\n /** uvec4 type variable constructors */\r\n uvec4: {\r\n (): PBShaderExp;\r\n (name: string): PBShaderExp;\r\n (x: number | PBShaderExp): PBShaderExp;\r\n (\r\n x: number | PBShaderExp,\r\n y: number | PBShaderExp,\r\n z: number | PBShaderExp,\r\n w: number | PBShaderExp\r\n ): PBShaderExp;\r\n (x: number | PBShaderExp, y: number | PBShaderExp, zw: PBShaderExp): PBShaderExp;\r\n (x: number | PBShaderExp, yz: PBShaderExp, w: number | PBShaderExp): PBShaderExp;\r\n (x: number | PBShaderExp, yzw: PBShaderExp): PBShaderExp;\r\n (xy: PBShaderExp, z: number | PBShaderExp, w: number | PBShaderExp): PBShaderExp;\r\n (xy: PBShaderExp, zw: PBShaderExp): PBShaderExp;\r\n (xyz: PBShaderExp, w: number | PBShaderExp): PBShaderExp;\r\n ptr: ShaderTypeFunc;\r\n [dim: number]: ShaderTypeFunc;\r\n };\r\n /** bvec4 type variable constructors */\r\n bvec4: {\r\n (): PBShaderExp;\r\n (name: string): PBShaderExp;\r\n (x: boolean | PBShaderExp): PBShaderExp;\r\n (\r\n x: boolean | PBShaderExp,\r\n y: boolean | PBShaderExp,\r\n z: boolean | PBShaderExp,\r\n w: boolean | PBShaderExp\r\n ): PBShaderExp;\r\n (x: boolean | PBShaderExp, y: boolean | PBShaderExp, zw: PBShaderExp): PBShaderExp;\r\n (x: boolean | PBShaderExp, yz: PBShaderExp, w: boolean | PBShaderExp): PBShaderExp;\r\n (x: boolean | PBShaderExp, yzw: PBShaderExp): PBShaderExp;\r\n (xy: PBShaderExp, z: boolean | PBShaderExp, w: boolean | PBShaderExp): PBShaderExp;\r\n (xy: PBShaderExp, zw: PBShaderExp): PBShaderExp;\r\n (xyz: PBShaderExp, w: boolean | PBShaderExp): PBShaderExp;\r\n ptr: ShaderTypeFunc;\r\n [dim: number]: ShaderTypeFunc;\r\n };\r\n /** mat2 type variable constructors */\r\n mat2: {\r\n (): PBShaderExp;\r\n (name: string): PBShaderExp;\r\n (\r\n m00: number | PBShaderExp,\r\n m01: number | PBShaderExp,\r\n m10: number | PBShaderExp,\r\n m11: number | PBShaderExp\r\n ): PBShaderExp;\r\n (m0: PBShaderExp, m1: PBShaderExp): PBShaderExp;\r\n ptr: ShaderTypeFunc;\r\n [dim: number]: ShaderTypeFunc;\r\n };\r\n /** mat2x3 type variable constructors */\r\n mat2x3: {\r\n (): PBShaderExp;\r\n (name: string): PBShaderExp;\r\n (\r\n m00: number | PBShaderExp,\r\n m01: number | PBShaderExp,\r\n m02: number | PBShaderExp,\r\n m10: number | PBShaderExp,\r\n m11: number | PBShaderExp,\r\n m12: number | PBShaderExp\r\n ): PBShaderExp;\r\n (m0: PBShaderExp, m1: PBShaderExp): PBShaderExp;\r\n ptr: ShaderTypeFunc;\r\n [dim: number]: ShaderTypeFunc;\r\n };\r\n /** mat2x4 type variable constructors */\r\n mat2x4: {\r\n (): PBShaderExp;\r\n (name: string): PBShaderExp;\r\n (\r\n m00: number | PBShaderExp,\r\n m01: number | PBShaderExp,\r\n m02: number | PBShaderExp,\r\n m03: number | PBShaderExp,\r\n m10: number | PBShaderExp,\r\n m11: number | PBShaderExp,\r\n m12: number | PBShaderExp,\r\n m13: number | PBShaderExp\r\n ): PBShaderExp;\r\n (m0: PBShaderExp, m1: PBShaderExp): PBShaderExp;\r\n ptr: ShaderTypeFunc;\r\n [dim: number]: ShaderTypeFunc;\r\n };\r\n /** mat3 type variable constructors */\r\n mat3: {\r\n (): PBShaderExp;\r\n (name: string): PBShaderExp;\r\n (\r\n m00: number | PBShaderExp,\r\n m01: number | PBShaderExp,\r\n m02: number | PBShaderExp,\r\n m10: number | PBShaderExp,\r\n m11: number | PBShaderExp,\r\n m12: number | PBShaderExp,\r\n m20: number | PBShaderExp,\r\n m21: number | PBShaderExp,\r\n m22: number | PBShaderExp\r\n ): PBShaderExp;\r\n (m0: PBShaderExp, m1: PBShaderExp, m2: PBShaderExp): PBShaderExp;\r\n ptr: ShaderTypeFunc;\r\n [dim: number]: ShaderTypeFunc;\r\n };\r\n /** mat3x2 type variable constructors */\r\n mat3x2: {\r\n (): PBShaderExp;\r\n (name: string): PBShaderExp;\r\n (\r\n m00: number | PBShaderExp,\r\n m01: number | PBShaderExp,\r\n m10: number | PBShaderExp,\r\n m11: number | PBShaderExp,\r\n m20: number | PBShaderExp,\r\n m21: number | PBShaderExp\r\n ): PBShaderExp;\r\n (m0: PBShaderExp, m1: PBShaderExp, m2: PBShaderExp): PBShaderExp;\r\n ptr: ShaderTypeFunc;\r\n [dim: number]: ShaderTypeFunc;\r\n };\r\n /** mat3x4 type variable constructors */\r\n mat3x4: {\r\n (): PBShaderExp;\r\n (name: string): PBShaderExp;\r\n (\r\n m00: number | PBShaderExp,\r\n m01: number | PBShaderExp,\r\n m02: number | PBShaderExp,\r\n m03: number | PBShaderExp,\r\n m10: number | PBShaderExp,\r\n m11: number | PBShaderExp,\r\n m12: number | PBShaderExp,\r\n m13: number | PBShaderExp,\r\n m20: number | PBShaderExp,\r\n m21: number | PBShaderExp,\r\n m22: number | PBShaderExp,\r\n m23: number | PBShaderExp\r\n ): PBShaderExp;\r\n (m0: PBShaderExp, m1: PBShaderExp, m2: PBShaderExp): PBShaderExp;\r\n ptr: ShaderTypeFunc;\r\n [dim: number]: ShaderTypeFunc;\r\n };\r\n /** mat4 type variable constructors */\r\n mat4: {\r\n (): PBShaderExp;\r\n (name: string): PBShaderExp;\r\n (\r\n m00: number | PBShaderExp,\r\n m01: number | PBShaderExp,\r\n m02: number | PBShaderExp,\r\n m03: number | PBShaderExp,\r\n m10: number | PBShaderExp,\r\n m11: number | PBShaderExp,\r\n m12: number | PBShaderExp,\r\n m13: number | PBShaderExp,\r\n m20: number | PBShaderExp,\r\n m21: number | PBShaderExp,\r\n m22: number | PBShaderExp,\r\n m23: number | PBShaderExp,\r\n m30: number | PBShaderExp,\r\n m31: number | PBShaderExp,\r\n m32: number | PBShaderExp,\r\n m33: number | PBShaderExp\r\n ): PBShaderExp;\r\n (m0: PBShaderExp, m1: PBShaderExp, m2: PBShaderExp, m3: PBShaderExp): PBShaderExp;\r\n ptr: ShaderTypeFunc;\r\n [dim: number]: ShaderTypeFunc;\r\n };\r\n /** mat4x2 type variable constructors */\r\n mat4x2: {\r\n (): PBShaderExp;\r\n (name: string): PBShaderExp;\r\n (\r\n m00: number | PBShaderExp,\r\n m01: number | PBShaderExp,\r\n m10: number | PBShaderExp,\r\n m11: number | PBShaderExp,\r\n m20: number | PBShaderExp,\r\n m21: number | PBShaderExp,\r\n m30: number | PBShaderExp,\r\n m31: number | PBShaderExp\r\n ): PBShaderExp;\r\n (m0: PBShaderExp, m1: PBShaderExp, m2: PBShaderExp, m3: PBShaderExp): PBShaderExp;\r\n ptr: ShaderTypeFunc;\r\n [dim: number]: ShaderTypeFunc;\r\n };\r\n /** mat4x3 type variable constructors */\r\n mat4x3: {\r\n (): PBShaderExp;\r\n (name: string): PBShaderExp;\r\n (\r\n m00: number | PBShaderExp,\r\n m01: number | PBShaderExp,\r\n m02: number | PBShaderExp,\r\n m10: number | PBShaderExp,\r\n m11: number | PBShaderExp,\r\n m12: number | PBShaderExp,\r\n m20: number | PBShaderExp,\r\n m21: number | PBShaderExp,\r\n m22: number | PBShaderExp,\r\n m30: number | PBShaderExp,\r\n m31: number | PBShaderExp,\r\n m32: number | PBShaderExp\r\n ): PBShaderExp;\r\n (m0: PBShaderExp, m1: PBShaderExp, m2: PBShaderExp, m3: PBShaderExp): PBShaderExp;\r\n ptr: ShaderTypeFunc;\r\n [dim: number]: ShaderTypeFunc;\r\n };\r\n /** tex1D type variable constructors */\r\n tex1D(rhs?: string): PBShaderExp;\r\n /** tex2D type variable constructors */\r\n tex2D(rhs?: string): PBShaderExp;\r\n /** tex3D type variable constructors */\r\n tex3D(rhs?: string): PBShaderExp;\r\n /** texCube type variable constructors */\r\n texCube(rhs?: string): PBShaderExp;\r\n /** texExternal type variable constructors */\r\n texExternal(rhs?: string): PBShaderExp;\r\n /** tex2DShadow type variable constructors */\r\n tex2DShadow(rhs?: string): PBShaderExp;\r\n /** texCubeShadow type variable constructors */\r\n texCubeShadow(rhs?: string): PBShaderExp;\r\n /** tex2DArray type variable constructors */\r\n tex2DArray(rhs?: string): PBShaderExp;\r\n /** tex2DArrayShadow type variable constructors */\r\n tex2DArrayShadow(rhs?: string): PBShaderExp;\r\n /** itex1D type variable constructors */\r\n itex1D(rhs?: string): PBShaderExp;\r\n /** itex2D type variable constructors */\r\n itex2D(rhs?: string): PBShaderExp;\r\n /** itex3D type variable constructors */\r\n itex3D(rhs?: string): PBShaderExp;\r\n /** itexCube type variable constructors */\r\n itexCube(rhs?: string): PBShaderExp;\r\n /** itex2DArray type variable constructors */\r\n itex2DArray(rhs?: string): PBShaderExp;\r\n /** utex1D type variable constructors */\r\n utex1D(rhs?: string): PBShaderExp;\r\n /** utex2D type variable constructors */\r\n utex2D(rhs?: string): PBShaderExp;\r\n /** utex3D type variable constructors */\r\n utex3D(rhs?: string): PBShaderExp;\r\n /** utexCube type variable constructors */\r\n utexCube(rhs?: string): PBShaderExp;\r\n /** utex2DArray type variable constructors */\r\n utex2DArray(rhs?: string): PBShaderExp;\r\n /** texStorage1D type variable constructors */\r\n texStorage1D: StorageTextureConstructor;\r\n /** texStorage2D type variable constructors */\r\n texStorage2D: StorageTextureConstructor;\r\n /** texStorage2DArray type variable constructors */\r\n texStorage2DArray: StorageTextureConstructor;\r\n /** texStorage3D type variable constructors */\r\n texStorage3D: StorageTextureConstructor;\r\n /** sampler type variable constructors */\r\n sampler(rhs?: string): PBShaderExp;\r\n /** samplerComparison type variable constructors */\r\n samplerComparison(rhs?: string): PBShaderExp;\r\n /** Same as radians builtin function in GLSL and WGSL */\r\n radians(val: number | PBShaderExp): PBShaderExp;\r\n /** Same as degrees builtin function in GLSL and WGSL */\r\n degrees(val: number | PBShaderExp): PBShaderExp;\r\n /** Same as sin builtin function in GLSL and WGSL */\r\n sin(val: number | PBShaderExp): PBShaderExp;\r\n /** Same as cos builtin function in GLSL and WGSL */\r\n cos(val: number | PBShaderExp): PBShaderExp;\r\n /** Same as tan builtin function in GLSL and WGSL */\r\n tan(val: number | PBShaderExp): PBShaderExp;\r\n /** Same as asin builtin function in GLSL and WGSL */\r\n asin(val: number | PBShaderExp): PBShaderExp;\r\n /** Same as acos builtin function in GLSL and WGSL */\r\n acos(val: number | PBShaderExp): PBShaderExp;\r\n /** Same as atan builtin function in GLSL and WGSL */\r\n atan(val: number | PBShaderExp): PBShaderExp;\r\n /** Same as atan builtin function in GLSL and atan2 builtin function in WGSL */\r\n atan2(y: number | PBShaderExp, x: number | PBShaderExp): PBShaderExp;\r\n /** Same as sinh builtin function in GLSL and WGSL */\r\n sinh(val: number | PBShaderExp): PBShaderExp;\r\n /** Same as cosh builtin function in GLSL and WGSL */\r\n cosh(val: number | PBShaderExp): PBShaderExp;\r\n /** Same as tanh builtin function in GLSL and WGSL */\r\n tanh(val: number | PBShaderExp): PBShaderExp;\r\n /** Same as asinh builtin function in GLSL and WGSL */\r\n asinh(val: number | PBShaderExp): PBShaderExp;\r\n /** Same as acosh builtin function in GLSL and WGSL */\r\n acosh(val: number | PBShaderExp): PBShaderExp;\r\n /** Same as atanh builtin function in GLSL and WGSL */\r\n atanh(val: number | PBShaderExp): PBShaderExp;\r\n /** Same as pow builtin function in GLSL and WGSL */\r\n pow(x: number | PBShaderExp, y: number | PBShaderExp): PBShaderExp;\r\n /** Same as exp builtin function in GLSL and WGSL */\r\n exp(val: number | PBShaderExp): PBShaderExp;\r\n /** Same as exp2 builtin function in GLSL and WGSL */\r\n exp2(val: number | PBShaderExp): PBShaderExp;\r\n /** Same as log builtin function in GLSL and WGSL */\r\n log(val: number | PBShaderExp): PBShaderExp;\r\n /** Same as log2 builtin function in GLSL and WGSL */\r\n log2(val: number | PBShaderExp): PBShaderExp;\r\n /** Same as sqrt builtin function in GLSL and WGSL */\r\n sqrt(val: number | PBShaderExp): PBShaderExp;\r\n /** Same as inversesqrt builtin function in GLSL and WGSL */\r\n inverseSqrt(val: number | PBShaderExp): PBShaderExp;\r\n /** Same as abs builtin function in GLSL and WGSL */\r\n abs(val: number | PBShaderExp): PBShaderExp;\r\n /** Same as sign builtin function in GLSL and WGSL */\r\n sign(val: number | PBShaderExp): PBShaderExp;\r\n /** Same as floor builtin function in GLSL and WGSL */\r\n floor(val: number | PBShaderExp): PBShaderExp;\r\n /** Same as ceil builtin function in GLSL and WGSL */\r\n ceil(val: number | PBShaderExp): PBShaderExp;\r\n /** Same as fract builtin function in GLSL and WGSL */\r\n fract(val: number | PBShaderExp): PBShaderExp;\r\n /** Same as mod builtin function in GLSL and WGSL */\r\n mod(x: number | PBShaderExp, y: number | PBShaderExp): PBShaderExp;\r\n /** Same as fma builtin function in WGSL, only valid for WebGPU device */\r\n fma(x: number | PBShaderExp, y: number | PBShaderExp, z: number | PBShaderExp): PBShaderExp;\r\n /** Same as round builtin function in WGSL, only valid for WebGPU device */\r\n round(val: number | PBShaderExp): PBShaderExp;\r\n /** Same as trunc builtin function in WGSL, only valid for WebGPU device */\r\n trunc(val: number | PBShaderExp): PBShaderExp;\r\n /** Same as min builtin function in GLSL and WGSL */\r\n min(x: number | PBShaderExp, y: number | PBShaderExp): PBShaderExp;\r\n /** Same as max builtin function in GLSL and WGSL */\r\n max(x: number | PBShaderExp, y: number | PBShaderExp): PBShaderExp;\r\n /** Same as clamp builtin function in GLSL and WGSL */\r\n clamp(x: number | PBShaderExp, y: number | PBShaderExp, z: number | PBShaderExp): PBShaderExp;\r\n /** Clamp to [0, 1] */\r\n saturate(x: PBShaderExp): PBShaderExp;\r\n /** Same as mix builtin function in GLSL and WGSL */\r\n mix(x: number | PBShaderExp, y: number | PBShaderExp, z: number | PBShaderExp): PBShaderExp;\r\n /** Same as step builtin function in GLSL and WGSL */\r\n step(x: number | PBShaderExp, y: number | PBShaderExp): PBShaderExp;\r\n /** Same as smoothstep builtin function in GLSL and WGSL */\r\n smoothStep(x: number | PBShaderExp, y: number | PBShaderExp, z: number | PBShaderExp): PBShaderExp;\r\n /** Same as isnan builtin function in GLSL, only valid for WebGL2 device */\r\n isnan(x: number | PBShaderExp): PBShaderExp;\r\n /** Same as isinf builtin function in GLSL, only valid for WebGL2 device */\r\n isinf(x: number | PBShaderExp): PBShaderExp;\r\n /** add two values */\r\n add_2(x: number | PBShaderExp, y: number | PBShaderExp): PBShaderExp;\r\n /** add a couple of values togeter */\r\n add(x: number | PBShaderExp, y: number | PBShaderExp, ...rest: (number | PBShaderExp)[]): PBShaderExp;\r\n /** subtract two values */\r\n sub(x: number | PBShaderExp, y: number | PBShaderExp): PBShaderExp;\r\n /** multiply two values */\r\n mul_2(x: number | PBShaderExp, y: number | PBShaderExp): PBShaderExp;\r\n /** multiply a couple of values togeter */\r\n mul(x: number | PBShaderExp, y: number | PBShaderExp, ...rest: (number | PBShaderExp)[]): PBShaderExp;\r\n /** divide the first number by the second number */\r\n div(x: number | PBShaderExp, y: number | PBShaderExp): PBShaderExp;\r\n /** Same as length builtin function in GLSL and WGSL */\r\n length(x: number | PBShaderExp): PBShaderExp;\r\n /** Same as distance builtin function in GLSL and WGSL */\r\n distance(x: number | PBShaderExp, y: number | PBShaderExp): PBShaderExp;\r\n /** Same as dot builtin function in GLSL and WGSL */\r\n dot(x: PBShaderExp, y: PBShaderExp): PBShaderExp;\r\n /** Same as cross builtin function in GLSL and WGSL */\r\n cross(x: PBShaderExp, y: PBShaderExp): PBShaderExp;\r\n /** Same as normalize builtin function in GLSL and WGSL. */\r\n normalize(x: PBShaderExp): PBShaderExp;\r\n /** Same as faceForward builtin function in WGSL, only valid for WebGPU device */\r\n faceForward(x: PBShaderExp, y: PBShaderExp, z: PBShaderExp): PBShaderExp;\r\n /** Same as reflect builtin function in GLSL and WGSL */\r\n reflect(x: PBShaderExp, y: PBShaderExp): PBShaderExp;\r\n /** Same as refract builtin function in GLSL and WGSL */\r\n refract(x: PBShaderExp, y: PBShaderExp, z: number | PBShaderExp): PBShaderExp;\r\n /** Same as frexp builtin function in WGSL, only valid for WebGPU device */\r\n frexp(x: number | PBShaderExp): PBShaderExp;\r\n /** Same as outerProduct builtin function in GLSL, only valid for WebGL2 device */\r\n outerProduct(x: PBShaderExp, y: PBShaderExp): PBShaderExp;\r\n /** Same as transpose builtin function in GLSL and WGSL, only valid for WebGL2 and WebGPU device */\r\n transpose(mat: PBShaderExp): PBShaderExp;\r\n /** Same as determinant builtin function in GLSL and WGSL, only valid for WebGL2 and WebGPU device */\r\n determinant(mat: PBShaderExp): PBShaderExp;\r\n /** Same as inverse builtin function in GLSL, only valid for WebGL2 device */\r\n inverse(mat: PBShaderExp): PBShaderExp;\r\n /** return true if x is less than y, otherwise false */\r\n lessThan(x: number | PBShaderExp, y: number | PBShaderExp): PBShaderExp;\r\n /** return true if x is less than or equals y, otherwise false, per component */\r\n lessThanEqual(x: number | PBShaderExp, y: number | PBShaderExp): PBShaderExp;\r\n /** return true if x is greater than y, otherwise false, per component */\r\n greaterThan(x: number | PBShaderExp, y: number | PBShaderExp): PBShaderExp;\r\n /** return true if x is greater than or equals y, otherwise false, per component */\r\n greaterThanEqual(x: number | PBShaderExp, y: number | PBShaderExp): PBShaderExp;\r\n /** return true if x equals y, otherwise false, per component */\r\n compEqual(x: PBShaderExp, y: PBShaderExp): PBShaderExp;\r\n /** return true if x is not equal to y, otherwise false, per component */\r\n compNotEqual(x: PBShaderExp, y: PBShaderExp): PBShaderExp;\r\n /** return true if x equals y, otherwise false */\r\n equal(x: PBShaderExp | number, y: PBShaderExp | number): PBShaderExp;\r\n /** return true if x is not equal to y, otherwise false */\r\n notEqual(x: PBShaderExp | number, y: PBShaderExp | number): PBShaderExp;\r\n /** return x && y */\r\n and_2(x: PBShaderExp | number | boolean, y: PBShaderExp | number | boolean): PBShaderExp;\r\n /** return x && y && ... */\r\n and(\r\n x: PBShaderExp | number | boolean,\r\n y: PBShaderExp | number | boolean,\r\n ...rest: (PBShaderExp | number | boolean)[]\r\n ): PBShaderExp;\r\n /** return x & y, per component */\r\n compAnd(x: PBShaderExp | number, y: PBShaderExp | number): PBShaderExp;\r\n /** return x ^ y, per component */\r\n compXor(x: PBShaderExp | number, y: PBShaderExp | number): PBShaderExp;\r\n /** return x || y */\r\n or_2(x: PBShaderExp | boolean, y: PBShaderExp | boolean): PBShaderExp;\r\n /** return x || y */\r\n or(x: PBShaderExp | boolean, y: PBShaderExp | boolean, ...rest: (PBShaderExp | boolean)[]): PBShaderExp;\r\n /** return x || y, per component */\r\n compOr(x: PBShaderExp | number | boolean, y: PBShaderExp | number | boolean): PBShaderExp;\r\n /** check whether any element of a boolean vector is true */\r\n any(x: PBShaderExp): PBShaderExp;\r\n /** check whether all elements of a boolean vector are true */\r\n all(x: PBShaderExp): PBShaderExp;\r\n /** logically invert a boolean vector */\r\n not(x: boolean | PBShaderExp): PBShaderExp;\r\n /** return the negate of the given value */\r\n neg(x: number | PBShaderExp): PBShaderExp;\r\n /** shift arithmetic left, not valid for WebGL1 device */\r\n sal(a: number | PBShaderExp, b: number | PBShaderExp): PBShaderExp;\r\n /** shift arithmetic right, not valid for WebGL1 device */\r\n sar(a: number | PBShaderExp, b: number | PBShaderExp): PBShaderExp;\r\n /** Same as the arrayLength builtin function in WGSL, only valid for WebGPU device */\r\n arrayLength(x: PBShaderExp): PBShaderExp;\r\n /** Same as the select builtin function in WGSL, only valid for WebGPU device */\r\n select(x: number | PBShaderExp, y: number | PBShaderExp, cond: boolean | PBShaderExp): PBShaderExp;\r\n /** Same as floatBitsToInt builtin function in GLSL, only valid for WebGL2 device and WebGPU device */\r\n floatBitsToInt(x: number | PBShaderExp): PBShaderExp;\r\n /** Same as floatBitsToUint builtin function in GLSL, only valid for WebGL2 device and WebGPU device */\r\n floatBitsToUint(x: number | PBShaderExp): PBShaderExp;\r\n /** Same as intBitsToFloat builtin function in GLSL, only valid for WebGL2 device and WebGPU device */\r\n intBitsToFloat(x: number | PBShaderExp): PBShaderExp;\r\n /** Same as uintBitsToFloat builtin function in GLSL, only valid for WebGL2 device and WebGPU device */\r\n uintBitsToFloat(x: number | PBShaderExp): PBShaderExp;\r\n /** Same as pack4x8snorm builtin function in WGSL, only valid for WebGPU device */\r\n pack4x8snorm(x: PBShaderExp): PBShaderExp;\r\n /** Same as unpack4x8snorm builtin function in WGSL, only valid for WebGPU device */\r\n unpack4x8snorm(x: number | PBShaderExp): PBShaderExp;\r\n /** Same as pack4x8unorm builtin function in WGSL, only valid for WebGPU device */\r\n pack4x8unorm(x: PBShaderExp): PBShaderExp;\r\n /** Same as unpack4x8unorm builtin function in WGSL, only valid for WebGPU device */\r\n unpack4x8unorm(x: number | PBShaderExp): PBShaderExp;\r\n /** Same as pack2x16snom builtin function in WGSL, only valid for WebGPU device */\r\n pack2x16snorm(x: PBShaderExp): PBShaderExp;\r\n /** Same as unpack2x16snorm builtin function in WGSL, only valid for WebGPU device */\r\n unpack2x16snorm(x: number | PBShaderExp): PBShaderExp;\r\n /** Same as pack2x16unorm builtin function in WGSL, only valid for WebGPU device */\r\n pack2x16unorm(x: PBShaderExp): PBShaderExp;\r\n /** Same as unpack2x16unorm builtin function in WGSL, only valid for WebGPU device */\r\n unpack2x16unorm(x: number | PBShaderExp): PBShaderExp;\r\n /** Same as pack2x16float builtin function in WGSL, only valid for WebGPU device */\r\n pack2x16float(x: PBShaderExp): PBShaderExp;\r\n /** Same as unpack2x16float builtin function in WGSL, only valid for WebGPU device */\r\n unpack2x16float(x: number | PBShaderExp): PBShaderExp;\r\n /** Same as matrixCompMult builtin function in GLSL, only valid for WebGL/WebGL2 device */\r\n matrixCompMult(x: PBShaderExp, y: PBShaderExp): PBShaderExp;\r\n /** Same as dFdx builtin function in GLSL and dpdx builtin function in WGSL */\r\n dpdx(x: PBShaderExp): PBShaderExp;\r\n /** Same as dFdy builtin function in GLSL and dpdy builtin function in WGSL */\r\n dpdy(x: PBShaderExp): PBShaderExp;\r\n /** Same as fwidth builtin function in GLSL and WGSL */\r\n fwidth(x: PBShaderExp): PBShaderExp;\r\n /** Same as dFdx builtin function in GLSL and dpdxCoarse builtin function in WGSL */\r\n dpdxCoarse(x: PBShaderExp): PBShaderExp;\r\n /** Same as dFdx builtin function in GLSL and dpdxFine builtin function in WGSL */\r\n dpdxFine(x: PBShaderExp): PBShaderExp;\r\n /** Same as dFdy builtin function in GLSL and dpdyCoarse builtin function in WGSL */\r\n dpdyCoarse(x: PBShaderExp): PBShaderExp;\r\n /** Same as dFdy builtin function in GLSL and dpdyFine builtin function in WGSL */\r\n dpdyFine(x: PBShaderExp): PBShaderExp;\r\n /** Same as textureSize builtin function in GLSL and textureDimensions builtin function in WGSL, only valid for WebGL2 device and WebGPU device */\r\n textureDimensions(tex: PBShaderExp, level?: number | PBShaderExp): PBShaderExp;\r\n /** Same as textureGather builtin function in WGSL, only valid for WebGPU device */\r\n textureGather(tex: PBShaderExp, sampler: PBShaderExp, coords: PBShaderExp): PBShaderExp;\r\n /** Same as textureGather builtin function in WGSL, only valid for WebGPU device */\r\n textureGather(\r\n component: number | PBShaderExp,\r\n tex: PBShaderExp,\r\n sampler: PBShaderExp,\r\n coords: PBShaderExp\r\n ): PBShaderExp;\r\n /** Same as textureGather builtin function in WGSL, only valid for WebGPU device */\r\n textureArrayGather(\r\n tex: PBShaderExp,\r\n sampler: PBShaderExp,\r\n coords: PBShaderExp,\r\n arrayIndex: number | PBShaderExp\r\n ): PBShaderExp;\r\n /** Same as textureGather builtin function in WGSL, only valid for WebGPU device */\r\n textureArrayGather(\r\n component: number | PBShaderExp,\r\n tex: PBShaderExp,\r\n sampler: PBShaderExp,\r\n coords: PBShaderExp,\r\n arrayIndex: number | PBShaderExp\r\n ): PBShaderExp;\r\n /** Same as textureGatherCompare builtin function in WGSL, only valid for WebGPU device */\r\n textureGatherCompare(\r\n tex: PBShaderExp,\r\n samplerCompare: PBShaderExp,\r\n coords: PBShaderExp,\r\n depthRef: number | PBShaderExp\r\n ): PBShaderExp;\r\n /** Same as textureGatherCompare builtin function in WGSL, only valid for WebGPU device */\r\n textureArrayGatherCompare(\r\n tex: PBShaderExp,\r\n samplerCompare: PBShaderExp,\r\n coords: PBShaderExp,\r\n arrayIndex: number | PBShaderExp,\r\n depthRef: number | PBShaderExp\r\n ): PBShaderExp;\r\n /** Same as texelFetch builtin function in GLSL and textureLoad builtin function in WGSL, only valid for WebGL2 and WebGPU device */\r\n textureLoad(\r\n tex: PBShaderExp,\r\n coords: number | PBShaderExp,\r\n levelOrSampleIndex: number | PBShaderExp\r\n ): PBShaderExp;\r\n /** Same as texelFetch builtin function in GLSL and textureLoad builtin function in WGSL, only valid for WebGL2 and WebGPU device */\r\n textureArrayLoad(\r\n tex: PBShaderExp,\r\n coords: number | PBShaderExp,\r\n arrayIndex: number | PBShaderExp,\r\n level: number | PBShaderExp\r\n ): PBShaderExp;\r\n /** Same as textureStore builtin function in WGSL, only valid for WebGPU device */\r\n textureStore(tex: PBShaderExp, coords: number | PBShaderExp, value: PBShaderExp): void;\r\n /** Same as textureStore builtin function in WGSL, only valid for WebGPU device */\r\n textureArrayStore(\r\n tex: PBShaderExp,\r\n coords: PBShaderExp,\r\n arrayIndex: number | PBShaderExp,\r\n value: PBShaderExp\r\n ): void;\r\n /** Same as textureNumLayers builtin function in WGSL, only valid for WebGPU device */\r\n textureNumLayers(tex: PBShaderExp): PBShaderExp;\r\n /** Same as textureNumLevels builtin function in WGSL, only valid for WebGPU device */\r\n textureNumLevels(tex: PBShaderExp): PBShaderExp;\r\n /** Same as textureNumSamples builtin function in WGSL, only valid for WebGPU device */\r\n textureNumSamples(tex: PBShaderExp): PBShaderExp;\r\n /** Same as textureSample builtin function in WebGPU and texture/texture2D/textureCube builtin function in GLSL */\r\n textureSample(tex: PBShaderExp, coords: number | PBShaderExp): PBShaderExp;\r\n /** Same as textureSample builtin function in WebGPU and texture builtin function in GLSL, only valid for WebGL2 and WebGPU device */\r\n textureArraySample(tex: PBShaderExp, coords: PBShaderExp, arrayIndex: number | PBShaderExp): PBShaderExp;\r\n /** Same as textureSampleBias builtin function in WebGPU and texture/texture2D/textureCube builtin function in GLSL */\r\n textureSampleBias(tex: PBShaderExp, coords: PBShaderExp, bias: number | PBShaderExp): PBShaderExp;\r\n /** Same as textureSampleBias builtin function in WebGPU and texture builtin function in GLSL, only valid for WebGL2 and WebGPU device */\r\n textureArraySampleBias(\r\n tex: PBShaderExp,\r\n coords: PBShaderExp,\r\n arrayIndex: number | PBShaderExp,\r\n bias: number | PBShaderExp\r\n ): PBShaderExp;\r\n /** Same as textureSampleCompare builtin function in WebGPU and texture builtin function in GLSL, only valid for WebGL2 and WebGPU device */\r\n textureSampleCompare(tex: PBShaderExp, coords: PBShaderExp, depthRef: number | PBShaderExp): PBShaderExp;\r\n /** Same as textureSampleCompare builtin function in WebGPU and texture builtin function in GLSL, only valid for WebGL2 and WebGPU device */\r\n textureArraySampleCompare(\r\n tex: PBShaderExp,\r\n coords: PBShaderExp,\r\n arrayIndex: number | PBShaderExp,\r\n depthRef: number | PBShaderExp\r\n ): PBShaderExp;\r\n /** Same as textureSampleLevel builtin function in WebGPU and textureLod/texture2DLodExt/textureCubeLodExt builtin function in GLSL */\r\n textureSampleLevel(tex: PBShaderExp, coords: PBShaderExp): PBShaderExp;\r\n /** Same as textureSampleLevel builtin function in WebGPU and textureLod/texture2DLodExt/textureCubeLodExt builtin function in GLSL */\r\n textureSampleLevel(tex: PBShaderExp, coords: PBShaderExp, level: number | PBShaderExp): PBShaderExp;\r\n /** Same as textureSampleLevel builtin function in WebGPU and textureLod builtin function in GLSL, only valid for WebGL2 and WebGPU device */\r\n textureArraySampleLevel(\r\n tex: PBShaderExp,\r\n coords: PBShaderExp,\r\n arrayIndex: number | PBShaderExp,\r\n level: number | PBShaderExp\r\n ): PBShaderExp;\r\n /** Same as textureSampleCompareLevel builtin function in WebGPU and texture/textureLod builtin function in GLSL, only valid for WebGL2 and WebGPU device */\r\n textureSampleCompareLevel(\r\n tex: PBShaderExp,\r\n coords: PBShaderExp,\r\n depthRef: number | PBShaderExp\r\n ): PBShaderExp;\r\n /** Same as textureSampleCompareLevel builtin function in WebGPU and texture builtin function in GLSL, only valid for WebGL2 and WebGPU device */\r\n textureArraySampleCompareLevel(\r\n tex: PBShaderExp,\r\n coords: PBShaderExp,\r\n arrayIndex: number | PBShaderExp,\r\n depthRef: number | PBShaderExp\r\n ): PBShaderExp;\r\n /** Same as textureSampleGrad builtin function in WebGPU and textureGrad/texture2DGradExt/textureCubeGradExt builtin function in GLSL */\r\n textureSampleGrad(tex: PBShaderExp, coords: PBShaderExp, ddx: PBShaderExp, ddy: PBShaderExp): PBShaderExp;\r\n /** Same as textureSampleGrad builtin function in WebGPU and textureGrad builtin function in GLSL, only valid for WebGL2 and WebGPU device */\r\n textureArraySampleGrad(\r\n tex: PBShaderExp,\r\n coords: PBShaderExp,\r\n arrayIndex: number | PBShaderExp,\r\n ddx: PBShaderExp,\r\n ddy: PBShaderExp\r\n ): PBShaderExp;\r\n /** Same as storageBarrier builtin function in WebGPU, only valid for WebGPU device */\r\n storageBarrier(): void;\r\n /** Same as workgroupBarrier builtin function in WebGPU, only valid for WebGPU device */\r\n workgroupBarrier(): void;\r\n /** atomicLoad, only valid for WebGPU device */\r\n atomicLoad(ptr: PBShaderExp): PBShaderExp;\r\n /** atomicStore, only valid for WebGPU device */\r\n atomicStore(ptr: PBShaderExp, value: number | PBShaderExp): void;\r\n /** atomicAdd, only valid for WebGPU device */\r\n atomicAdd(ptr: PBShaderExp, value: number | PBShaderExp): PBShaderExp;\r\n /** atomicSub, only valid for WebGPU device */\r\n atomicSub(ptr: PBShaderExp, value: number | PBShaderExp): PBShaderExp;\r\n /** atomicMax, only valid for WebGPU device */\r\n atomicMax(ptr: PBShaderExp, value: number | PBShaderExp): PBShaderExp;\r\n /** atomicMin, only valid for WebGPU device */\r\n atomicMin(ptr: PBShaderExp, value: number | PBShaderExp): PBShaderExp;\r\n /** atomicAnd, only valid for WebGPU device */\r\n atomicAnd(ptr: PBShaderExp, value: number | PBShaderExp): PBShaderExp;\r\n /** atomicOr, only valid for WebGPU device */\r\n atomicOr(ptr: PBShaderExp, value: number | PBShaderExp): PBShaderExp;\r\n /** atomicXor, only valid for WebGPU device */\r\n atomicXor(ptr: PBShaderExp, value: number | PBShaderExp): PBShaderExp;\r\n /** atomicExchange, only valid for WebGPU device */\r\n atomicExchange(ptr: PBShaderExp, value: number | PBShaderExp): PBShaderExp;\r\n}\r\n\r\n/**\r\n * The program builder class\r\n * @public\r\n */\r\nexport class ProgramBuilder {\r\n /** @internal */\r\n _device: AbstractDevice;\r\n /** @internal */\r\n _workgroupSize: Nullable<[number, number, number]>;\r\n /** @internal */\r\n _scopeStack: PBScope[] = [];\r\n /** @internal */\r\n _shaderType: ShaderType = ShaderType.Vertex | ShaderType.Fragment | ShaderType.Compute;\r\n /** @internal */\r\n _structInfo: Record<number, StructDef>;\r\n /** @internal */\r\n _uniforms: UniformInfo[];\r\n /** @internal */\r\n _globalScope: Nullable<PBGlobalScope>;\r\n /** @internal */\r\n _builtinScope: Nullable<PBBuiltinScope>;\r\n /** @internal */\r\n _inputScope: Nullable<PBInputScope>;\r\n /** @internal */\r\n _outputScope: Nullable<PBOutputScope>;\r\n /** @internal */\r\n _inputs: [string, AST.ASTDeclareVar][];\r\n /** @internal */\r\n _outputs: [string, AST.ASTDeclareVar][];\r\n /** @internal */\r\n _vertexAttributes: number[];\r\n /** @internal */\r\n _depthRangeCorrection: boolean;\r\n /** @internal */\r\n _emulateDepthClamp: boolean;\r\n /** @internal */\r\n _lastError: Nullable<string>;\r\n /** @internal */\r\n _reflection: PBReflection;\r\n /** @internal */\r\n _autoStructureTypeIndex: number;\r\n /** @internal */\r\n _nameMap: Record<string, string>[];\r\n /**\r\n * Creates a program builder for given device\r\n * @param device - The device\r\n */\r\n constructor(device: AbstractDevice) {\r\n this._device = device;\r\n this._workgroupSize = null;\r\n this._structInfo = {};\r\n this._uniforms = [];\r\n this._scopeStack = [];\r\n this._globalScope = null;\r\n this._builtinScope = null;\r\n this._inputScope = null;\r\n this._outputScope = null;\r\n this._inputs = [];\r\n this._outputs = [];\r\n this._vertexAttributes = [];\r\n this._depthRangeCorrection = device.type === 'webgpu';\r\n this._emulateDepthClamp = false;\r\n this._lastError = null;\r\n this._reflection = new PBReflection(this);\r\n this._autoStructureTypeIndex = 0;\r\n this._nameMap = [];\r\n }\r\n /** Get last error */\r\n get lastError(): Nullable<string> {\r\n return this._lastError;\r\n }\r\n /** @internal */\r\n get shaderType(): ShaderType {\r\n return this._shaderType;\r\n }\r\n /** Current shader kind */\r\n get shaderKind(): Nullable<ShaderKind> {\r\n return this._shaderType === ShaderType.Vertex\r\n ? 'vertex'\r\n : this._shaderType === ShaderType.Fragment\r\n ? 'fragment'\r\n : this._shaderType === ShaderType.Compute\r\n ? 'compute'\r\n : null;\r\n }\r\n /** Gets the global scope */\r\n getGlobalScope(): PBGlobalScope {\r\n return this._globalScope!;\r\n }\r\n /** @internal */\r\n get builtinScope(): PBBuiltinScope {\r\n return this._builtinScope!;\r\n }\r\n /** @internal */\r\n get inputScope(): PBInputScope {\r\n return this._inputScope!;\r\n }\r\n /** @internal */\r\n get outputScope(): PBOutputScope {\r\n return this._outputScope!;\r\n }\r\n /** @internal */\r\n get depthRangeCorrection(): boolean {\r\n return this._depthRangeCorrection;\r\n }\r\n get emulateDepthClamp(): boolean {\r\n return this._emulateDepthClamp;\r\n }\r\n set emulateDepthClamp(val: boolean) {\r\n this._emulateDepthClamp = val;\r\n }\r\n /** Get the shader code reflection interface */\r\n getReflection(): PBReflection {\r\n return this._reflection;\r\n }\r\n /** Get the device */\r\n getDevice(): AbstractDevice {\r\n return this._device;\r\n }\r\n /** @internal */\r\n reset(): void {\r\n this._workgroupSize = null;\r\n this._structInfo = {};\r\n this._uniforms = [];\r\n this._scopeStack = [];\r\n this._globalScope = null;\r\n this._builtinScope = null;\r\n this._inputScope = null;\r\n this._outputScope = null;\r\n this._inputs = [];\r\n this._outputs = [];\r\n this._vertexAttributes = [];\r\n this._depthRangeCorrection = this._device.type === 'webgpu';\r\n this._reflection = new PBReflection(this);\r\n this._autoStructureTypeIndex = 0;\r\n this._nameMap = [];\r\n }\r\n /**\r\n * Query the global variable by the name\r\n * @param name - Name of the variable\r\n * @returns The variable or null if not exists\r\n */\r\n queryGlobal(name: string): PBShaderExp {\r\n return this.getReflection().tag(name);\r\n }\r\n /** @internal */\r\n pushScope(scope: PBScope) {\r\n this._scopeStack.unshift(scope);\r\n }\r\n /** @internal */\r\n popScope(): PBScope {\r\n return this._scopeStack.shift()!;\r\n }\r\n /** Gets the current scope */\r\n getCurrentScope<T extends PBScope = PBScope>(): T {\r\n return this._scopeStack[0] as T;\r\n }\r\n /** Gets the current function scope */\r\n getCurrentFunctionScope(): PBFunctionScope {\r\n let funcScope: Nullable<PBScope> = this.getCurrentScope();\r\n while (funcScope && !(funcScope instanceof PBFunctionScope)) {\r\n funcScope = funcScope.$parent;\r\n }\r\n return funcScope! as PBFunctionScope;\r\n }\r\n /**\r\n * Generates shader codes for a render program\r\n * @param options - The build options\r\n * @returns a tuple made by vertex shader source, fragment shader source, bind group layouts and vertex attributes used, or null if build faild\r\n */\r\n buildRender(options: PBRenderOptions): Nullable<readonly [string, string, BindGroupLayout[], number[]]> {\r\n setCurrentProgramBuilder(this);\r\n this._lastError = null;\r\n this.defineInternalStructs();\r\n const ret = this.buildRenderSource(options);\r\n setCurrentProgramBuilder(null);\r\n this.reset();\r\n return ret;\r\n }\r\n /**\r\n * Generates shader code for a compute program\r\n * @param options - The build programs\r\n * @returns a tuple made by compute shader source and bind group layouts, or null if build failed\r\n */\r\n buildCompute(options: PBComputeOptions): Nullable<readonly [string, BindGroupLayout[]]> {\r\n setCurrentProgramBuilder(this);\r\n this._lastError = null;\r\n this._workgroupSize = options.workgroupSize;\r\n this.defineInternalStructs();\r\n const ret = this.buildComputeSource(options);\r\n setCurrentProgramBuilder(null);\r\n this.reset();\r\n return ret;\r\n }\r\n /**\r\n * Creates a shader program for render\r\n * @param options - The build options\r\n * @returns The created program or null if build failed\r\n */\r\n buildRenderProgram(options: PBRenderOptions): Nullable<GPUProgram> {\r\n const ret = this.buildRender(options);\r\n return ret\r\n ? this._device.createGPUProgram({\r\n type: 'render',\r\n label: options.label,\r\n params: {\r\n vs: ret[0],\r\n fs: ret[1],\r\n bindGroupLayouts: ret[2],\r\n vertexAttributes: ret[3]\r\n }\r\n })\r\n : null;\r\n }\r\n /**\r\n * Creates a shader program for compute\r\n * @param options - The build options\r\n * @returns The created program or null if build failed\r\n */\r\n buildComputeProgram(options: PBComputeOptions): Nullable<GPUProgram> {\r\n const ret = this.buildCompute(options);\r\n return ret\r\n ? this._device.createGPUProgram({\r\n type: 'compute',\r\n params: {\r\n source: ret[0],\r\n bindGroupLayouts: ret[1]\r\n }\r\n })\r\n : null;\r\n }\r\n /**\r\n * Creates a function\r\n * @param name - Name of the function\r\n * @param params - Parameters of the function\r\n * @param body - The generator function\r\n */\r\n func(name: string, params: PBShaderExp[], body?: (this: PBFunctionScope) => void) {\r\n this.getGlobalScope().$createFunctionIfNotExists(name, params, body);\r\n }\r\n /**\r\n * Create the main entry function of the shader\r\n * @param body - The shader generator function\r\n */\r\n main(body?: (this: PBFunctionScope) => void) {\r\n this.getGlobalScope().$mainFunc(body);\r\n }\r\n /**\r\n * Create an 'AddressOf' expression for WGSL\r\n * @param ref - The reference variable\r\n * @returns the 'AddressOf' expression\r\n */\r\n addressOf(ref: PBShaderExp): PBShaderExp {\r\n if (this._device.type !== 'webgpu') {\r\n throw new errors.PBDeviceNotSupport('pointer shader type');\r\n }\r\n if (!ref.$ast.isReference()) {\r\n throw new errors.PBReferenceValueRequired(ref);\r\n }\r\n const exp = new PBShaderExp('', ref.$ast.getType());\r\n exp.$ast = new AST.ASTAddressOf(ref.$ast);\r\n return exp;\r\n }\r\n /**\r\n * Creates a 'referenceOf' expression for WGSL\r\n * @param ptr - The pointer variable\r\n * @returns the 'referenceOf' expression\r\n */\r\n referenceOf(ptr: PBShaderExp): PBShaderExp {\r\n if (this._device.type !== 'webgpu') {\r\n throw new errors.PBDeviceNotSupport('pointer shader type');\r\n }\r\n if (!ptr.$ast.getType().isPointerType()) {\r\n throw new errors.PBPointerValueRequired(ptr);\r\n }\r\n const ast = new AST.ASTReferenceOf(ptr.$ast);\r\n const exp = new PBShaderExp('', ast.getType());\r\n exp.$ast = ast;\r\n return exp;\r\n }\r\n /**\r\n * Creates a structure type variable\r\n * @param structName - Name of the structure type\r\n * @param instanceName - Name of the variable\r\n * @returns the created variable\r\n */\r\n struct(structName: string, instanceName: string): PBShaderExp {\r\n let ctor: Nullable<ShaderTypeFunc> = null;\r\n for (const st of [ShaderType.Vertex, ShaderType.Fragment, ShaderType.Compute]) {\r\n if (st & this._shaderType) {\r\n const structInfo = this._structInfo[st];\r\n ctor = structInfo?.structs[structName];\r\n if (!!ctor) {\r\n break;\r\n }\r\n }\r\n }\r\n if (!ctor) {\r\n throw new errors.PBParamValueError('struct', 'structName', `Struct type ${structName} not exists`);\r\n }\r\n return ctor.call(this, instanceName);\r\n }\r\n /** @internal */\r\n isIdenticalStruct(a: PBStructTypeInfo, b: PBStructTypeInfo, checkName: boolean): boolean {\r\n if (checkName && a.structName && b.structName && a.structName !== b.structName) {\r\n return false;\r\n }\r\n if (a.structMembers.length !== b.structMembers.length) {\r\n return false;\r\n }\r\n for (let index = 0; index < a.structMembers.length; index++) {\r\n const val = a.structMembers[index];\r\n const other = b.structMembers[index];\r\n if (val.name !== other.name) {\r\n return false;\r\n }\r\n if (val.type.isStructType()) {\r\n if (!other.type.isStructType()) {\r\n return false;\r\n }\r\n if (!this.isIdenticalStruct(val.type, other.type, true)) {\r\n return false;\r\n }\r\n } else if (!val.type.isCompatibleType(other.type)) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n /** @internal */\r\n generateStructureName(): string {\r\n return `zStruct${this._autoStructureTypeIndex++}`;\r\n }\r\n /** @internal */\r\n getVertexAttributes(): number[] {\r\n return this._vertexAttributes;\r\n }\r\n /** @internal */\r\n defineHiddenStruct(type: PBStructTypeInfo) {\r\n for (const shaderType of [ShaderType.Vertex, ShaderType.Fragment, ShaderType.Compute]) {\r\n let structInfo = this._structInfo[shaderType];\r\n if (!structInfo) {\r\n structInfo = { structs: {}, types: [] };\r\n this._structInfo[shaderType] = structInfo;\r\n }\r\n if (structInfo.structs[type.structName!]) {\r\n throw new errors.PBParamValueError(\r\n 'defineStruct',\r\n 'structName',\r\n `cannot re-define struct '${type.structName}'`\r\n );\r\n }\r\n structInfo.types.push(new AST.ASTStructDefine(type, true));\r\n }\r\n }\r\n // /**\r\n // * Defines an uniform buffer\r\n // * @param name - Name of the uniform buffer\r\n // * @param args - Members of the buffer structure\r\n // * @returns The structure type constructor\r\n // */\r\n // defineUniformBuffer(name: string, ...args: PBShaderExp[]): ShaderTypeFunc {\r\n // return this.defineStructOrUniformBuffer(name, 'std140', ...args);\r\n // }\r\n // /**\r\n // * Defines a structure type\r\n // * @param structName - Name of the type\r\n // * @param layout - The structure layout\r\n // * @param args - Members of the structure\r\n // * @returns The structure type constructor\r\n // */\r\n // defineStruct(structName: string, ...args: PBShaderExp[]): ShaderTypeFunc {\r\n // return this.defineStructOrUniformBuffer(structName, 'default', ...args);\r\n // }\r\n /**\r\n * Defines a structure type\r\n * @param members - Members of the structure\r\n * @param structName - Name of the type\r\n * @returns The structure type constructor\r\n */\r\n defineStruct(members: PBShaderExp[], structName?: string): ShaderTypeFunc {\r\n const layout = 'default';\r\n const structType = new PBStructTypeInfo(\r\n structName ?? '',\r\n layout,\r\n members.map((arg) => {\r\n if (\r\n !arg.$typeinfo.isPrimitiveType() &&\r\n !arg.$typeinfo.isArrayType() &&\r\n !arg.$typeinfo.isStructType() &&\r\n !arg.$typeinfo.isAtomicI32() &&\r\n !arg.$typeinfo.isAtomicU32()\r\n ) {\r\n throw new Error(`invalid struct member type: '${arg.$str}'`);\r\n }\r\n return {\r\n name: arg.$str,\r\n type: arg.$typeinfo\r\n };\r\n })\r\n );\r\n for (const shaderType of [ShaderType.Vertex, ShaderType.Fragment, ShaderType.Compute]) {\r\n let structDef: Nullable<AST.ASTStructDefine> = null;\r\n let ctor: Nullable<ShaderTypeFunc> = null;\r\n const structInfo = this._structInfo[shaderType];\r\n if (structInfo) {\r\n if (\r\n getCurrentProgramBuilder()!.shaderType === shaderType &&\r\n structInfo.structs[structType.structName!]\r\n ) {\r\n throw new errors.PBParamValueError(\r\n 'defineStruct',\r\n 'structName',\r\n `cannot re-define struct '${structType.structName}'`\r\n );\r\n }\r\n for (const type of structInfo.types) {\r\n if (!type.builtin && this.isIdenticalStruct(type.getType(), structType, false)) {\r\n structDef = type;\r\n ctor = structInfo.structs[type.getType().structName!];\r\n break;\r\n }\r\n }\r\n }\r\n if (structDef) {\r\n if (structDef.type.layout !== layout) {\r\n throw new Error(`Can not redefine struct ${structDef.type.structName} with different layout`);\r\n }\r\n if (shaderType !== getCurrentProgramBuilder()!.shaderType) {\r\n if (!this._structInfo[getCurrentProgramBuilder()!.shaderType]) {\r\n this._structInfo[getCurrentProgramBuilder()!.shaderType] = { structs: {}, types: [] };\r\n }\r\n if (this._structInfo[getCurrentProgramBuilder()!.shaderType].types.indexOf(structDef) < 0) {\r\n this._structInfo[getCurrentProgramBuilder()!.shaderType].types.push(structDef);\r\n this._structInfo[getCurrentProgramBuilder()!.shaderType].structs[\r\n structDef.getType().structName!\r\n ] = ctor!;\r\n }\r\n }\r\n return ctor!;\r\n }\r\n }\r\n return this.internalDefineStruct(\r\n structName ?? this.generateStructureName(),\r\n layout,\r\n this._shaderType,\r\n false,\r\n ...members\r\n );\r\n }\r\n /**\r\n * Defines a structure type\r\n * @param structType - The structure type info\r\n * @returns The structure type constructor\r\n */\r\n defineStructByType(structType: PBStructTypeInfo): ShaderTypeFunc {\r\n const typeCopy = structType.extends(structType.structName || this.generateStructureName(), []);\r\n for (const shaderType of [ShaderType.Vertex, ShaderType.Fragment, ShaderType.Compute]) {\r\n let structDef: Nullable<AST.ASTStructDefine> = null;\r\n let ctor: Nullable<ShaderTypeFunc> = null;\r\n const structInfo = this._structInfo[shaderType];\r\n if (structInfo) {\r\n if (\r\n getCurrentProgramBuilder()!.shaderType === shaderType &&\r\n structInfo.structs[typeCopy.structName!]\r\n ) {\r\n throw new errors.PBParamValueError(\r\n 'defineStruct',\r\n 'structName',\r\n `cannot re-define struct '${typeCopy.structName}'`\r\n );\r\n }\r\n for (const type of structInfo.types) {\r\n if (!type.builtin && this.isIdenticalStruct(type.getType(), typeCopy, false)) {\r\n structDef = type;\r\n ctor = structInfo.structs[type.getType().structName!];\r\n break;\r\n }\r\n }\r\n }\r\n if (structDef) {\r\n if (structDef.type.layout !== typeCopy.layout) {\r\n throw new Error(`Can not redefine struct ${structDef.type.structName} with different layout`);\r\n }\r\n if (shaderType !== getCurrentProgramBuilder()!.shaderType) {\r\n if (!this._structInfo[getCurrentProgramBuilder()!.shaderType]) {\r\n this._structInfo[getCurrentProgramBuilder()!.shaderType] = { structs: {}, types: [] };\r\n }\r\n this._structInfo[getCurrentProgramBuilder()!.shaderType].types.push(structDef);\r\n this._structInfo[getCurrentProgramBuilder()!.shaderType].structs[structDef.getType().structName!] =\r\n ctor!;\r\n }\r\n return ctor!;\r\n }\r\n }\r\n return this.internalDefineStructByType(this._shaderType, false, typeCopy);\r\n }\r\n /** @internal */\r\n internalDefineStruct(\r\n structName: string,\r\n layout: PBStructLayout,\r\n shaderTypeMask: number,\r\n builtin: boolean,\r\n ...args: PBShaderExp[]\r\n ): ShaderTypeFunc {\r\n const structType = new PBStructTypeInfo(\r\n structName,\r\n layout,\r\n args.map((arg) => {\r\n if (\r\n !arg.$typeinfo.isPrimitiveType() &&\r\n !arg.$typeinfo.isArrayType() &&\r\n !arg.$typeinfo.isStructType() &&\r\n !arg.$typeinfo.isAtomicI32() &&\r\n !arg.$typeinfo.isAtomicU32()\r\n ) {\r\n throw new Error(`invalid struct member type: '${arg.$str}'`);\r\n }\r\n return {\r\n name: arg.$str,\r\n type: arg.$typeinfo\r\n };\r\n })\r\n );\r\n return this.internalDefineStructByType(shaderTypeMask, builtin, structType);\r\n }\r\n /** @internal */\r\n internalDefineStructByType(\r\n shaderTypeMask: number,\r\n builtin: boolean,\r\n structType: PBStructTypeInfo\r\n ): ShaderTypeFunc {\r\n const struct = makeConstructor(\r\n function structConstructor(...blockArgs: any[]) {\r\n let e: PBShaderExp;\r\n if (blockArgs.length === 1 && typeof blockArgs[0] === 'string') {\r\n e = new PBShaderExp(blockArgs[0], structType);\r\n } else {\r\n e = new PBShaderExp('', structType);\r\n e.$ast = new AST.ASTShaderExpConstructor(\r\n e.$typeinfo,\r\n blockArgs.map((arg) => (arg instanceof PBShaderExp ? arg.$ast : arg))\r\n );\r\n }\r\n return e;\r\n } as ShaderTypeFunc,\r\n structType\r\n );\r\n for (const shaderType of [ShaderType.Vertex, ShaderType.Fragment, ShaderType.Compute]) {\r\n if (shaderTypeMask & shaderType) {\r\n let structInfo = this._structInfo[shaderType];\r\n if (!structInfo) {\r\n structInfo = { structs: {}, types: [] };\r\n this._structInfo[shaderType] = structInfo;\r\n }\r\n if (structInfo.structs[structType.structName!]) {\r\n throw new errors.PBParamValueError(\r\n 'defineStruct',\r\n 'structName',\r\n `cannot re-define struct '${structType.structName}'`\r\n );\r\n }\r\n structInfo.types.push(new AST.ASTStructDefine(structType, builtin));\r\n structInfo.structs[structType.structName!] = struct;\r\n }\r\n }\r\n // this.changeStructLayout(structType, layout);\r\n return struct;\r\n }\r\n /** @internal */\r\n getFunction(name: string): Nullable<AST.ASTFunction[]> {\r\n return this._globalScope ? this._globalScope.$getFunctions(name) : null;\r\n }\r\n /** @internal */\r\n get structInfo(): StructDef {\r\n return this._structInfo[this._shaderType];\r\n }\r\n /** @internal */\r\n getBlockName(instanceName: string): string {\r\n return `ch_block_name_${instanceName}`;\r\n }\r\n /** @internal */\r\n defineBuiltinStruct(\r\n shaderType: ShaderType,\r\n inOrOut: 'in' | 'out'\r\n ): Nullable<[ShaderTypeFunc, PBShaderExp, string, PBShaderExp]> {\r\n const structName =\r\n inOrOut === 'in'\r\n ? AST.getBuiltinInputStructName(shaderType)\r\n : AST.getBuiltinOutputStructName(shaderType);\r\n const instanceName =\r\n inOrOut === 'in'\r\n ? AST.getBuiltinInputStructInstanceName(shaderType)\r\n : AST.getBuiltinOutputStructInstanceName(shaderType);\r\n const stage =\r\n shaderType === ShaderType.Vertex\r\n ? 'vertex'\r\n : shaderType === ShaderType.Fragment\r\n ? 'fragment'\r\n : 'compute';\r\n const builtinVars = AST.builtinVariables['webgpu'];\r\n const args: { name: string; type: PBPrimitiveTypeInfo | PBArrayTypeInfo | PBStructTypeInfo }[] = [];\r\n const prefix: string[] = [];\r\n for (const k in builtinVars) {\r\n const v = builtinVars[k as keyof typeof builtinVars];\r\n if (v.stage === stage && v.inOrOut === inOrOut) {\r\n args.push({ name: v.name, type: v.type });\r\n prefix.push(`@builtin(${v.semantic}) `);\r\n }\r\n }\r\n const inoutList = inOrOut === 'in' ? this._inputs : this._outputs;\r\n for (const k of inoutList) {\r\n // for debug only\r\n if (!(k[1] instanceof AST.ASTDeclareVar)) {\r\n throw new errors.PBInternalError(\r\n 'defineBuiltinStruct() failed: input/output is not declare var ast node'\r\n );\r\n }\r\n const type = k[1].value.getType();\r\n if (!type.isPrimitiveType() && !type.isArrayType() && !type.isStructType()) {\r\n throw new Error(`invalid in/out variable type: '${k[1].value.name}'`);\r\n }\r\n args.push({ name: k[1].value.name, type: type });\r\n prefix.push(\r\n `@location(${k[1].value.value.$location}) ${\r\n type.isPrimitiveType() && type.isInteger() ? '@interpolate(flat) ' : ''\r\n }`\r\n );\r\n }\r\n if (args.length > 0) {\r\n const st = this.findStructType(structName, shaderType);\r\n if (st) {\r\n st.getType().reset(structName, 'default', args);\r\n st.prefix = prefix;\r\n return null;\r\n } else {\r\n const structType = this.internalDefineStructByType(\r\n this._shaderType,\r\n false,\r\n new PBStructTypeInfo(structName, 'default', args)\r\n );\r\n this.findStructType(structName, shaderType)!.prefix = prefix;\r\n const structInstance = this.struct(structName, instanceName);\r\n const structInstanceIN =\r\n inOrOut === 'in' ? this.struct(structName, AST.getBuiltinParamName(shaderType)) : structInstance;\r\n return [structType, structInstance, structName, structInstanceIN];\r\n }\r\n } else {\r\n return null;\r\n }\r\n }\r\n /** @internal */\r\n private defineInternalStructs() {\r\n this.defineHiddenStruct(typeFrexpResult);\r\n this.defineHiddenStruct(typeFrexpResultVec2);\r\n this.defineHiddenStruct(typeFrexpResultVec3);\r\n this.defineHiddenStruct(typeFrexpResultVec4);\r\n }\r\n /** @internal */\r\n private array(...args: ExpValueNonArrayType[]) {\r\n if (args.length === 0) {\r\n throw new errors.PBParamLengthError('array');\r\n }\r\n args = args.map((arg) => this.normalizeExpValue(arg)!);\r\n let typeok = true;\r\n let type: Nullable<PBTypeInfo> = null;\r\n let isBool = true;\r\n let isFloat = true;\r\n let isInt = true;\r\n let isUint = true;\r\n let isComposite = false;\r\n for (const arg of args) {\r\n if (arg instanceof PBShaderExp) {\r\n const argType = arg.$ast.getType();\r\n if (!argType.isConstructible()) {\r\n typeok = false;\r\n break;\r\n }\r\n if (!type) {\r\n type = argType;\r\n } else if (!argType.isCompatibleType(type)) {\r\n typeok = false;\r\n }\r\n }\r\n }\r\n if (typeok) {\r\n if (type && type.isPrimitiveType() && type.isScalarType()) {\r\n isBool = type.primitiveType === PBPrimitiveType.BOOL;\r\n isFloat = type.primitiveType === PBPrimitiveType.F32;\r\n isUint = type.primitiveType === PBPrimitiveType.U32;\r\n isInt = type.primitiveType === PBPrimitiveType.I32;\r\n } else if (type) {\r\n isBool = false;\r\n isFloat = false;\r\n isUint = false;\r\n isInt = false;\r\n isComposite = true;\r\n }\r\n for (const arg of args) {\r\n if (!(arg instanceof PBShaderExp) && isComposite) {\r\n typeok = false;\r\n break;\r\n }\r\n if (typeof arg === 'number') {\r\n isBool = false;\r\n if ((arg | 0) === arg) {\r\n if (arg < 0) {\r\n isUint = false;\r\n isInt = isInt && arg >= 0x80000000 >> 0;\r\n } else {\r\n isUint = isUint && arg <= 0xffffffff;\r\n isInt = isInt && arg <= 0x7fffffff;\r\n }\r\n }\r\n } else if (typeof arg === 'boolean') {\r\n isFloat = false;\r\n isInt = false;\r\n isUint = false;\r\n }\r\n }\r\n }\r\n if (typeok && !isComposite) {\r\n if (isBool) {\r\n type = typeBool;\r\n } else if (isInt) {\r\n type = typeI32;\r\n } else if (isUint) {\r\n type = typeU32;\r\n } else if (isFloat) {\r\n type = typeF32;\r\n }\r\n typeok = !!type;\r\n }\r\n if (!typeok) {\r\n throw new errors.PBParamTypeError('array');\r\n }\r\n if (!type!.isPrimitiveType() && !type!.isArrayType() && !type!.isStructType()) {\r\n throw new errors.PBParamTypeError('array');\r\n }\r\n const arrayType = new PBArrayTypeInfo(type, args.length);\r\n const exp = new PBShaderExp('', arrayType);\r\n exp.$ast = new AST.ASTShaderExpConstructor(\r\n arrayType,\r\n args.map((arg) => {\r\n if (arg instanceof PBShaderExp) {\r\n return arg.$ast;\r\n }\r\n if (!type.isPrimitiveType() || !type.isScalarType()) {\r\n throw new errors.PBTypeCastError(arg, typeof arg, type);\r\n }\r\n return new AST.ASTScalar(arg, type);\r\n })\r\n );\r\n return exp;\r\n }\r\n /**\r\n * Creates a 'discard' statement\r\n */\r\n discard(): void {\r\n this.getCurrentScope().$ast.statements.push(new AST.ASTDiscard());\r\n }\r\n /** @internal */\r\n tagShaderExp(getter: PBReflectionTagGetter, tagValue: ShaderExpTagValue) {\r\n if (typeof tagValue === 'string') {\r\n this._reflection.tag(tagValue, getter);\r\n } else if (Array.isArray(tagValue)) {\r\n tagValue.forEach((tag) => this.tagShaderExp(getter, tag));\r\n } else {\r\n for (const k of Object.keys(tagValue)) {\r\n this.tagShaderExp((scope: PBGlobalScope) => {\r\n const value = getter(scope);\r\n return value[k];\r\n }, tagValue[k]);\r\n }\r\n }\r\n }\r\n /** @internal */\r\n in(location: number, name: string, variable: PBShaderExp): void {\r\n if (this._inputs[location]) {\r\n // input already exists, create an alias\r\n if (!this._inputScope![name]) {\r\n Object.defineProperty(this._inputScope, name, {\r\n get: function (this: PBInputScope) {\r\n return variable;\r\n },\r\n set: function () {\r\n throw new Error(`cannot assign to readonly variable: ${name}`);\r\n }\r\n });\r\n }\r\n //throw new Error(`input location ${location} already declared`);\r\n } else {\r\n variable.$location = location;\r\n variable.$declareType = AST.DeclareType.DECLARE_TYPE_IN;\r\n this._inputs[location] = [name, new AST.ASTDeclareVar(new AST.ASTPrimitive(variable))];\r\n Object.defineProperty(this._inputScope, name, {\r\n get: function (this: PBInputScope) {\r\n return variable;\r\n },\r\n set: function () {\r\n throw new Error(`cannot assign to readonly variable: ${name}`);\r\n }\r\n });\r\n variable.$tags.forEach((val) => this.tagShaderExp(() => variable, val));\r\n }\r\n }\r\n /** @internal */\r\n out(location: number, name: string, variable: PBShaderExp): void {\r\n if (this._outputs[location]) {\r\n throw new Error(`output location ${location} has already been used`);\r\n }\r\n variable.$location = location;\r\n variable.$declareType = AST.DeclareType.DECLARE_TYPE_OUT;\r\n this._outputs[location] = [name, new AST.ASTDeclareVar(new AST.ASTPrimitive(variable))];\r\n for (const prop of [name, String(location)]) {\r\n Object.defineProperty(this._outputScope, prop, {\r\n get: function (this: PBOutputScope) {\r\n return variable;\r\n },\r\n set: function (this: PBOutputScope, v) {\r\n getCurrentProgramBuilder()!\r\n .getCurrentScope()\r\n .$ast.statements.push(\r\n new AST.ASTAssignment(\r\n new AST.ASTLValueScalar(variable.$ast),\r\n v instanceof PBShaderExp ? v.$ast : v\r\n )\r\n );\r\n }\r\n });\r\n }\r\n }\r\n /** @internal */\r\n getDefaultSampler(t: PBShaderExp, comparison: boolean): Nullable<PBShaderExp> {\r\n const u = this._uniforms.findIndex((val) => val.texture?.exp === t);\r\n if (u < 0) {\r\n return null;\r\n //throw new Error('invalid texture uniform object');\r\n }\r\n const samplerType = comparison ? 'comparison' : 'sample';\r\n if (\r\n this._uniforms[u].texture!.autoBindSampler &&\r\n this._uniforms[u].texture!.autoBindSampler !== samplerType\r\n ) {\r\n throw new Error('multiple sampler not supported');\r\n }\r\n this._uniforms[u].texture!.autoBindSampler = samplerType;\r\n if (this._device.type === 'webgpu') {\r\n const samplerName = AST.genSamplerName(t.$str, comparison);\r\n if (!this.getGlobalScope()[samplerName]) {\r\n throw new Error(`failed to find sampler name ${samplerName}`);\r\n }\r\n return this.getGlobalScope()[samplerName];\r\n } else {\r\n return null;\r\n }\r\n }\r\n /** @internal */\r\n normalizeExpValue(value: ExpValueType): Nullable<ExpValueNonArrayType> {\r\n if (Array.isArray(value)) {\r\n const converted = value.map((val) => (Array.isArray(val) ? this.normalizeExpValue(val)! : val));\r\n return this.array(...converted);\r\n } else {\r\n return value;\r\n }\r\n }\r\n /** @internal */\r\n guessExpValueType(value: ExpValueType): PBTypeInfo {\r\n const val = this.normalizeExpValue(value)!;\r\n if (typeof val === 'boolean') {\r\n return typeBool;\r\n } else if (typeof val === 'number') {\r\n if (!Number.isInteger(val)) {\r\n return typeF32;\r\n } else if (val >= 0x80000000 >> 1 && val <= 0x7fffffff) {\r\n return typeI32;\r\n } else if (val >= 0 && val <= 0xffffffff) {\r\n return typeU32;\r\n } else {\r\n throw new errors.PBValueOutOfRange(val);\r\n }\r\n } else {\r\n return val.$ast?.getType() || val.$typeinfo;\r\n }\r\n }\r\n /** @internal */\r\n findStructType(name: string, shaderType: number): Nullable<AST.ASTStructDefine> {\r\n for (const st of [ShaderType.Vertex, ShaderType.Fragment, ShaderType.Compute]) {\r\n if (st & shaderType) {\r\n const structInfo = this._structInfo[st];\r\n if (structInfo) {\r\n for (const t of structInfo.types) {\r\n if (t.type.structName === name) {\r\n return t;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n /** @internal */\r\n findStructConstructor(name: string, shaderType: number): Nullable<ShaderTypeFunc> {\r\n for (const st of [ShaderType.Vertex, ShaderType.Fragment, ShaderType.Compute]) {\r\n if (st & shaderType) {\r\n const structInfo = this._structInfo[st];\r\n if (structInfo && structInfo.structs?.[name]) {\r\n return structInfo.structs[name];\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n /** @internal */\r\n private buildComputeSource(options: PBComputeOptions) {\r\n try {\r\n this._lastError = null;\r\n this._shaderType = ShaderType.Compute;\r\n this._scopeStack = [];\r\n this._globalScope = new PBGlobalScope();\r\n this._builtinScope = new PBBuiltinScope();\r\n this._inputs = [];\r\n this._outputs = [];\r\n this._inputScope = new PBInputScope();\r\n this._outputScope = new PBOutputScope();\r\n this._reflection.clear();\r\n this.generate(options.compute);\r\n // this.removeUnusedSamplerBindings(this._globalScope);\r\n this.mergeUniformsCompute(this._globalScope);\r\n this.updateUniformBindings([this._globalScope], [ShaderType.Compute]);\r\n return [\r\n this.generateComputeSource(this._globalScope, this._builtinScope),\r\n this.createBindGroupLayouts(options.label)\r\n ] as const;\r\n } catch (err) {\r\n if (err instanceof errors.PBError) {\r\n this._lastError = err.getMessage(this._device.type);\r\n console.error(this._lastError);\r\n return null;\r\n } else if (err instanceof Error) {\r\n this._lastError = err.toString();\r\n console.error(this._lastError);\r\n return null;\r\n } else {\r\n this._lastError = Object.prototype.toString.call(err);\r\n console.error(`Error: ${this._lastError}`);\r\n return null;\r\n }\r\n }\r\n }\r\n /** @internal */\r\n private buildRenderSource(options: PBRenderOptions) {\r\n try {\r\n this._lastError = null;\r\n\r\n this._shaderType = ShaderType.Vertex;\r\n this._scopeStack = [];\r\n this._globalScope = new PBGlobalScope();\r\n this._builtinScope = new PBBuiltinScope();\r\n this._inputs = [];\r\n this._outputs = [];\r\n this._inputScope = new PBInputScope();\r\n this._outputScope = new PBOutputScope();\r\n this._reflection.clear();\r\n this.generate(options.vertex);\r\n const vertexScope = this._globalScope;\r\n const vertexBuiltinScope = this._builtinScope;\r\n const vertexInputs = this._inputs;\r\n const vertexOutputs = this._outputs;\r\n if (this._device.type === 'webgpu') {\r\n // this.removeUnusedSamplerBindings(vertexScope);\r\n }\r\n\r\n this._shaderType = ShaderType.Fragment;\r\n this._scopeStack = [];\r\n this._globalScope = new PBGlobalScope();\r\n this._builtinScope = new PBBuiltinScope();\r\n this._inputs = [];\r\n this._outputs = [];\r\n this._inputScope = new PBInputScope();\r\n this._outputScope = new PBOutputScope();\r\n this._reflection.clear();\r\n vertexOutputs.forEach((val, index) => {\r\n this.in(\r\n index,\r\n val[0],\r\n new PBShaderExp(val[1].value.name, val[1].value.getType()).tag(...val[1].value.value.$tags)\r\n );\r\n });\r\n this.generate(options.fragment);\r\n const fragScope = this._globalScope;\r\n const fragBuiltinScope = this._builtinScope;\r\n const fragInputs = this._inputs;\r\n const fragOutputs = this._outputs;\r\n if (this._device.type === 'webgpu') {\r\n // this.removeUnusedSamplerBindings(fragScope);\r\n }\r\n\r\n this.mergeUniforms(vertexScope, fragScope);\r\n this.updateUniformBindings([vertexScope, fragScope], [ShaderType.Vertex, ShaderType.Fragment]);\r\n\r\n return [\r\n this.generateRenderSource(\r\n ShaderType.Vertex,\r\n vertexScope,\r\n vertexBuiltinScope,\r\n vertexInputs.map((val) => val[1]),\r\n vertexOutputs.map((val) => val[1])\r\n )!,\r\n this.generateRenderSource(\r\n ShaderType.Fragment,\r\n fragScope,\r\n fragBuiltinScope,\r\n fragInputs.map((val) => val[1]),\r\n fragOutputs.map((val) => val[1])\r\n )!,\r\n this.createBindGroupLayouts(options.label),\r\n this._vertexAttributes\r\n ] as const;\r\n } catch (err) {\r\n if (err instanceof errors.PBError) {\r\n this._lastError = err.getMessage(this._device.type);\r\n console.error(this._lastError);\r\n return null;\r\n } else if (err instanceof Error) {\r\n this._lastError = err.toString();\r\n console.error(this._lastError);\r\n return null;\r\n } else {\r\n this._lastError = Object.prototype.toString.call(err);\r\n console.error(`Error: ${this._lastError}`);\r\n return null;\r\n }\r\n }\r\n }\r\n /** @internal */\r\n private generate(body?: (this: PBGlobalScope, pb: ProgramBuilder) => void): void {\r\n this.pushScope(this._globalScope!);\r\n if (this._emulateDepthClamp && this._shaderType === ShaderType.Vertex) {\r\n this._globalScope!.$outputs.clamppedDepth = this.float().tag('CLAMPPED_DEPTH');\r\n }\r\n body?.call(this._globalScope!, this);\r\n this.popScope();\r\n\r\n // Global delcarations should be at the first\r\n this._globalScope!.$ast.statements = [\r\n ...this._globalScope!.$ast.statements.filter(\r\n (val) => val instanceof AST.ASTDeclareVar || val instanceof AST.ASTAssignment\r\n ),\r\n ...this._globalScope!.$ast.statements.filter(\r\n (val) => !(val instanceof AST.ASTDeclareVar) && !(val instanceof AST.ASTAssignment)\r\n )\r\n ];\r\n }\r\n /** @internal */\r\n private generateRenderSource(\r\n shaderType: ShaderType,\r\n scope: PBGlobalScope,\r\n builtinScope: PBBuiltinScope,\r\n inputs: AST.ShaderAST[],\r\n outputs: AST.ShaderAST[]\r\n ): Nullable<string> {\r\n const context = {\r\n type: shaderType,\r\n mrt: shaderType === ShaderType.Fragment && outputs.length > 1,\r\n defines: [],\r\n extensions: new Set<string>(),\r\n builtins: [...builtinScope.$_usedBuiltins],\r\n types: this._structInfo[shaderType]?.types || [],\r\n typeReplacement: new Map(),\r\n inputs: inputs,\r\n outputs: outputs,\r\n global: scope,\r\n vertexAttributes: this._vertexAttributes,\r\n workgroupSize: null\r\n };\r\n switch (this._device.type) {\r\n case 'webgl':\r\n for (const u of this._uniforms) {\r\n if (u.texture) {\r\n const type = u.texture.exp.$ast.getType();\r\n if (type.isTextureType() && type.isDepthTexture()) {\r\n if (u.texture.autoBindSampler === 'comparison') {\r\n throw new errors.PBDeviceNotSupport('depth texture comparison');\r\n }\r\n if (u.texture.autoBindSampler === 'sample') {\r\n if (type.is2DTexture()) {\r\n context.typeReplacement.set(u.texture.exp, typeTex2D);\r\n } else if (type.isCubeTexture()) {\r\n context.typeReplacement.set(u.texture.exp, typeTexCube);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return scope.$ast.toWebGL('', context);\r\n case 'webgl2':\r\n for (const u of this._uniforms) {\r\n if (u.texture) {\r\n const type = u.texture.exp.$ast.getType();\r\n if (type.isTextureType() && type.isDepthTexture() && u.texture.autoBindSampler === 'sample') {\r\n if (type.is2DTexture()) {\r\n context.typeReplacement.set(\r\n u.texture.exp,\r\n type.isArrayTexture() ? typeTex2DArray : typeTex2D\r\n );\r\n } else if (type.isCubeTexture()) {\r\n context.typeReplacement.set(u.texture.exp, typeTexCube);\r\n }\r\n }\r\n }\r\n }\r\n return scope.$ast.toWebGL2('', context);\r\n case 'webgpu':\r\n return scope.$ast.toWGSL('', context);\r\n default:\r\n return null;\r\n }\r\n }\r\n /** @internal */\r\n private generateComputeSource(scope: PBGlobalScope, builtinScope: PBBuiltinScope) {\r\n const context = {\r\n type: ShaderType.Compute,\r\n mrt: false,\r\n defines: [],\r\n extensions: new Set<string>(),\r\n builtins: [...builtinScope.$_usedBuiltins],\r\n types: this._structInfo[ShaderType.Compute]?.types || [],\r\n typeReplacement: null,\r\n inputs: [],\r\n outputs: [],\r\n global: scope,\r\n vertexAttributes: [],\r\n workgroupSize: this._workgroupSize\r\n };\r\n return scope.$ast.toWGSL('', context);\r\n }\r\n /** @internal */\r\n private mergeUniformsCompute(globalScope: PBGlobalScope) {\r\n const uniformList: { member: PBShaderExp; uniform: number }[][] = [];\r\n for (let i = 0; i < this._uniforms.length; i++) {\r\n const u = this._uniforms[i];\r\n if (\r\n u.block &&\r\n (u.block.exp.$declareType === AST.DeclareType.DECLARE_TYPE_UNIFORM ||\r\n u.block.exp.$declareType === AST.DeclareType.DECLARE_TYPE_STORAGE)\r\n ) {\r\n if (u.block.exp.$typeinfo.isStructType() && u.block.exp.$isBuffer) {\r\n continue;\r\n }\r\n if (!uniformList[u.group]) {\r\n uniformList[u.group] = [];\r\n }\r\n const exp = new PBShaderExp(u.block.exp.$str, u.block.exp.$ast.getType());\r\n exp.$declareType = u.block.exp.$declareType;\r\n exp.$isBuffer = u.block.exp.$isBuffer;\r\n exp.$bindingSize = u.block.exp.$bindingSize;\r\n exp.$readonly = u.block.exp.$readonly;\r\n uniformList[u.group].push({ member: exp, uniform: i });\r\n }\r\n }\r\n for (const k in uniformList) {\r\n if (uniformList[k].length > 0) {\r\n const types = ['std140', 'std430'] as PBStructLayout[];\r\n const nameList = [COMPUTE_UNIFORM_NAME, COMPUTE_STORAGE_NAME];\r\n const ulist: { member: PBShaderExp; uniform: number }[][] = [\r\n uniformList[k].filter((val) => val.member.$declareType === AST.DeclareType.DECLARE_TYPE_UNIFORM),\r\n uniformList[k].filter((val) => val.member.$declareType === AST.DeclareType.DECLARE_TYPE_STORAGE)\r\n ];\r\n for (let i = 0; i < 2; i++) {\r\n if (ulist[i].length === 0) {\r\n continue;\r\n }\r\n const nonBufferList = ulist[i].filter((val) => !val.member.$isBuffer);\r\n const bufferList = ulist[i].filter((val) => val.member.$isBuffer);\r\n const allLists = [nonBufferList, ...bufferList.map((val) => [val])];\r\n for (let p = 0; p < allLists.length; p++) {\r\n if (allLists[p].length === 0) {\r\n continue;\r\n }\r\n const uname = `${nameList[i]}_${k}_${p}`;\r\n const structName = this.generateStructureName();\r\n const t = getCurrentProgramBuilder()!.internalDefineStruct(\r\n structName,\r\n types[i],\r\n ShaderType.Compute,\r\n false,\r\n ...allLists[p].map((val) => val.member)\r\n );\r\n const readonly = i > 0 ? allLists[p].findIndex((val) => !val.member.$readonly) < 0 : true;\r\n const exp = t();\r\n if (i === 0) {\r\n exp.uniformBuffer(Number(k), p > 0 ? allLists[p][0].member.$bindingSize : 0);\r\n } else {\r\n exp.storageBuffer(Number(k), p > 0 ? allLists[p][0].member.$bindingSize : 0);\r\n exp.$readonly = readonly;\r\n }\r\n globalScope[uname] = exp;\r\n const index = this._uniforms.findIndex((val) => val.block?.name === uname);\r\n this._uniforms[index].mask = ShaderType.Compute;\r\n let nameMap = this._nameMap[Number(k)];\r\n if (!nameMap) {\r\n nameMap = {};\r\n this._nameMap[Number(k)] = nameMap;\r\n }\r\n let writable = false;\r\n for (let n = allLists[p].length - 1; n >= 0; n--) {\r\n const u = allLists[p][n];\r\n const exp = this._uniforms[u.uniform].block!.exp;\r\n nameMap[exp.$str] = uname;\r\n exp.$str = `${uname}.${exp.$str}`;\r\n writable ||= exp.$ast.isWritable();\r\n }\r\n if (writable) {\r\n globalScope[uname].$ast.markWritable();\r\n }\r\n }\r\n }\r\n }\r\n }\r\n this._uniforms = this._uniforms.filter((val) => {\r\n return !val.block || (val.block.exp.$typeinfo.isStructType() && val.block.exp.$isBuffer);\r\n //return !val.block || val.block.exp.$isBuffer;\r\n /*\r\n if (!val.block || (val.block.exp.$declareType !== AST.DeclareType.DECLARE_TYPE_UNIFORM && val.block.exp.$declareType !== AST.DeclareType.DECLARE_TYPE_STORAGE)) {\r\n return true;\r\n }\r\n const type = val.block.exp.$ast.getType();\r\n return (\r\n type.isTextureType() ||\r\n type.isSamplerType() ||\r\n (type.isStructType() && (type.detail.layout === 'std140' || type.detail.layout === 'std430'))\r\n );\r\n */\r\n });\r\n }\r\n /** @internal */\r\n private mergeUniforms(globalScopeVertex: PBGlobalScope, globalScopeFragmet: PBGlobalScope) {\r\n const vertexUniformList: { member: PBShaderExp; uniform: number }[][] = [];\r\n const fragUniformList: { member: PBShaderExp; uniform: number }[][] = [];\r\n const sharedUniformList: { member: PBShaderExp; uniform: number }[][] = [];\r\n //const vertexUniformList: { members: PBShaderExp[]; uniforms: number[] }[] = [];\r\n //const fragUniformList: { members: PBShaderExp[]; uniforms: number[] }[] = [];\r\n //const sharedUniformList: { members: PBShaderExp[]; uniforms: number[] }[] = [];\r\n for (let i = 0; i < this._uniforms.length; i++) {\r\n const u = this._uniforms[i];\r\n if (\r\n u.block &&\r\n (u.block.exp.$declareType === AST.DeclareType.DECLARE_TYPE_UNIFORM ||\r\n u.block.exp.$declareType === AST.DeclareType.DECLARE_TYPE_STORAGE)\r\n ) {\r\n if (u.block.exp.$typeinfo.isStructType() && u.block.exp.$isBuffer) {\r\n continue;\r\n }\r\n const v = !!(u.mask & ShaderType.Vertex);\r\n const f = !!(u.mask & ShaderType.Fragment);\r\n if (v && f) {\r\n if (!sharedUniformList[u.group]) {\r\n sharedUniformList[u.group] = []; //{ members: [], uniforms: [] };\r\n }\r\n const exp = new PBShaderExp(u.block.exp.$str, u.block.exp.$ast.getType());\r\n exp.$declareType = u.block.exp.$declareType;\r\n exp.$isBuffer = u.block.exp.$isBuffer;\r\n exp.$bindingSize = u.block.exp.$bindingSize;\r\n exp.$readonly = u.block.exp.$readonly;\r\n sharedUniformList[u.group].push({ member: exp, uniform: i });\r\n //sharedUniformList[u.group].uniforms.push(i);\r\n } else if (v) {\r\n if (!vertexUniformList[u.group]) {\r\n vertexUniformList[u.group] = []; //{ members: [], uniforms: [] };\r\n }\r\n const exp = new PBShaderExp(u.block.exp.$str, u.block.exp.$ast.getType());\r\n exp.$declareType = u.block.exp.$declareType;\r\n exp.$isBuffer = u.block.exp.$isBuffer;\r\n exp.$bindingSize = u.block.exp.$bindingSize;\r\n exp.$readonly = u.block.exp.$readonly;\r\n vertexUniformList[u.group].push({ member: exp, uniform: i });\r\n //vertexUniformList[u.group].uniforms.push(i);\r\n } else if (f) {\r\n if (!fragUniformList[u.group]) {\r\n fragUniformList[u.group] = []; //{ members: [], uniforms: [] };\r\n }\r\n const exp = new PBShaderExp(u.block.exp.$str, u.block.exp.$ast.getType());\r\n exp.$declareType = u.block.exp.$declareType;\r\n exp.$isBuffer = u.block.exp.$isBuffer;\r\n exp.$bindingSize = u.block.exp.$bindingSize;\r\n exp.$readonly = u.block.exp.$readonly;\r\n fragUniformList[u.group].push({ member: exp, uniform: i }); //members.push(exp);\r\n //fragUniformList[u.group].uniforms.push(i);\r\n }\r\n }\r\n }\r\n const uniformLists = [vertexUniformList, fragUniformList, sharedUniformList];\r\n const nameListUniform = [VERTEX_UNIFORM_NAME, FRAGMENT_UNIFORM_NAME, SHARED_UNIFORM_NAME];\r\n const nameListStorage = [VERTEX_STORAGE_NAME, FRAGMENT_STORAGE_NAME, SHARED_STORAGE_NAME];\r\n const maskList = [ShaderType.Vertex, ShaderType.Fragment, ShaderType.Vertex | ShaderType.Fragment];\r\n for (let i = 0; i < 3; i++) {\r\n for (const k in uniformLists[i]) {\r\n if (uniformLists[i][k]?.length > 0) {\r\n const ulist: { member: PBShaderExp; uniform: number }[][] = [\r\n uniformLists[i][k].filter(\r\n (val) => val.member.$declareType === AST.DeclareType.DECLARE_TYPE_UNIFORM\r\n ),\r\n uniformLists[i][k].filter(\r\n (val) => val.member.$declareType === AST.DeclareType.DECLARE_TYPE_STORAGE\r\n )\r\n ];\r\n const nameList: string[][] = [nameListUniform, nameListStorage];\r\n const layoutList: PBStructLayout[] = ['std140', 'std430'];\r\n for (let j = 0; j < 2; j++) {\r\n if (ulist[j].length === 0) {\r\n continue;\r\n }\r\n const nonBufferList = ulist[j].filter((val) => !val.member.$isBuffer);\r\n const bufferList = ulist[j].filter((val) => val.member.$isBuffer);\r\n const allLists = [nonBufferList, ...bufferList.map((val) => [val])];\r\n for (let p = 0; p < allLists.length; p++) {\r\n if (allLists[p].length === 0) {\r\n continue;\r\n }\r\n const uname = `${nameList[j][i]}_${k}_${p}`;\r\n const structName = this.generateStructureName();\r\n const t = getCurrentProgramBuilder()!.internalDefineStruct(\r\n structName,\r\n layoutList[j],\r\n maskList[i],\r\n false,\r\n ...allLists[p].map((val) => val.member)\r\n );\r\n const readonly = j > 0 ? allLists[p].findIndex((val) => !val.member.$readonly) < 0 : true;\r\n if (maskList[i] & ShaderType.Vertex) {\r\n const exp = t();\r\n if (j > 0 && !readonly) {\r\n throw new Error(`Storage buffer in vertex shader must be read-only`);\r\n }\r\n if (j === 0) {\r\n exp.uniformBuffer(Number(k), p > 0 ? allLists[p][0].member.$bindingSize : 0);\r\n } else {\r\n exp.storageBuffer(Number(k), p > 0 ? allLists[p][0].member.$bindingSize : 0);\r\n exp.$readonly = readonly;\r\n }\r\n globalScopeVertex[uname] = exp;\r\n }\r\n if (maskList[i] & ShaderType.Fragment) {\r\n const exp = t();\r\n if (j === 0) {\r\n exp.uniformBuffer(Number(k), p > 0 ? allLists[p][0].member.$bindingSize : 0);\r\n } else {\r\n exp.storageBuffer(Number(k), p > 0 ? allLists[p][0].member.$bindingSize : 0);\r\n exp.$readonly = readonly;\r\n }\r\n globalScopeFragmet[uname] = exp;\r\n }\r\n const index = this._uniforms.findIndex((val) => val.block?.name === uname);\r\n this._uniforms[index].mask = maskList[i];\r\n let nameMap = this._nameMap[Number(k)];\r\n if (!nameMap) {\r\n nameMap = {};\r\n this._nameMap[Number(k)] = nameMap;\r\n }\r\n let writable = false;\r\n for (let n = allLists[p].length - 1; n >= 0; n--) {\r\n const u = allLists[p][n];\r\n const exp = this._uniforms[u.uniform].block!.exp;\r\n nameMap[exp.$str] = uname;\r\n exp.$str = `${uname}.${exp.$str}`;\r\n writable ||= exp.$ast.isWritable();\r\n }\r\n if (writable) {\r\n if (maskList[i] & ShaderType.Vertex) {\r\n globalScopeVertex[uname].$ast.markWritable();\r\n } else {\r\n globalScopeFragmet[uname].$ast.markWritable();\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n this._uniforms = this._uniforms.filter((val) => {\r\n return !val.block || (val.block.exp.$typeinfo.isStructType() && val.block.exp.$isBuffer);\r\n /*\r\n if (!val.block) {\r\n return true;\r\n }\r\n const type = val.block.exp.$ast.getType();\r\n return (\r\n type.isTextureType() ||\r\n type.isSamplerType() ||\r\n (type.isStructType() && (type.detail.layout === 'std140' || type.detail.layout === 'std430'))\r\n );\r\n */\r\n });\r\n }\r\n /** @internal */\r\n private updateUniformBindings(scopes: PBGlobalScope[], shaderTypes: ShaderType[]) {\r\n this._uniforms = this._uniforms.filter((val) => !!val.mask);\r\n const bindings: number[] = Array.from<number>({ length: MAX_BINDING_GROUPS }).fill(0);\r\n for (const u of this._uniforms) {\r\n u.binding = bindings[u.group]++;\r\n }\r\n for (let i = 0; i < scopes.length; i++) {\r\n const scope = scopes[i];\r\n const type = shaderTypes[i];\r\n for (const u of this._uniforms) {\r\n if (u.mask & type) {\r\n const uniforms = (scope.$ast as AST.ASTGlobalScope).uniforms;\r\n const name = u.block ? u.block.name : u.texture ? u.texture.exp.$str : u.sampler!.$str;\r\n const index = uniforms.findIndex((val) => val.value.name === name);\r\n if (index < 0) {\r\n throw new Error(`updateUniformBindings() failed: unable to find uniform ${name}`);\r\n }\r\n (uniforms[index] as AST.ASTDeclareVar).binding = u.binding;\r\n }\r\n }\r\n }\r\n }\r\n /** @internal */\r\n private createBindGroupLayouts(label: string | undefined): BindGroupLayout[] {\r\n const layouts: BindGroupLayout[] = [];\r\n const dynamicOffsetIndex = [0, 0, 0, 0];\r\n for (const uniformInfo of this._uniforms) {\r\n let layout = layouts[uniformInfo.group];\r\n if (!layout) {\r\n layout = {\r\n label: `${label || 'unknown'}[${uniformInfo.group}]`,\r\n entries: []\r\n };\r\n if (this._nameMap[uniformInfo.group]) {\r\n layout.nameMap = this._nameMap[uniformInfo.group];\r\n }\r\n layouts[uniformInfo.group] = layout;\r\n }\r\n const entry: BindGroupLayoutEntry = {\r\n binding: uniformInfo.binding,\r\n visibility: uniformInfo.mask,\r\n name: ''\r\n } as BindGroupLayoutEntry;\r\n if (uniformInfo.block) {\r\n entry.type = (uniformInfo.block.exp.$typeinfo as PBStructTypeInfo).clone(\r\n this.getBlockName(uniformInfo.block.name)\r\n );\r\n const isStorage = uniformInfo.block.exp.$declareType === AST.DeclareType.DECLARE_TYPE_STORAGE;\r\n entry.buffer = {\r\n type: isStorage ? (uniformInfo.block.exp.$readonly ? 'read-only-storage' : 'storage') : 'uniform',\r\n minBindingSize: uniformInfo.block.bindingSize,\r\n hasDynamicOffset: !!uniformInfo.block.bindingSize,\r\n uniformLayout: entry.type.toBufferLayout(0, (entry.type as PBStructTypeInfo).layout)!,\r\n dynamicOffsetIndex: uniformInfo.block.bindingSize ? dynamicOffsetIndex[uniformInfo.group]++ : -1\r\n };\r\n entry.name = uniformInfo.block.name;\r\n } else if (uniformInfo.texture) {\r\n entry.type = uniformInfo.texture.exp.$typeinfo;\r\n if (!entry.type.isTextureType()) {\r\n throw new Error('internal error');\r\n }\r\n if (entry.type.isStorageTexture()) {\r\n let viewDimension: NonNullable<typeof entry.texture>['viewDimension'];\r\n if (entry.type.isArrayTexture()) {\r\n viewDimension = entry.type.isCubeTexture() ? 'cube-array' : '2d-array';\r\n } else if (entry.type.is3DTexture()) {\r\n viewDimension = '3d';\r\n } else if (entry.type.isCubeTexture()) {\r\n viewDimension = 'cube';\r\n } else if (entry.type.is1DTexture()) {\r\n viewDimension = '1d';\r\n } else {\r\n viewDimension = '2d';\r\n }\r\n entry.storageTexture = {\r\n access: 'write-only',\r\n viewDimension: viewDimension,\r\n format: entry.type.storageTexelFormat!\r\n };\r\n } else if (entry.type.isExternalTexture()) {\r\n entry.externalTexture = {\r\n autoBindSampler: uniformInfo.texture.autoBindSampler\r\n ? AST.genSamplerName(uniformInfo.texture.exp.$str, false)\r\n : null\r\n };\r\n } else {\r\n const sampleType =\r\n this._device.type === 'webgpu'\r\n ? uniformInfo.texture.exp.$sampleType\r\n : uniformInfo.texture.autoBindSampler && entry.type.isDepthTexture()\r\n ? 'float'\r\n : uniformInfo.texture.exp.$sampleType;\r\n let viewDimension: NonNullable<typeof entry.texture>['viewDimension'];\r\n if (entry.type.isArrayTexture()) {\r\n viewDimension = entry.type.isCubeTexture() ? 'cube-array' : '2d-array';\r\n } else if (entry.type.is3DTexture()) {\r\n viewDimension = '3d';\r\n } else if (entry.type.isCubeTexture()) {\r\n viewDimension = 'cube';\r\n } else if (entry.type.is1DTexture()) {\r\n viewDimension = '1d';\r\n } else {\r\n viewDimension = '2d';\r\n }\r\n entry.texture = {\r\n sampleType: sampleType,\r\n viewDimension: viewDimension,\r\n multisampled: false,\r\n autoBindSampler: null,\r\n autoBindSamplerComparison: null\r\n };\r\n if (this._device.type === 'webgpu' || uniformInfo.texture.autoBindSampler === 'sample') {\r\n entry.texture.autoBindSampler = AST.genSamplerName(uniformInfo.texture.exp.$str, false);\r\n }\r\n if (\r\n (this._device.type === 'webgpu' && entry.type.isDepthTexture()) ||\r\n uniformInfo.texture.autoBindSampler === 'comparison'\r\n ) {\r\n entry.texture.autoBindSamplerComparison = AST.genSamplerName(uniformInfo.texture.exp.$str, true);\r\n }\r\n }\r\n entry.name = uniformInfo.texture.exp.$str;\r\n } else if (uniformInfo.sampler) {\r\n entry.type = uniformInfo.sampler.$typeinfo;\r\n if (!entry.type.isSamplerType()) {\r\n throw new Error('internal error');\r\n }\r\n entry.sampler = {\r\n type:\r\n entry.type.accessMode === PBSamplerAccessMode.SAMPLE\r\n ? uniformInfo.sampler.$sampleType === 'float'\r\n ? 'filtering'\r\n : 'non-filtering'\r\n : 'comparison'\r\n };\r\n entry.name = uniformInfo.sampler.$str;\r\n } else {\r\n throw new errors.PBInternalError('invalid uniform entry type');\r\n }\r\n layout.entries.push(entry);\r\n }\r\n for (let i = 0; i < layouts.length; i++) {\r\n if (!layouts[i]) {\r\n layouts[i] = {\r\n label: `${label || 'unknown'}[${i}]`,\r\n entries: []\r\n };\r\n }\r\n }\r\n return layouts;\r\n }\r\n /** @internal */\r\n _getFunctionOverload(\r\n funcName: string,\r\n args: ExpValueNonArrayType[]\r\n ): Nullable<[AST.ASTFunction, AST.ASTExpression[]]> {\r\n const thisArgs = args.filter((val) => {\r\n if (val instanceof PBShaderExp) {\r\n const type = val.$ast.getType();\r\n if (\r\n type.isStructType() &&\r\n this._structInfo[this._shaderType]?.types.findIndex((t) => t.type.structName === type.structName) <\r\n 0\r\n ) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n });\r\n const fn = this.getGlobalScope().$getFunctions(funcName);\r\n return fn ? this._matchFunctionOverloading(fn, thisArgs) : null;\r\n }\r\n /** @internal */\r\n _matchFunctionOverloading(\r\n overloadings: AST.ASTFunction[],\r\n args: ExpValueNonArrayType[]\r\n ): Nullable<[AST.ASTFunction, AST.ASTExpression[]]> {\r\n for (const overload of overloadings) {\r\n if (args.length !== overload.funcType!.argTypes.length) {\r\n continue;\r\n }\r\n const result: AST.ASTExpression[] = [];\r\n let matches = true;\r\n for (let i = 0; i < args.length; i++) {\r\n const argInfo = overload.funcType!.argTypes[i];\r\n const argType =\r\n argInfo.byRef && argInfo.type instanceof PBPointerTypeInfo\r\n ? argInfo.type.pointerType\r\n : argInfo.type;\r\n const arg = args[i];\r\n if (typeof arg === 'boolean') {\r\n if (!argType.isPrimitiveType() || argType.primitiveType !== PBPrimitiveType.BOOL) {\r\n matches = false;\r\n break;\r\n }\r\n result.push(new AST.ASTScalar(arg, typeBool));\r\n } else if (typeof arg === 'number') {\r\n if (\r\n !argType.isPrimitiveType() ||\r\n !argType.isScalarType() ||\r\n argType.scalarType === PBPrimitiveType.BOOL\r\n ) {\r\n matches = false;\r\n break;\r\n }\r\n if (argType.scalarType === PBPrimitiveType.I32) {\r\n if (!Number.isInteger(arg) || arg < 0x80000000 >> 0 || arg > 0x7fffffff) {\r\n matches = false;\r\n break;\r\n }\r\n result.push(new AST.ASTScalar(arg, typeI32));\r\n } else if (argType.scalarType === PBPrimitiveType.U32) {\r\n if (!Number.isInteger(arg) || arg < 0 || arg > 0xffffffff) {\r\n matches = false;\r\n break;\r\n }\r\n result.push(new AST.ASTScalar(arg, typeU32));\r\n } else {\r\n result.push(new AST.ASTScalar(arg, argType));\r\n }\r\n } else {\r\n if (!argType.isCompatibleType(arg.$ast.getType())) {\r\n matches = false;\r\n break;\r\n }\r\n result.push(arg.$ast);\r\n }\r\n }\r\n if (matches) {\r\n return [overload, result];\r\n }\r\n }\r\n return null;\r\n }\r\n /** @internal */\r\n $callFunction(funcName: string, args: AST.ASTExpression[], func: AST.ASTFunction): PBShaderExp {\r\n if (this.getCurrentScope() === this.getGlobalScope()) {\r\n throw new errors.PBNonScopedFunctionCall(funcName);\r\n }\r\n const exp = new PBShaderExp('', func.returnType!);\r\n exp.$ast = new AST.ASTCallFunction(funcName, args, func, getCurrentProgramBuilder()!.getDevice().type);\r\n this.getCurrentScope().$ast.statements.push(exp.$ast);\r\n return exp;\r\n }\r\n /** @internal */\r\n $callFunctionNoCheck(funcName: string, args: AST.ASTExpression[], retType: PBTypeInfo): PBShaderExp {\r\n if (this.getCurrentScope() === this.getGlobalScope()) {\r\n throw new errors.PBNonScopedFunctionCall(funcName);\r\n }\r\n const exp = new PBShaderExp('', retType);\r\n exp.$ast = new AST.ASTCallFunction(\r\n funcName,\r\n args,\r\n null,\r\n getCurrentProgramBuilder()!.getDevice().type,\r\n retType\r\n );\r\n this.getCurrentScope().$ast.statements.push(exp.$ast);\r\n return exp;\r\n }\r\n}\r\n\r\n/**\r\n * Base class for scope of the shader program\r\n * @public\r\n */\r\nexport class PBScope extends Proxiable<PBScope> {\r\n /** @internal */\r\n protected $_variables: Record<string, PBShaderExp>;\r\n /** @internal */\r\n protected $_parentScope: Nullable<PBScope>;\r\n /** @internal */\r\n protected $_AST: Nullable<AST.ASTScope>;\r\n /** @internal */\r\n protected $_localScope: Nullable<PBLocalScope>;\r\n [props: string]: any;\r\n /** @internal */\r\n constructor(astScope: Nullable<AST.ASTScope>, parent?: Nullable<PBScope>) {\r\n super();\r\n this.$_parentScope = parent || null;\r\n this.$_variables = {};\r\n this.$_AST = astScope;\r\n this.$_localScope = null;\r\n }\r\n /** Get the program builder */\r\n get $builder(): ProgramBuilder {\r\n return getCurrentProgramBuilder()!;\r\n }\r\n /** Returns the scope of the builtin variables */\r\n get $builtins(): PBBuiltinScope {\r\n return getCurrentProgramBuilder()!.builtinScope;\r\n }\r\n /** Returns the scope of the input variables */\r\n get $inputs(): PBInputScope {\r\n return getCurrentProgramBuilder()!.inputScope;\r\n }\r\n /** Returns the scope of the output variables */\r\n get $outputs(): PBOutputScope {\r\n return getCurrentProgramBuilder()!.outputScope;\r\n }\r\n /** @internal */\r\n get $parent(): Nullable<PBScope> {\r\n return this.$_parentScope;\r\n }\r\n /** @internal */\r\n get $ast(): AST.ASTScope {\r\n return this.$_AST!;\r\n }\r\n /** @internal */\r\n set $ast(ast: AST.ASTScope) {\r\n this.$_AST = ast;\r\n }\r\n /**\r\n * Get the input vertex attribute by specified semantic\r\n *\r\n * @remarks\r\n * Can only be called only in vertex shader\r\n *\r\n * @param semantic - The vertex semantic\r\n * @returns The input vertex attribute or null if not exists\r\n */\r\n $getVertexAttrib(semantic: VertexSemantic): Nullable<PBShaderExp> {\r\n return this.$inputs.$getVertexAttrib(semantic); // getCurrentProgramBuilder().getReflection().attribute(semantic);\r\n }\r\n /** Get the current local scope */\r\n get $l(): PBLocalScope {\r\n return this.$_getLocalScope()!;\r\n }\r\n /** Get the global scope */\r\n get $g(): PBGlobalScope {\r\n return this.$_getGlobalScope();\r\n }\r\n /** @internal */\r\n $local(variable: PBShaderExp, init?: ExpValueType): void {\r\n const initNonArray = getCurrentProgramBuilder()!.normalizeExpValue(init!);\r\n variable.$global = this instanceof PBGlobalScope;\r\n this.$_declare(variable, initNonArray);\r\n }\r\n /** @internal */\r\n $touch(exp: PBShaderExp): void {\r\n this.$ast.statements.push(new AST.ASTTouch(exp.$ast));\r\n }\r\n /**\r\n * Query the global variable by the name\r\n * @param name - Name of the variable\r\n * @returns The variable or null if not exists\r\n */\r\n $query(name: string): PBShaderExp {\r\n return this.$builder.getReflection().tag(name);\r\n }\r\n /** @internal */\r\n $_declareInternal(variable: PBShaderExp, init?: Nullable<ExpValueNonArrayType>): AST.ShaderAST {\r\n const key = variable.$str;\r\n if (this.$_variables[key]) {\r\n throw new Error(`cannot re-declare variable '${key}'`);\r\n }\r\n if (!(variable.$ast instanceof AST.ASTPrimitive)) {\r\n throw new Error(\r\n `invalid variable declaration: '${variable.$ast.toString(\r\n getCurrentProgramBuilder()!.getDevice().type\r\n )}'`\r\n );\r\n }\r\n const varType = variable.$typeinfo;\r\n if (varType.isPointerType()) {\r\n if (!init) {\r\n throw new Error(`cannot declare pointer type variable without initialization: '${variable.$str}'`);\r\n }\r\n if (!(init instanceof PBShaderExp)) {\r\n throw new Error(`invalid initialization for pointer type declaration: '${variable.$str}`);\r\n }\r\n const initType = init.$ast.getType();\r\n if (!initType.isPointerType() || !varType.pointerType.isCompatibleType(initType.pointerType)) {\r\n throw new Error(`incompatible pointer type assignment: '${variable.$str}'`);\r\n }\r\n variable.$typeinfo = initType;\r\n }\r\n this.$_registerVar(variable, key);\r\n if (init === undefined || init === null) {\r\n return new AST.ASTDeclareVar(variable.$ast as AST.ASTPrimitive);\r\n } else {\r\n if (\r\n init instanceof PBShaderExp &&\r\n init.$ast instanceof AST.ASTShaderExpConstructor &&\r\n init.$ast.args.length === 0\r\n ) {\r\n if (!init.$ast.getType().isCompatibleType(variable.$ast.getType())) {\r\n throw new errors.PBTypeCastError(init, init.$ast.getType(), variable.$ast.getType());\r\n }\r\n return new AST.ASTDeclareVar(variable.$ast as AST.ASTPrimitive);\r\n } else {\r\n return new AST.ASTAssignment(\r\n new AST.ASTLValueDeclare(variable.$ast as AST.ASTPrimitive),\r\n init instanceof PBShaderExp ? init.$ast : init\r\n );\r\n }\r\n }\r\n }\r\n /** @internal */\r\n $_findOrSetUniform(variable: PBShaderExp): PBShaderExp {\r\n const name = variable.$str;\r\n const uniformInfo: UniformInfo = {\r\n group: variable.$group!,\r\n binding: 0,\r\n mask: 0\r\n };\r\n if (variable.$typeinfo.isTextureType()) {\r\n uniformInfo.texture = {\r\n autoBindSampler: null,\r\n exp: variable\r\n };\r\n } else if (variable.$typeinfo.isSamplerType()) {\r\n uniformInfo.sampler = variable;\r\n } else {\r\n uniformInfo.block = {\r\n name: name,\r\n bindingSize: variable.$bindingSize,\r\n exp: variable\r\n };\r\n // throw new Error(`unsupported uniform type: ${name}`);\r\n }\r\n let found = false;\r\n for (const u of getCurrentProgramBuilder()!._uniforms) {\r\n if (u.group !== uniformInfo.group) {\r\n continue;\r\n }\r\n if (\r\n uniformInfo.block &&\r\n u.block &&\r\n u.block.name === uniformInfo.block.name &&\r\n u.block.exp.$typeinfo.isCompatibleType(uniformInfo.block.exp.$typeinfo)\r\n ) {\r\n u.mask |= getCurrentProgramBuilder()!.shaderType;\r\n variable = u.block.exp;\r\n // u.block.exp = variable;\r\n found = true;\r\n break;\r\n }\r\n if (\r\n uniformInfo.texture &&\r\n u.texture &&\r\n uniformInfo.texture.exp.$str === u.texture.exp.$str &&\r\n uniformInfo.texture.exp.$typeinfo.isCompatibleType(u.texture.exp.$typeinfo)\r\n ) {\r\n u.mask |= getCurrentProgramBuilder()!.shaderType;\r\n variable = u.texture.exp;\r\n // u.texture.exp = variable;\r\n found = true;\r\n break;\r\n }\r\n if (\r\n uniformInfo.sampler &&\r\n u.sampler &&\r\n uniformInfo.sampler.$str === u.sampler.$str &&\r\n uniformInfo.sampler.$typeinfo.isCompatibleType(u.sampler.$typeinfo)\r\n ) {\r\n u.mask |= getCurrentProgramBuilder()!.shaderType;\r\n variable = u.sampler;\r\n // u.sampler = variable;\r\n found = true;\r\n break;\r\n }\r\n }\r\n if (!found) {\r\n uniformInfo.mask = getCurrentProgramBuilder()!.shaderType;\r\n getCurrentProgramBuilder()!._uniforms.push(uniformInfo);\r\n }\r\n if (\r\n uniformInfo.texture &&\r\n !(uniformInfo.texture.exp.$typeinfo as PBTextureTypeInfo).isStorageTexture() &&\r\n getCurrentProgramBuilder()!.getDevice().type === 'webgpu'\r\n ) {\r\n // webgpu requires explicit sampler bindings\r\n const isDepth = variable.$typeinfo.isTextureType() && variable.$typeinfo.isDepthTexture();\r\n const samplerName = AST.genSamplerName(variable.$str, false);\r\n const samplerExp = getCurrentProgramBuilder()!\r\n .sampler(samplerName)\r\n .uniform(uniformInfo.group)\r\n .sampleType(variable.$sampleType);\r\n samplerExp.$sampleType = variable.$sampleType;\r\n this.$local(samplerExp);\r\n if (isDepth) {\r\n const samplerNameComp = AST.genSamplerName(variable.$str, true);\r\n const samplerExpComp = getCurrentProgramBuilder()!\r\n .samplerComparison(samplerNameComp)\r\n .uniform(uniformInfo.group)\r\n .sampleType(variable.$sampleType);\r\n this.$local(samplerExpComp);\r\n }\r\n }\r\n return variable;\r\n }\r\n /** @internal */\r\n $_declare(variable: PBShaderExp, init?: Nullable<ExpValueNonArrayType>): void {\r\n if (this.$_variables[variable.$str]) {\r\n throw new errors.PBASTError(variable.$ast, 'cannot re-declare variable');\r\n }\r\n if (\r\n variable.$declareType === AST.DeclareType.DECLARE_TYPE_UNIFORM ||\r\n variable.$declareType === AST.DeclareType.DECLARE_TYPE_STORAGE\r\n ) {\r\n const name = (variable.$ast as AST.ASTPrimitive).name;\r\n if (!(this instanceof PBGlobalScope)) {\r\n throw new Error(`uniform or storage variables can only be declared within global scope: ${name}`);\r\n }\r\n if (\r\n variable.$declareType === AST.DeclareType.DECLARE_TYPE_UNIFORM &&\r\n !variable.$typeinfo.isTextureType() &&\r\n !variable.$typeinfo.isSamplerType() &&\r\n (!variable.$typeinfo.isConstructible() || !variable.$typeinfo.isHostSharable())\r\n ) {\r\n throw new errors.PBASTError(\r\n variable.$ast,\r\n `type '${variable.$typeinfo.toTypeName(\r\n getCurrentProgramBuilder()!.getDevice().type\r\n )}' cannot be declared in uniform address space`\r\n );\r\n }\r\n if (variable.$declareType === AST.DeclareType.DECLARE_TYPE_STORAGE) {\r\n if (getCurrentProgramBuilder()!.getDevice().type !== 'webgpu') {\r\n throw new errors.PBDeviceNotSupport('storage buffer binding');\r\n } else if (!variable.$typeinfo.isHostSharable()) {\r\n throw new errors.PBASTError(\r\n variable.$ast,\r\n `type '${variable.$typeinfo.toTypeName(\r\n getCurrentProgramBuilder()!.getDevice().type\r\n )}' cannot be declared in storage address space`\r\n );\r\n }\r\n }\r\n variable = this.$_findOrSetUniform(variable);\r\n const ast = this.$_declareInternal(variable) as AST.ASTDeclareVar;\r\n ast.group = variable.$group!;\r\n ast.binding = 0;\r\n ast.blockName = getCurrentProgramBuilder()!.getBlockName(name);\r\n const type = variable.$typeinfo;\r\n if (\r\n (type.isStructType() && variable.$isBuffer) ||\r\n type.isTextureType() ||\r\n type.isSamplerType() ||\r\n (type.isStructType() && (type.detail.layout === 'std140' || type.detail.layout === 'std430'))\r\n ) {\r\n (this.$ast as AST.ASTGlobalScope).uniforms.push(ast);\r\n }\r\n variable.$tags.forEach((val) => {\r\n getCurrentProgramBuilder()!.tagShaderExp(() => variable, val);\r\n });\r\n } else {\r\n const ast = this.$_declareInternal(variable, init);\r\n this.$ast.statements.push(ast);\r\n }\r\n }\r\n /** @internal */\r\n $_registerVar(variable: PBShaderExp, name?: string) {\r\n const key = name || variable.$str;\r\n const options: any = {\r\n configurable: true,\r\n get: function (this: PBScope) {\r\n return variable;\r\n },\r\n set: function (this: PBScope, val: number | PBShaderExp) {\r\n getCurrentProgramBuilder()!\r\n .getCurrentScope()\r\n .$ast.statements.push(\r\n new AST.ASTAssignment(\r\n new AST.ASTLValueScalar(variable.$ast),\r\n val instanceof PBShaderExp ? val.$ast : val\r\n )\r\n );\r\n }\r\n };\r\n Object.defineProperty(this, key, options);\r\n this.$_variables[key] = variable;\r\n }\r\n /** @internal */\r\n $localGet(prop: string): any {\r\n if (typeof prop === 'string' && (prop[0] === '$' || prop in this)) {\r\n return this[prop];\r\n }\r\n return undefined;\r\n }\r\n /** @internal */\r\n $localSet(prop: string, value: any): boolean {\r\n if (prop[0] === '$' || prop in this) {\r\n this[prop] = value;\r\n return true;\r\n }\r\n return false;\r\n }\r\n /** @internal */\r\n protected $get(prop: string): any {\r\n const ret = this.$localGet(prop);\r\n return ret === undefined && this.$_parentScope ? this.$_parentScope.$thisProxy.$get(prop) : ret;\r\n }\r\n /** @internal */\r\n protected $set(prop: string, value: any): boolean {\r\n if (prop[0] === '$') {\r\n this[prop] = value;\r\n return true;\r\n } else {\r\n let scope: Nullable<PBScope> = this;\r\n while (scope && !(prop in scope)) {\r\n scope = scope.$_parentScope;\r\n }\r\n if (scope) {\r\n scope[prop] = value;\r\n return true;\r\n } else {\r\n if (this.$l) {\r\n this.$l[prop] = value;\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n /** @internal */\r\n protected $_getLocalScope(): Nullable<PBLocalScope> {\r\n if (!this.$_localScope) {\r\n this.$_localScope = new PBLocalScope(this);\r\n }\r\n return this.$_localScope;\r\n }\r\n /** @internal */\r\n protected $_getGlobalScope(): PBGlobalScope {\r\n return this.$builder.getGlobalScope();\r\n }\r\n}\r\n\r\n/**\r\n * The local scope of a shader\r\n * @public\r\n */\r\nexport class PBLocalScope extends PBScope {\r\n /** @internal */\r\n $_scope: PBScope;\r\n [props: string]: any;\r\n constructor(scope: PBScope) {\r\n super(null, null);\r\n this.$_scope = scope;\r\n }\r\n /** @internal */\r\n protected $get(prop: string): any {\r\n return prop[0] === '$' ? this[prop] : this.$_scope.$localGet(prop);\r\n }\r\n /** @internal */\r\n protected $set(prop: string, value: any): boolean {\r\n if (prop[0] === '$') {\r\n this[prop] = value;\r\n return true;\r\n }\r\n if (\r\n !(this.$_scope instanceof PBGlobalScope) &&\r\n value instanceof PBShaderExp &&\r\n (value.isConstructor() ||\r\n (value.$typeinfo.isTextureType() && value.$ast instanceof AST.ASTPrimitive && !value.$ast.name)) &&\r\n (value.$declareType === AST.DeclareType.DECLARE_TYPE_UNIFORM ||\r\n value.$declareType === AST.DeclareType.DECLARE_TYPE_STORAGE)\r\n ) {\r\n // We are setting uniform a uniform, should invoke in the global scope\r\n this.$g[prop] = value;\r\n return true;\r\n }\r\n const val = this.$_scope.$localGet(prop);\r\n if (val === undefined) {\r\n const type = getCurrentProgramBuilder()!.guessExpValueType(value);\r\n if (type.isCompatibleType(typeVoid)) {\r\n throw new Error(`Cannot assign void type to '${prop}'`);\r\n }\r\n const exp = new PBShaderExp(prop, type);\r\n if (value instanceof PBShaderExp && !this.$_scope.$parent) {\r\n exp.$declareType = value.$declareType;\r\n exp.$isBuffer = value.$isBuffer;\r\n exp.$bindingSize = value.$bindingSize;\r\n exp.$readonly = value.$readonly;\r\n exp.$group = value.$group!;\r\n exp.$attrib = value.$attrib;\r\n exp.$sampleType = value.$sampleType;\r\n exp.$precision = value.$precision;\r\n exp.tag(...value.$tags);\r\n }\r\n this.$_scope.$local(exp, value);\r\n return true;\r\n } else {\r\n return this.$_scope.$localSet(prop, value);\r\n }\r\n }\r\n /** @internal */\r\n $_getLocalScope(): Nullable<PBLocalScope> {\r\n return this;\r\n }\r\n}\r\n\r\n/**\r\n * The builtin scope of a shader\r\n * @public\r\n */\r\nexport interface PBBuiltinScope {\r\n position: PBShaderExp;\r\n pointSize: PBShaderExp | number;\r\n fragDepth: PBShaderExp | number;\r\n readonly fragCoord: PBShaderExp;\r\n readonly frontFacing: PBShaderExp;\r\n readonly vertexIndex: PBShaderExp;\r\n readonly instanceIndex: PBShaderExp;\r\n readonly localInvocationId: PBShaderExp;\r\n readonly globalInvocationId: PBShaderExp;\r\n readonly workGroupId: PBShaderExp;\r\n readonly numWorkGroups: PBShaderExp;\r\n readonly sampleMaskIn: PBShaderExp;\r\n sampleMaskOut: PBShaderExp;\r\n readonly sampleIndex: PBShaderExp;\r\n}\r\n\r\n/**\r\n * The builtin scope of a shader\r\n * @public\r\n */\r\nexport class PBBuiltinScope extends PBScope {\r\n /** @internal */\r\n $_usedBuiltins: Set<string>;\r\n /** @internal */\r\n $_builtinVars!: Record<string, PBShaderExp>;\r\n constructor() {\r\n super(null);\r\n this.$_usedBuiltins = new Set();\r\n const isWebGPU = getCurrentProgramBuilder()!.getDevice().type === 'webgpu';\r\n if (!isWebGPU) {\r\n this.$_builtinVars = {};\r\n const v =\r\n AST.builtinVariables[\r\n getCurrentProgramBuilder()!.getDevice().type as keyof typeof AST.builtinVariables\r\n ];\r\n for (const k in v) {\r\n const info = v[k as keyof typeof v];\r\n this.$_builtinVars[k] = new PBShaderExp(info.name, info.type);\r\n }\r\n }\r\n const v =\r\n AST.builtinVariables[getCurrentProgramBuilder()!.getDevice().type as keyof typeof AST.builtinVariables];\r\n const that = this;\r\n for (const k of Object.keys(v)) {\r\n Object.defineProperty(this, k, {\r\n get: function () {\r\n return that.$getBuiltinVar(k);\r\n },\r\n set: function (v) {\r\n if (typeof v !== 'number' && !(v instanceof PBShaderExp)) {\r\n throw new Error(`Invalid output value assignment`);\r\n }\r\n const exp = that.$getBuiltinVar(k);\r\n getCurrentProgramBuilder()!\r\n .getCurrentScope()\r\n .$ast.statements.push(\r\n new AST.ASTAssignment(new AST.ASTLValueScalar(exp.$ast), v instanceof PBShaderExp ? v.$ast : v)\r\n );\r\n }\r\n });\r\n }\r\n }\r\n /** @internal */\r\n protected $_getLocalScope(): Nullable<PBLocalScope> {\r\n return null;\r\n }\r\n /** @internal */\r\n private $getBuiltinVar(name: string) {\r\n const pb = getCurrentProgramBuilder()!;\r\n this.$_usedBuiltins.add(name);\r\n const isWebGPU = pb.getDevice().type === 'webgpu';\r\n if (isWebGPU) {\r\n const v = AST.builtinVariables[pb.getDevice().type as keyof typeof AST.builtinVariables];\r\n const info = v[name as keyof typeof v];\r\n const inout = 'inOrOut' in info ? info.inOrOut : undefined;\r\n if (inout === 'in') {\r\n return pb.getCurrentFunctionScope()[AST.getBuiltinParamName(pb.shaderType)][info.name];\r\n }\r\n const structName = AST.getBuiltinOutputStructInstanceName(pb.shaderType);\r\n const scope = pb.getCurrentScope();\r\n if (!scope[structName] || !scope[structName][info.name]) {\r\n throw new Error(`invalid use of builtin variable ${name}`);\r\n }\r\n return scope[structName][info.name];\r\n } else {\r\n if (pb.getDevice().type === 'webgl2' && (name === 'vertexIndex' || name === 'instanceIndex')) {\r\n return pb.uint(this.$_builtinVars[name]);\r\n } else {\r\n return this.$_builtinVars[name];\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * The input scope of a shader\r\n * @public\r\n */\r\nexport class PBInputScope extends PBScope {\r\n /** @internal */\r\n private $_names: Record<string, string>;\r\n private $_aliases: Record<string, string>;\r\n /** @internal */\r\n constructor() {\r\n super(null);\r\n this.$_names = {};\r\n this.$_aliases = {};\r\n }\r\n /** @internal */\r\n $getVertexAttrib(attrib: VertexSemantic): Nullable<PBShaderExp> {\r\n const name = this.$_names[attrib];\r\n return name ? this[name] : null;\r\n }\r\n /** @internal */\r\n protected $_getLocalScope(): Nullable<PBLocalScope> {\r\n return null;\r\n }\r\n /** @internal */\r\n protected $get(prop: string) {\r\n if (prop[0] === '$') {\r\n return this[prop];\r\n }\r\n if (this.$_aliases[prop]) {\r\n prop = this.$_aliases[prop];\r\n }\r\n const pb = this.$builder;\r\n if (pb.getDevice().type === 'webgpu') {\r\n const param = pb.getCurrentFunctionScope()[AST.getBuiltinParamName(pb.shaderType)];\r\n const prefix = pb.shaderKind === 'vertex' ? input_prefix : output_prefix_vs;\r\n const name = `${prefix}${prop}`;\r\n if ((param.$typeinfo as PBStructTypeInfo).structMembers.findIndex((val) => val.name === name) < 0) {\r\n return undefined;\r\n }\r\n return param[`${prefix}${prop}`];\r\n }\r\n return super.$get(prop);\r\n }\r\n /** @internal */\r\n protected $set(prop: string, value: any): boolean {\r\n if (prop[0] === '$') {\r\n this[prop] = value;\r\n } else {\r\n if (!(value instanceof PBShaderExp)) {\r\n throw new Error(`invalid vertex input value`);\r\n }\r\n const st = getCurrentProgramBuilder()!.shaderType;\r\n if (st !== ShaderType.Vertex) {\r\n throw new Error(`shader input variables can only be declared in vertex shader: \"${prop}\"`);\r\n }\r\n const attrib = getVertexAttribByName(value.$attrib);\r\n if (attrib === undefined) {\r\n throw new Error(`can not declare shader input variable: invalid vertex attribute: \"${prop}\"`);\r\n }\r\n if (getCurrentProgramBuilder()!._vertexAttributes.indexOf(attrib) >= 0) {\r\n const lastName = this.$_names[value.$attrib!];\r\n if (prop !== lastName) {\r\n const p = this[lastName] as PBShaderExp;\r\n if (p.$typeinfo.typeId !== value.$typeinfo.typeId) {\r\n throw new Error(\r\n `can not declare shader input variable: attribute already declared with different type: \"${prop}\"`\r\n );\r\n }\r\n this.$_aliases[prop] = lastName;\r\n }\r\n return true;\r\n }\r\n if (!(value instanceof PBShaderExp) || !(value.$ast instanceof AST.ASTShaderExpConstructor)) {\r\n throw new Error(`invalid shader input variable declaration: \"${prop}\"`);\r\n }\r\n const type = value.$ast.getType();\r\n if (!type.isPrimitiveType() || type.isMatrixType() || type.primitiveType === PBPrimitiveType.BOOL) {\r\n throw new Error(`type cannot be used as pipeline input/output: ${prop}`);\r\n }\r\n this.$_names[value.$attrib!] = prop;\r\n const location = getCurrentProgramBuilder()!._inputs.length;\r\n const exp = new PBShaderExp(`${input_prefix}${prop}`, type).tag(...value.$tags);\r\n getCurrentProgramBuilder()!.in(location, prop, exp);\r\n getCurrentProgramBuilder()!._vertexAttributes.push(attrib);\r\n //getCurrentProgramBuilder().getReflection().setAttrib(value.$attrib, exp);\r\n // modify input struct for webgpu\r\n if (getCurrentProgramBuilder()!.getDevice().type === 'webgpu') {\r\n if (getCurrentProgramBuilder()!.findStructType(AST.getBuiltinInputStructName(st), st)) {\r\n getCurrentProgramBuilder()!.defineBuiltinStruct(st, 'in');\r\n }\r\n }\r\n }\r\n return true;\r\n }\r\n}\r\n\r\n/**\r\n * The output scope of a shader\r\n * @public\r\n */\r\nexport class PBOutputScope extends PBScope {\r\n constructor() {\r\n super(null);\r\n }\r\n /** @internal */\r\n protected $_getLocalScope(): Nullable<PBLocalScope> {\r\n return null;\r\n }\r\n /** @internal */\r\n protected $set(prop: string, value: any): boolean {\r\n if (prop[0] === '$' /* || prop in this*/) {\r\n this[prop] = value;\r\n } else {\r\n const pb = getCurrentProgramBuilder()!;\r\n if (!(prop in this)) {\r\n if (\r\n pb.getCurrentScope() === pb.getGlobalScope() &&\r\n (!(value instanceof PBShaderExp) || !(value.$ast instanceof AST.ASTShaderExpConstructor))\r\n ) {\r\n throw new Error(`invalid shader output variable declaration: ${prop}`);\r\n }\r\n const type = value.$ast.getType();\r\n if (!type.isPrimitiveType() || type.isMatrixType() || type.primitiveType === PBPrimitiveType.BOOL) {\r\n throw new Error(`type cannot be used as pipeline input/output: ${prop}`);\r\n }\r\n const location = pb._outputs.length;\r\n pb.out(\r\n location,\r\n prop,\r\n new PBShaderExp(\r\n `${pb.shaderKind === 'vertex' ? output_prefix_vs : output_prefix_fs}${prop}`,\r\n type\r\n ).tag(...value.$tags)\r\n );\r\n // modify output struct for webgpu\r\n if (pb.getDevice().type === 'webgpu') {\r\n const st = pb.shaderType;\r\n if (pb.findStructType(AST.getBuiltinInputStructName(st), st)) {\r\n pb.defineBuiltinStruct(st, 'out');\r\n }\r\n }\r\n }\r\n if (pb.getCurrentScope() !== pb.getGlobalScope()) {\r\n const ast = value.$ast;\r\n if (!(ast instanceof AST.ASTShaderExpConstructor) || ast.args.length > 0) {\r\n this[prop] = value;\r\n }\r\n }\r\n }\r\n return true;\r\n }\r\n}\r\n\r\n/**\r\n * The global scope of a shader\r\n * @public\r\n */\r\nexport class PBGlobalScope extends PBScope {\r\n /** @internal */\r\n $_inputStructInfo: Nullable<[ShaderTypeFunc, PBShaderExp, string, PBShaderExp]>;\r\n /** @internal */\r\n constructor() {\r\n super(new AST.ASTGlobalScope());\r\n this.$_inputStructInfo = null;\r\n }\r\n /** @internal */\r\n get $inputStructInfo(): Nullable<[ShaderTypeFunc, PBShaderExp, string, PBShaderExp]> {\r\n if (!this.$_inputStructInfo) {\r\n this.$_inputStructInfo = this.$builder.defineBuiltinStruct(this.$builder.shaderType, 'in');\r\n }\r\n return this.$_inputStructInfo;\r\n }\r\n /** @internal */\r\n get $inputStruct(): ShaderTypeFunc {\r\n return this.$inputStructInfo![0];\r\n }\r\n /** @internal */\r\n $mainFunc(body?: (this: PBFunctionScope) => void) {\r\n const pb = getCurrentProgramBuilder()!;\r\n if (pb.getDevice().type === 'webgpu') {\r\n const inputStruct = this.$inputStructInfo;\r\n //this.$local(inputStruct[1]);\r\n const isCompute = pb.shaderType === ShaderType.Compute;\r\n const outputStruct = isCompute ? null : pb.defineBuiltinStruct(pb.shaderType, 'out');\r\n if (outputStruct) {\r\n this.$local(outputStruct[1]);\r\n }\r\n // this.$internalCreateFunction('chMainStub', [], false, body);\r\n this.$internalCreateFunction(\r\n 'main',\r\n inputStruct ? [inputStruct[3]] : [],\r\n true,\r\n function (this: PBFunctionScope) {\r\n /*\r\n if (inputStruct) {\r\n this[inputStruct[1].$str] = this[inputStruct[3].$str];\r\n }\r\n */\r\n if (pb.shaderType === ShaderType.Fragment && pb.emulateDepthClamp) {\r\n this.$builtins.fragDepth = pb.clamp(this.$inputs.clamppedDepth, 0, 1);\r\n }\r\n body?.call(this);\r\n //this.chMainStub();\r\n if (pb.shaderType === ShaderType.Vertex) {\r\n if (pb.depthRangeCorrection) {\r\n this.$builtins.position.z = pb.mul(\r\n pb.add(this.$builtins.position.z, this.$builtins.position.w),\r\n 0.5\r\n );\r\n }\r\n if (pb.emulateDepthClamp) {\r\n //z = gl_Position.z / gl_Position.w;\r\n //z = (gl_DepthRange.diff * z + gl_DepthRange.near + gl_DepthRange.far) * 0.5;\r\n this.$outputs.clamppedDepth = pb.div(this.$builtins.position.z, this.$builtins.position.w);\r\n this.$builtins.position.z = 0;\r\n }\r\n }\r\n\r\n if (!isCompute) {\r\n this.$return(outputStruct![1]);\r\n }\r\n }\r\n );\r\n } else {\r\n this.$internalCreateFunction('main', [], true, function () {\r\n if (pb.shaderType === ShaderType.Fragment && pb.emulateDepthClamp) {\r\n this.$builtins.fragDepth = pb.clamp(this.$inputs.clamppedDepth, 0, 1);\r\n }\r\n body?.call(this);\r\n if (pb.shaderType === ShaderType.Vertex && pb.emulateDepthClamp) {\r\n this.$outputs.clamppedDepth = pb.div(\r\n pb.add(pb.div(this.$builtins.position.z, this.$builtins.position.w), 1),\r\n 2\r\n );\r\n this.$builtins.position.z = 0;\r\n }\r\n });\r\n }\r\n }\r\n /** @internal */\r\n $createFunctionIfNotExists(name: string, params: PBShaderExp[], body?: (this: PBFunctionScope) => void) {\r\n this.$internalCreateFunction(name, params, false, body);\r\n }\r\n /** @internal */\r\n $getFunctions(name: string): AST.ASTFunction[] {\r\n return (this.$ast as AST.ASTGlobalScope).findFunctions(name);\r\n }\r\n /** @internal */\r\n $getCurrentFunctionScope(): PBScope {\r\n let scope = getCurrentProgramBuilder()!.getCurrentScope();\r\n while (scope && !(scope instanceof PBFunctionScope)) {\r\n scope = scope.$parent!;\r\n }\r\n return scope;\r\n }\r\n /** @internal */\r\n private $internalCreateFunction(\r\n this: PBGlobalScope,\r\n name: string,\r\n params: PBShaderExp[],\r\n isMain: boolean,\r\n body?: (this: PBFunctionScope) => void\r\n ) {\r\n const pb = getCurrentProgramBuilder()!;\r\n if (pb.getDevice().type === 'webgpu' && !isMain) {\r\n params.push(this.$inputStruct(AST.getBuiltinParamName(pb.shaderType)));\r\n }\r\n params.forEach((param) => {\r\n if (!(param.$ast instanceof AST.ASTPrimitive)) {\r\n throw new Error(`${name}(): invalid function definition`);\r\n }\r\n let ast: AST.ASTPrimitive | AST.ASTReferenceOf = param.$ast;\r\n if (param.$inout) {\r\n if (pb.getDevice().type === 'webgpu') {\r\n param.$typeinfo = new PBPointerTypeInfo(param.$typeinfo, PBAddressSpace.UNKNOWN);\r\n }\r\n ast = new AST.ASTReferenceOf(param.$ast);\r\n }\r\n param.$ast = new AST.ASTFunctionParameter(ast);\r\n });\r\n const overloads = this.$getFunctions(name);\r\n const currentFunctionScope = this.$getCurrentFunctionScope();\r\n const astFunc = new AST.ASTFunction(\r\n name,\r\n params.map((val) => val.$ast as AST.ASTFunctionParameter),\r\n isMain,\r\n null,\r\n false\r\n );\r\n if (currentFunctionScope) {\r\n const curIndex = this.$ast.statements.indexOf(currentFunctionScope.$ast);\r\n if (curIndex < 0) {\r\n throw new Error('Internal error');\r\n }\r\n this.$ast.statements.splice(curIndex, 0, astFunc);\r\n } else {\r\n this.$ast.statements.push(astFunc);\r\n }\r\n new PBFunctionScope(this, params, astFunc, body);\r\n\r\n if (!astFunc.returnType) {\r\n astFunc.returnType = typeVoid;\r\n }\r\n astFunc.funcType = new PBFunctionTypeInfo(\r\n astFunc.name,\r\n astFunc.returnType,\r\n params.map((param) => {\r\n const ast = param.$ast as AST.ASTFunctionParameter;\r\n return ast.paramAST instanceof AST.ASTReferenceOf\r\n ? {\r\n type: ast.paramAST.value.getType(),\r\n byRef: ast.paramAST instanceof AST.ASTReferenceOf\r\n }\r\n : {\r\n type: ast.paramAST.getType(),\r\n byRef: false\r\n };\r\n })\r\n );\r\n for (const overload of overloads) {\r\n if (overload.funcType!.argHash === astFunc.funcType.argHash) {\r\n if (overload.returnType!.isCompatibleType(astFunc.returnType)) {\r\n // Function signature already exists\r\n // console.warn(`Function '${name}' already exists`);\r\n this.$ast.statements.splice(this.$ast.statements.indexOf(astFunc), 1);\r\n return;\r\n } else {\r\n throw new Error(`Invalid function overloading: ${name}`);\r\n }\r\n }\r\n }\r\n if (overloads.length === 0) {\r\n Object.defineProperty(this, name, {\r\n get: function () {\r\n const func = this.$getFunctions(name);\r\n if (func.length === 0) {\r\n throw new Error(`function ${name} not found`);\r\n }\r\n return (...args: ExpValueType[]) => {\r\n let inputArg: Nullable<PBShaderExp> = null;\r\n if (pb.getDevice().type === 'webgpu') {\r\n let funcScope = pb.getCurrentScope();\r\n while (funcScope && !(funcScope instanceof PBFunctionScope)) {\r\n funcScope = funcScope.$parent!;\r\n }\r\n const funcArgs = (funcScope.$ast as AST.ASTFunction).args;\r\n const arg = funcArgs![funcArgs!.length - 1].paramAST;\r\n const name = (arg as AST.ASTPrimitive).name;\r\n inputArg = funcScope[name];\r\n }\r\n const argsNonArray = (inputArg ? [...args, inputArg] : args).map(\r\n (val) => pb.normalizeExpValue(val)!\r\n );\r\n const funcType = pb._getFunctionOverload(name, argsNonArray);\r\n if (!funcType) {\r\n throw new Error(\r\n `ERROR: no matching overloads for function ${name}(${argsNonArray\r\n .map((val) => {\r\n if (val instanceof PBShaderExp) {\r\n return val.$ast?.getType()?.toTypeName() ?? '?';\r\n } else {\r\n return typeof val;\r\n }\r\n })\r\n .join(', ')})`\r\n );\r\n }\r\n return getCurrentProgramBuilder()!.$callFunction(name, funcType[1], funcType[0]);\r\n };\r\n }\r\n });\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Scope that is inside a function\r\n * @public\r\n */\r\nexport class PBInsideFunctionScope extends PBScope {\r\n /** @internal */\r\n constructor(parent: PBGlobalScope | PBInsideFunctionScope) {\r\n super(new AST.ASTScope(), parent);\r\n }\r\n /**\r\n * Creates a 'return' statement\r\n * @param retval - The return value\r\n */\r\n $return(retval?: ExpValueType) {\r\n const functionScope = this.findOwnerFunction();\r\n const astFunc = functionScope!.$ast as AST.ASTFunction;\r\n let returnType: Nullable<PBTypeInfo> = null;\r\n const retValNonArray = getCurrentProgramBuilder()!.normalizeExpValue(retval!);\r\n if (retValNonArray !== undefined && retValNonArray !== null) {\r\n if (typeof retValNonArray === 'number') {\r\n if (astFunc.returnType) {\r\n if (\r\n astFunc.returnType.isPrimitiveType() &&\r\n astFunc.returnType.isScalarType() &&\r\n !astFunc.returnType.isCompatibleType(typeBool)\r\n ) {\r\n returnType = astFunc.returnType;\r\n }\r\n }\r\n if (!returnType) {\r\n if (Number.isInteger(retValNonArray)) {\r\n if (retValNonArray < 0) {\r\n if (retValNonArray < 0x80000000 >> 0) {\r\n throw new Error(`function ${astFunc.name}: invalid return value: ${retValNonArray}`);\r\n }\r\n returnType = typeI32;\r\n } else {\r\n if (retValNonArray > 0xffffffff) {\r\n throw new Error(`function ${astFunc.name}: invalid return value: ${retValNonArray}`);\r\n }\r\n returnType = retValNonArray <= 0x7fffffff ? typeI32 : typeU32;\r\n }\r\n } else {\r\n returnType = typeF32;\r\n }\r\n }\r\n } else if (typeof retValNonArray === 'boolean') {\r\n returnType = typeBool;\r\n } else {\r\n returnType = retValNonArray.$ast.getType();\r\n }\r\n } else {\r\n returnType = typeVoid;\r\n }\r\n if (returnType.isPointerType()) {\r\n throw new Error('function can not return pointer type');\r\n }\r\n if (!astFunc.returnType) {\r\n astFunc.returnType = returnType;\r\n } else if (!astFunc.returnType.isCompatibleType(returnType)) {\r\n throw new Error(\r\n `function ${astFunc.name}: return type must be ${\r\n astFunc.returnType?.toTypeName(getCurrentProgramBuilder()!.getDevice().type) || 'void'\r\n }`\r\n );\r\n }\r\n let returnValue: Nullable<AST.ASTExpression> = null;\r\n if (retValNonArray !== undefined && retValNonArray !== null) {\r\n if (retValNonArray instanceof PBShaderExp) {\r\n returnValue = retValNonArray.$ast;\r\n } else {\r\n if (!returnType.isPrimitiveType() || !returnType.isScalarType()) {\r\n throw new errors.PBTypeCastError(retValNonArray, typeof retValNonArray, returnType);\r\n }\r\n returnValue = new AST.ASTScalar(retValNonArray, returnType);\r\n }\r\n }\r\n this.$ast.statements.push(new AST.ASTReturn(returnValue!));\r\n }\r\n /**\r\n * Creates a new scope\r\n * @param body - Generator function for the scope\r\n * @returns The created scope\r\n */\r\n $scope(body: (this: PBInsideFunctionScope) => void): PBInsideFunctionScope {\r\n const astScope = new AST.ASTNakedScope();\r\n this.$ast.statements.push(astScope);\r\n return new PBNakedScope(this, astScope, body);\r\n }\r\n /**\r\n * Creates an 'if' statement\r\n * @param condition - Condition expression for the if statement\r\n * @param body - Generator function for the scope inside the if statement\r\n * @returns The scope inside the if statement\r\n */\r\n $if(condition: ExpValueNonArrayType, body: (this: PBIfScope) => void): PBIfScope {\r\n const astIf = new AST.ASTIf(\r\n 'if',\r\n condition instanceof PBShaderExp\r\n ? condition.$ast\r\n : new AST.ASTScalar(condition, typeof condition === 'number' ? typeF32 : typeBool)\r\n );\r\n this.$ast.statements.push(astIf);\r\n return new PBIfScope(this, astIf, body);\r\n }\r\n /**\r\n * Creates a select statement: condition ? first : second\r\n * @param condition - Condition expression\r\n * @param first - The first value\r\n * @param second - The second value\r\n * @returns The first value if condition evaluates to true, otherwise returns the second value\r\n */\r\n $choice(\r\n condition: ExpValueNonArrayType,\r\n first: ExpValueNonArrayType,\r\n second: ExpValueNonArrayType\r\n ): PBShaderExp {\r\n const ast = new AST.ASTSelect(\r\n condition instanceof PBShaderExp ? condition.$ast : condition,\r\n first instanceof PBShaderExp ? first.$ast : first,\r\n second instanceof PBShaderExp ? second.$ast : second\r\n );\r\n const exp = new PBShaderExp('', ast.getType());\r\n exp.$ast = ast;\r\n return exp;\r\n }\r\n /** Creates a 'break' statement */\r\n $break() {\r\n this.$ast.statements.push(new AST.ASTBreak());\r\n }\r\n /** Creates a 'continue' statement */\r\n $continue() {\r\n this.$ast.statements.push(new AST.ASTContinue());\r\n }\r\n /**\r\n * Creates a 'for' statement\r\n * @param counter - The repeat counter variable declaration\r\n * @param init - initial value of the repeat counter variable\r\n * @param end - end value of the counter exclusive\r\n * @param body - Generator function for the scope that inside the for statement\r\n */\r\n $for(\r\n counter: PBShaderExp,\r\n init: number | PBShaderExp,\r\n end: number | PBShaderExp,\r\n open?: boolean | ((this: PBForScope) => void),\r\n reverse?: boolean | ((this: PBForScope) => void),\r\n body?: (this: PBForScope) => void\r\n ) {\r\n const initializerType = counter.$ast.getType();\r\n if (!initializerType.isPrimitiveType() || !initializerType.isScalarType()) {\r\n throw new errors.PBASTError(counter.$ast, 'invalid for range initializer type');\r\n }\r\n const initval = init instanceof PBShaderExp ? init.$ast : new AST.ASTScalar(init, initializerType);\r\n if (typeof open === 'function') {\r\n body = open;\r\n open = true;\r\n reverse = false;\r\n } else if (typeof reverse === 'function') {\r\n body = reverse;\r\n open = !!open;\r\n reverse = false;\r\n } else {\r\n open = !!open;\r\n reverse = !!reverse;\r\n }\r\n const astFor = new AST.ASTRange(\r\n counter.$ast as AST.ASTPrimitive,\r\n initval,\r\n end instanceof PBShaderExp ? end.$ast : new AST.ASTScalar(end, initializerType),\r\n open,\r\n reverse\r\n );\r\n this.$ast.statements.push(astFor);\r\n new PBForScope(this, counter, end, astFor, body);\r\n }\r\n /**\r\n * Creates a 'do..while' statement\r\n * @param body - Generator function for the scope that inside the do..while statment\r\n * @returns The scope that inside the do..while statement\r\n */\r\n $do(body: (this: PBDoWhileScope) => void): PBDoWhileScope {\r\n if (this.$builder.getDevice().type === 'webgl') {\r\n throw new Error(`No do-while() loop support for WebGL1.0 device`);\r\n }\r\n const astDoWhile = new AST.ASTDoWhile(null);\r\n this.$ast.statements.push(astDoWhile);\r\n return new PBDoWhileScope(this, astDoWhile, body);\r\n }\r\n /**\r\n * Creates a 'while' statement\r\n * @param condition - Condition expression for the while statement\r\n * @param body - Generator function for the scope that inside the while statement\r\n */\r\n $while(condition: ExpValueNonArrayType, body: (this: PBWhileScope) => void) {\r\n const astWhile = new AST.ASTWhile(\r\n condition instanceof PBShaderExp\r\n ? condition.$ast\r\n : new AST.ASTScalar(condition, typeof condition === 'number' ? typeF32 : typeBool)\r\n );\r\n this.$ast.statements.push(astWhile);\r\n new PBWhileScope(this, astWhile, body);\r\n }\r\n /** @internal */\r\n private findOwnerFunction(): Nullable<PBFunctionScope> {\r\n for (let scope: PBScope = this; scope; scope = scope.$parent!) {\r\n if (scope instanceof PBFunctionScope) {\r\n return scope;\r\n }\r\n }\r\n return null;\r\n }\r\n /** Gets main function scope */\r\n $getMainScope(): Nullable<PBFunctionScope> {\r\n for (let scope: PBScope = this; scope; scope = scope.$parent!) {\r\n if (scope instanceof PBFunctionScope && scope.$isMain()) {\r\n return scope;\r\n }\r\n }\r\n return null;\r\n }\r\n}\r\n\r\n/**\r\n * Scope that insides a function\r\n * @public\r\n */\r\nexport class PBFunctionScope extends PBInsideFunctionScope {\r\n /** @internal */\r\n $typeinfo!: PBFunctionTypeInfo;\r\n /** @internal */\r\n constructor(\r\n parent: PBGlobalScope,\r\n params: PBShaderExp[],\r\n ast: AST.ASTScope,\r\n body?: (this: PBFunctionScope) => void\r\n ) {\r\n super(parent);\r\n this.$ast = ast;\r\n for (const param of params) {\r\n if (this.$_variables[param.$str]) {\r\n throw new Error('Duplicate function parameter name is not allowed');\r\n }\r\n this.$_registerVar(param);\r\n }\r\n getCurrentProgramBuilder()!.pushScope(this);\r\n body?.call(this);\r\n getCurrentProgramBuilder()!.popScope();\r\n }\r\n $isMain(): boolean {\r\n return (this.$ast as AST.ASTFunction).isMainFunc;\r\n }\r\n}\r\n\r\n/**\r\n * Scope that insides a while statement\r\n * @public\r\n */\r\nexport class PBWhileScope extends PBInsideFunctionScope {\r\n /** @internal */\r\n constructor(parent: PBInsideFunctionScope, ast: AST.ASTScope, body: (this: PBWhileScope) => void) {\r\n super(parent);\r\n this.$ast = ast;\r\n getCurrentProgramBuilder()!.pushScope(this);\r\n body?.call(this);\r\n getCurrentProgramBuilder()!.popScope();\r\n }\r\n}\r\n\r\n/**\r\n * Scope that insides a do..while statement\r\n * @public\r\n */\r\nexport class PBDoWhileScope extends PBInsideFunctionScope {\r\n /** @internal */\r\n constructor(parent: PBInsideFunctionScope, ast: AST.ASTScope, body: (this: PBDoWhileScope) => void) {\r\n super(parent);\r\n this.$ast = ast;\r\n getCurrentProgramBuilder()!.pushScope(this);\r\n body?.call(this);\r\n getCurrentProgramBuilder()!.popScope();\r\n }\r\n $while(condition: ExpValueNonArrayType) {\r\n (this.$ast as AST.ASTDoWhile).condition =\r\n condition instanceof PBShaderExp\r\n ? condition.$ast\r\n : new AST.ASTScalar(condition, typeof condition === 'number' ? typeF32 : typeBool);\r\n }\r\n}\r\n\r\n/**\r\n * Scope that insides a for statement\r\n * @public\r\n */\r\nexport class PBForScope extends PBInsideFunctionScope {\r\n /** @internal */\r\n constructor(\r\n parent: PBGlobalScope | PBInsideFunctionScope,\r\n counter: PBShaderExp,\r\n count: number | PBShaderExp,\r\n ast: AST.ASTScope,\r\n body?: (this: PBForScope) => void\r\n ) {\r\n super(parent);\r\n this.$ast = ast;\r\n this.$_registerVar(counter);\r\n getCurrentProgramBuilder()!.pushScope(this);\r\n body?.call(this);\r\n getCurrentProgramBuilder()!.popScope();\r\n }\r\n}\r\n\r\n/**\r\n * A naked scope\r\n * @public\r\n */\r\nexport class PBNakedScope extends PBInsideFunctionScope {\r\n /** @internal */\r\n constructor(parent: PBInsideFunctionScope, ast: AST.ASTScope, body: (this: PBNakedScope) => void) {\r\n super(parent);\r\n this.$ast = ast;\r\n getCurrentProgramBuilder()!.pushScope(this);\r\n body?.call(this);\r\n getCurrentProgramBuilder()!.popScope();\r\n }\r\n}\r\n\r\n/**\r\n * Scope that insides an if statement\r\n * @public\r\n */\r\nexport class PBIfScope extends PBInsideFunctionScope {\r\n /** @internal */\r\n constructor(parent: PBInsideFunctionScope, ast: AST.ASTScope, body: (this: PBIfScope) => void) {\r\n super(parent);\r\n this.$ast = ast;\r\n getCurrentProgramBuilder()!.pushScope(this);\r\n body?.call(this);\r\n getCurrentProgramBuilder()!.popScope();\r\n }\r\n /**\r\n * Creates an 'else if' branch\r\n * @param condition - Condition expression for the else if branch\r\n * @param body - Generator function for the scope that insides the else if statement\r\n * @returns The scope that insides the else if statement\r\n */\r\n $elseif(condition: ExpValueNonArrayType, body: (this: PBIfScope) => void): PBIfScope {\r\n const astElseIf = new AST.ASTIf(\r\n 'else if',\r\n condition instanceof PBShaderExp\r\n ? condition.$ast\r\n : new AST.ASTScalar(condition, typeof condition === 'number' ? typeF32 : typeBool)\r\n );\r\n (this.$ast as AST.ASTIf).nextElse = astElseIf;\r\n return new PBIfScope(this.$_parentScope as PBInsideFunctionScope, astElseIf, body);\r\n }\r\n /**\r\n * Creates an 'else' branch\r\n * @param body - Generator function for the scope that insides the else statement\r\n */\r\n $else(body: (this: PBIfScope) => void): void {\r\n const astElse = new AST.ASTIf('else', null);\r\n (this.$ast as AST.ASTIf).nextElse = astElse;\r\n new PBIfScope(this.$_parentScope as PBInsideFunctionScope, astElse, body);\r\n }\r\n}\r\n\r\nsetBuiltinFuncs(ProgramBuilder);\r\nsetConstructors(ProgramBuilder);\r\n"],"names":["COMPUTE_UNIFORM_NAME","COMPUTE_STORAGE_NAME","VERTEX_UNIFORM_NAME","FRAGMENT_UNIFORM_NAME","SHARED_UNIFORM_NAME","VERTEX_STORAGE_NAME","FRAGMENT_STORAGE_NAME","SHARED_STORAGE_NAME","input_prefix","output_prefix_vs","output_prefix_fs","ProgramBuilder","_device","_workgroupSize","_scopeStack","_shaderType","ShaderType","Vertex","Fragment","Compute","_structInfo","_uniforms","_globalScope","_builtinScope","_inputScope","_outputScope","_inputs","_outputs","_vertexAttributes","_depthRangeCorrection","_emulateDepthClamp","_lastError","_reflection","_autoStructureTypeIndex","_nameMap","device","type","PBReflection","lastError","shaderType","shaderKind","getGlobalScope","builtinScope","inputScope","outputScope","depthRangeCorrection","emulateDepthClamp","val","getReflection","getDevice","reset","queryGlobal","name","tag","pushScope","scope","unshift","popScope","shift","getCurrentScope","getCurrentFunctionScope","funcScope","PBFunctionScope","$parent","buildRender","options","setCurrentProgramBuilder","defineInternalStructs","ret","buildRenderSource","buildCompute","workgroupSize","buildComputeSource","buildRenderProgram","createGPUProgram","label","params","vs","fs","bindGroupLayouts","vertexAttributes","buildComputeProgram","source","func","body","$createFunctionIfNotExists","main","$mainFunc","addressOf","ref","errors","$ast","isReference","exp","PBShaderExp","getType","AST","referenceOf","ptr","isPointerType","ast","struct","structName","instanceName","ctor","st","structInfo","structs","call","isIdenticalStruct","a","b","checkName","structMembers","length","index","other","isStructType","isCompatibleType","generateStructureName","getVertexAttributes","defineHiddenStruct","types","push","defineStruct","members","layout","structType","PBStructTypeInfo","map","arg","$typeinfo","isPrimitiveType","isArrayType","isAtomicI32","isAtomicU32","Error","$str","structDef","getCurrentProgramBuilder","builtin","indexOf","internalDefineStruct","defineStructByType","typeCopy","extends","internalDefineStructByType","shaderTypeMask","args","makeConstructor","structConstructor","blockArgs","e","getFunction","$getFunctions","getBlockName","defineBuiltinStruct","inOrOut","stage","builtinVars","prefix","k","v","semantic","inoutList","value","$location","isInteger","findStructType","structInstance","structInstanceIN","typeFrexpResult","typeFrexpResultVec2","typeFrexpResultVec3","typeFrexpResultVec4","array","normalizeExpValue","typeok","isBool","isFloat","isInt","isUint","isComposite","argType","isConstructible","isScalarType","primitiveType","PBPrimitiveType","BOOL","F32","U32","I32","typeBool","typeI32","typeU32","typeF32","arrayType","PBArrayTypeInfo","discard","statements","tagShaderExp","getter","tagValue","Array","isArray","forEach","Object","keys","in","location","variable","defineProperty","get","set","$declareType","DECLARE_TYPE_IN","$tags","out","DECLARE_TYPE_OUT","prop","String","getDefaultSampler","t","comparison","u","findIndex","texture","samplerType","autoBindSampler","samplerName","converted","guessExpValueType","Number","findStructConstructor","PBGlobalScope","PBBuiltinScope","PBInputScope","PBOutputScope","clear","generate","compute","mergeUniformsCompute","updateUniformBindings","generateComputeSource","createBindGroupLayouts","err","getMessage","console","error","toString","prototype","vertex","vertexScope","vertexBuiltinScope","vertexInputs","vertexOutputs","fragment","fragScope","fragBuiltinScope","fragInputs","fragOutputs","mergeUniforms","generateRenderSource","$outputs","clamppedDepth","float","filter","inputs","outputs","context","mrt","defines","extensions","Set","builtins","$_usedBuiltins","typeReplacement","Map","global","isTextureType","isDepthTexture","is2DTexture","typeTex2D","isCubeTexture","typeTexCube","toWebGL","isArrayTexture","typeTex2DArray","toWebGL2","toWGSL","globalScope","uniformList","i","block","DECLARE_TYPE_UNIFORM","DECLARE_TYPE_STORAGE","$isBuffer","group","$bindingSize","$readonly","member","uniform","nameList","ulist","nonBufferList","bufferList","allLists","p","uname","readonly","uniformBuffer","storageBuffer","mask","nameMap","writable","n","isWritable","markWritable","globalScopeVertex","globalScopeFragmet","vertexUniformList","fragUniformList","sharedUniformList","f","uniformLists","nameListUniform","nameListStorage","maskList","layoutList","j","scopes","shaderTypes","bindings","from","MAX_BINDING_GROUPS","fill","binding","uniforms","sampler","layouts","dynamicOffsetIndex","uniformInfo","entries","entry","visibility","clone","isStorage","buffer","minBindingSize","bindingSize","hasDynamicOffset","uniformLayout","toBufferLayout","isStorageTexture","viewDimension","is3DTexture","is1DTexture","storageTexture","access","format","storageTexelFormat","isExternalTexture","externalTexture","sampleType","$sampleType","multisampled","autoBindSamplerComparison","isSamplerType","accessMode","PBSamplerAccessMode","SAMPLE","_getFunctionOverload","funcName","thisArgs","fn","_matchFunctionOverloading","overloadings","overload","funcType","argTypes","result","matches","argInfo","byRef","PBPointerTypeInfo","pointerType","scalarType","$callFunction","returnType","$callFunctionNoCheck","retType","PBScope","Proxiable","astScope","parent","$_parentScope","$_variables","$_AST","$_localScope","$builder","$builtins","$inputs","$getVertexAttrib","$l","$_getLocalScope","$g","$_getGlobalScope","$local","init","initNonArray","$global","$_declare","$touch","$query","$_declareInternal","key","varType","initType","$_registerVar","undefined","$_findOrSetUniform","$group","found","isDepth","samplerExp","samplerNameComp","samplerExpComp","samplerComparison","isHostSharable","toTypeName","blockName","detail","configurable","$localGet","$localSet","$get","$thisProxy","$set","PBLocalScope","$_scope","isConstructor","typeVoid","$attrib","$precision","$_builtinVars","isWebGPU","info","that","$getBuiltinVar","pb","add","inout","uint","$_aliases","$_names","attrib","param","getVertexAttribByName","lastName","typeId","isMatrixType","$_inputStructInfo","$inputStructInfo","$inputStruct","inputStruct","isCompute","outputStruct","$internalCreateFunction","fragDepth","clamp","position","z","mul","w","div","$return","findFunctions","$getCurrentFunctionScope","isMain","$inout","PBAddressSpace","UNKNOWN","overloads","currentFunctionScope","astFunc","curIndex","splice","PBFunctionTypeInfo","paramAST","argHash","inputArg","funcArgs","argsNonArray","join","PBInsideFunctionScope","retval","functionScope","findOwnerFunction","retValNonArray","returnValue","$scope","PBNakedScope","$if","condition","astIf","PBIfScope","$choice","first","second","$break","$continue","$for","counter","end","open","reverse","initializerType","initval","astFor","PBForScope","$do","astDoWhile","PBDoWhileScope","$while","astWhile","PBWhileScope","$getMainScope","$isMain","isMainFunc","count","$elseif","astElseIf","nextElse","$else","astElse","setBuiltinFuncs","setConstructors"],"mappings":"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"}