{"ast":null,"code":"import { WebGPUDataBuffer } from \"../../Meshes/WebGPU/webgpuDataBuffer.js\";\nimport { FromHalfFloat } from \"../../Misc/textureTools.js\";\nimport { allocateAndCopyTypedBuffer } from \"../abstractEngine.functions.js\";\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nimport * as WebGPUConstants from \"./webgpuConstants.js\";\n/** @internal */\nexport class WebGPUBufferManager {\n static _IsGPUBuffer(buffer) {\n return buffer.underlyingResource === undefined;\n }\n static _FlagsToString(flags, suffix = \"\") {\n let result = suffix;\n for (let i = 0; i <= 9; ++i) {\n if (flags & 1 << i) {\n if (result) {\n result += \"_\";\n }\n result += WebGPUConstants.BufferUsage[1 << i];\n }\n }\n return result;\n }\n constructor(engine, device) {\n this._deferredReleaseBuffers = [];\n this._engine = engine;\n this._device = device;\n }\n createRawBuffer(viewOrSize, flags, mappedAtCreation = false, label) {\n const alignedLength = viewOrSize.byteLength !== undefined ? viewOrSize.byteLength + 3 & ~3 : viewOrSize + 3 & ~3; // 4 bytes alignments (because of the upload which requires this)\n const verticesBufferDescriptor = {\n label: \"BabylonWebGPUDevice\" + this._engine.uniqueId + \"_\" + WebGPUBufferManager._FlagsToString(flags, label !== null && label !== void 0 ? label : \"Buffer\") + \"_size\" + alignedLength,\n mappedAtCreation,\n size: alignedLength,\n usage: flags\n };\n return this._device.createBuffer(verticesBufferDescriptor);\n }\n createBuffer(viewOrSize, flags, label) {\n const isView = viewOrSize.byteLength !== undefined;\n const dataBuffer = new WebGPUDataBuffer();\n const labelId = \"DataBufferUniqueId=\" + dataBuffer.uniqueId;\n dataBuffer.buffer = this.createRawBuffer(viewOrSize, flags, undefined, label ? labelId + \"-\" + label : labelId);\n dataBuffer.references = 1;\n dataBuffer.capacity = isView ? viewOrSize.byteLength : viewOrSize;\n dataBuffer.engineId = this._engine.uniqueId;\n if (isView) {\n this.setSubData(dataBuffer, 0, viewOrSize);\n }\n return dataBuffer;\n }\n setRawData(buffer, dstByteOffset, src, srcByteOffset, byteLength) {\n this._device.queue.writeBuffer(buffer, dstByteOffset, src.buffer, srcByteOffset, byteLength);\n }\n setSubData(dataBuffer, dstByteOffset, src, srcByteOffset = 0, byteLength = 0) {\n const buffer = dataBuffer.underlyingResource;\n byteLength = byteLength || src.byteLength;\n byteLength = Math.min(byteLength, dataBuffer.capacity - dstByteOffset);\n // After Migration to Canary\n let chunkStart = src.byteOffset + srcByteOffset;\n let chunkEnd = chunkStart + byteLength;\n // 4 bytes alignments for upload\n const alignedLength = byteLength + 3 & ~3;\n if (alignedLength !== byteLength) {\n const tempView = new Uint8Array(src.buffer.slice(chunkStart, chunkEnd));\n src = new Uint8Array(alignedLength);\n src.set(tempView);\n srcByteOffset = 0;\n chunkStart = 0;\n chunkEnd = alignedLength;\n byteLength = alignedLength;\n }\n // Chunk\n const maxChunk = 1024 * 1024 * 15;\n let offset = 0;\n while (chunkEnd - (chunkStart + offset) > maxChunk) {\n this._device.queue.writeBuffer(buffer, dstByteOffset + offset, src.buffer, chunkStart + offset, maxChunk);\n offset += maxChunk;\n }\n this._device.queue.writeBuffer(buffer, dstByteOffset + offset, src.buffer, chunkStart + offset, byteLength - offset);\n }\n _getHalfFloatAsFloatRGBAArrayBuffer(dataLength, arrayBuffer, destArray) {\n if (!destArray) {\n destArray = new Float32Array(dataLength);\n }\n const srcData = new Uint16Array(arrayBuffer);\n while (dataLength--) {\n destArray[dataLength] = FromHalfFloat(srcData[dataLength]);\n }\n return destArray;\n }\n readDataFromBuffer(gpuBuffer, size, width, height, bytesPerRow, bytesPerRowAligned, type = 0, offset = 0, buffer = null, destroyBuffer = true, noDataConversion = false) {\n const floatFormat = type === 1 ? 2 : type === 2 ? 1 : 0;\n const engineId = this._engine.uniqueId;\n return new Promise((resolve, reject) => {\n gpuBuffer.mapAsync(1 /* WebGPUConstants.MapMode.Read */, offset, size).then(() => {\n const copyArrayBuffer = gpuBuffer.getMappedRange(offset, size);\n let data = buffer;\n if (noDataConversion) {\n if (data === null) {\n data = allocateAndCopyTypedBuffer(type, size, true, copyArrayBuffer);\n } else {\n data = allocateAndCopyTypedBuffer(type, data.buffer, undefined, copyArrayBuffer);\n }\n } else {\n if (data === null) {\n switch (floatFormat) {\n case 0:\n // byte format\n data = new Uint8Array(size);\n data.set(new Uint8Array(copyArrayBuffer));\n break;\n case 1:\n // half float\n // TODO WEBGPU use computer shaders (or render pass) to make the conversion?\n data = this._getHalfFloatAsFloatRGBAArrayBuffer(size / 2, copyArrayBuffer);\n break;\n case 2:\n // float\n data = new Float32Array(size / 4);\n data.set(new Float32Array(copyArrayBuffer));\n break;\n }\n } else {\n switch (floatFormat) {\n case 0:\n // byte format\n data = new Uint8Array(data.buffer);\n data.set(new Uint8Array(copyArrayBuffer));\n break;\n case 1:\n // half float\n // TODO WEBGPU use computer shaders (or render pass) to make the conversion?\n data = this._getHalfFloatAsFloatRGBAArrayBuffer(size / 2, copyArrayBuffer, buffer);\n break;\n case 2:\n // float\n data = new Float32Array(data.buffer);\n data.set(new Float32Array(copyArrayBuffer));\n break;\n }\n }\n }\n if (bytesPerRow !== bytesPerRowAligned) {\n // TODO WEBGPU use computer shaders (or render pass) to build the final buffer data?\n if (floatFormat === 1 && !noDataConversion) {\n // half float have been converted to float above\n bytesPerRow *= 2;\n bytesPerRowAligned *= 2;\n }\n const data2 = new Uint8Array(data.buffer);\n let offset = bytesPerRow,\n offset2 = 0;\n for (let y = 1; y < height; ++y) {\n offset2 = y * bytesPerRowAligned;\n for (let x = 0; x < bytesPerRow; ++x) {\n data2[offset++] = data2[offset2++];\n }\n }\n if (floatFormat !== 0 && !noDataConversion) {\n data = new Float32Array(data2.buffer, 0, offset / 4);\n } else {\n data = new Uint8Array(data2.buffer, 0, offset);\n }\n }\n gpuBuffer.unmap();\n if (destroyBuffer) {\n this.releaseBuffer(gpuBuffer);\n }\n resolve(data);\n }, reason => {\n if (this._engine.isDisposed || this._engine.uniqueId !== engineId) {\n // The engine was disposed while waiting for the promise, or a context loss/restoration has occurred: don't reject\n resolve(new Uint8Array());\n } else {\n reject(reason);\n }\n });\n });\n }\n releaseBuffer(buffer) {\n if (WebGPUBufferManager._IsGPUBuffer(buffer)) {\n this._deferredReleaseBuffers.push(buffer);\n return true;\n }\n buffer.references--;\n if (buffer.references === 0) {\n this._deferredReleaseBuffers.push(buffer.underlyingResource);\n return true;\n }\n return false;\n }\n destroyDeferredBuffers() {\n for (let i = 0; i < this._deferredReleaseBuffers.length; ++i) {\n this._deferredReleaseBuffers[i].destroy();\n }\n this._deferredReleaseBuffers.length = 0;\n }\n}","map":{"version":3,"names":["WebGPUDataBuffer","FromHalfFloat","allocateAndCopyTypedBuffer","WebGPUConstants","WebGPUBufferManager","_IsGPUBuffer","buffer","underlyingResource","undefined","_FlagsToString","flags","suffix","result","i","BufferUsage","constructor","engine","device","_deferredReleaseBuffers","_engine","_device","createRawBuffer","viewOrSize","mappedAtCreation","label","alignedLength","byteLength","verticesBufferDescriptor","uniqueId","size","usage","createBuffer","isView","dataBuffer","labelId","references","capacity","engineId","setSubData","setRawData","dstByteOffset","src","srcByteOffset","queue","writeBuffer","Math","min","chunkStart","byteOffset","chunkEnd","tempView","Uint8Array","slice","set","maxChunk","offset","_getHalfFloatAsFloatRGBAArrayBuffer","dataLength","arrayBuffer","destArray","Float32Array","srcData","Uint16Array","readDataFromBuffer","gpuBuffer","width","height","bytesPerRow","bytesPerRowAligned","type","destroyBuffer","noDataConversion","floatFormat","Promise","resolve","reject","mapAsync","then","copyArrayBuffer","getMappedRange","data","data2","offset2","y","x","unmap","releaseBuffer","reason","isDisposed","push","destroyDeferredBuffers","length","destroy"],"sources":["F:/workspace/202226701027/huinongbao-app/node_modules/@babylonjs/core/Engines/WebGPU/webgpuBufferManager.js"],"sourcesContent":["import { WebGPUDataBuffer } from \"../../Meshes/WebGPU/webgpuDataBuffer.js\";\nimport { FromHalfFloat } from \"../../Misc/textureTools.js\";\nimport { allocateAndCopyTypedBuffer } from \"../abstractEngine.functions.js\";\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nimport * as WebGPUConstants from \"./webgpuConstants.js\";\n/** @internal */\nexport class WebGPUBufferManager {\n static _IsGPUBuffer(buffer) {\n return buffer.underlyingResource === undefined;\n }\n static _FlagsToString(flags, suffix = \"\") {\n let result = suffix;\n for (let i = 0; i <= 9; ++i) {\n if (flags & (1 << i)) {\n if (result) {\n result += \"_\";\n }\n result += WebGPUConstants.BufferUsage[1 << i];\n }\n }\n return result;\n }\n constructor(engine, device) {\n this._deferredReleaseBuffers = [];\n this._engine = engine;\n this._device = device;\n }\n createRawBuffer(viewOrSize, flags, mappedAtCreation = false, label) {\n const alignedLength = viewOrSize.byteLength !== undefined ? (viewOrSize.byteLength + 3) & ~3 : (viewOrSize + 3) & ~3; // 4 bytes alignments (because of the upload which requires this)\n const verticesBufferDescriptor = {\n label: \"BabylonWebGPUDevice\" + this._engine.uniqueId + \"_\" + WebGPUBufferManager._FlagsToString(flags, label ?? \"Buffer\") + \"_size\" + alignedLength,\n mappedAtCreation,\n size: alignedLength,\n usage: flags,\n };\n return this._device.createBuffer(verticesBufferDescriptor);\n }\n createBuffer(viewOrSize, flags, label) {\n const isView = viewOrSize.byteLength !== undefined;\n const dataBuffer = new WebGPUDataBuffer();\n const labelId = \"DataBufferUniqueId=\" + dataBuffer.uniqueId;\n dataBuffer.buffer = this.createRawBuffer(viewOrSize, flags, undefined, label ? labelId + \"-\" + label : labelId);\n dataBuffer.references = 1;\n dataBuffer.capacity = isView ? viewOrSize.byteLength : viewOrSize;\n dataBuffer.engineId = this._engine.uniqueId;\n if (isView) {\n this.setSubData(dataBuffer, 0, viewOrSize);\n }\n return dataBuffer;\n }\n setRawData(buffer, dstByteOffset, src, srcByteOffset, byteLength) {\n this._device.queue.writeBuffer(buffer, dstByteOffset, src.buffer, srcByteOffset, byteLength);\n }\n setSubData(dataBuffer, dstByteOffset, src, srcByteOffset = 0, byteLength = 0) {\n const buffer = dataBuffer.underlyingResource;\n byteLength = byteLength || src.byteLength;\n byteLength = Math.min(byteLength, dataBuffer.capacity - dstByteOffset);\n // After Migration to Canary\n let chunkStart = src.byteOffset + srcByteOffset;\n let chunkEnd = chunkStart + byteLength;\n // 4 bytes alignments for upload\n const alignedLength = (byteLength + 3) & ~3;\n if (alignedLength !== byteLength) {\n const tempView = new Uint8Array(src.buffer.slice(chunkStart, chunkEnd));\n src = new Uint8Array(alignedLength);\n src.set(tempView);\n srcByteOffset = 0;\n chunkStart = 0;\n chunkEnd = alignedLength;\n byteLength = alignedLength;\n }\n // Chunk\n const maxChunk = 1024 * 1024 * 15;\n let offset = 0;\n while (chunkEnd - (chunkStart + offset) > maxChunk) {\n this._device.queue.writeBuffer(buffer, dstByteOffset + offset, src.buffer, chunkStart + offset, maxChunk);\n offset += maxChunk;\n }\n this._device.queue.writeBuffer(buffer, dstByteOffset + offset, src.buffer, chunkStart + offset, byteLength - offset);\n }\n _getHalfFloatAsFloatRGBAArrayBuffer(dataLength, arrayBuffer, destArray) {\n if (!destArray) {\n destArray = new Float32Array(dataLength);\n }\n const srcData = new Uint16Array(arrayBuffer);\n while (dataLength--) {\n destArray[dataLength] = FromHalfFloat(srcData[dataLength]);\n }\n return destArray;\n }\n readDataFromBuffer(gpuBuffer, size, width, height, bytesPerRow, bytesPerRowAligned, type = 0, offset = 0, buffer = null, destroyBuffer = true, noDataConversion = false) {\n const floatFormat = type === 1 ? 2 : type === 2 ? 1 : 0;\n const engineId = this._engine.uniqueId;\n return new Promise((resolve, reject) => {\n gpuBuffer.mapAsync(1 /* WebGPUConstants.MapMode.Read */, offset, size).then(() => {\n const copyArrayBuffer = gpuBuffer.getMappedRange(offset, size);\n let data = buffer;\n if (noDataConversion) {\n if (data === null) {\n data = allocateAndCopyTypedBuffer(type, size, true, copyArrayBuffer);\n }\n else {\n data = allocateAndCopyTypedBuffer(type, data.buffer, undefined, copyArrayBuffer);\n }\n }\n else {\n if (data === null) {\n switch (floatFormat) {\n case 0: // byte format\n data = new Uint8Array(size);\n data.set(new Uint8Array(copyArrayBuffer));\n break;\n case 1: // half float\n // TODO WEBGPU use computer shaders (or render pass) to make the conversion?\n data = this._getHalfFloatAsFloatRGBAArrayBuffer(size / 2, copyArrayBuffer);\n break;\n case 2: // float\n data = new Float32Array(size / 4);\n data.set(new Float32Array(copyArrayBuffer));\n break;\n }\n }\n else {\n switch (floatFormat) {\n case 0: // byte format\n data = new Uint8Array(data.buffer);\n data.set(new Uint8Array(copyArrayBuffer));\n break;\n case 1: // half float\n // TODO WEBGPU use computer shaders (or render pass) to make the conversion?\n data = this._getHalfFloatAsFloatRGBAArrayBuffer(size / 2, copyArrayBuffer, buffer);\n break;\n case 2: // float\n data = new Float32Array(data.buffer);\n data.set(new Float32Array(copyArrayBuffer));\n break;\n }\n }\n }\n if (bytesPerRow !== bytesPerRowAligned) {\n // TODO WEBGPU use computer shaders (or render pass) to build the final buffer data?\n if (floatFormat === 1 && !noDataConversion) {\n // half float have been converted to float above\n bytesPerRow *= 2;\n bytesPerRowAligned *= 2;\n }\n const data2 = new Uint8Array(data.buffer);\n let offset = bytesPerRow, offset2 = 0;\n for (let y = 1; y < height; ++y) {\n offset2 = y * bytesPerRowAligned;\n for (let x = 0; x < bytesPerRow; ++x) {\n data2[offset++] = data2[offset2++];\n }\n }\n if (floatFormat !== 0 && !noDataConversion) {\n data = new Float32Array(data2.buffer, 0, offset / 4);\n }\n else {\n data = new Uint8Array(data2.buffer, 0, offset);\n }\n }\n gpuBuffer.unmap();\n if (destroyBuffer) {\n this.releaseBuffer(gpuBuffer);\n }\n resolve(data);\n }, (reason) => {\n if (this._engine.isDisposed || this._engine.uniqueId !== engineId) {\n // The engine was disposed while waiting for the promise, or a context loss/restoration has occurred: don't reject\n resolve(new Uint8Array());\n }\n else {\n reject(reason);\n }\n });\n });\n }\n releaseBuffer(buffer) {\n if (WebGPUBufferManager._IsGPUBuffer(buffer)) {\n this._deferredReleaseBuffers.push(buffer);\n return true;\n }\n buffer.references--;\n if (buffer.references === 0) {\n this._deferredReleaseBuffers.push(buffer.underlyingResource);\n return true;\n }\n return false;\n }\n destroyDeferredBuffers() {\n for (let i = 0; i < this._deferredReleaseBuffers.length; ++i) {\n this._deferredReleaseBuffers[i].destroy();\n }\n this._deferredReleaseBuffers.length = 0;\n }\n}\n"],"mappings":"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","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}