Files
nothoughts/node_modules/pixi.js/lib/rendering/renderers/gpu/GpuUniformBatchPipe.mjs.map
2025-08-04 18:57:35 +02:00

1 line
11 KiB
Plaintext

{"version":3,"file":"GpuUniformBatchPipe.mjs","sources":["../../../../src/rendering/renderers/gpu/GpuUniformBatchPipe.ts"],"sourcesContent":["import { ExtensionType } from '../../../extensions/Extensions';\nimport { Buffer } from '../shared/buffer/Buffer';\nimport { BufferResource } from '../shared/buffer/BufferResource';\nimport { BufferUsage } from '../shared/buffer/const';\nimport { UboBatch } from './buffer/UboBatch';\nimport { BindGroup } from './shader/BindGroup';\n\nimport type { UniformGroup } from '../shared/shader/UniformGroup';\nimport type { WebGPURenderer } from './WebGPURenderer';\n\nconst minUniformOffsetAlignment = 128;// 256 / 2;\n\n// TODO renderStart and renderFinish - perhaps just make them instructions to fit the architecture of the\n// rest of the system\nexport class GpuUniformBatchPipe\n{\n /** @ignore */\n public static extension = {\n type: [\n ExtensionType.WebGPUPipes,\n ],\n name: 'uniformBatch',\n } as const;\n\n private _renderer: WebGPURenderer;\n\n private _bindGroupHash: Record<number, BindGroup> = Object.create(null);\n private readonly _batchBuffer: UboBatch;\n\n // number of buffers..\n private _buffers: Buffer[] = [];\n\n private _bindGroups: BindGroup[] = [];\n private _bufferResources: BufferResource[] = [];\n\n constructor(renderer: WebGPURenderer)\n {\n this._renderer = renderer;\n\n this._batchBuffer = new UboBatch({ minUniformOffsetAlignment });\n\n const totalBuffers = (256 / minUniformOffsetAlignment);\n\n for (let i = 0; i < totalBuffers; i++)\n {\n let usage = BufferUsage.UNIFORM | BufferUsage.COPY_DST;\n\n if (i === 0) usage |= BufferUsage.COPY_SRC;\n\n this._buffers.push(new Buffer({\n data: this._batchBuffer.data,\n usage\n }));\n }\n }\n\n public renderEnd()\n {\n this._uploadBindGroups();\n this._resetBindGroups();\n }\n\n private _resetBindGroups()\n {\n for (const i in this._bindGroupHash)\n {\n this._bindGroupHash[i] = null;\n }\n\n this._batchBuffer.clear();\n }\n\n // just works for single bind groups for now\n public getUniformBindGroup(group: UniformGroup<any>, duplicate: boolean): BindGroup\n {\n if (!duplicate && this._bindGroupHash[group.uid])\n {\n return this._bindGroupHash[group.uid];\n }\n\n this._renderer.ubo.ensureUniformGroup(group);\n\n const data = group.buffer.data as Float32Array;\n\n const offset = this._batchBuffer.addEmptyGroup(data.length);\n\n this._renderer.ubo.syncUniformGroup(group, this._batchBuffer.data, offset / 4);\n\n this._bindGroupHash[group.uid] = this._getBindGroup(offset / minUniformOffsetAlignment);\n\n return this._bindGroupHash[group.uid];\n }\n\n public getUboResource(group: UniformGroup<any>): BufferResource\n {\n this._renderer.ubo.updateUniformGroup(group);\n\n const data = group.buffer.data as Float32Array;\n\n const offset = this._batchBuffer.addGroup(data);\n\n return this._getBufferResource(offset / minUniformOffsetAlignment);\n }\n\n public getArrayBindGroup(data: Float32Array): BindGroup\n {\n const offset = this._batchBuffer.addGroup(data);\n\n return this._getBindGroup(offset / minUniformOffsetAlignment);\n }\n\n public getArrayBufferResource(data: Float32Array): BufferResource\n {\n const offset = this._batchBuffer.addGroup(data);\n\n const index = offset / minUniformOffsetAlignment;\n\n return this._getBufferResource(index);\n }\n\n private _getBufferResource(index: number): BufferResource\n {\n if (!this._bufferResources[index])\n {\n const buffer = this._buffers[index % 2];\n\n this._bufferResources[index] = new BufferResource({\n buffer,\n offset: ((index / 2) | 0) * 256,\n size: minUniformOffsetAlignment\n });\n }\n\n return this._bufferResources[index];\n }\n\n private _getBindGroup(index: number): BindGroup\n {\n if (!this._bindGroups[index])\n {\n // even!\n const bindGroup = new BindGroup({\n 0: this._getBufferResource(index),\n });\n\n this._bindGroups[index] = bindGroup;\n }\n\n return this._bindGroups[index];\n }\n\n private _uploadBindGroups()\n {\n const bufferSystem = this._renderer.buffer;\n\n const firstBuffer = this._buffers[0];\n\n firstBuffer.update(this._batchBuffer.byteIndex);\n\n bufferSystem.updateBuffer(firstBuffer);\n\n const commandEncoder = this._renderer.gpu.device.createCommandEncoder();\n\n for (let i = 1; i < this._buffers.length; i++)\n {\n const buffer = this._buffers[i];\n\n commandEncoder.copyBufferToBuffer(\n bufferSystem.getGPUBuffer(firstBuffer),\n minUniformOffsetAlignment,\n bufferSystem.getGPUBuffer(buffer),\n 0,\n this._batchBuffer.byteIndex\n );\n }\n\n // TODO make a system that will que up all commands in to one array?\n this._renderer.gpu.device.queue.submit([commandEncoder.finish()]);\n }\n\n public destroy()\n {\n for (let i = 0; i < this._bindGroups.length; i++)\n {\n this._bindGroups[i].destroy();\n }\n\n this._bindGroups = null;\n this._bindGroupHash = null;\n\n for (let i = 0; i < this._buffers.length; i++)\n {\n this._buffers[i].destroy();\n }\n this._buffers = null;\n\n for (let i = 0; i < this._bufferResources.length; i++)\n {\n this._bufferResources[i].destroy();\n }\n\n this._bufferResources = null;\n\n this._batchBuffer.destroy();\n this._bindGroupHash = null;\n\n this._renderer = null;\n }\n}\n"],"names":[],"mappings":"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"}