1 |
- {"ast":null,"code":"import { Logger } from \"../../Misc/logger.js\";\n/** @internal */\nexport class WebGPUComputeContext {\n getBindGroups(bindings, computePipeline, bindingsMapping) {\n if (!bindingsMapping) {\n throw new Error(\"WebGPUComputeContext.getBindGroups: bindingsMapping is required until browsers support reflection for wgsl shaders!\");\n }\n if (this._bindGroups.length === 0) {\n const bindGroupEntriesExist = this._bindGroupEntries.length > 0;\n for (const key in bindings) {\n const binding = bindings[key],\n location = bindingsMapping[key],\n group = location.group,\n index = location.binding,\n type = binding.type,\n object = binding.object;\n let indexInGroupEntries = binding.indexInGroupEntries;\n let entries = this._bindGroupEntries[group];\n if (!entries) {\n entries = this._bindGroupEntries[group] = [];\n }\n switch (type) {\n case 5 /* ComputeBindingType.Sampler */:\n {\n const sampler = object;\n if (indexInGroupEntries !== undefined && bindGroupEntriesExist) {\n entries[indexInGroupEntries].resource = this._cacheSampler.getSampler(sampler);\n } else {\n binding.indexInGroupEntries = entries.length;\n entries.push({\n binding: index,\n resource: this._cacheSampler.getSampler(sampler)\n });\n }\n break;\n }\n case 0 /* ComputeBindingType.Texture */:\n case 4 /* ComputeBindingType.TextureWithoutSampler */:\n {\n const texture = object;\n const hardwareTexture = texture._texture._hardwareTexture;\n if (indexInGroupEntries !== undefined && bindGroupEntriesExist) {\n if (type === 0 /* ComputeBindingType.Texture */) {\n entries[indexInGroupEntries++].resource = this._cacheSampler.getSampler(texture._texture);\n }\n entries[indexInGroupEntries].resource = hardwareTexture.view;\n } else {\n binding.indexInGroupEntries = entries.length;\n if (type === 0 /* ComputeBindingType.Texture */) {\n entries.push({\n binding: index - 1,\n resource: this._cacheSampler.getSampler(texture._texture)\n });\n }\n entries.push({\n binding: index,\n resource: hardwareTexture.view\n });\n }\n break;\n }\n case 1 /* ComputeBindingType.StorageTexture */:\n {\n const texture = object;\n const hardwareTexture = texture._texture._hardwareTexture;\n if ((hardwareTexture.textureAdditionalUsages & 8 /* WebGPUConstants.TextureUsage.StorageBinding */) === 0) {\n Logger.Error(`computeDispatch: The texture (name=${texture.name}, uniqueId=${texture.uniqueId}) is not a storage texture!`, 50);\n }\n if (indexInGroupEntries !== undefined && bindGroupEntriesExist) {\n entries[indexInGroupEntries].resource = hardwareTexture.viewForWriting;\n } else {\n binding.indexInGroupEntries = entries.length;\n entries.push({\n binding: index,\n resource: hardwareTexture.viewForWriting\n });\n }\n break;\n }\n case 6 /* ComputeBindingType.ExternalTexture */:\n {\n const texture = object;\n const externalTexture = texture.underlyingResource;\n if (indexInGroupEntries !== undefined && bindGroupEntriesExist) {\n entries[indexInGroupEntries].resource = this._device.importExternalTexture({\n source: externalTexture\n });\n } else {\n binding.indexInGroupEntries = entries.length;\n entries.push({\n binding: index,\n resource: this._device.importExternalTexture({\n source: externalTexture\n })\n });\n }\n break;\n }\n case 2 /* ComputeBindingType.UniformBuffer */:\n case 3 /* ComputeBindingType.StorageBuffer */:\n case 7 /* ComputeBindingType.DataBuffer */:\n {\n const dataBuffer = type === 7 /* ComputeBindingType.DataBuffer */ ? object : type === 2 /* ComputeBindingType.UniformBuffer */ ? object.getBuffer() : object.getBuffer();\n const webgpuBuffer = dataBuffer.underlyingResource;\n if (indexInGroupEntries !== undefined && bindGroupEntriesExist) {\n entries[indexInGroupEntries].resource.buffer = webgpuBuffer;\n entries[indexInGroupEntries].resource.size = dataBuffer.capacity;\n } else {\n binding.indexInGroupEntries = entries.length;\n entries.push({\n binding: index,\n resource: {\n buffer: webgpuBuffer,\n offset: 0,\n size: dataBuffer.capacity\n }\n });\n }\n break;\n }\n }\n }\n for (let i = 0; i < this._bindGroupEntries.length; ++i) {\n const entries = this._bindGroupEntries[i];\n if (!entries) {\n this._bindGroups[i] = undefined;\n continue;\n }\n this._bindGroups[i] = this._device.createBindGroup({\n layout: computePipeline.getBindGroupLayout(i),\n entries\n });\n }\n this._bindGroups.length = this._bindGroupEntries.length;\n }\n return this._bindGroups;\n }\n constructor(device, cacheSampler) {\n this._device = device;\n this._cacheSampler = cacheSampler;\n this.uniqueId = WebGPUComputeContext._Counter++;\n this._bindGroupEntries = [];\n this.clear();\n }\n clear() {\n this._bindGroups = [];\n // Don't reset _bindGroupEntries if they have already been created, they are still ok even if we have to clear _bindGroups (the layout of the compute shader can't change once created)\n }\n}\nWebGPUComputeContext._Counter = 0;","map":{"version":3,"names":["Logger","WebGPUComputeContext","getBindGroups","bindings","computePipeline","bindingsMapping","Error","_bindGroups","length","bindGroupEntriesExist","_bindGroupEntries","key","binding","location","group","index","type","object","indexInGroupEntries","entries","sampler","undefined","resource","_cacheSampler","getSampler","push","texture","hardwareTexture","_texture","_hardwareTexture","view","textureAdditionalUsages","name","uniqueId","viewForWriting","externalTexture","underlyingResource","_device","importExternalTexture","source","dataBuffer","getBuffer","webgpuBuffer","buffer","size","capacity","offset","i","createBindGroup","layout","getBindGroupLayout","constructor","device","cacheSampler","_Counter","clear"],"sources":["F:/workspace/202226701027/huinongbao-app/node_modules/@babylonjs/core/Engines/WebGPU/webgpuComputeContext.js"],"sourcesContent":["import { Logger } from \"../../Misc/logger.js\";\n/** @internal */\nexport class WebGPUComputeContext {\n getBindGroups(bindings, computePipeline, bindingsMapping) {\n if (!bindingsMapping) {\n throw new Error(\"WebGPUComputeContext.getBindGroups: bindingsMapping is required until browsers support reflection for wgsl shaders!\");\n }\n if (this._bindGroups.length === 0) {\n const bindGroupEntriesExist = this._bindGroupEntries.length > 0;\n for (const key in bindings) {\n const binding = bindings[key], location = bindingsMapping[key], group = location.group, index = location.binding, type = binding.type, object = binding.object;\n let indexInGroupEntries = binding.indexInGroupEntries;\n let entries = this._bindGroupEntries[group];\n if (!entries) {\n entries = this._bindGroupEntries[group] = [];\n }\n switch (type) {\n case 5 /* ComputeBindingType.Sampler */: {\n const sampler = object;\n if (indexInGroupEntries !== undefined && bindGroupEntriesExist) {\n entries[indexInGroupEntries].resource = this._cacheSampler.getSampler(sampler);\n }\n else {\n binding.indexInGroupEntries = entries.length;\n entries.push({\n binding: index,\n resource: this._cacheSampler.getSampler(sampler),\n });\n }\n break;\n }\n case 0 /* ComputeBindingType.Texture */:\n case 4 /* ComputeBindingType.TextureWithoutSampler */: {\n const texture = object;\n const hardwareTexture = texture._texture._hardwareTexture;\n if (indexInGroupEntries !== undefined && bindGroupEntriesExist) {\n if (type === 0 /* ComputeBindingType.Texture */) {\n entries[indexInGroupEntries++].resource = this._cacheSampler.getSampler(texture._texture);\n }\n entries[indexInGroupEntries].resource = hardwareTexture.view;\n }\n else {\n binding.indexInGroupEntries = entries.length;\n if (type === 0 /* ComputeBindingType.Texture */) {\n entries.push({\n binding: index - 1,\n resource: this._cacheSampler.getSampler(texture._texture),\n });\n }\n entries.push({\n binding: index,\n resource: hardwareTexture.view,\n });\n }\n break;\n }\n case 1 /* ComputeBindingType.StorageTexture */: {\n const texture = object;\n const hardwareTexture = texture._texture._hardwareTexture;\n if ((hardwareTexture.textureAdditionalUsages & 8 /* WebGPUConstants.TextureUsage.StorageBinding */) === 0) {\n Logger.Error(`computeDispatch: The texture (name=${texture.name}, uniqueId=${texture.uniqueId}) is not a storage texture!`, 50);\n }\n if (indexInGroupEntries !== undefined && bindGroupEntriesExist) {\n entries[indexInGroupEntries].resource = hardwareTexture.viewForWriting;\n }\n else {\n binding.indexInGroupEntries = entries.length;\n entries.push({\n binding: index,\n resource: hardwareTexture.viewForWriting,\n });\n }\n break;\n }\n case 6 /* ComputeBindingType.ExternalTexture */: {\n const texture = object;\n const externalTexture = texture.underlyingResource;\n if (indexInGroupEntries !== undefined && bindGroupEntriesExist) {\n entries[indexInGroupEntries].resource = this._device.importExternalTexture({ source: externalTexture });\n }\n else {\n binding.indexInGroupEntries = entries.length;\n entries.push({\n binding: index,\n resource: this._device.importExternalTexture({ source: externalTexture }),\n });\n }\n break;\n }\n case 2 /* ComputeBindingType.UniformBuffer */:\n case 3 /* ComputeBindingType.StorageBuffer */:\n case 7 /* ComputeBindingType.DataBuffer */: {\n const dataBuffer = type === 7 /* ComputeBindingType.DataBuffer */\n ? object\n : type === 2 /* ComputeBindingType.UniformBuffer */\n ? object.getBuffer()\n : object.getBuffer();\n const webgpuBuffer = dataBuffer.underlyingResource;\n if (indexInGroupEntries !== undefined && bindGroupEntriesExist) {\n entries[indexInGroupEntries].resource.buffer = webgpuBuffer;\n entries[indexInGroupEntries].resource.size = dataBuffer.capacity;\n }\n else {\n binding.indexInGroupEntries = entries.length;\n entries.push({\n binding: index,\n resource: {\n buffer: webgpuBuffer,\n offset: 0,\n size: dataBuffer.capacity,\n },\n });\n }\n break;\n }\n }\n }\n for (let i = 0; i < this._bindGroupEntries.length; ++i) {\n const entries = this._bindGroupEntries[i];\n if (!entries) {\n this._bindGroups[i] = undefined;\n continue;\n }\n this._bindGroups[i] = this._device.createBindGroup({\n layout: computePipeline.getBindGroupLayout(i),\n entries,\n });\n }\n this._bindGroups.length = this._bindGroupEntries.length;\n }\n return this._bindGroups;\n }\n constructor(device, cacheSampler) {\n this._device = device;\n this._cacheSampler = cacheSampler;\n this.uniqueId = WebGPUComputeContext._Counter++;\n this._bindGroupEntries = [];\n this.clear();\n }\n clear() {\n this._bindGroups = [];\n // Don't reset _bindGroupEntries if they have already been created, they are still ok even if we have to clear _bindGroups (the layout of the compute shader can't change once created)\n }\n}\nWebGPUComputeContext._Counter = 0;\n"],"mappings":"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","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}
|