@babylonjs/core 9.10.1 → 9.11.0

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 (58) hide show
  1. package/AudioV2/abstractAudio/subNodes/audioAnalyzerSubNode.d.ts +2 -0
  2. package/AudioV2/abstractAudio/subNodes/audioAnalyzerSubNode.js.map +1 -1
  3. package/AudioV2/abstractAudio/subProperties/abstractAudioAnalyzer.d.ts +13 -3
  4. package/AudioV2/abstractAudio/subProperties/abstractAudioAnalyzer.js +16 -0
  5. package/AudioV2/abstractAudio/subProperties/abstractAudioAnalyzer.js.map +1 -1
  6. package/AudioV2/abstractAudio/subProperties/audioAnalyzer.d.ts +4 -0
  7. package/AudioV2/abstractAudio/subProperties/audioAnalyzer.js +22 -0
  8. package/AudioV2/abstractAudio/subProperties/audioAnalyzer.js.map +1 -1
  9. package/AudioV2/webAudio/subNodes/webAudioAnalyzerSubNode.d.ts +6 -0
  10. package/AudioV2/webAudio/subNodes/webAudioAnalyzerSubNode.js +22 -5
  11. package/AudioV2/webAudio/subNodes/webAudioAnalyzerSubNode.js.map +1 -1
  12. package/Compute/computeEffect.d.ts +6 -0
  13. package/Compute/computeEffect.js +3 -0
  14. package/Compute/computeEffect.js.map +1 -1
  15. package/Compute/computeShader.pure.d.ts +4 -0
  16. package/Compute/computeShader.pure.js +1 -0
  17. package/Compute/computeShader.pure.js.map +1 -1
  18. package/Engines/Native/nativeInterfaces.d.ts +10 -1
  19. package/Engines/Native/nativeInterfaces.js.map +1 -1
  20. package/Engines/WebGPU/Extensions/engine.computeShader.pure.js +154 -2
  21. package/Engines/WebGPU/Extensions/engine.computeShader.pure.js.map +1 -1
  22. package/Engines/abstractEngine.pure.d.ts +7 -1
  23. package/Engines/abstractEngine.pure.js +34 -4
  24. package/Engines/abstractEngine.pure.js.map +1 -1
  25. package/Engines/engine.pure.d.ts +0 -7
  26. package/Engines/engine.pure.js +0 -34
  27. package/Engines/engine.pure.js.map +1 -1
  28. package/Engines/thinNativeEngine.pure.js +15 -8
  29. package/Engines/thinNativeEngine.pure.js.map +1 -1
  30. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphCancelDelayBlock.pure.js +1 -1
  31. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphCancelDelayBlock.pure.js.map +1 -1
  32. package/Materials/PBR/pbrMaterial.pure.d.ts +6 -0
  33. package/Materials/PBR/pbrMaterial.pure.js +8 -0
  34. package/Materials/PBR/pbrMaterial.pure.js.map +1 -1
  35. package/Materials/Textures/Procedurals/noiseProceduralTexture.pure.js +17 -5
  36. package/Materials/Textures/Procedurals/noiseProceduralTexture.pure.js.map +1 -1
  37. package/Materials/effect.pure.d.ts +2 -2
  38. package/Materials/effect.pure.js +12 -6
  39. package/Materials/effect.pure.js.map +1 -1
  40. package/Materials/meshDebugPluginMaterial.pure.js +15 -13
  41. package/Materials/meshDebugPluginMaterial.pure.js.map +1 -1
  42. package/Misc/tools.pure.js +11 -4
  43. package/Misc/tools.pure.js.map +1 -1
  44. package/Particles/computeShaderParticleSystem.pure.js +5 -1
  45. package/Particles/computeShaderParticleSystem.pure.js.map +1 -1
  46. package/Particles/gpuParticleSystem.pure.d.ts +1 -0
  47. package/Particles/gpuParticleSystem.pure.js +17 -1
  48. package/Particles/gpuParticleSystem.pure.js.map +1 -1
  49. package/ShadersWGSL/gpuRenderParticles.fragment.d.ts +5 -0
  50. package/ShadersWGSL/gpuRenderParticles.fragment.js +50 -0
  51. package/ShadersWGSL/gpuRenderParticles.fragment.js.map +1 -0
  52. package/ShadersWGSL/gpuRenderParticles.vertex.d.ts +5 -0
  53. package/ShadersWGSL/gpuRenderParticles.vertex.js +120 -0
  54. package/ShadersWGSL/gpuRenderParticles.vertex.js.map +1 -0
  55. package/ShadersWGSL/noise.fragment.d.ts +5 -0
  56. package/ShadersWGSL/noise.fragment.js +18 -0
  57. package/ShadersWGSL/noise.fragment.js.map +1 -0
  58. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"computeShader.pure.js","sourceRoot":"","sources":["../../../../dev/core/src/Compute/computeShader.pure.ts"],"names":[],"mappings":"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","sourcesContent":["/** This file must only contain pure code and pure imports */\n\nimport { type UniformBuffer } from \"../Materials/uniformBuffer\";\nimport { type WebGPUEngine } from \"../Engines/webgpuEngine.pure\";\nimport { type Scene } from \"../scene.pure\";\nimport { type Nullable } from \"../types\";\nimport { serialize } from \"../Misc/decorators\";\nimport { SerializationHelper } from \"../Misc/decorators.serialization\";\nimport { type ComputeEffect, type IComputeEffectCreationOptions, type IComputeShaderPath } from \"./computeEffect\";\nimport { type ComputeBindingMapping, ComputeBindingType } from \"../Engines/Extensions/engine.computeShader.pure\";\nimport { type BaseTexture } from \"../Materials/Textures/baseTexture.pure\";\nimport { Texture } from \"../Materials/Textures/texture.pure\";\nimport { UniqueIdGenerator } from \"../Misc/uniqueIdGenerator\";\nimport { type IComputeContext } from \"./IComputeContext\";\nimport { type StorageBuffer } from \"../Buffers/storageBuffer\";\nimport { Logger } from \"../Misc/logger\";\nimport { TextureSampler } from \"../Materials/Textures/textureSampler\";\nimport { type DataBuffer } from \"core/Buffers/dataBuffer\";\nimport { type ExternalTexture } from \"core/Materials/Textures/externalTexture\";\nimport { type VideoTexture } from \"core/Materials/Textures/videoTexture.pure\";\nimport { WebGPUPerfCounter } from \"core/Engines/WebGPU/webgpuPerfCounter\";\nimport { type AbstractEngine } from \"core/Engines/abstractEngine.pure\";\nimport { _RetryWithInterval } from \"core/Misc/timingTools\";\nimport { type InternalTexture } from \"core/Materials/Textures/internalTexture\";\nimport { RegisterClass } from \"../Misc/typeStore\";\n\n/**\n * Defines the options associated with the creation of a compute shader.\n */\nexport interface IComputeShaderOptions {\n /**\n * list of bindings mapping (key is property name, value is binding location)\n * Must be provided because browsers don't support reflection for wgsl shaders yet (so there's no way to query the binding/group from a variable name)\n * TODO: remove this when browsers support reflection for wgsl shaders\n */\n bindingsMapping: ComputeBindingMapping;\n\n /**\n * The list of defines used in the shader\n */\n defines?: string[];\n\n /**\n * The name of the entry point in the shader source (default: \"main\")\n */\n entryPoint?: string;\n\n /**\n * If provided, will be called with the shader code so that this code can be updated before it is compiled by the GPU\n */\n processFinalCode?: Nullable<(code: string) => string>;\n}\n\ntype ComputeBindingListInternal = { [key: string]: { type: ComputeBindingType; object: any; indexInGroupEntries?: number; buffer?: Nullable<DataBuffer> } };\n\n/**\n * The ComputeShader object lets you execute a compute shader on your GPU (if supported by the engine)\n */\nexport class ComputeShader {\n private _engine: AbstractEngine;\n private _shaderPath: IComputeShaderPath | string;\n private _options: IComputeShaderOptions;\n private _effect: ComputeEffect;\n private _cachedDefines: string;\n private _bindings: ComputeBindingListInternal = {};\n private _samplers: { [key: string]: TextureSampler } = {};\n private _context: IComputeContext;\n private _contextIsDirty = false;\n\n /**\n * Gets the unique id of the compute shader\n */\n public readonly uniqueId: number;\n\n /**\n * The name of the shader\n */\n @serialize()\n public name: string;\n\n /**\n * The options used to create the shader\n */\n public get options() {\n return this._options;\n }\n\n /**\n * The shaderPath used to create the shader\n */\n public get shaderPath() {\n return this._shaderPath;\n }\n\n /**\n * When set to true, dispatch won't call isReady anymore and won't check if the underlying GPU resources should be (re)created because of a change in the inputs (texture, uniform buffer, etc.)\n * If you know that your inputs did not change since last time dispatch was called and that isReady() returns true, set this flag to true to improve performance\n */\n @serialize()\n public fastMode = false;\n\n /**\n * Callback triggered when the shader is compiled\n */\n public onCompiled: Nullable<(effect: ComputeEffect) => void> = null;\n\n /**\n * Callback triggered when an error occurs\n */\n public onError: Nullable<(effect: ComputeEffect, errors: string) => void> = null;\n\n /**\n * Gets the GPU time spent running the compute shader for the last frame rendered (in nanoseconds).\n * You have to enable the \"timestamp-query\" extension in the engine constructor options and set engine.enableGPUTimingMeasurements = true.\n */\n public readonly gpuTimeInFrame?: WebGPUPerfCounter;\n\n /**\n * If set to true, the compute context will be rebuilt at the next dispatch even if in fast mode\n */\n public triggerContextRebuild = false;\n\n /**\n * Instantiates a new compute shader.\n * @param name Defines the name of the compute shader in the scene\n * @param engine Defines the engine the compute shader belongs to\n * @param shaderPath Defines the route to the shader code in one of three ways:\n * * object: \\{ compute: \"custom\" \\}, used with ShaderStore.ShadersStoreWGSL[\"customComputeShader\"]\n * * object: \\{ computeElement: \"HTMLElementId\" \\}, used with shader code in script tags\n * * object: \\{ computeSource: \"compute shader code string\" \\}, where the string contains the shader code\n * * string: try first to find the code in ShaderStore.ShadersStoreWGSL[shaderPath + \"ComputeShader\"]. If not, assumes it is a file with name shaderPath.compute.fx in index.html folder.\n * @param options Define the options used to create the shader\n */\n constructor(name: string, engine: AbstractEngine, shaderPath: IComputeShaderPath | string, options: Partial<IComputeShaderOptions> = {}) {\n this.name = name;\n this._engine = engine;\n this.uniqueId = UniqueIdGenerator.UniqueId;\n if ((engine as WebGPUEngine).enableGPUTimingMeasurements) {\n this.gpuTimeInFrame = new WebGPUPerfCounter();\n }\n\n if (!this._engine.getCaps().supportComputeShaders) {\n Logger.Error(\"This engine does not support compute shaders!\");\n return;\n }\n if (!options.bindingsMapping) {\n Logger.Error(\"You must provide the binding mappings as browsers don't support reflection for wgsl shaders yet!\");\n return;\n }\n\n this._context = engine.createComputeContext()!;\n this._shaderPath = shaderPath;\n this._options = {\n bindingsMapping: {},\n defines: [],\n entryPoint: \"main\",\n ...options,\n };\n }\n\n /**\n * Gets the current class name of the material e.g. \"ComputeShader\"\n * Mainly use in serialization.\n * @returns the class name\n */\n public getClassName(): string {\n return \"ComputeShader\";\n }\n\n /**\n * Binds a texture to the shader\n * @param name Binding name of the texture\n * @param texture Texture to bind\n * @param bindSampler Bind the sampler corresponding to the texture (default: true). The sampler will be bound just before the binding index of the texture\n */\n public setTexture(name: string, texture: BaseTexture, bindSampler = true): void {\n const current = this._bindings[name];\n\n this._bindings[name] = {\n type: bindSampler ? ComputeBindingType.Texture : ComputeBindingType.TextureWithoutSampler,\n object: texture,\n indexInGroupEntries: current?.indexInGroupEntries,\n };\n\n this._contextIsDirty ||= !current || current.object !== texture || current.type !== this._bindings[name].type;\n }\n\n /**\n * Binds an internal texture to the shader\n * @param name Binding name of the texture\n * @param texture Texture to bind\n */\n public setInternalTexture(name: string, texture: InternalTexture): void {\n const current = this._bindings[name];\n\n this._bindings[name] = {\n type: ComputeBindingType.InternalTexture,\n object: texture,\n indexInGroupEntries: current?.indexInGroupEntries,\n };\n\n this._contextIsDirty ||= !current || current.object !== texture || current.type !== this._bindings[name].type;\n }\n\n /**\n * Binds a storage texture to the shader\n * @param name Binding name of the texture\n * @param texture Texture to bind\n */\n public setStorageTexture(name: string, texture: BaseTexture): void {\n const current = this._bindings[name];\n\n this._contextIsDirty ||= !current || current.object !== texture;\n\n this._bindings[name] = {\n type: ComputeBindingType.StorageTexture,\n object: texture,\n indexInGroupEntries: current?.indexInGroupEntries,\n };\n }\n\n /**\n * Binds an external texture to the shader\n * @param name Binding name of the texture\n * @param texture Texture to bind\n */\n public setExternalTexture(name: string, texture: ExternalTexture): void {\n const current = this._bindings[name];\n\n this._contextIsDirty ||= !current || current.object !== texture;\n\n this._bindings[name] = {\n type: ComputeBindingType.ExternalTexture,\n object: texture,\n indexInGroupEntries: current?.indexInGroupEntries,\n };\n }\n\n /**\n * Binds a video texture to the shader (by binding the external texture attached to this video)\n * @param name Binding name of the texture\n * @param texture Texture to bind\n * @returns true if the video texture was successfully bound, else false. false will be returned if the current engine does not support external textures\n */\n public setVideoTexture(name: string, texture: VideoTexture) {\n if (texture.externalTexture) {\n this.setExternalTexture(name, texture.externalTexture);\n return true;\n }\n\n return false;\n }\n\n /**\n * Binds a uniform buffer to the shader\n * @param name Binding name of the buffer\n * @param buffer Buffer to bind\n */\n public setUniformBuffer(name: string, buffer: UniformBuffer | DataBuffer): void {\n const current = this._bindings[name];\n\n this._contextIsDirty ||= !current || current.object !== buffer;\n\n this._bindings[name] = {\n type: ComputeShader._BufferIsDataBuffer(buffer) ? ComputeBindingType.DataBuffer : ComputeBindingType.UniformBuffer,\n object: buffer,\n indexInGroupEntries: current?.indexInGroupEntries,\n };\n }\n\n /**\n * Binds a storage buffer to the shader\n * @param name Binding name of the buffer\n * @param buffer Buffer to bind\n */\n public setStorageBuffer(name: string, buffer: StorageBuffer | DataBuffer): void {\n const current = this._bindings[name];\n\n this._contextIsDirty ||= !current || current.object !== buffer;\n\n this._bindings[name] = {\n type: ComputeShader._BufferIsDataBuffer(buffer) ? ComputeBindingType.DataBuffer : ComputeBindingType.StorageBuffer,\n object: buffer,\n indexInGroupEntries: current?.indexInGroupEntries,\n };\n }\n\n /**\n * Binds a texture sampler to the shader\n * @param name Binding name of the sampler\n * @param sampler Sampler to bind\n */\n public setTextureSampler(name: string, sampler: TextureSampler): void {\n const current = this._bindings[name];\n\n this._contextIsDirty ||= !current || !sampler.compareSampler(current.object);\n\n this._bindings[name] = {\n type: ComputeBindingType.Sampler,\n object: sampler,\n indexInGroupEntries: current?.indexInGroupEntries,\n };\n }\n\n /**\n * Specifies that the compute shader is ready to be executed (the compute effect and all the resources are ready)\n * @returns true if the compute shader is ready to be executed\n */\n public isReady(): boolean {\n let effect = this._effect;\n\n for (const key in this._bindings) {\n const binding = this._bindings[key],\n type = binding.type,\n object = binding.object;\n\n switch (type) {\n case ComputeBindingType.Texture:\n case ComputeBindingType.TextureWithoutSampler:\n case ComputeBindingType.StorageTexture: {\n const texture = object as BaseTexture;\n if (!texture.isReady()) {\n return false;\n }\n break;\n }\n case ComputeBindingType.ExternalTexture: {\n const texture = object as ExternalTexture;\n if (!texture.isReady()) {\n return false;\n }\n break;\n }\n }\n }\n\n const defines = [\"#define \" + this._options.entryPoint];\n\n const shaderName = this._shaderPath;\n\n if (this._options.defines) {\n for (let index = 0; index < this._options.defines.length; index++) {\n defines.push(this._options.defines[index]);\n }\n }\n\n const join = defines.join(\"\\n\");\n\n if (this._cachedDefines !== join) {\n this._cachedDefines = join;\n\n effect = this._engine.createComputeEffect(shaderName, <IComputeEffectCreationOptions>{\n defines: join,\n entryPoint: this._options.entryPoint,\n onCompiled: this.onCompiled,\n onError: this.onError,\n });\n\n this._effect = effect;\n }\n\n if (!effect.isReady()) {\n return false;\n }\n\n return true;\n }\n\n /**\n * Dispatches (executes) the compute shader\n * @param x Number of workgroups to execute on the X dimension\n * @param y Number of workgroups to execute on the Y dimension (default: 1)\n * @param z Number of workgroups to execute on the Z dimension (default: 1)\n * @returns True if the dispatch could be done, else false (meaning either the compute effect or at least one of the bound resources was not ready)\n */\n public dispatch(x: number, y?: number, z?: number): boolean {\n if ((!this.fastMode || this.triggerContextRebuild) && !this._checkContext()) {\n return false;\n }\n this._engine.computeDispatch(this._effect, this._context, this._bindings, x, y, z, this._options.bindingsMapping, this.gpuTimeInFrame);\n\n return true;\n }\n\n /**\n * Dispatches (executes) the compute shader.\n * @param buffer Buffer containing the number of workgroups to execute on the X, Y and Z dimensions\n * @param offset Offset in the buffer where the workgroup counts are stored (default: 0)\n * @returns True if the dispatch could be done, else false (meaning either the compute effect or at least one of the bound resources was not ready)\n */\n public dispatchIndirect(buffer: StorageBuffer | DataBuffer, offset: number = 0): boolean {\n if ((!this.fastMode || this.triggerContextRebuild) && !this._checkContext()) {\n return false;\n }\n const dataBuffer = ComputeShader._BufferIsDataBuffer(buffer) ? buffer : buffer.getBuffer();\n this._engine.computeDispatchIndirect(this._effect, this._context, this._bindings, dataBuffer, offset, this._options.bindingsMapping, this.gpuTimeInFrame);\n return true;\n }\n\n private _checkContext(): boolean {\n if (!this.isReady()) {\n return false;\n }\n\n // If the sampling parameters of a texture bound to the shader have changed, we must clear the compute context so that it is recreated with the updated values\n // Also, if the actual (gpu) buffer used by a uniform buffer has changed, we must clear the compute context so that it is recreated with the updated value\n for (const key in this._bindings) {\n const binding = this._bindings[key];\n\n if (!this._options.bindingsMapping[key]) {\n throw new Error(\"ComputeShader ('\" + this.name + \"'): No binding mapping has been provided for the property '\" + key + \"'\");\n }\n\n switch (binding.type) {\n case ComputeBindingType.Texture: {\n const sampler = this._samplers[key];\n const texture = binding.object as BaseTexture;\n\n if (!sampler || !texture._texture || !sampler.compareSampler(texture._texture)) {\n this._samplers[key] = new TextureSampler().setParameters(\n texture.wrapU,\n texture.wrapV,\n texture.wrapR,\n texture.anisotropicFilteringLevel,\n texture._texture!.samplingMode,\n texture._texture?._comparisonFunction\n );\n this._contextIsDirty = true;\n }\n break;\n }\n case ComputeBindingType.ExternalTexture: {\n // we must recreate the bind groups each time if there's an external texture, because device.importExternalTexture must be called each frame\n this._contextIsDirty = true;\n break;\n }\n case ComputeBindingType.UniformBuffer: {\n const ubo = binding.object as UniformBuffer;\n if (ubo.getBuffer() !== binding.buffer) {\n binding.buffer = ubo.getBuffer();\n this._contextIsDirty = true;\n }\n break;\n }\n }\n }\n\n if (this._contextIsDirty) {\n this.triggerContextRebuild = false;\n this._contextIsDirty = false;\n this._context.clear();\n }\n return true;\n }\n\n /**\n * Waits for the compute shader to be ready and executes it\n * @param x Number of workgroups to execute on the X dimension\n * @param y Number of workgroups to execute on the Y dimension (default: 1)\n * @param z Number of workgroups to execute on the Z dimension (default: 1)\n * @param delay Delay between the retries while the shader is not ready (in milliseconds - 10 by default)\n * @returns A promise that is resolved once the shader has been sent to the GPU. Note that it does not mean that the shader execution itself is finished!\n */\n // eslint-disable-next-line @typescript-eslint/naming-convention\n public async dispatchWhenReady(x: number, y?: number, z?: number, delay = 10): Promise<void> {\n return await new Promise((resolve) => {\n _RetryWithInterval(() => this.dispatch(x, y, z), resolve, undefined, delay);\n });\n }\n\n /**\n * Serializes this compute shader in a JSON representation\n * @returns the serialized compute shader object\n */\n public serialize(): any {\n const serializationObject = SerializationHelper.Serialize(this);\n\n serializationObject.options = this._options;\n serializationObject.shaderPath = this._shaderPath;\n serializationObject.bindings = {};\n serializationObject.textures = {};\n\n for (const key in this._bindings) {\n const binding = this._bindings[key];\n const object = binding.object;\n\n switch (binding.type) {\n case ComputeBindingType.Texture:\n case ComputeBindingType.TextureWithoutSampler:\n case ComputeBindingType.StorageTexture: {\n const serializedData = (object as BaseTexture).serialize();\n if (serializedData) {\n serializationObject.textures[key] = serializedData;\n serializationObject.bindings[key] = {\n type: binding.type,\n };\n }\n break;\n }\n\n case ComputeBindingType.InternalTexture:\n case ComputeBindingType.UniformBuffer: {\n break;\n }\n }\n }\n\n return serializationObject;\n }\n\n protected static _BufferIsDataBuffer(buffer: UniformBuffer | StorageBuffer | DataBuffer): buffer is DataBuffer {\n return (buffer as DataBuffer).underlyingResource !== undefined;\n }\n}\n\nlet _Registered = false;\n\n/**\n * Creates a compute shader from parsed compute shader data\n * @param source defines the JSON representation of the compute shader\n * @param scene defines the hosting scene\n * @param rootUrl defines the root URL to use to load textures and relative dependencies\n * @returns a new compute shader\n */\nexport function ComputeShaderParse(source: any, scene: Scene, rootUrl: string): ComputeShader {\n const compute = SerializationHelper.Parse(() => new ComputeShader(source.name, scene.getEngine() as WebGPUEngine, source.shaderPath, source.options), source, scene, rootUrl);\n\n for (const key in source.textures) {\n const binding = source.bindings[key];\n const texture = <Texture>Texture.Parse(source.textures[key], scene, rootUrl);\n\n if (binding.type === ComputeBindingType.Texture) {\n compute.setTexture(key, texture);\n } else if (binding.type === ComputeBindingType.TextureWithoutSampler) {\n compute.setTexture(key, texture, false);\n } else {\n compute.setStorageTexture(key, texture);\n }\n }\n\n return compute;\n}\n\n/**\n * Register side effects for computeShader.\n * Safe to call multiple times; only the first call has an effect.\n */\nexport function RegisterComputeShader(): void {\n if (_Registered) {\n return;\n }\n _Registered = true;\n\n ComputeShader.Parse = ComputeShaderParse;\n\n RegisterClass(\"BABYLON.ComputeShader\", ComputeShader);\n}\n"]}
1
+ {"version":3,"file":"computeShader.pure.js","sourceRoot":"","sources":["../../../../dev/core/src/Compute/computeShader.pure.ts"],"names":[],"mappings":"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","sourcesContent":["/** This file must only contain pure code and pure imports */\n\nimport { type UniformBuffer } from \"../Materials/uniformBuffer\";\nimport { type WebGPUEngine } from \"../Engines/webgpuEngine.pure\";\nimport { type Scene } from \"../scene.pure\";\nimport { type Nullable } from \"../types\";\nimport { serialize } from \"../Misc/decorators\";\nimport { SerializationHelper } from \"../Misc/decorators.serialization\";\nimport { type ComputeEffect, type IComputeEffectCreationOptions, type IComputeShaderPath } from \"./computeEffect\";\nimport { type ComputeBindingMapping, ComputeBindingType } from \"../Engines/Extensions/engine.computeShader.pure\";\nimport { type BaseTexture } from \"../Materials/Textures/baseTexture.pure\";\nimport { Texture } from \"../Materials/Textures/texture.pure\";\nimport { UniqueIdGenerator } from \"../Misc/uniqueIdGenerator\";\nimport { type IComputeContext } from \"./IComputeContext\";\nimport { type StorageBuffer } from \"../Buffers/storageBuffer\";\nimport { Logger } from \"../Misc/logger\";\nimport { TextureSampler } from \"../Materials/Textures/textureSampler\";\nimport { type DataBuffer } from \"core/Buffers/dataBuffer\";\nimport { type ExternalTexture } from \"core/Materials/Textures/externalTexture\";\nimport { type VideoTexture } from \"core/Materials/Textures/videoTexture.pure\";\nimport { WebGPUPerfCounter } from \"core/Engines/WebGPU/webgpuPerfCounter\";\nimport { type AbstractEngine } from \"core/Engines/abstractEngine.pure\";\nimport { _RetryWithInterval } from \"core/Misc/timingTools\";\nimport { type InternalTexture } from \"core/Materials/Textures/internalTexture\";\nimport { RegisterClass } from \"../Misc/typeStore\";\n\n/**\n * Defines the options associated with the creation of a compute shader.\n */\nexport interface IComputeShaderOptions {\n /**\n * list of bindings mapping (key is property name, value is binding location)\n * Must be provided because browsers don't support reflection for wgsl shaders yet (so there's no way to query the binding/group from a variable name)\n * TODO: remove this when browsers support reflection for wgsl shaders\n */\n bindingsMapping: ComputeBindingMapping;\n\n /**\n * The list of defines used in the shader\n */\n defines?: string[];\n\n /**\n * The name of the entry point in the shader source (default: \"main\")\n */\n entryPoint?: string;\n\n /**\n * If provided, will be called with the shader code so that this code can be updated before it is compiled by the GPU\n */\n processFinalCode?: Nullable<(code: string) => string>;\n\n /**\n * If true, the engine should create an explicit pipeline layout for this compute shader instead of using an automatic layout.\n */\n useExplicitComputePipelineLayout?: boolean;\n}\n\ntype ComputeBindingListInternal = { [key: string]: { type: ComputeBindingType; object: any; indexInGroupEntries?: number; buffer?: Nullable<DataBuffer> } };\n\n/**\n * The ComputeShader object lets you execute a compute shader on your GPU (if supported by the engine)\n */\nexport class ComputeShader {\n private _engine: AbstractEngine;\n private _shaderPath: IComputeShaderPath | string;\n private _options: IComputeShaderOptions;\n private _effect: ComputeEffect;\n private _cachedDefines: string;\n private _bindings: ComputeBindingListInternal = {};\n private _samplers: { [key: string]: TextureSampler } = {};\n private _context: IComputeContext;\n private _contextIsDirty = false;\n\n /**\n * Gets the unique id of the compute shader\n */\n public readonly uniqueId: number;\n\n /**\n * The name of the shader\n */\n @serialize()\n public name: string;\n\n /**\n * The options used to create the shader\n */\n public get options() {\n return this._options;\n }\n\n /**\n * The shaderPath used to create the shader\n */\n public get shaderPath() {\n return this._shaderPath;\n }\n\n /**\n * When set to true, dispatch won't call isReady anymore and won't check if the underlying GPU resources should be (re)created because of a change in the inputs (texture, uniform buffer, etc.)\n * If you know that your inputs did not change since last time dispatch was called and that isReady() returns true, set this flag to true to improve performance\n */\n @serialize()\n public fastMode = false;\n\n /**\n * Callback triggered when the shader is compiled\n */\n public onCompiled: Nullable<(effect: ComputeEffect) => void> = null;\n\n /**\n * Callback triggered when an error occurs\n */\n public onError: Nullable<(effect: ComputeEffect, errors: string) => void> = null;\n\n /**\n * Gets the GPU time spent running the compute shader for the last frame rendered (in nanoseconds).\n * You have to enable the \"timestamp-query\" extension in the engine constructor options and set engine.enableGPUTimingMeasurements = true.\n */\n public readonly gpuTimeInFrame?: WebGPUPerfCounter;\n\n /**\n * If set to true, the compute context will be rebuilt at the next dispatch even if in fast mode\n */\n public triggerContextRebuild = false;\n\n /**\n * Instantiates a new compute shader.\n * @param name Defines the name of the compute shader in the scene\n * @param engine Defines the engine the compute shader belongs to\n * @param shaderPath Defines the route to the shader code in one of three ways:\n * * object: \\{ compute: \"custom\" \\}, used with ShaderStore.ShadersStoreWGSL[\"customComputeShader\"]\n * * object: \\{ computeElement: \"HTMLElementId\" \\}, used with shader code in script tags\n * * object: \\{ computeSource: \"compute shader code string\" \\}, where the string contains the shader code\n * * string: try first to find the code in ShaderStore.ShadersStoreWGSL[shaderPath + \"ComputeShader\"]. If not, assumes it is a file with name shaderPath.compute.fx in index.html folder.\n * @param options Define the options used to create the shader\n */\n constructor(name: string, engine: AbstractEngine, shaderPath: IComputeShaderPath | string, options: Partial<IComputeShaderOptions> = {}) {\n this.name = name;\n this._engine = engine;\n this.uniqueId = UniqueIdGenerator.UniqueId;\n if ((engine as WebGPUEngine).enableGPUTimingMeasurements) {\n this.gpuTimeInFrame = new WebGPUPerfCounter();\n }\n\n if (!this._engine.getCaps().supportComputeShaders) {\n Logger.Error(\"This engine does not support compute shaders!\");\n return;\n }\n if (!options.bindingsMapping) {\n Logger.Error(\"You must provide the binding mappings as browsers don't support reflection for wgsl shaders yet!\");\n return;\n }\n\n this._context = engine.createComputeContext()!;\n this._shaderPath = shaderPath;\n this._options = {\n bindingsMapping: {},\n defines: [],\n entryPoint: \"main\",\n ...options,\n };\n }\n\n /**\n * Gets the current class name of the material e.g. \"ComputeShader\"\n * Mainly use in serialization.\n * @returns the class name\n */\n public getClassName(): string {\n return \"ComputeShader\";\n }\n\n /**\n * Binds a texture to the shader\n * @param name Binding name of the texture\n * @param texture Texture to bind\n * @param bindSampler Bind the sampler corresponding to the texture (default: true). The sampler will be bound just before the binding index of the texture\n */\n public setTexture(name: string, texture: BaseTexture, bindSampler = true): void {\n const current = this._bindings[name];\n\n this._bindings[name] = {\n type: bindSampler ? ComputeBindingType.Texture : ComputeBindingType.TextureWithoutSampler,\n object: texture,\n indexInGroupEntries: current?.indexInGroupEntries,\n };\n\n this._contextIsDirty ||= !current || current.object !== texture || current.type !== this._bindings[name].type;\n }\n\n /**\n * Binds an internal texture to the shader\n * @param name Binding name of the texture\n * @param texture Texture to bind\n */\n public setInternalTexture(name: string, texture: InternalTexture): void {\n const current = this._bindings[name];\n\n this._bindings[name] = {\n type: ComputeBindingType.InternalTexture,\n object: texture,\n indexInGroupEntries: current?.indexInGroupEntries,\n };\n\n this._contextIsDirty ||= !current || current.object !== texture || current.type !== this._bindings[name].type;\n }\n\n /**\n * Binds a storage texture to the shader\n * @param name Binding name of the texture\n * @param texture Texture to bind\n */\n public setStorageTexture(name: string, texture: BaseTexture): void {\n const current = this._bindings[name];\n\n this._contextIsDirty ||= !current || current.object !== texture;\n\n this._bindings[name] = {\n type: ComputeBindingType.StorageTexture,\n object: texture,\n indexInGroupEntries: current?.indexInGroupEntries,\n };\n }\n\n /**\n * Binds an external texture to the shader\n * @param name Binding name of the texture\n * @param texture Texture to bind\n */\n public setExternalTexture(name: string, texture: ExternalTexture): void {\n const current = this._bindings[name];\n\n this._contextIsDirty ||= !current || current.object !== texture;\n\n this._bindings[name] = {\n type: ComputeBindingType.ExternalTexture,\n object: texture,\n indexInGroupEntries: current?.indexInGroupEntries,\n };\n }\n\n /**\n * Binds a video texture to the shader (by binding the external texture attached to this video)\n * @param name Binding name of the texture\n * @param texture Texture to bind\n * @returns true if the video texture was successfully bound, else false. false will be returned if the current engine does not support external textures\n */\n public setVideoTexture(name: string, texture: VideoTexture) {\n if (texture.externalTexture) {\n this.setExternalTexture(name, texture.externalTexture);\n return true;\n }\n\n return false;\n }\n\n /**\n * Binds a uniform buffer to the shader\n * @param name Binding name of the buffer\n * @param buffer Buffer to bind\n */\n public setUniformBuffer(name: string, buffer: UniformBuffer | DataBuffer): void {\n const current = this._bindings[name];\n\n this._contextIsDirty ||= !current || current.object !== buffer;\n\n this._bindings[name] = {\n type: ComputeShader._BufferIsDataBuffer(buffer) ? ComputeBindingType.DataBuffer : ComputeBindingType.UniformBuffer,\n object: buffer,\n indexInGroupEntries: current?.indexInGroupEntries,\n };\n }\n\n /**\n * Binds a storage buffer to the shader\n * @param name Binding name of the buffer\n * @param buffer Buffer to bind\n */\n public setStorageBuffer(name: string, buffer: StorageBuffer | DataBuffer): void {\n const current = this._bindings[name];\n\n this._contextIsDirty ||= !current || current.object !== buffer;\n\n this._bindings[name] = {\n type: ComputeShader._BufferIsDataBuffer(buffer) ? ComputeBindingType.DataBuffer : ComputeBindingType.StorageBuffer,\n object: buffer,\n indexInGroupEntries: current?.indexInGroupEntries,\n };\n }\n\n /**\n * Binds a texture sampler to the shader\n * @param name Binding name of the sampler\n * @param sampler Sampler to bind\n */\n public setTextureSampler(name: string, sampler: TextureSampler): void {\n const current = this._bindings[name];\n\n this._contextIsDirty ||= !current || !sampler.compareSampler(current.object);\n\n this._bindings[name] = {\n type: ComputeBindingType.Sampler,\n object: sampler,\n indexInGroupEntries: current?.indexInGroupEntries,\n };\n }\n\n /**\n * Specifies that the compute shader is ready to be executed (the compute effect and all the resources are ready)\n * @returns true if the compute shader is ready to be executed\n */\n public isReady(): boolean {\n let effect = this._effect;\n\n for (const key in this._bindings) {\n const binding = this._bindings[key],\n type = binding.type,\n object = binding.object;\n\n switch (type) {\n case ComputeBindingType.Texture:\n case ComputeBindingType.TextureWithoutSampler:\n case ComputeBindingType.StorageTexture: {\n const texture = object as BaseTexture;\n if (!texture.isReady()) {\n return false;\n }\n break;\n }\n case ComputeBindingType.ExternalTexture: {\n const texture = object as ExternalTexture;\n if (!texture.isReady()) {\n return false;\n }\n break;\n }\n }\n }\n\n const defines = [\"#define \" + this._options.entryPoint];\n\n const shaderName = this._shaderPath;\n\n if (this._options.defines) {\n for (let index = 0; index < this._options.defines.length; index++) {\n defines.push(this._options.defines[index]);\n }\n }\n\n const join = defines.join(\"\\n\");\n\n if (this._cachedDefines !== join) {\n this._cachedDefines = join;\n\n effect = this._engine.createComputeEffect(shaderName, <IComputeEffectCreationOptions>{\n defines: join,\n entryPoint: this._options.entryPoint,\n onCompiled: this.onCompiled,\n onError: this.onError,\n useExplicitComputePipelineLayout: this._options.useExplicitComputePipelineLayout,\n });\n\n this._effect = effect;\n }\n\n if (!effect.isReady()) {\n return false;\n }\n\n return true;\n }\n\n /**\n * Dispatches (executes) the compute shader\n * @param x Number of workgroups to execute on the X dimension\n * @param y Number of workgroups to execute on the Y dimension (default: 1)\n * @param z Number of workgroups to execute on the Z dimension (default: 1)\n * @returns True if the dispatch could be done, else false (meaning either the compute effect or at least one of the bound resources was not ready)\n */\n public dispatch(x: number, y?: number, z?: number): boolean {\n if ((!this.fastMode || this.triggerContextRebuild) && !this._checkContext()) {\n return false;\n }\n this._engine.computeDispatch(this._effect, this._context, this._bindings, x, y, z, this._options.bindingsMapping, this.gpuTimeInFrame);\n\n return true;\n }\n\n /**\n * Dispatches (executes) the compute shader.\n * @param buffer Buffer containing the number of workgroups to execute on the X, Y and Z dimensions\n * @param offset Offset in the buffer where the workgroup counts are stored (default: 0)\n * @returns True if the dispatch could be done, else false (meaning either the compute effect or at least one of the bound resources was not ready)\n */\n public dispatchIndirect(buffer: StorageBuffer | DataBuffer, offset: number = 0): boolean {\n if ((!this.fastMode || this.triggerContextRebuild) && !this._checkContext()) {\n return false;\n }\n const dataBuffer = ComputeShader._BufferIsDataBuffer(buffer) ? buffer : buffer.getBuffer();\n this._engine.computeDispatchIndirect(this._effect, this._context, this._bindings, dataBuffer, offset, this._options.bindingsMapping, this.gpuTimeInFrame);\n return true;\n }\n\n private _checkContext(): boolean {\n if (!this.isReady()) {\n return false;\n }\n\n // If the sampling parameters of a texture bound to the shader have changed, we must clear the compute context so that it is recreated with the updated values\n // Also, if the actual (gpu) buffer used by a uniform buffer has changed, we must clear the compute context so that it is recreated with the updated value\n for (const key in this._bindings) {\n const binding = this._bindings[key];\n\n if (!this._options.bindingsMapping[key]) {\n throw new Error(\"ComputeShader ('\" + this.name + \"'): No binding mapping has been provided for the property '\" + key + \"'\");\n }\n\n switch (binding.type) {\n case ComputeBindingType.Texture: {\n const sampler = this._samplers[key];\n const texture = binding.object as BaseTexture;\n\n if (!sampler || !texture._texture || !sampler.compareSampler(texture._texture)) {\n this._samplers[key] = new TextureSampler().setParameters(\n texture.wrapU,\n texture.wrapV,\n texture.wrapR,\n texture.anisotropicFilteringLevel,\n texture._texture!.samplingMode,\n texture._texture?._comparisonFunction\n );\n this._contextIsDirty = true;\n }\n break;\n }\n case ComputeBindingType.ExternalTexture: {\n // we must recreate the bind groups each time if there's an external texture, because device.importExternalTexture must be called each frame\n this._contextIsDirty = true;\n break;\n }\n case ComputeBindingType.UniformBuffer: {\n const ubo = binding.object as UniformBuffer;\n if (ubo.getBuffer() !== binding.buffer) {\n binding.buffer = ubo.getBuffer();\n this._contextIsDirty = true;\n }\n break;\n }\n }\n }\n\n if (this._contextIsDirty) {\n this.triggerContextRebuild = false;\n this._contextIsDirty = false;\n this._context.clear();\n }\n return true;\n }\n\n /**\n * Waits for the compute shader to be ready and executes it\n * @param x Number of workgroups to execute on the X dimension\n * @param y Number of workgroups to execute on the Y dimension (default: 1)\n * @param z Number of workgroups to execute on the Z dimension (default: 1)\n * @param delay Delay between the retries while the shader is not ready (in milliseconds - 10 by default)\n * @returns A promise that is resolved once the shader has been sent to the GPU. Note that it does not mean that the shader execution itself is finished!\n */\n // eslint-disable-next-line @typescript-eslint/naming-convention\n public async dispatchWhenReady(x: number, y?: number, z?: number, delay = 10): Promise<void> {\n return await new Promise((resolve) => {\n _RetryWithInterval(() => this.dispatch(x, y, z), resolve, undefined, delay);\n });\n }\n\n /**\n * Serializes this compute shader in a JSON representation\n * @returns the serialized compute shader object\n */\n public serialize(): any {\n const serializationObject = SerializationHelper.Serialize(this);\n\n serializationObject.options = this._options;\n serializationObject.shaderPath = this._shaderPath;\n serializationObject.bindings = {};\n serializationObject.textures = {};\n\n for (const key in this._bindings) {\n const binding = this._bindings[key];\n const object = binding.object;\n\n switch (binding.type) {\n case ComputeBindingType.Texture:\n case ComputeBindingType.TextureWithoutSampler:\n case ComputeBindingType.StorageTexture: {\n const serializedData = (object as BaseTexture).serialize();\n if (serializedData) {\n serializationObject.textures[key] = serializedData;\n serializationObject.bindings[key] = {\n type: binding.type,\n };\n }\n break;\n }\n\n case ComputeBindingType.InternalTexture:\n case ComputeBindingType.UniformBuffer: {\n break;\n }\n }\n }\n\n return serializationObject;\n }\n\n protected static _BufferIsDataBuffer(buffer: UniformBuffer | StorageBuffer | DataBuffer): buffer is DataBuffer {\n return (buffer as DataBuffer).underlyingResource !== undefined;\n }\n}\n\nlet _Registered = false;\n\n/**\n * Creates a compute shader from parsed compute shader data\n * @param source defines the JSON representation of the compute shader\n * @param scene defines the hosting scene\n * @param rootUrl defines the root URL to use to load textures and relative dependencies\n * @returns a new compute shader\n */\nexport function ComputeShaderParse(source: any, scene: Scene, rootUrl: string): ComputeShader {\n const compute = SerializationHelper.Parse(() => new ComputeShader(source.name, scene.getEngine() as WebGPUEngine, source.shaderPath, source.options), source, scene, rootUrl);\n\n for (const key in source.textures) {\n const binding = source.bindings[key];\n const texture = <Texture>Texture.Parse(source.textures[key], scene, rootUrl);\n\n if (binding.type === ComputeBindingType.Texture) {\n compute.setTexture(key, texture);\n } else if (binding.type === ComputeBindingType.TextureWithoutSampler) {\n compute.setTexture(key, texture, false);\n } else {\n compute.setStorageTexture(key, texture);\n }\n }\n\n return compute;\n}\n\n/**\n * Register side effects for computeShader.\n * Safe to call multiple times; only the first call has an effect.\n */\nexport function RegisterComputeShader(): void {\n if (_Registered) {\n return;\n }\n _Registered = true;\n\n ComputeShader.Parse = ComputeShaderParse;\n\n RegisterClass(\"BABYLON.ComputeShader\", ComputeShader);\n}\n"]}
@@ -19,7 +19,16 @@ export type NativeFrameStats = {
19
19
  export interface INativeEngine {
20
20
  dispose(): void;
21
21
  requestAnimationFrame(callback: () => void): void;
22
- setDeviceLostCallback(callback: () => void): void;
22
+ /**
23
+ * Registers a callback fired after bgfx is (re)initialized on the graphics device, i.e. the
24
+ * device-restored edge. Preferred name; see BabylonNative #1722.
25
+ */
26
+ setRenderResetCallback?(callback: () => void): void;
27
+ /**
28
+ * @deprecated Use {@link setRenderResetCallback}. Kept for compatibility with older
29
+ * BabylonNative builds; despite the name, this fires on device restore, not loss.
30
+ */
31
+ setDeviceLostCallback?(callback: () => void): void;
23
32
  createVertexArray(): NativeData;
24
33
  createIndexBuffer(dataBuffer: ArrayBufferLike, dataByteOffset: number, dataByteLength: number, is32Bits: boolean, dynamic: boolean): NativeData;
25
34
  recordIndexBuffer(vertexArray: NativeData, indexBuffer: NativeData): void;
@@ -1 +1 @@
1
- {"version":3,"file":"nativeInterfaces.js","sourceRoot":"","sources":["../../../../../dev/core/src/Engines/Native/nativeInterfaces.ts"],"names":[],"mappings":"AAiaA,mFAAmF;AACnF,MAAM,CAAN,IAAkB,gBAGjB;AAHD,WAAkB,gBAAgB;IAC9B,uDAAQ,CAAA;IACR,qDAAO,CAAA;AACX,CAAC,EAHiB,gBAAgB,KAAhB,gBAAgB,QAGjC","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\r\nimport { type DeviceType } from \"../../DeviceInput/InputDevices/deviceEnums\";\r\nimport { type IDeviceInputSystem } from \"../../DeviceInput/inputInterfaces\";\r\nimport { type InternalTexture } from \"../../Materials/Textures/internalTexture\";\r\nimport { type Nullable } from \"../../types\";\r\nimport { type ICanvas, type IImage, type IPath2D } from \"../ICanvas\";\r\nimport { type NativeData, type NativeDataStream } from \"./nativeDataStream\";\r\nimport { type Matrix } from \"../../Maths/math.vector\";\r\n\r\nexport type NativeTexture = NativeData;\r\nexport type NativeFramebuffer = NativeData;\r\nexport type NativeVertexArrayObject = NativeData;\r\nexport type NativeProgram = NativeData;\r\nexport type NativeUniform = NativeData;\r\n\r\n/** @internal */\r\nexport type NativeFrameStats = {\r\n /** @internal */\r\n gpuTimeNs: number;\r\n};\r\n\r\n/** @internal */\r\nexport interface INativeEngine {\r\n dispose(): void;\r\n\r\n requestAnimationFrame(callback: () => void): void;\r\n setDeviceLostCallback(callback: () => void): void;\r\n\r\n createVertexArray(): NativeData;\r\n\r\n createIndexBuffer(dataBuffer: ArrayBufferLike, dataByteOffset: number, dataByteLength: number, is32Bits: boolean, dynamic: boolean): NativeData;\r\n recordIndexBuffer(vertexArray: NativeData, indexBuffer: NativeData): void;\r\n updateDynamicIndexBuffer(indexBuffer: NativeData, data: ArrayBufferLike, dataByteOffset: number, dataByteLength: number, startIndex: number): void;\r\n\r\n createVertexBuffer(dataBuffer: ArrayBufferLike, dataByteOffset: number, dataByteLength: number, dynamic: boolean): NativeData;\r\n recordVertexBuffer(\r\n vertexArray: NativeData,\r\n vertexBuffer: NativeData,\r\n location: number,\r\n byteOffset: number,\r\n byteStride: number,\r\n numElements: number,\r\n type: number,\r\n normalized: boolean,\r\n instanceDivisor: number\r\n ): void;\r\n updateDynamicVertexBuffer(vertexBuffer: NativeData, dataBuffer: ArrayBufferLike, dataByteOffset: number, dataByteLength: number, vertexByteOffset?: number): void;\r\n\r\n createProgram(vertexShader: string, fragmentShader: string): NativeProgram;\r\n createProgramAsync(vertexShader: string, fragmentShader: string, onSuccess: () => void, onError: (error: Error) => void): NativeProgram;\r\n getUniforms(shaderProgram: NativeProgram, uniformsNames: string[]): WebGLUniformLocation[];\r\n getAttributes(shaderProgram: NativeProgram, attributeNames: string[]): number[];\r\n\r\n createTexture(): NativeTexture;\r\n initializeTexture(texture: NativeTexture, width: number, height: number, hasMips: boolean, format: number, renderTarget: boolean, srgb: boolean, samples: number): void;\r\n loadTexture(texture: NativeTexture, data: ArrayBufferView, generateMips: boolean, invertY: boolean, srgb: boolean, onSuccess: () => void, onError: () => void): void;\r\n loadRawTexture(texture: NativeTexture, data: ArrayBufferView, width: number, height: number, format: number, generateMips: boolean, invertY: boolean): void;\r\n loadRawTexture2DArray(\r\n texture: NativeTexture,\r\n data: Nullable<ArrayBufferView>,\r\n width: number,\r\n height: number,\r\n depth: number,\r\n format: number,\r\n generateMipMaps: boolean,\r\n invertY: boolean\r\n ): void;\r\n loadCubeTexture(texture: NativeTexture, data: Array<ArrayBufferView>, generateMips: boolean, invertY: boolean, srgb: boolean, onSuccess: () => void, onError: () => void): void;\r\n loadCubeTextureWithMips(texture: NativeTexture, data: Array<Array<ArrayBufferView>>, invertY: boolean, srgb: boolean, onSuccess: () => void, onError: () => void): void;\r\n getTextureWidth(texture: NativeTexture): number;\r\n getTextureHeight(texture: NativeTexture): number;\r\n deleteTexture(texture: NativeTexture): void;\r\n readTexture(\r\n texture: NativeTexture,\r\n mipLevel: number,\r\n x: number,\r\n y: number,\r\n width: number,\r\n height: number,\r\n buffer: Nullable<ArrayBuffer>,\r\n bufferOffset: number,\r\n bufferLength: number\r\n ): Promise<ArrayBuffer>;\r\n\r\n createImageBitmap(data: ArrayBuffer | IImage): ImageBitmap;\r\n resizeImageBitmap(image: ImageBitmap, bufferWidth: number, bufferHeight: number): Uint8Array;\r\n\r\n createFrameBuffer(\r\n texture: Nullable<NativeTexture>,\r\n width: number,\r\n height: number,\r\n generateStencilBuffer: boolean,\r\n generateDepthBuffer: boolean,\r\n samples: number\r\n ): NativeFramebuffer;\r\n\r\n getRenderWidth(): number;\r\n getRenderHeight(): number;\r\n\r\n setHardwareScalingLevel(level: number): void;\r\n\r\n setViewPort(x: number, y: number, width: number, height: number): void;\r\n\r\n setCommandDataStream(dataStream: NativeDataStream): void;\r\n submitCommands(): void;\r\n\r\n populateFrameStats(stats: NativeFrameStats): void;\r\n}\r\n\r\n/** @internal */\r\ninterface INativeEngineInfo {\r\n version: string;\r\n nonFloatVertexBuffers: true;\r\n}\r\n\r\n/** @internal */\r\ninterface INativeEngineConstructor {\r\n prototype: INativeEngine;\r\n new (info: INativeEngineInfo): INativeEngine;\r\n\r\n readonly PROTOCOL_VERSION: number;\r\n\r\n readonly CAPS_LIMITS_MAX_TEXTURE_SIZE: number;\r\n readonly CAPS_LIMITS_MAX_TEXTURE_LAYERS: number;\r\n\r\n readonly TEXTURE_NEAREST_NEAREST: number;\r\n readonly TEXTURE_LINEAR_LINEAR: number;\r\n readonly TEXTURE_LINEAR_LINEAR_MIPLINEAR: number;\r\n readonly TEXTURE_NEAREST_NEAREST_MIPNEAREST: number;\r\n readonly TEXTURE_NEAREST_LINEAR_MIPNEAREST: number;\r\n readonly TEXTURE_NEAREST_LINEAR_MIPLINEAR: number;\r\n readonly TEXTURE_NEAREST_LINEAR: number;\r\n readonly TEXTURE_NEAREST_NEAREST_MIPLINEAR: number;\r\n readonly TEXTURE_LINEAR_NEAREST_MIPNEAREST: number;\r\n readonly TEXTURE_LINEAR_NEAREST_MIPLINEAR: number;\r\n readonly TEXTURE_LINEAR_LINEAR_MIPNEAREST: number;\r\n readonly TEXTURE_LINEAR_NEAREST: number;\r\n\r\n readonly DEPTH_TEST_LESS: number;\r\n readonly DEPTH_TEST_LEQUAL: number;\r\n readonly DEPTH_TEST_EQUAL: number;\r\n readonly DEPTH_TEST_GEQUAL: number;\r\n readonly DEPTH_TEST_GREATER: number;\r\n readonly DEPTH_TEST_NOTEQUAL: number;\r\n readonly DEPTH_TEST_NEVER: number;\r\n readonly DEPTH_TEST_ALWAYS: number;\r\n\r\n readonly ADDRESS_MODE_WRAP: number;\r\n readonly ADDRESS_MODE_MIRROR: number;\r\n readonly ADDRESS_MODE_CLAMP: number;\r\n readonly ADDRESS_MODE_BORDER: number;\r\n readonly ADDRESS_MODE_MIRROR_ONCE: number;\r\n\r\n readonly TEXTURE_FORMAT_BC1: number;\r\n readonly TEXTURE_FORMAT_BC2: number;\r\n readonly TEXTURE_FORMAT_BC3: number;\r\n readonly TEXTURE_FORMAT_BC4: number;\r\n readonly TEXTURE_FORMAT_BC5: number;\r\n readonly TEXTURE_FORMAT_BC6H: number;\r\n readonly TEXTURE_FORMAT_BC7: number;\r\n readonly TEXTURE_FORMAT_ETC1: number;\r\n readonly TEXTURE_FORMAT_ETC2: number;\r\n readonly TEXTURE_FORMAT_ETC2A: number;\r\n readonly TEXTURE_FORMAT_ETC2A1: number;\r\n readonly TEXTURE_FORMAT_PTC12: number;\r\n readonly TEXTURE_FORMAT_PTC14: number;\r\n readonly TEXTURE_FORMAT_PTC12A: number;\r\n readonly TEXTURE_FORMAT_PTC14A: number;\r\n readonly TEXTURE_FORMAT_PTC22: number;\r\n readonly TEXTURE_FORMAT_PTC24: number;\r\n readonly TEXTURE_FORMAT_ATC: number;\r\n readonly TEXTURE_FORMAT_ATCE: number;\r\n readonly TEXTURE_FORMAT_ATCI: number;\r\n readonly TEXTURE_FORMAT_ASTC4x4: number;\r\n readonly TEXTURE_FORMAT_ASTC5x4: number;\r\n readonly TEXTURE_FORMAT_ASTC5x5: number;\r\n readonly TEXTURE_FORMAT_ASTC6x5: number;\r\n readonly TEXTURE_FORMAT_ASTC6x6: number;\r\n readonly TEXTURE_FORMAT_ASTC8x5: number;\r\n readonly TEXTURE_FORMAT_ASTC8x6: number;\r\n readonly TEXTURE_FORMAT_ASTC8x8: number;\r\n readonly TEXTURE_FORMAT_ASTC10x5: number;\r\n readonly TEXTURE_FORMAT_ASTC10x6: number;\r\n readonly TEXTURE_FORMAT_ASTC10x8: number;\r\n readonly TEXTURE_FORMAT_ASTC10x10: number;\r\n readonly TEXTURE_FORMAT_ASTC12x10: number;\r\n readonly TEXTURE_FORMAT_ASTC12x12: number;\r\n\r\n readonly TEXTURE_FORMAT_R1: number;\r\n readonly TEXTURE_FORMAT_A8: number;\r\n readonly TEXTURE_FORMAT_R8: number;\r\n readonly TEXTURE_FORMAT_R8I: number;\r\n readonly TEXTURE_FORMAT_R8U: number;\r\n readonly TEXTURE_FORMAT_R8S: number;\r\n readonly TEXTURE_FORMAT_R16: number;\r\n readonly TEXTURE_FORMAT_R16I: number;\r\n readonly TEXTURE_FORMAT_R16U: number;\r\n readonly TEXTURE_FORMAT_R16F: number;\r\n readonly TEXTURE_FORMAT_R16S: number;\r\n readonly TEXTURE_FORMAT_R32I: number;\r\n readonly TEXTURE_FORMAT_R32U: number;\r\n readonly TEXTURE_FORMAT_R32F: number;\r\n readonly TEXTURE_FORMAT_RG8: number;\r\n readonly TEXTURE_FORMAT_RG8I: number;\r\n readonly TEXTURE_FORMAT_RG8U: number;\r\n readonly TEXTURE_FORMAT_RG8S: number;\r\n readonly TEXTURE_FORMAT_RG16: number;\r\n readonly TEXTURE_FORMAT_RG16I: number;\r\n readonly TEXTURE_FORMAT_RG16U: number;\r\n readonly TEXTURE_FORMAT_RG16F: number;\r\n readonly TEXTURE_FORMAT_RG16S: number;\r\n readonly TEXTURE_FORMAT_RG32I: number;\r\n readonly TEXTURE_FORMAT_RG32U: number;\r\n readonly TEXTURE_FORMAT_RG32F: number;\r\n readonly TEXTURE_FORMAT_RGB8: number;\r\n readonly TEXTURE_FORMAT_RGB8I: number;\r\n readonly TEXTURE_FORMAT_RGB8U: number;\r\n readonly TEXTURE_FORMAT_RGB8S: number;\r\n readonly TEXTURE_FORMAT_RGB9E5F: number;\r\n readonly TEXTURE_FORMAT_BGRA8: number;\r\n readonly TEXTURE_FORMAT_RGBA8: number;\r\n readonly TEXTURE_FORMAT_RGBA8I: number;\r\n readonly TEXTURE_FORMAT_RGBA8U: number;\r\n readonly TEXTURE_FORMAT_RGBA8S: number;\r\n readonly TEXTURE_FORMAT_RGBA16: number;\r\n readonly TEXTURE_FORMAT_RGBA16I: number;\r\n readonly TEXTURE_FORMAT_RGBA16U: number;\r\n readonly TEXTURE_FORMAT_RGBA16F: number;\r\n readonly TEXTURE_FORMAT_RGBA16S: number;\r\n readonly TEXTURE_FORMAT_RGBA32I: number;\r\n readonly TEXTURE_FORMAT_RGBA32U: number;\r\n readonly TEXTURE_FORMAT_RGBA32F: number;\r\n readonly TEXTURE_FORMAT_B5G6R5: number;\r\n readonly TEXTURE_FORMAT_R5G6B5: number;\r\n readonly TEXTURE_FORMAT_BGRA4: number;\r\n readonly TEXTURE_FORMAT_RGBA4: number;\r\n readonly TEXTURE_FORMAT_BGR5A1: number;\r\n readonly TEXTURE_FORMAT_RGB5A1: number;\r\n readonly TEXTURE_FORMAT_RGB10A2: number;\r\n readonly TEXTURE_FORMAT_RG11B10F: number;\r\n\r\n readonly TEXTURE_FORMAT_D16: number;\r\n readonly TEXTURE_FORMAT_D24: number;\r\n readonly TEXTURE_FORMAT_D24S8: number;\r\n readonly TEXTURE_FORMAT_D32: number;\r\n readonly TEXTURE_FORMAT_D16F: number;\r\n readonly TEXTURE_FORMAT_D24F: number;\r\n readonly TEXTURE_FORMAT_D32F: number;\r\n readonly TEXTURE_FORMAT_D0S8: number;\r\n\r\n readonly ATTRIB_TYPE_INT8: number;\r\n readonly ATTRIB_TYPE_UINT8: number;\r\n readonly ATTRIB_TYPE_INT16: number;\r\n readonly ATTRIB_TYPE_UINT16: number;\r\n readonly ATTRIB_TYPE_FLOAT: number;\r\n\r\n readonly ALPHA_DISABLE: number;\r\n readonly ALPHA_ADD: number;\r\n readonly ALPHA_COMBINE: number;\r\n readonly ALPHA_SUBTRACT: number;\r\n readonly ALPHA_MULTIPLY: number;\r\n readonly ALPHA_MAXIMIZED: number;\r\n readonly ALPHA_ONEONE: number;\r\n readonly ALPHA_PREMULTIPLIED: number;\r\n readonly ALPHA_PREMULTIPLIED_PORTERDUFF: number;\r\n readonly ALPHA_INTERPOLATE: number;\r\n readonly ALPHA_SCREENMODE: number;\r\n\r\n readonly STENCIL_TEST_LESS: number;\r\n readonly STENCIL_TEST_LEQUAL: number;\r\n readonly STENCIL_TEST_EQUAL: number;\r\n readonly STENCIL_TEST_GEQUAL: number;\r\n readonly STENCIL_TEST_GREATER: number;\r\n readonly STENCIL_TEST_NOTEQUAL: number;\r\n readonly STENCIL_TEST_NEVER: number;\r\n readonly STENCIL_TEST_ALWAYS: number;\r\n\r\n readonly STENCIL_OP_FAIL_S_ZERO: number;\r\n readonly STENCIL_OP_FAIL_S_KEEP: number;\r\n readonly STENCIL_OP_FAIL_S_REPLACE: number;\r\n readonly STENCIL_OP_FAIL_S_INCR: number;\r\n readonly STENCIL_OP_FAIL_S_INCRSAT: number;\r\n readonly STENCIL_OP_FAIL_S_DECR: number;\r\n readonly STENCIL_OP_FAIL_S_DECRSAT: number;\r\n readonly STENCIL_OP_FAIL_S_INVERT: number;\r\n\r\n readonly STENCIL_OP_FAIL_Z_ZERO: number;\r\n readonly STENCIL_OP_FAIL_Z_KEEP: number;\r\n readonly STENCIL_OP_FAIL_Z_REPLACE: number;\r\n readonly STENCIL_OP_FAIL_Z_INCR: number;\r\n readonly STENCIL_OP_FAIL_Z_INCRSAT: number;\r\n readonly STENCIL_OP_FAIL_Z_DECR: number;\r\n readonly STENCIL_OP_FAIL_Z_DECRSAT: number;\r\n readonly STENCIL_OP_FAIL_Z_INVERT: number;\r\n\r\n readonly STENCIL_OP_PASS_Z_ZERO: number;\r\n readonly STENCIL_OP_PASS_Z_KEEP: number;\r\n readonly STENCIL_OP_PASS_Z_REPLACE: number;\r\n readonly STENCIL_OP_PASS_Z_INCR: number;\r\n readonly STENCIL_OP_PASS_Z_INCRSAT: number;\r\n readonly STENCIL_OP_PASS_Z_DECR: number;\r\n readonly STENCIL_OP_PASS_Z_DECRSAT: number;\r\n readonly STENCIL_OP_PASS_Z_INVERT: number;\r\n\r\n readonly COMMAND_DELETEVERTEXARRAY: NativeData;\r\n readonly COMMAND_DELETEINDEXBUFFER: NativeData;\r\n readonly COMMAND_DELETEVERTEXBUFFER: NativeData;\r\n readonly COMMAND_SETPROGRAM: NativeData;\r\n readonly COMMAND_SETMATRIX: NativeData;\r\n readonly COMMAND_SETMATRIX3X3: NativeData;\r\n readonly COMMAND_SETMATRIX2X2: NativeData;\r\n readonly COMMAND_SETMATRICES: NativeData;\r\n readonly COMMAND_SETINT: NativeData;\r\n readonly COMMAND_SETINTARRAY: NativeData;\r\n readonly COMMAND_SETINTARRAY2: NativeData;\r\n readonly COMMAND_SETINTARRAY3: NativeData;\r\n readonly COMMAND_SETINTARRAY4: NativeData;\r\n readonly COMMAND_SETFLOATARRAY: NativeData;\r\n readonly COMMAND_SETFLOATARRAY2: NativeData;\r\n readonly COMMAND_SETFLOATARRAY3: NativeData;\r\n readonly COMMAND_SETFLOATARRAY4: NativeData;\r\n readonly COMMAND_SETTEXTURESAMPLING: NativeData;\r\n readonly COMMAND_SETTEXTUREWRAPMODE: NativeData;\r\n readonly COMMAND_SETTEXTUREANISOTROPICLEVEL: NativeData;\r\n readonly COMMAND_SETTEXTURE: NativeData;\r\n readonly COMMAND_UNSETTEXTURE: NativeData;\r\n readonly COMMAND_DISCARDALLTEXTURES: NativeData;\r\n readonly COMMAND_BINDVERTEXARRAY: NativeData;\r\n readonly COMMAND_SETSTATE: NativeData;\r\n readonly COMMAND_DELETEPROGRAM: NativeData;\r\n readonly COMMAND_SETZOFFSET: NativeData;\r\n readonly COMMAND_SETZOFFSETUNITS: NativeData;\r\n readonly COMMAND_SETDEPTHTEST: NativeData;\r\n readonly COMMAND_SETDEPTHWRITE: NativeData;\r\n readonly COMMAND_SETCOLORWRITE: NativeData;\r\n readonly COMMAND_SETBLENDMODE: NativeData;\r\n readonly COMMAND_SETFLOAT: NativeData;\r\n readonly COMMAND_SETFLOAT2: NativeData;\r\n readonly COMMAND_SETFLOAT3: NativeData;\r\n readonly COMMAND_SETFLOAT4: NativeData;\r\n readonly COMMAND_BINDFRAMEBUFFER: NativeData;\r\n readonly COMMAND_UNBINDFRAMEBUFFER: NativeData;\r\n readonly COMMAND_DELETEFRAMEBUFFER: NativeData;\r\n readonly COMMAND_DRAWINDEXED: NativeData;\r\n readonly COMMAND_DRAWINDEXEDINSTANCED: NativeData;\r\n readonly COMMAND_DRAW: NativeData;\r\n readonly COMMAND_DRAWINSTANCED: NativeData;\r\n readonly COMMAND_CLEAR: NativeData;\r\n readonly COMMAND_SETSTENCIL: NativeData;\r\n readonly COMMAND_SETVIEWPORT: NativeData;\r\n readonly COMMAND_SETSCISSOR: NativeData;\r\n readonly COMMAND_COPYTEXTURE: NativeData;\r\n}\r\n\r\n/** @internal */\r\nexport interface INativeCamera {\r\n createVideo(constraints: MediaTrackConstraints): any;\r\n updateVideoTexture(texture: Nullable<InternalTexture>, video: HTMLVideoElement, invertY: boolean): void;\r\n}\r\n\r\n/** @internal */\r\ninterface INativeCameraConstructor {\r\n prototype: INativeCamera;\r\n new (): INativeCamera;\r\n}\r\n\r\n/** @internal */\r\ninterface INativeCanvasConstructor {\r\n prototype: ICanvas;\r\n new (): ICanvas;\r\n\r\n loadTTFAsync(fontName: string, buffer: ArrayBuffer): void;\r\n}\r\n\r\n/** @internal */\r\ninterface INativeImageConstructor {\r\n prototype: IImage;\r\n new (): IImage;\r\n}\r\n\r\n/** @internal */\r\ninterface INativePath2DConstructor {\r\n prototype: IPath2D;\r\n new (d?: string): IPath2D;\r\n}\r\n\r\n/** @internal */\r\ninterface IDeviceInputSystemConstructor {\r\n prototype: IDeviceInputSystem;\r\n new (\r\n onDeviceConnected: (deviceType: DeviceType, deviceSlot: number) => void,\r\n onDeviceDisconnected: (deviceType: DeviceType, deviceSlot: number) => void,\r\n onInputChanged: (deviceType: DeviceType, deviceSlot: number, inputIndex: number, currentState: number) => void\r\n ): IDeviceInputSystem;\r\n}\r\n\r\n/** @internal */\r\nexport interface INativeDataStream {\r\n writeBuffer(buffer: ArrayBuffer, length: number): void;\r\n}\r\n\r\n/** @internal */\r\ninterface INativeDataStreamConstructor {\r\n prototype: INativeDataStream;\r\n new (requestFlushCallback: () => void): INativeDataStream;\r\n\r\n readonly VALIDATION_ENABLED: boolean;\r\n readonly VALIDATION_UINT_32: number;\r\n readonly VALIDATION_INT_32: number;\r\n readonly VALIDATION_FLOAT_32: number;\r\n readonly VALIDATION_UINT_32_ARRAY: number;\r\n readonly VALIDATION_INT_32_ARRAY: number;\r\n readonly VALIDATION_FLOAT_32_ARRAY: number;\r\n readonly VALIDATION_NATIVE_DATA: number;\r\n readonly VALIDATION_BOOLEAN: number;\r\n}\r\n\r\n// Note: These values need to match those in Babylon Native's NativeTracing plugin.\r\nexport const enum NativeTraceLevel {\r\n Mark = 1,\r\n Log = 2,\r\n}\r\n\r\n/** @internal */\r\nexport interface INative {\r\n // NativeEngine plugin\r\n Engine: INativeEngineConstructor;\r\n NativeDataStream: INativeDataStreamConstructor;\r\n\r\n // NativeCamera plugin\r\n Camera?: INativeCameraConstructor;\r\n\r\n // NativeCanvas plugin\r\n Canvas?: INativeCanvasConstructor;\r\n Image?: INativeImageConstructor;\r\n Path2D?: INativePath2DConstructor;\r\n\r\n // Native XMLHttpRequest polyfill\r\n XMLHttpRequest?: typeof XMLHttpRequest;\r\n\r\n // NativeInput plugin\r\n DeviceInputSystem?: IDeviceInputSystemConstructor;\r\n\r\n // NativeTracing plugin\r\n enablePerformanceLogging?(level?: NativeTraceLevel): void;\r\n disablePerformanceLogging?(): void;\r\n startPerformanceCounter?(counter: string): unknown;\r\n endPerformanceCounter?(counter: unknown): void;\r\n\r\n // GaussianSplatting\r\n sortSplats?(modelViewMatrix: Matrix, splatPositions: Float32Array, splatIndex: Float32Array, useRightHandedSystem: boolean): void;\r\n}\r\n"]}
1
+ {"version":3,"file":"nativeInterfaces.js","sourceRoot":"","sources":["../../../../../dev/core/src/Engines/Native/nativeInterfaces.ts"],"names":[],"mappings":"AA0aA,mFAAmF;AACnF,MAAM,CAAN,IAAkB,gBAGjB;AAHD,WAAkB,gBAAgB;IAC9B,uDAAQ,CAAA;IACR,qDAAO,CAAA;AACX,CAAC,EAHiB,gBAAgB,KAAhB,gBAAgB,QAGjC","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\r\nimport { type DeviceType } from \"../../DeviceInput/InputDevices/deviceEnums\";\r\nimport { type IDeviceInputSystem } from \"../../DeviceInput/inputInterfaces\";\r\nimport { type InternalTexture } from \"../../Materials/Textures/internalTexture\";\r\nimport { type Nullable } from \"../../types\";\r\nimport { type ICanvas, type IImage, type IPath2D } from \"../ICanvas\";\r\nimport { type NativeData, type NativeDataStream } from \"./nativeDataStream\";\r\nimport { type Matrix } from \"../../Maths/math.vector\";\r\n\r\nexport type NativeTexture = NativeData;\r\nexport type NativeFramebuffer = NativeData;\r\nexport type NativeVertexArrayObject = NativeData;\r\nexport type NativeProgram = NativeData;\r\nexport type NativeUniform = NativeData;\r\n\r\n/** @internal */\r\nexport type NativeFrameStats = {\r\n /** @internal */\r\n gpuTimeNs: number;\r\n};\r\n\r\n/** @internal */\r\nexport interface INativeEngine {\r\n dispose(): void;\r\n\r\n requestAnimationFrame(callback: () => void): void;\r\n /**\r\n * Registers a callback fired after bgfx is (re)initialized on the graphics device, i.e. the\r\n * device-restored edge. Preferred name; see BabylonNative #1722.\r\n */\r\n setRenderResetCallback?(callback: () => void): void;\r\n /**\r\n * @deprecated Use {@link setRenderResetCallback}. Kept for compatibility with older\r\n * BabylonNative builds; despite the name, this fires on device restore, not loss.\r\n */\r\n setDeviceLostCallback?(callback: () => void): void;\r\n\r\n createVertexArray(): NativeData;\r\n\r\n createIndexBuffer(dataBuffer: ArrayBufferLike, dataByteOffset: number, dataByteLength: number, is32Bits: boolean, dynamic: boolean): NativeData;\r\n recordIndexBuffer(vertexArray: NativeData, indexBuffer: NativeData): void;\r\n updateDynamicIndexBuffer(indexBuffer: NativeData, data: ArrayBufferLike, dataByteOffset: number, dataByteLength: number, startIndex: number): void;\r\n\r\n createVertexBuffer(dataBuffer: ArrayBufferLike, dataByteOffset: number, dataByteLength: number, dynamic: boolean): NativeData;\r\n recordVertexBuffer(\r\n vertexArray: NativeData,\r\n vertexBuffer: NativeData,\r\n location: number,\r\n byteOffset: number,\r\n byteStride: number,\r\n numElements: number,\r\n type: number,\r\n normalized: boolean,\r\n instanceDivisor: number\r\n ): void;\r\n updateDynamicVertexBuffer(vertexBuffer: NativeData, dataBuffer: ArrayBufferLike, dataByteOffset: number, dataByteLength: number, vertexByteOffset?: number): void;\r\n\r\n createProgram(vertexShader: string, fragmentShader: string): NativeProgram;\r\n createProgramAsync(vertexShader: string, fragmentShader: string, onSuccess: () => void, onError: (error: Error) => void): NativeProgram;\r\n getUniforms(shaderProgram: NativeProgram, uniformsNames: string[]): WebGLUniformLocation[];\r\n getAttributes(shaderProgram: NativeProgram, attributeNames: string[]): number[];\r\n\r\n createTexture(): NativeTexture;\r\n initializeTexture(texture: NativeTexture, width: number, height: number, hasMips: boolean, format: number, renderTarget: boolean, srgb: boolean, samples: number): void;\r\n loadTexture(texture: NativeTexture, data: ArrayBufferView, generateMips: boolean, invertY: boolean, srgb: boolean, onSuccess: () => void, onError: () => void): void;\r\n loadRawTexture(texture: NativeTexture, data: ArrayBufferView, width: number, height: number, format: number, generateMips: boolean, invertY: boolean): void;\r\n loadRawTexture2DArray(\r\n texture: NativeTexture,\r\n data: Nullable<ArrayBufferView>,\r\n width: number,\r\n height: number,\r\n depth: number,\r\n format: number,\r\n generateMipMaps: boolean,\r\n invertY: boolean\r\n ): void;\r\n loadCubeTexture(texture: NativeTexture, data: Array<ArrayBufferView>, generateMips: boolean, invertY: boolean, srgb: boolean, onSuccess: () => void, onError: () => void): void;\r\n loadCubeTextureWithMips(texture: NativeTexture, data: Array<Array<ArrayBufferView>>, invertY: boolean, srgb: boolean, onSuccess: () => void, onError: () => void): void;\r\n getTextureWidth(texture: NativeTexture): number;\r\n getTextureHeight(texture: NativeTexture): number;\r\n deleteTexture(texture: NativeTexture): void;\r\n readTexture(\r\n texture: NativeTexture,\r\n mipLevel: number,\r\n x: number,\r\n y: number,\r\n width: number,\r\n height: number,\r\n buffer: Nullable<ArrayBuffer>,\r\n bufferOffset: number,\r\n bufferLength: number\r\n ): Promise<ArrayBuffer>;\r\n\r\n createImageBitmap(data: ArrayBuffer | IImage): ImageBitmap;\r\n resizeImageBitmap(image: ImageBitmap, bufferWidth: number, bufferHeight: number): Uint8Array;\r\n\r\n createFrameBuffer(\r\n texture: Nullable<NativeTexture>,\r\n width: number,\r\n height: number,\r\n generateStencilBuffer: boolean,\r\n generateDepthBuffer: boolean,\r\n samples: number\r\n ): NativeFramebuffer;\r\n\r\n getRenderWidth(): number;\r\n getRenderHeight(): number;\r\n\r\n setHardwareScalingLevel(level: number): void;\r\n\r\n setViewPort(x: number, y: number, width: number, height: number): void;\r\n\r\n setCommandDataStream(dataStream: NativeDataStream): void;\r\n submitCommands(): void;\r\n\r\n populateFrameStats(stats: NativeFrameStats): void;\r\n}\r\n\r\n/** @internal */\r\ninterface INativeEngineInfo {\r\n version: string;\r\n nonFloatVertexBuffers: true;\r\n}\r\n\r\n/** @internal */\r\ninterface INativeEngineConstructor {\r\n prototype: INativeEngine;\r\n new (info: INativeEngineInfo): INativeEngine;\r\n\r\n readonly PROTOCOL_VERSION: number;\r\n\r\n readonly CAPS_LIMITS_MAX_TEXTURE_SIZE: number;\r\n readonly CAPS_LIMITS_MAX_TEXTURE_LAYERS: number;\r\n\r\n readonly TEXTURE_NEAREST_NEAREST: number;\r\n readonly TEXTURE_LINEAR_LINEAR: number;\r\n readonly TEXTURE_LINEAR_LINEAR_MIPLINEAR: number;\r\n readonly TEXTURE_NEAREST_NEAREST_MIPNEAREST: number;\r\n readonly TEXTURE_NEAREST_LINEAR_MIPNEAREST: number;\r\n readonly TEXTURE_NEAREST_LINEAR_MIPLINEAR: number;\r\n readonly TEXTURE_NEAREST_LINEAR: number;\r\n readonly TEXTURE_NEAREST_NEAREST_MIPLINEAR: number;\r\n readonly TEXTURE_LINEAR_NEAREST_MIPNEAREST: number;\r\n readonly TEXTURE_LINEAR_NEAREST_MIPLINEAR: number;\r\n readonly TEXTURE_LINEAR_LINEAR_MIPNEAREST: number;\r\n readonly TEXTURE_LINEAR_NEAREST: number;\r\n\r\n readonly DEPTH_TEST_LESS: number;\r\n readonly DEPTH_TEST_LEQUAL: number;\r\n readonly DEPTH_TEST_EQUAL: number;\r\n readonly DEPTH_TEST_GEQUAL: number;\r\n readonly DEPTH_TEST_GREATER: number;\r\n readonly DEPTH_TEST_NOTEQUAL: number;\r\n readonly DEPTH_TEST_NEVER: number;\r\n readonly DEPTH_TEST_ALWAYS: number;\r\n\r\n readonly ADDRESS_MODE_WRAP: number;\r\n readonly ADDRESS_MODE_MIRROR: number;\r\n readonly ADDRESS_MODE_CLAMP: number;\r\n readonly ADDRESS_MODE_BORDER: number;\r\n readonly ADDRESS_MODE_MIRROR_ONCE: number;\r\n\r\n readonly TEXTURE_FORMAT_BC1: number;\r\n readonly TEXTURE_FORMAT_BC2: number;\r\n readonly TEXTURE_FORMAT_BC3: number;\r\n readonly TEXTURE_FORMAT_BC4: number;\r\n readonly TEXTURE_FORMAT_BC5: number;\r\n readonly TEXTURE_FORMAT_BC6H: number;\r\n readonly TEXTURE_FORMAT_BC7: number;\r\n readonly TEXTURE_FORMAT_ETC1: number;\r\n readonly TEXTURE_FORMAT_ETC2: number;\r\n readonly TEXTURE_FORMAT_ETC2A: number;\r\n readonly TEXTURE_FORMAT_ETC2A1: number;\r\n readonly TEXTURE_FORMAT_PTC12: number;\r\n readonly TEXTURE_FORMAT_PTC14: number;\r\n readonly TEXTURE_FORMAT_PTC12A: number;\r\n readonly TEXTURE_FORMAT_PTC14A: number;\r\n readonly TEXTURE_FORMAT_PTC22: number;\r\n readonly TEXTURE_FORMAT_PTC24: number;\r\n readonly TEXTURE_FORMAT_ATC: number;\r\n readonly TEXTURE_FORMAT_ATCE: number;\r\n readonly TEXTURE_FORMAT_ATCI: number;\r\n readonly TEXTURE_FORMAT_ASTC4x4: number;\r\n readonly TEXTURE_FORMAT_ASTC5x4: number;\r\n readonly TEXTURE_FORMAT_ASTC5x5: number;\r\n readonly TEXTURE_FORMAT_ASTC6x5: number;\r\n readonly TEXTURE_FORMAT_ASTC6x6: number;\r\n readonly TEXTURE_FORMAT_ASTC8x5: number;\r\n readonly TEXTURE_FORMAT_ASTC8x6: number;\r\n readonly TEXTURE_FORMAT_ASTC8x8: number;\r\n readonly TEXTURE_FORMAT_ASTC10x5: number;\r\n readonly TEXTURE_FORMAT_ASTC10x6: number;\r\n readonly TEXTURE_FORMAT_ASTC10x8: number;\r\n readonly TEXTURE_FORMAT_ASTC10x10: number;\r\n readonly TEXTURE_FORMAT_ASTC12x10: number;\r\n readonly TEXTURE_FORMAT_ASTC12x12: number;\r\n\r\n readonly TEXTURE_FORMAT_R1: number;\r\n readonly TEXTURE_FORMAT_A8: number;\r\n readonly TEXTURE_FORMAT_R8: number;\r\n readonly TEXTURE_FORMAT_R8I: number;\r\n readonly TEXTURE_FORMAT_R8U: number;\r\n readonly TEXTURE_FORMAT_R8S: number;\r\n readonly TEXTURE_FORMAT_R16: number;\r\n readonly TEXTURE_FORMAT_R16I: number;\r\n readonly TEXTURE_FORMAT_R16U: number;\r\n readonly TEXTURE_FORMAT_R16F: number;\r\n readonly TEXTURE_FORMAT_R16S: number;\r\n readonly TEXTURE_FORMAT_R32I: number;\r\n readonly TEXTURE_FORMAT_R32U: number;\r\n readonly TEXTURE_FORMAT_R32F: number;\r\n readonly TEXTURE_FORMAT_RG8: number;\r\n readonly TEXTURE_FORMAT_RG8I: number;\r\n readonly TEXTURE_FORMAT_RG8U: number;\r\n readonly TEXTURE_FORMAT_RG8S: number;\r\n readonly TEXTURE_FORMAT_RG16: number;\r\n readonly TEXTURE_FORMAT_RG16I: number;\r\n readonly TEXTURE_FORMAT_RG16U: number;\r\n readonly TEXTURE_FORMAT_RG16F: number;\r\n readonly TEXTURE_FORMAT_RG16S: number;\r\n readonly TEXTURE_FORMAT_RG32I: number;\r\n readonly TEXTURE_FORMAT_RG32U: number;\r\n readonly TEXTURE_FORMAT_RG32F: number;\r\n readonly TEXTURE_FORMAT_RGB8: number;\r\n readonly TEXTURE_FORMAT_RGB8I: number;\r\n readonly TEXTURE_FORMAT_RGB8U: number;\r\n readonly TEXTURE_FORMAT_RGB8S: number;\r\n readonly TEXTURE_FORMAT_RGB9E5F: number;\r\n readonly TEXTURE_FORMAT_BGRA8: number;\r\n readonly TEXTURE_FORMAT_RGBA8: number;\r\n readonly TEXTURE_FORMAT_RGBA8I: number;\r\n readonly TEXTURE_FORMAT_RGBA8U: number;\r\n readonly TEXTURE_FORMAT_RGBA8S: number;\r\n readonly TEXTURE_FORMAT_RGBA16: number;\r\n readonly TEXTURE_FORMAT_RGBA16I: number;\r\n readonly TEXTURE_FORMAT_RGBA16U: number;\r\n readonly TEXTURE_FORMAT_RGBA16F: number;\r\n readonly TEXTURE_FORMAT_RGBA16S: number;\r\n readonly TEXTURE_FORMAT_RGBA32I: number;\r\n readonly TEXTURE_FORMAT_RGBA32U: number;\r\n readonly TEXTURE_FORMAT_RGBA32F: number;\r\n readonly TEXTURE_FORMAT_B5G6R5: number;\r\n readonly TEXTURE_FORMAT_R5G6B5: number;\r\n readonly TEXTURE_FORMAT_BGRA4: number;\r\n readonly TEXTURE_FORMAT_RGBA4: number;\r\n readonly TEXTURE_FORMAT_BGR5A1: number;\r\n readonly TEXTURE_FORMAT_RGB5A1: number;\r\n readonly TEXTURE_FORMAT_RGB10A2: number;\r\n readonly TEXTURE_FORMAT_RG11B10F: number;\r\n\r\n readonly TEXTURE_FORMAT_D16: number;\r\n readonly TEXTURE_FORMAT_D24: number;\r\n readonly TEXTURE_FORMAT_D24S8: number;\r\n readonly TEXTURE_FORMAT_D32: number;\r\n readonly TEXTURE_FORMAT_D16F: number;\r\n readonly TEXTURE_FORMAT_D24F: number;\r\n readonly TEXTURE_FORMAT_D32F: number;\r\n readonly TEXTURE_FORMAT_D0S8: number;\r\n\r\n readonly ATTRIB_TYPE_INT8: number;\r\n readonly ATTRIB_TYPE_UINT8: number;\r\n readonly ATTRIB_TYPE_INT16: number;\r\n readonly ATTRIB_TYPE_UINT16: number;\r\n readonly ATTRIB_TYPE_FLOAT: number;\r\n\r\n readonly ALPHA_DISABLE: number;\r\n readonly ALPHA_ADD: number;\r\n readonly ALPHA_COMBINE: number;\r\n readonly ALPHA_SUBTRACT: number;\r\n readonly ALPHA_MULTIPLY: number;\r\n readonly ALPHA_MAXIMIZED: number;\r\n readonly ALPHA_ONEONE: number;\r\n readonly ALPHA_PREMULTIPLIED: number;\r\n readonly ALPHA_PREMULTIPLIED_PORTERDUFF: number;\r\n readonly ALPHA_INTERPOLATE: number;\r\n readonly ALPHA_SCREENMODE: number;\r\n\r\n readonly STENCIL_TEST_LESS: number;\r\n readonly STENCIL_TEST_LEQUAL: number;\r\n readonly STENCIL_TEST_EQUAL: number;\r\n readonly STENCIL_TEST_GEQUAL: number;\r\n readonly STENCIL_TEST_GREATER: number;\r\n readonly STENCIL_TEST_NOTEQUAL: number;\r\n readonly STENCIL_TEST_NEVER: number;\r\n readonly STENCIL_TEST_ALWAYS: number;\r\n\r\n readonly STENCIL_OP_FAIL_S_ZERO: number;\r\n readonly STENCIL_OP_FAIL_S_KEEP: number;\r\n readonly STENCIL_OP_FAIL_S_REPLACE: number;\r\n readonly STENCIL_OP_FAIL_S_INCR: number;\r\n readonly STENCIL_OP_FAIL_S_INCRSAT: number;\r\n readonly STENCIL_OP_FAIL_S_DECR: number;\r\n readonly STENCIL_OP_FAIL_S_DECRSAT: number;\r\n readonly STENCIL_OP_FAIL_S_INVERT: number;\r\n\r\n readonly STENCIL_OP_FAIL_Z_ZERO: number;\r\n readonly STENCIL_OP_FAIL_Z_KEEP: number;\r\n readonly STENCIL_OP_FAIL_Z_REPLACE: number;\r\n readonly STENCIL_OP_FAIL_Z_INCR: number;\r\n readonly STENCIL_OP_FAIL_Z_INCRSAT: number;\r\n readonly STENCIL_OP_FAIL_Z_DECR: number;\r\n readonly STENCIL_OP_FAIL_Z_DECRSAT: number;\r\n readonly STENCIL_OP_FAIL_Z_INVERT: number;\r\n\r\n readonly STENCIL_OP_PASS_Z_ZERO: number;\r\n readonly STENCIL_OP_PASS_Z_KEEP: number;\r\n readonly STENCIL_OP_PASS_Z_REPLACE: number;\r\n readonly STENCIL_OP_PASS_Z_INCR: number;\r\n readonly STENCIL_OP_PASS_Z_INCRSAT: number;\r\n readonly STENCIL_OP_PASS_Z_DECR: number;\r\n readonly STENCIL_OP_PASS_Z_DECRSAT: number;\r\n readonly STENCIL_OP_PASS_Z_INVERT: number;\r\n\r\n readonly COMMAND_DELETEVERTEXARRAY: NativeData;\r\n readonly COMMAND_DELETEINDEXBUFFER: NativeData;\r\n readonly COMMAND_DELETEVERTEXBUFFER: NativeData;\r\n readonly COMMAND_SETPROGRAM: NativeData;\r\n readonly COMMAND_SETMATRIX: NativeData;\r\n readonly COMMAND_SETMATRIX3X3: NativeData;\r\n readonly COMMAND_SETMATRIX2X2: NativeData;\r\n readonly COMMAND_SETMATRICES: NativeData;\r\n readonly COMMAND_SETINT: NativeData;\r\n readonly COMMAND_SETINTARRAY: NativeData;\r\n readonly COMMAND_SETINTARRAY2: NativeData;\r\n readonly COMMAND_SETINTARRAY3: NativeData;\r\n readonly COMMAND_SETINTARRAY4: NativeData;\r\n readonly COMMAND_SETFLOATARRAY: NativeData;\r\n readonly COMMAND_SETFLOATARRAY2: NativeData;\r\n readonly COMMAND_SETFLOATARRAY3: NativeData;\r\n readonly COMMAND_SETFLOATARRAY4: NativeData;\r\n readonly COMMAND_SETTEXTURESAMPLING: NativeData;\r\n readonly COMMAND_SETTEXTUREWRAPMODE: NativeData;\r\n readonly COMMAND_SETTEXTUREANISOTROPICLEVEL: NativeData;\r\n readonly COMMAND_SETTEXTURE: NativeData;\r\n readonly COMMAND_UNSETTEXTURE: NativeData;\r\n readonly COMMAND_DISCARDALLTEXTURES: NativeData;\r\n readonly COMMAND_BINDVERTEXARRAY: NativeData;\r\n readonly COMMAND_SETSTATE: NativeData;\r\n readonly COMMAND_DELETEPROGRAM: NativeData;\r\n readonly COMMAND_SETZOFFSET: NativeData;\r\n readonly COMMAND_SETZOFFSETUNITS: NativeData;\r\n readonly COMMAND_SETDEPTHTEST: NativeData;\r\n readonly COMMAND_SETDEPTHWRITE: NativeData;\r\n readonly COMMAND_SETCOLORWRITE: NativeData;\r\n readonly COMMAND_SETBLENDMODE: NativeData;\r\n readonly COMMAND_SETFLOAT: NativeData;\r\n readonly COMMAND_SETFLOAT2: NativeData;\r\n readonly COMMAND_SETFLOAT3: NativeData;\r\n readonly COMMAND_SETFLOAT4: NativeData;\r\n readonly COMMAND_BINDFRAMEBUFFER: NativeData;\r\n readonly COMMAND_UNBINDFRAMEBUFFER: NativeData;\r\n readonly COMMAND_DELETEFRAMEBUFFER: NativeData;\r\n readonly COMMAND_DRAWINDEXED: NativeData;\r\n readonly COMMAND_DRAWINDEXEDINSTANCED: NativeData;\r\n readonly COMMAND_DRAW: NativeData;\r\n readonly COMMAND_DRAWINSTANCED: NativeData;\r\n readonly COMMAND_CLEAR: NativeData;\r\n readonly COMMAND_SETSTENCIL: NativeData;\r\n readonly COMMAND_SETVIEWPORT: NativeData;\r\n readonly COMMAND_SETSCISSOR: NativeData;\r\n readonly COMMAND_COPYTEXTURE: NativeData;\r\n}\r\n\r\n/** @internal */\r\nexport interface INativeCamera {\r\n createVideo(constraints: MediaTrackConstraints): any;\r\n updateVideoTexture(texture: Nullable<InternalTexture>, video: HTMLVideoElement, invertY: boolean): void;\r\n}\r\n\r\n/** @internal */\r\ninterface INativeCameraConstructor {\r\n prototype: INativeCamera;\r\n new (): INativeCamera;\r\n}\r\n\r\n/** @internal */\r\ninterface INativeCanvasConstructor {\r\n prototype: ICanvas;\r\n new (): ICanvas;\r\n\r\n loadTTFAsync(fontName: string, buffer: ArrayBuffer): void;\r\n}\r\n\r\n/** @internal */\r\ninterface INativeImageConstructor {\r\n prototype: IImage;\r\n new (): IImage;\r\n}\r\n\r\n/** @internal */\r\ninterface INativePath2DConstructor {\r\n prototype: IPath2D;\r\n new (d?: string): IPath2D;\r\n}\r\n\r\n/** @internal */\r\ninterface IDeviceInputSystemConstructor {\r\n prototype: IDeviceInputSystem;\r\n new (\r\n onDeviceConnected: (deviceType: DeviceType, deviceSlot: number) => void,\r\n onDeviceDisconnected: (deviceType: DeviceType, deviceSlot: number) => void,\r\n onInputChanged: (deviceType: DeviceType, deviceSlot: number, inputIndex: number, currentState: number) => void\r\n ): IDeviceInputSystem;\r\n}\r\n\r\n/** @internal */\r\nexport interface INativeDataStream {\r\n writeBuffer(buffer: ArrayBuffer, length: number): void;\r\n}\r\n\r\n/** @internal */\r\ninterface INativeDataStreamConstructor {\r\n prototype: INativeDataStream;\r\n new (requestFlushCallback: () => void): INativeDataStream;\r\n\r\n readonly VALIDATION_ENABLED: boolean;\r\n readonly VALIDATION_UINT_32: number;\r\n readonly VALIDATION_INT_32: number;\r\n readonly VALIDATION_FLOAT_32: number;\r\n readonly VALIDATION_UINT_32_ARRAY: number;\r\n readonly VALIDATION_INT_32_ARRAY: number;\r\n readonly VALIDATION_FLOAT_32_ARRAY: number;\r\n readonly VALIDATION_NATIVE_DATA: number;\r\n readonly VALIDATION_BOOLEAN: number;\r\n}\r\n\r\n// Note: These values need to match those in Babylon Native's NativeTracing plugin.\r\nexport const enum NativeTraceLevel {\r\n Mark = 1,\r\n Log = 2,\r\n}\r\n\r\n/** @internal */\r\nexport interface INative {\r\n // NativeEngine plugin\r\n Engine: INativeEngineConstructor;\r\n NativeDataStream: INativeDataStreamConstructor;\r\n\r\n // NativeCamera plugin\r\n Camera?: INativeCameraConstructor;\r\n\r\n // NativeCanvas plugin\r\n Canvas?: INativeCanvasConstructor;\r\n Image?: INativeImageConstructor;\r\n Path2D?: INativePath2DConstructor;\r\n\r\n // Native XMLHttpRequest polyfill\r\n XMLHttpRequest?: typeof XMLHttpRequest;\r\n\r\n // NativeInput plugin\r\n DeviceInputSystem?: IDeviceInputSystemConstructor;\r\n\r\n // NativeTracing plugin\r\n enablePerformanceLogging?(level?: NativeTraceLevel): void;\r\n disablePerformanceLogging?(): void;\r\n startPerformanceCounter?(counter: string): unknown;\r\n endPerformanceCounter?(counter: unknown): void;\r\n\r\n // GaussianSplatting\r\n sortSplats?(modelViewMatrix: Matrix, splatPositions: Float32Array, splatIndex: Float32Array, useRightHandedSystem: boolean): void;\r\n}\r\n"]}
@@ -1,10 +1,158 @@
1
1
  /** This file must only contain pure code and pure imports */
2
2
  import { Logger } from "../../../Misc/logger.js";
3
3
  import { ComputeEffect } from "../../../Compute/computeEffect.js";
4
+
4
5
  import { WebGPUComputeContext } from "../webgpuComputeContext.js";
5
6
  import { WebGPUComputePipelineContext } from "../webgpuComputePipelineContext.js";
6
7
  import { WebGPUEngine } from "../../webgpuEngine.pure.js";
7
8
  let _Registered = false;
9
+ const _GetComputeStorageBufferType = (source, group, binding) => {
10
+ const bindingPattern = `@binding\\(${binding}\\)\\s*@group\\(${group}\\)`;
11
+ const groupPattern = `@group\\(${group}\\)\\s*@binding\\(${binding}\\)`;
12
+ const declarationPattern = `(?:${bindingPattern}|${groupPattern})\\s*var<storage\\s*,\\s*(read|read_write)>`;
13
+ const access = source.match(new RegExp(declarationPattern))?.[1];
14
+ return access === "read" ? "read-only-storage" /* WebGPUConstants.BufferBindingType.ReadOnlyStorage */ : "storage" /* WebGPUConstants.BufferBindingType.Storage */;
15
+ };
16
+ const _GetComputeTextureViewDimension = (source, group, binding) => {
17
+ const bindingPattern = `@binding\\(${binding}\\)\\s*@group\\(${group}\\)`;
18
+ const groupPattern = `@group\\(${group}\\)\\s*@binding\\(${binding}\\)`;
19
+ const declaration = source.match(new RegExp(`(?:${bindingPattern}|${groupPattern})\\s*var\\s+\\w+\\s*:\\s*(texture_\\w+)`))?.[1];
20
+ switch (declaration) {
21
+ case "texture_2d_array":
22
+ case "texture_depth_2d_array":
23
+ return "2d-array" /* WebGPUConstants.TextureViewDimension.E2dArray */;
24
+ case "texture_cube":
25
+ return "cube" /* WebGPUConstants.TextureViewDimension.Cube */;
26
+ case "texture_cube_array":
27
+ return "cube-array" /* WebGPUConstants.TextureViewDimension.CubeArray */;
28
+ case "texture_3d":
29
+ return "3d" /* WebGPUConstants.TextureViewDimension.E3d */;
30
+ default:
31
+ return "2d" /* WebGPUConstants.TextureViewDimension.E2d */;
32
+ }
33
+ };
34
+ const _GetInternalTexture = (texture) => {
35
+ const internalTexture = texture;
36
+ if (internalTexture._hardwareTexture !== undefined) {
37
+ return internalTexture;
38
+ }
39
+ return texture._texture;
40
+ };
41
+ const _GetComputeTextureSampleType = (texture, textureFloatLinearFiltering) => {
42
+ const internalTexture = _GetInternalTexture(texture);
43
+ if (!internalTexture) {
44
+ return "float" /* WebGPUConstants.TextureSampleType.Float */;
45
+ }
46
+ const textureIsDepth = internalTexture.format >= 13 && internalTexture.format <= 18;
47
+ if (textureIsDepth) {
48
+ return "depth" /* WebGPUConstants.TextureSampleType.Depth */;
49
+ }
50
+ if (internalTexture.type === 1 && !textureFloatLinearFiltering) {
51
+ return "unfilterable-float" /* WebGPUConstants.TextureSampleType.UnfilterableFloat */;
52
+ }
53
+ return "float" /* WebGPUConstants.TextureSampleType.Float */;
54
+ };
55
+ const _GetComputePipelineLayout = (device, bindings, bindingsMapping, shaderSource, textureFloatLinearFiltering) => {
56
+ if (!bindingsMapping) {
57
+ return null;
58
+ }
59
+ const bindGroupLayoutEntries = [];
60
+ const addEntry = (group, entry) => {
61
+ const entries = (bindGroupLayoutEntries[group] ?? (bindGroupLayoutEntries[group] = []));
62
+ const existingIndex = entries.findIndex((item) => item.binding === entry.binding);
63
+ if (existingIndex >= 0) {
64
+ entries[existingIndex] = entry;
65
+ }
66
+ else {
67
+ entries.push(entry);
68
+ }
69
+ };
70
+ for (const key in bindings) {
71
+ const binding = bindings[key];
72
+ const location = bindingsMapping[key];
73
+ if (!location) {
74
+ continue;
75
+ }
76
+ const group = location.group;
77
+ const bindingIndex = location.binding;
78
+ switch (binding.type) {
79
+ case 0 /* ComputeBindingType.Texture */:
80
+ case 4 /* ComputeBindingType.TextureWithoutSampler */:
81
+ case 8 /* ComputeBindingType.InternalTexture */: {
82
+ const sampleType = _GetComputeTextureSampleType(binding.object, textureFloatLinearFiltering);
83
+ if (binding.type === 0 /* ComputeBindingType.Texture */) {
84
+ addEntry(group, {
85
+ binding: bindingIndex - 1,
86
+ visibility: 4 /* WebGPUConstants.ShaderStage.Compute */,
87
+ sampler: {
88
+ type: sampleType === "unfilterable-float" /* WebGPUConstants.TextureSampleType.UnfilterableFloat */
89
+ ? "non-filtering" /* WebGPUConstants.SamplerBindingType.NonFiltering */
90
+ : "filtering" /* WebGPUConstants.SamplerBindingType.Filtering */,
91
+ },
92
+ });
93
+ }
94
+ addEntry(group, {
95
+ binding: bindingIndex,
96
+ visibility: 4 /* WebGPUConstants.ShaderStage.Compute */,
97
+ texture: {
98
+ sampleType,
99
+ viewDimension: _GetComputeTextureViewDimension(shaderSource, group, bindingIndex),
100
+ multisampled: false,
101
+ },
102
+ });
103
+ break;
104
+ }
105
+ case 1 /* ComputeBindingType.StorageTexture */: {
106
+ addEntry(group, {
107
+ binding: bindingIndex,
108
+ visibility: 4 /* WebGPUConstants.ShaderStage.Compute */,
109
+ storageTexture: {
110
+ access: "write-only" /* WebGPUConstants.StorageTextureAccess.WriteOnly */,
111
+ format: binding.object._texture._hardwareTexture.format,
112
+ viewDimension: _GetComputeTextureViewDimension(shaderSource, group, bindingIndex),
113
+ },
114
+ });
115
+ break;
116
+ }
117
+ case 2 /* ComputeBindingType.UniformBuffer */:
118
+ addEntry(group, {
119
+ binding: bindingIndex,
120
+ visibility: 4 /* WebGPUConstants.ShaderStage.Compute */,
121
+ buffer: { type: "uniform" /* WebGPUConstants.BufferBindingType.Uniform */ },
122
+ });
123
+ break;
124
+ case 3 /* ComputeBindingType.StorageBuffer */:
125
+ case 7 /* ComputeBindingType.DataBuffer */:
126
+ addEntry(group, {
127
+ binding: bindingIndex,
128
+ visibility: 4 /* WebGPUConstants.ShaderStage.Compute */,
129
+ buffer: { type: _GetComputeStorageBufferType(shaderSource, group, bindingIndex) },
130
+ });
131
+ break;
132
+ case 5 /* ComputeBindingType.Sampler */:
133
+ addEntry(group, {
134
+ binding: bindingIndex,
135
+ visibility: 4 /* WebGPUConstants.ShaderStage.Compute */,
136
+ sampler: { type: "filtering" /* WebGPUConstants.SamplerBindingType.Filtering */ },
137
+ });
138
+ break;
139
+ case 6 /* ComputeBindingType.ExternalTexture */:
140
+ addEntry(group, {
141
+ binding: bindingIndex,
142
+ visibility: 4 /* WebGPUConstants.ShaderStage.Compute */,
143
+ externalTexture: {},
144
+ });
145
+ break;
146
+ }
147
+ }
148
+ const bindGroupLayouts = [];
149
+ for (let i = 0; i < bindGroupLayoutEntries.length; i++) {
150
+ const entries = bindGroupLayoutEntries[i] ?? [];
151
+ entries.sort((a, b) => a.binding - b.binding);
152
+ bindGroupLayouts[i] = device.createBindGroupLayout({ entries });
153
+ }
154
+ return device.createPipelineLayout({ bindGroupLayouts });
155
+ };
8
156
  /**
9
157
  * Register side effects for enginesWebGPUExtensionsEngineComputeShader.
10
158
  * Safe to call multiple times; only the first call has an effect.
@@ -21,7 +169,7 @@ export function RegisterEnginesWebGPUExtensionsEngineComputeShader() {
21
169
  };
22
170
  WebGPUEngine.prototype.createComputeEffect = function (baseName, options) {
23
171
  const compute = typeof baseName === "string" ? baseName : baseName.computeToken || baseName.computeSource || baseName.computeElement || baseName.compute;
24
- const name = compute + "@" + options.defines;
172
+ const name = compute + "@" + options.defines + (options.useExplicitComputePipelineLayout ? "@explicitComputePipelineLayout" : "");
25
173
  if (this._compiledComputeEffects[name]) {
26
174
  const compiledEffect = this._compiledComputeEffects[name];
27
175
  if (options.onCompiled && compiledEffect.isReady()) {
@@ -56,8 +204,12 @@ export function RegisterEnginesWebGPUExtensionsEngineComputeShader() {
56
204
  const contextPipeline = effect._pipelineContext;
57
205
  const computeContext = context;
58
206
  if (!contextPipeline.computePipeline) {
207
+ const explicitLayout = effect._useExplicitComputePipelineLayout
208
+ ? _GetComputePipelineLayout(this._device, bindings, bindingsMapping, contextPipeline.sources?.compute ?? "", this._caps.textureFloatLinearFiltering)
209
+ : null;
210
+ computeContext.clear();
59
211
  contextPipeline.computePipeline = this._device.createComputePipeline({
60
- layout: "auto" /* WebGPUConstants.AutoLayoutMode.Auto */,
212
+ layout: explicitLayout ?? "auto" /* WebGPUConstants.AutoLayoutMode.Auto */,
61
213
  compute: contextPipeline.stage,
62
214
  });
63
215
  }
@@ -1 +1 @@
1
- {"version":3,"file":"engine.computeShader.pure.js","sourceRoot":"","sources":["../../../../../../dev/core/src/Engines/WebGPU/Extensions/engine.computeShader.pure.ts"],"names":[],"mappings":"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","sourcesContent":["/** This file must only contain pure code and pure imports */\r\n\r\nimport * as WebGPUConstants from \"../webgpuConstants\";\r\nimport { Logger } from \"core/Misc/logger\";\r\nimport { type IComputeEffectCreationOptions, type IComputeShaderPath, ComputeEffect } from \"../../../Compute/computeEffect\";\r\nimport { type IComputeContext } from \"../../../Compute/IComputeContext\";\r\nimport { type IComputePipelineContext } from \"../../../Compute/IComputePipelineContext\";\r\nimport { type Nullable } from \"../../../types\";\r\nimport { type ComputeBindingList, type ComputeBindingMapping, type ComputeCompilationMessages } from \"../../Extensions/engine.computeShader.pure\";\r\nimport { WebGPUComputeContext } from \"../webgpuComputeContext\";\r\nimport { WebGPUComputePipelineContext } from \"../webgpuComputePipelineContext\";\r\nimport { type WebGPUPerfCounter } from \"../webgpuPerfCounter\";\r\nimport { type DataBuffer } from \"../../../Buffers/dataBuffer\";\r\nimport { WebGPUEngine } from \"../../webgpuEngine.pure\";\r\n\r\nlet _Registered = false;\r\n/**\r\n * Register side effects for enginesWebGPUExtensionsEngineComputeShader.\r\n * Safe to call multiple times; only the first call has an effect.\r\n */\r\nexport function RegisterEnginesWebGPUExtensionsEngineComputeShader(): void {\r\n if (_Registered) {\r\n return;\r\n }\r\n _Registered = true;\r\n\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n const ComputePassDescriptor: GPUComputePassDescriptor = {};\r\n\r\n WebGPUEngine.prototype.createComputeContext = function (): IComputeContext | undefined {\r\n return new WebGPUComputeContext(this._device, this._cacheSampler);\r\n };\r\n\r\n WebGPUEngine.prototype.createComputeEffect = function (\r\n baseName: string | (IComputeShaderPath & { computeToken?: string }),\r\n options: IComputeEffectCreationOptions\r\n ): ComputeEffect {\r\n const compute = typeof baseName === \"string\" ? baseName : baseName.computeToken || baseName.computeSource || baseName.computeElement || baseName.compute;\r\n\r\n const name = compute + \"@\" + options.defines;\r\n if (this._compiledComputeEffects[name]) {\r\n const compiledEffect = this._compiledComputeEffects[name];\r\n if (options.onCompiled && compiledEffect.isReady()) {\r\n options.onCompiled(compiledEffect);\r\n }\r\n\r\n return compiledEffect;\r\n }\r\n const effect = new ComputeEffect(baseName, options, this, name);\r\n this._compiledComputeEffects[name] = effect;\r\n\r\n return effect;\r\n };\r\n\r\n WebGPUEngine.prototype.createComputePipelineContext = function (): IComputePipelineContext {\r\n return new WebGPUComputePipelineContext(this);\r\n };\r\n\r\n WebGPUEngine.prototype.areAllComputeEffectsReady = function (): boolean {\r\n for (const key in this._compiledComputeEffects) {\r\n const effect = this._compiledComputeEffects[key];\r\n\r\n if (!effect.isReady()) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n };\r\n\r\n WebGPUEngine.prototype.computeDispatch = function (\r\n effect: ComputeEffect,\r\n context: IComputeContext,\r\n bindings: ComputeBindingList,\r\n x: number,\r\n y = 1,\r\n z = 1,\r\n bindingsMapping?: ComputeBindingMapping,\r\n gpuPerfCounter?: WebGPUPerfCounter\r\n ): void {\r\n this._computeDispatch(effect, context, bindings, x, y, z, undefined, undefined, bindingsMapping, gpuPerfCounter);\r\n };\r\n\r\n WebGPUEngine.prototype.computeDispatchIndirect = function (\r\n effect: ComputeEffect,\r\n context: IComputeContext,\r\n bindings: ComputeBindingList,\r\n buffer: DataBuffer,\r\n offset: number = 0,\r\n bindingsMapping?: ComputeBindingMapping,\r\n gpuPerfCounter?: WebGPUPerfCounter\r\n ): void {\r\n this._computeDispatch(effect, context, bindings, undefined, undefined, undefined, buffer, offset, bindingsMapping, gpuPerfCounter);\r\n };\r\n\r\n WebGPUEngine.prototype._computeDispatch = function (\r\n effect: ComputeEffect,\r\n context: IComputeContext,\r\n bindings: ComputeBindingList,\r\n x?: number,\r\n y?: number,\r\n z?: number,\r\n buffer?: DataBuffer,\r\n offset?: number,\r\n bindingsMapping?: ComputeBindingMapping,\r\n gpuPerfCounter?: WebGPUPerfCounter\r\n ): void {\r\n this._endCurrentRenderPass();\r\n\r\n const contextPipeline = effect._pipelineContext as WebGPUComputePipelineContext;\r\n const computeContext = context as WebGPUComputeContext;\r\n\r\n if (!contextPipeline.computePipeline) {\r\n contextPipeline.computePipeline = this._device.createComputePipeline({\r\n layout: WebGPUConstants.AutoLayoutMode.Auto,\r\n compute: contextPipeline.stage!,\r\n });\r\n }\r\n\r\n if (gpuPerfCounter) {\r\n this._timestampQuery.startPass(ComputePassDescriptor, this._timestampIndex);\r\n }\r\n\r\n const computePass = this._renderEncoder.beginComputePass(ComputePassDescriptor);\r\n\r\n computePass.setPipeline(contextPipeline.computePipeline);\r\n\r\n const bindGroups = computeContext.getBindGroups(bindings, contextPipeline.computePipeline, bindingsMapping);\r\n for (let i = 0; i < bindGroups.length; ++i) {\r\n const bindGroup = bindGroups[i];\r\n if (!bindGroup) {\r\n continue;\r\n }\r\n computePass.setBindGroup(i, bindGroup);\r\n }\r\n\r\n if (buffer !== undefined) {\r\n computePass.dispatchWorkgroupsIndirect(buffer.underlyingResource, <number>offset);\r\n } else {\r\n if (<number>x + <number>y + <number>z > 0) {\r\n computePass.dispatchWorkgroups(<number>x, <number>y, <number>z);\r\n }\r\n }\r\n computePass.end();\r\n\r\n if (gpuPerfCounter) {\r\n this._timestampQuery.endPass(this._timestampIndex, gpuPerfCounter);\r\n this._timestampIndex += 2;\r\n }\r\n };\r\n\r\n WebGPUEngine.prototype.releaseComputeEffects = function () {\r\n for (const name in this._compiledComputeEffects) {\r\n const webGPUPipelineContextCompute = this._compiledComputeEffects[name].getPipelineContext() as WebGPUComputePipelineContext;\r\n this._deleteComputePipelineContext(webGPUPipelineContextCompute);\r\n }\r\n\r\n this._compiledComputeEffects = {};\r\n };\r\n\r\n WebGPUEngine.prototype._prepareComputePipelineContext = function (\r\n pipelineContext: IComputePipelineContext,\r\n computeSourceCode: string,\r\n rawComputeSourceCode: string,\r\n defines: Nullable<string>,\r\n entryPoint: string\r\n ): void {\r\n const webGpuContext = pipelineContext as WebGPUComputePipelineContext;\r\n\r\n if (this.dbgShowShaderCode) {\r\n Logger.Log(defines!);\r\n Logger.Log(computeSourceCode);\r\n }\r\n\r\n webGpuContext.sources = {\r\n compute: computeSourceCode,\r\n rawCompute: rawComputeSourceCode,\r\n };\r\n\r\n webGpuContext.stage = this._createComputePipelineStageDescriptor(computeSourceCode, defines, entryPoint);\r\n };\r\n\r\n WebGPUEngine.prototype._releaseComputeEffect = function (effect: ComputeEffect): void {\r\n if (this._compiledComputeEffects[effect._key]) {\r\n delete this._compiledComputeEffects[effect._key];\r\n\r\n this._deleteComputePipelineContext(effect.getPipelineContext() as WebGPUComputePipelineContext);\r\n }\r\n };\r\n\r\n WebGPUEngine.prototype._rebuildComputeEffects = function (): void {\r\n for (const key in this._compiledComputeEffects) {\r\n const effect = this._compiledComputeEffects[key];\r\n\r\n effect._pipelineContext = null;\r\n effect._wasPreviouslyReady = false;\r\n effect._prepareEffect();\r\n }\r\n };\r\n\r\n WebGPUEngine.prototype._executeWhenComputeStateIsCompiled = function (\r\n pipelineContext: WebGPUComputePipelineContext,\r\n action: (messages: Nullable<ComputeCompilationMessages>) => void\r\n ): void {\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises, github/no-then\r\n pipelineContext.stage!.module.getCompilationInfo().then((info) => {\r\n const compilationMessages: ComputeCompilationMessages = {\r\n numErrors: 0,\r\n messages: [],\r\n };\r\n for (const message of info.messages) {\r\n if (message.type === \"error\") {\r\n compilationMessages.numErrors++;\r\n }\r\n compilationMessages.messages.push({\r\n type: message.type,\r\n text: message.message,\r\n line: message.lineNum,\r\n column: message.linePos,\r\n length: message.length,\r\n offset: message.offset,\r\n });\r\n }\r\n action(compilationMessages);\r\n });\r\n };\r\n\r\n WebGPUEngine.prototype._deleteComputePipelineContext = function (pipelineContext: IComputePipelineContext): void {\r\n const webgpuPipelineContext = pipelineContext as WebGPUComputePipelineContext;\r\n if (webgpuPipelineContext) {\r\n pipelineContext.dispose();\r\n }\r\n };\r\n\r\n WebGPUEngine.prototype._createComputePipelineStageDescriptor = function (computeShader: string, defines: Nullable<string>, entryPoint: string): GPUProgrammableStage {\r\n if (defines) {\r\n defines = \"//\" + defines.split(\"\\n\").join(\"\\n//\") + \"\\n\";\r\n } else {\r\n defines = \"\";\r\n }\r\n return {\r\n module: this._device.createShaderModule({\r\n code: defines + computeShader,\r\n }),\r\n entryPoint,\r\n };\r\n };\r\n}\r\n"]}
1
+ {"version":3,"file":"engine.computeShader.pure.js","sourceRoot":"","sources":["../../../../../../dev/core/src/Engines/WebGPU/Extensions/engine.computeShader.pure.ts"],"names":[],"mappings":"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","sourcesContent":["/** This file must only contain pure code and pure imports */\r\n\r\nimport * as WebGPUConstants from \"../webgpuConstants\";\r\nimport { Logger } from \"core/Misc/logger\";\r\nimport { type IComputeEffectCreationOptions, type IComputeShaderPath, ComputeEffect } from \"../../../Compute/computeEffect\";\r\nimport { type IComputeContext } from \"../../../Compute/IComputeContext\";\r\nimport { type IComputePipelineContext } from \"../../../Compute/IComputePipelineContext\";\r\nimport { type Nullable } from \"../../../types\";\r\nimport { ComputeBindingType, type ComputeBindingList, type ComputeBindingMapping, type ComputeCompilationMessages } from \"../../Extensions/engine.computeShader.pure\";\r\nimport { Constants } from \"../../constants\";\r\nimport { WebGPUComputeContext } from \"../webgpuComputeContext\";\r\nimport { WebGPUComputePipelineContext } from \"../webgpuComputePipelineContext\";\r\nimport { type WebGPUPerfCounter } from \"../webgpuPerfCounter\";\r\nimport { type DataBuffer } from \"../../../Buffers/dataBuffer\";\r\nimport { WebGPUEngine } from \"../../webgpuEngine.pure\";\r\nimport { type InternalTexture } from \"../../../Materials/Textures/internalTexture\";\r\nimport { type BaseTexture } from \"../../../Materials/Textures/baseTexture.pure\";\r\n\r\nlet _Registered = false;\r\n\r\nconst _GetComputeStorageBufferType = (source: string, group: number, binding: number): WebGPUConstants.BufferBindingType => {\r\n const bindingPattern = `@binding\\\\(${binding}\\\\)\\\\s*@group\\\\(${group}\\\\)`;\r\n const groupPattern = `@group\\\\(${group}\\\\)\\\\s*@binding\\\\(${binding}\\\\)`;\r\n const declarationPattern = `(?:${bindingPattern}|${groupPattern})\\\\s*var<storage\\\\s*,\\\\s*(read|read_write)>`;\r\n const access = source.match(new RegExp(declarationPattern))?.[1];\r\n\r\n return access === \"read\" ? WebGPUConstants.BufferBindingType.ReadOnlyStorage : WebGPUConstants.BufferBindingType.Storage;\r\n};\r\n\r\nconst _GetComputeTextureViewDimension = (source: string, group: number, binding: number): WebGPUConstants.TextureViewDimension => {\r\n const bindingPattern = `@binding\\\\(${binding}\\\\)\\\\s*@group\\\\(${group}\\\\)`;\r\n const groupPattern = `@group\\\\(${group}\\\\)\\\\s*@binding\\\\(${binding}\\\\)`;\r\n const declaration = source.match(new RegExp(`(?:${bindingPattern}|${groupPattern})\\\\s*var\\\\s+\\\\w+\\\\s*:\\\\s*(texture_\\\\w+)`))?.[1];\r\n\r\n switch (declaration) {\r\n case \"texture_2d_array\":\r\n case \"texture_depth_2d_array\":\r\n return WebGPUConstants.TextureViewDimension.E2dArray;\r\n case \"texture_cube\":\r\n return WebGPUConstants.TextureViewDimension.Cube;\r\n case \"texture_cube_array\":\r\n return WebGPUConstants.TextureViewDimension.CubeArray;\r\n case \"texture_3d\":\r\n return WebGPUConstants.TextureViewDimension.E3d;\r\n default:\r\n return WebGPUConstants.TextureViewDimension.E2d;\r\n }\r\n};\r\n\r\nconst _GetInternalTexture = (texture: BaseTexture | InternalTexture): Nullable<InternalTexture> => {\r\n const internalTexture = texture as InternalTexture;\r\n if (internalTexture._hardwareTexture !== undefined) {\r\n return internalTexture;\r\n }\r\n\r\n return (texture as BaseTexture)._texture;\r\n};\r\n\r\nconst _GetComputeTextureSampleType = (texture: BaseTexture | InternalTexture, textureFloatLinearFiltering: boolean): WebGPUConstants.TextureSampleType => {\r\n const internalTexture = _GetInternalTexture(texture);\r\n\r\n if (!internalTexture) {\r\n return WebGPUConstants.TextureSampleType.Float;\r\n }\r\n\r\n const textureIsDepth = internalTexture.format >= Constants.TEXTUREFORMAT_DEPTH24_STENCIL8 && internalTexture.format <= Constants.TEXTUREFORMAT_DEPTH32FLOAT_STENCIL8;\r\n if (textureIsDepth) {\r\n return WebGPUConstants.TextureSampleType.Depth;\r\n }\r\n\r\n if (internalTexture.type === Constants.TEXTURETYPE_FLOAT && !textureFloatLinearFiltering) {\r\n return WebGPUConstants.TextureSampleType.UnfilterableFloat;\r\n }\r\n\r\n return WebGPUConstants.TextureSampleType.Float;\r\n};\r\n\r\nconst _GetComputePipelineLayout = (\r\n device: GPUDevice,\r\n bindings: ComputeBindingList,\r\n bindingsMapping: ComputeBindingMapping | undefined,\r\n shaderSource: string,\r\n textureFloatLinearFiltering: boolean\r\n): Nullable<GPUPipelineLayout> => {\r\n if (!bindingsMapping) {\r\n return null;\r\n }\r\n\r\n const bindGroupLayoutEntries: GPUBindGroupLayoutEntry[][] = [];\r\n\r\n const addEntry = (group: number, entry: GPUBindGroupLayoutEntry) => {\r\n const entries = (bindGroupLayoutEntries[group] ??= []);\r\n const existingIndex = entries.findIndex((item) => item.binding === entry.binding);\r\n if (existingIndex >= 0) {\r\n entries[existingIndex] = entry;\r\n } else {\r\n entries.push(entry);\r\n }\r\n };\r\n\r\n for (const key in bindings) {\r\n const binding = bindings[key];\r\n const location = bindingsMapping[key];\r\n if (!location) {\r\n continue;\r\n }\r\n\r\n const group = location.group;\r\n const bindingIndex = location.binding;\r\n\r\n switch (binding.type) {\r\n case ComputeBindingType.Texture:\r\n case ComputeBindingType.TextureWithoutSampler:\r\n case ComputeBindingType.InternalTexture: {\r\n const sampleType = _GetComputeTextureSampleType(binding.object as BaseTexture | InternalTexture, textureFloatLinearFiltering);\r\n\r\n if (binding.type === ComputeBindingType.Texture) {\r\n addEntry(group, {\r\n binding: bindingIndex - 1,\r\n visibility: WebGPUConstants.ShaderStage.Compute,\r\n sampler: {\r\n type:\r\n sampleType === WebGPUConstants.TextureSampleType.UnfilterableFloat\r\n ? WebGPUConstants.SamplerBindingType.NonFiltering\r\n : WebGPUConstants.SamplerBindingType.Filtering,\r\n },\r\n });\r\n }\r\n\r\n addEntry(group, {\r\n binding: bindingIndex,\r\n visibility: WebGPUConstants.ShaderStage.Compute,\r\n texture: {\r\n sampleType,\r\n viewDimension: _GetComputeTextureViewDimension(shaderSource, group, bindingIndex),\r\n multisampled: false,\r\n },\r\n });\r\n break;\r\n }\r\n case ComputeBindingType.StorageTexture: {\r\n addEntry(group, {\r\n binding: bindingIndex,\r\n visibility: WebGPUConstants.ShaderStage.Compute,\r\n storageTexture: {\r\n access: WebGPUConstants.StorageTextureAccess.WriteOnly,\r\n format: ((binding.object as BaseTexture)._texture!._hardwareTexture as any).format,\r\n viewDimension: _GetComputeTextureViewDimension(shaderSource, group, bindingIndex),\r\n },\r\n });\r\n break;\r\n }\r\n case ComputeBindingType.UniformBuffer:\r\n addEntry(group, {\r\n binding: bindingIndex,\r\n visibility: WebGPUConstants.ShaderStage.Compute,\r\n buffer: { type: WebGPUConstants.BufferBindingType.Uniform },\r\n });\r\n break;\r\n case ComputeBindingType.StorageBuffer:\r\n case ComputeBindingType.DataBuffer:\r\n addEntry(group, {\r\n binding: bindingIndex,\r\n visibility: WebGPUConstants.ShaderStage.Compute,\r\n buffer: { type: _GetComputeStorageBufferType(shaderSource, group, bindingIndex) },\r\n });\r\n break;\r\n case ComputeBindingType.Sampler:\r\n addEntry(group, {\r\n binding: bindingIndex,\r\n visibility: WebGPUConstants.ShaderStage.Compute,\r\n sampler: { type: WebGPUConstants.SamplerBindingType.Filtering },\r\n });\r\n break;\r\n case ComputeBindingType.ExternalTexture:\r\n addEntry(group, {\r\n binding: bindingIndex,\r\n visibility: WebGPUConstants.ShaderStage.Compute,\r\n externalTexture: {},\r\n });\r\n break;\r\n }\r\n }\r\n\r\n const bindGroupLayouts: GPUBindGroupLayout[] = [];\r\n for (let i = 0; i < bindGroupLayoutEntries.length; i++) {\r\n const entries = bindGroupLayoutEntries[i] ?? [];\r\n entries.sort((a, b) => a.binding - b.binding);\r\n bindGroupLayouts[i] = device.createBindGroupLayout({ entries });\r\n }\r\n\r\n return device.createPipelineLayout({ bindGroupLayouts });\r\n};\r\n\r\n/**\r\n * Register side effects for enginesWebGPUExtensionsEngineComputeShader.\r\n * Safe to call multiple times; only the first call has an effect.\r\n */\r\nexport function RegisterEnginesWebGPUExtensionsEngineComputeShader(): void {\r\n if (_Registered) {\r\n return;\r\n }\r\n _Registered = true;\r\n\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n const ComputePassDescriptor: GPUComputePassDescriptor = {};\r\n\r\n WebGPUEngine.prototype.createComputeContext = function (): IComputeContext | undefined {\r\n return new WebGPUComputeContext(this._device, this._cacheSampler);\r\n };\r\n\r\n WebGPUEngine.prototype.createComputeEffect = function (\r\n baseName: string | (IComputeShaderPath & { computeToken?: string }),\r\n options: IComputeEffectCreationOptions\r\n ): ComputeEffect {\r\n const compute = typeof baseName === \"string\" ? baseName : baseName.computeToken || baseName.computeSource || baseName.computeElement || baseName.compute;\r\n\r\n const name = compute + \"@\" + options.defines + (options.useExplicitComputePipelineLayout ? \"@explicitComputePipelineLayout\" : \"\");\r\n if (this._compiledComputeEffects[name]) {\r\n const compiledEffect = this._compiledComputeEffects[name];\r\n if (options.onCompiled && compiledEffect.isReady()) {\r\n options.onCompiled(compiledEffect);\r\n }\r\n\r\n return compiledEffect;\r\n }\r\n const effect = new ComputeEffect(baseName, options, this, name);\r\n this._compiledComputeEffects[name] = effect;\r\n\r\n return effect;\r\n };\r\n\r\n WebGPUEngine.prototype.createComputePipelineContext = function (): IComputePipelineContext {\r\n return new WebGPUComputePipelineContext(this);\r\n };\r\n\r\n WebGPUEngine.prototype.areAllComputeEffectsReady = function (): boolean {\r\n for (const key in this._compiledComputeEffects) {\r\n const effect = this._compiledComputeEffects[key];\r\n\r\n if (!effect.isReady()) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n };\r\n\r\n WebGPUEngine.prototype.computeDispatch = function (\r\n effect: ComputeEffect,\r\n context: IComputeContext,\r\n bindings: ComputeBindingList,\r\n x: number,\r\n y = 1,\r\n z = 1,\r\n bindingsMapping?: ComputeBindingMapping,\r\n gpuPerfCounter?: WebGPUPerfCounter\r\n ): void {\r\n this._computeDispatch(effect, context, bindings, x, y, z, undefined, undefined, bindingsMapping, gpuPerfCounter);\r\n };\r\n\r\n WebGPUEngine.prototype.computeDispatchIndirect = function (\r\n effect: ComputeEffect,\r\n context: IComputeContext,\r\n bindings: ComputeBindingList,\r\n buffer: DataBuffer,\r\n offset: number = 0,\r\n bindingsMapping?: ComputeBindingMapping,\r\n gpuPerfCounter?: WebGPUPerfCounter\r\n ): void {\r\n this._computeDispatch(effect, context, bindings, undefined, undefined, undefined, buffer, offset, bindingsMapping, gpuPerfCounter);\r\n };\r\n\r\n WebGPUEngine.prototype._computeDispatch = function (\r\n effect: ComputeEffect,\r\n context: IComputeContext,\r\n bindings: ComputeBindingList,\r\n x?: number,\r\n y?: number,\r\n z?: number,\r\n buffer?: DataBuffer,\r\n offset?: number,\r\n bindingsMapping?: ComputeBindingMapping,\r\n gpuPerfCounter?: WebGPUPerfCounter\r\n ): void {\r\n this._endCurrentRenderPass();\r\n\r\n const contextPipeline = effect._pipelineContext as WebGPUComputePipelineContext;\r\n const computeContext = context as WebGPUComputeContext;\r\n\r\n if (!contextPipeline.computePipeline) {\r\n const explicitLayout = effect._useExplicitComputePipelineLayout\r\n ? _GetComputePipelineLayout(this._device, bindings, bindingsMapping, contextPipeline.sources?.compute ?? \"\", this._caps.textureFloatLinearFiltering)\r\n : null;\r\n computeContext.clear();\r\n contextPipeline.computePipeline = this._device.createComputePipeline({\r\n layout: explicitLayout ?? WebGPUConstants.AutoLayoutMode.Auto,\r\n compute: contextPipeline.stage!,\r\n });\r\n }\r\n\r\n if (gpuPerfCounter) {\r\n this._timestampQuery.startPass(ComputePassDescriptor, this._timestampIndex);\r\n }\r\n\r\n const computePass = this._renderEncoder.beginComputePass(ComputePassDescriptor);\r\n\r\n computePass.setPipeline(contextPipeline.computePipeline);\r\n\r\n const bindGroups = computeContext.getBindGroups(bindings, contextPipeline.computePipeline, bindingsMapping);\r\n for (let i = 0; i < bindGroups.length; ++i) {\r\n const bindGroup = bindGroups[i];\r\n if (!bindGroup) {\r\n continue;\r\n }\r\n computePass.setBindGroup(i, bindGroup);\r\n }\r\n\r\n if (buffer !== undefined) {\r\n computePass.dispatchWorkgroupsIndirect(buffer.underlyingResource, <number>offset);\r\n } else {\r\n if (<number>x + <number>y + <number>z > 0) {\r\n computePass.dispatchWorkgroups(<number>x, <number>y, <number>z);\r\n }\r\n }\r\n computePass.end();\r\n\r\n if (gpuPerfCounter) {\r\n this._timestampQuery.endPass(this._timestampIndex, gpuPerfCounter);\r\n this._timestampIndex += 2;\r\n }\r\n };\r\n\r\n WebGPUEngine.prototype.releaseComputeEffects = function () {\r\n for (const name in this._compiledComputeEffects) {\r\n const webGPUPipelineContextCompute = this._compiledComputeEffects[name].getPipelineContext() as WebGPUComputePipelineContext;\r\n this._deleteComputePipelineContext(webGPUPipelineContextCompute);\r\n }\r\n\r\n this._compiledComputeEffects = {};\r\n };\r\n\r\n WebGPUEngine.prototype._prepareComputePipelineContext = function (\r\n pipelineContext: IComputePipelineContext,\r\n computeSourceCode: string,\r\n rawComputeSourceCode: string,\r\n defines: Nullable<string>,\r\n entryPoint: string\r\n ): void {\r\n const webGpuContext = pipelineContext as WebGPUComputePipelineContext;\r\n\r\n if (this.dbgShowShaderCode) {\r\n Logger.Log(defines!);\r\n Logger.Log(computeSourceCode);\r\n }\r\n\r\n webGpuContext.sources = {\r\n compute: computeSourceCode,\r\n rawCompute: rawComputeSourceCode,\r\n };\r\n\r\n webGpuContext.stage = this._createComputePipelineStageDescriptor(computeSourceCode, defines, entryPoint);\r\n };\r\n\r\n WebGPUEngine.prototype._releaseComputeEffect = function (effect: ComputeEffect): void {\r\n if (this._compiledComputeEffects[effect._key]) {\r\n delete this._compiledComputeEffects[effect._key];\r\n\r\n this._deleteComputePipelineContext(effect.getPipelineContext() as WebGPUComputePipelineContext);\r\n }\r\n };\r\n\r\n WebGPUEngine.prototype._rebuildComputeEffects = function (): void {\r\n for (const key in this._compiledComputeEffects) {\r\n const effect = this._compiledComputeEffects[key];\r\n\r\n effect._pipelineContext = null;\r\n effect._wasPreviouslyReady = false;\r\n effect._prepareEffect();\r\n }\r\n };\r\n\r\n WebGPUEngine.prototype._executeWhenComputeStateIsCompiled = function (\r\n pipelineContext: WebGPUComputePipelineContext,\r\n action: (messages: Nullable<ComputeCompilationMessages>) => void\r\n ): void {\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises, github/no-then\r\n pipelineContext.stage!.module.getCompilationInfo().then((info) => {\r\n const compilationMessages: ComputeCompilationMessages = {\r\n numErrors: 0,\r\n messages: [],\r\n };\r\n for (const message of info.messages) {\r\n if (message.type === \"error\") {\r\n compilationMessages.numErrors++;\r\n }\r\n compilationMessages.messages.push({\r\n type: message.type,\r\n text: message.message,\r\n line: message.lineNum,\r\n column: message.linePos,\r\n length: message.length,\r\n offset: message.offset,\r\n });\r\n }\r\n action(compilationMessages);\r\n });\r\n };\r\n\r\n WebGPUEngine.prototype._deleteComputePipelineContext = function (pipelineContext: IComputePipelineContext): void {\r\n const webgpuPipelineContext = pipelineContext as WebGPUComputePipelineContext;\r\n if (webgpuPipelineContext) {\r\n pipelineContext.dispose();\r\n }\r\n };\r\n\r\n WebGPUEngine.prototype._createComputePipelineStageDescriptor = function (computeShader: string, defines: Nullable<string>, entryPoint: string): GPUProgrammableStage {\r\n if (defines) {\r\n defines = \"//\" + defines.split(\"\\n\").join(\"\\n//\") + \"\\n\";\r\n } else {\r\n defines = \"\";\r\n }\r\n return {\r\n module: this._device.createShaderModule({\r\n code: defines + computeShader,\r\n }),\r\n entryPoint,\r\n };\r\n };\r\n}\r\n"]}
@@ -36,6 +36,7 @@ import { type IAudioEngine } from "../Audio/Interfaces/IAudioEngine.js";
36
36
  import { type WebRequest } from "../Misc/webRequest.js";
37
37
  import { type PerformanceMonitor } from "../Misc/performanceMonitor.js";
38
38
  import { type ILoadingScreen } from "../Loading/loadingScreen.pure.js";
39
+ import { type ICustomAnimationFrameRequester } from "../Misc/customAnimationFrameRequester.js";
39
40
  import { DepthCullingState } from "../States/depthCullingState.js";
40
41
  import { StencilStateComposer } from "../States/stencilStateComposer.js";
41
42
  import { StencilState } from "../States/stencilState.js";
@@ -505,6 +506,10 @@ export declare abstract class AbstractEngine {
505
506
  _frameHandler: number;
506
507
  /** @internal */
507
508
  protected _activeRenderLoops: (() => void)[];
509
+ /**
510
+ * If set, will be used to request the next animation frame for the render loop
511
+ */
512
+ customAnimationFrameRequester: Nullable<ICustomAnimationFrameRequester>;
508
513
  /**
509
514
  * Gets the list of current active render loop functions
510
515
  * @returns a read only array with the current render loop functions
@@ -549,7 +554,7 @@ export declare abstract class AbstractEngine {
549
554
  protected _isOverFrameTime(timestamp?: number): boolean;
550
555
  protected _processFrame(timestamp?: number): void;
551
556
  /** @internal */
552
- _renderLoop(timestamp: number | undefined): void;
557
+ _renderLoop(timestamp?: number): void;
553
558
  /** @internal */
554
559
  _renderFrame(): void;
555
560
  /** @internal */
@@ -559,6 +564,7 @@ export declare abstract class AbstractEngine {
559
564
  * @internal
560
565
  */
561
566
  protected _queueNewFrame(bindedRenderFunction: any, requester?: any): number;
567
+ protected _queueNewFrameForRenderLoop(): void;
562
568
  /**
563
569
  * Register and execute a render loop. The engine can have more than one render function
564
570
  * @param renderFunction defines the function to continuously execute