{"version":3,"file":"gpuUploadCompressedTextureResource.mjs","sources":["../../../../../../src/rendering/renderers/gpu/texture/uploaders/gpuUploadCompressedTextureResource.ts"],"sourcesContent":["import type { CompressedSource } from '../../../shared/texture/sources/CompressedSource';\nimport type { GPU } from '../../GpuDeviceSystem';\nimport type { GpuTextureUploader } from './GpuTextureUploader';\n\n/** @internal */\nexport const blockDataMap: Record<string, {blockBytes: number, blockWidth: number, blockHeight: number}> = {\n    'bc1-rgba-unorm': { blockBytes: 8, blockWidth: 4, blockHeight: 4 },\n    'bc2-rgba-unorm': { blockBytes: 16, blockWidth: 4, blockHeight: 4 },\n    'bc3-rgba-unorm': { blockBytes: 16, blockWidth: 4, blockHeight: 4 },\n    'bc7-rgba-unorm': { blockBytes: 16, blockWidth: 4, blockHeight: 4 },\n    'etc1-rgb-unorm': { blockBytes: 8, blockWidth: 4, blockHeight: 4 },\n    'etc2-rgba8unorm': { blockBytes: 16, blockWidth: 4, blockHeight: 4 },\n    'astc-4x4-unorm': { blockBytes: 16, blockWidth: 4, blockHeight: 4 },\n};\n\nconst defaultBlockData = { blockBytes: 4, blockWidth: 1, blockHeight: 1 };\n\n/** @internal */\nexport const gpuUploadCompressedTextureResource = {\n\n    type: 'compressed',\n\n    upload(source: CompressedSource, gpuTexture: GPUTexture, gpu: GPU, originZOverride = 0)\n    {\n        let mipWidth = source.pixelWidth;\n        let mipHeight = source.pixelHeight;\n\n        const blockData = blockDataMap[source.format] || defaultBlockData;\n\n        for (let i = 0; i < source.resource.length; i++)\n        {\n            const levelBuffer = source.resource[i];\n\n            const bytesPerRow = Math.ceil(mipWidth / blockData.blockWidth) * blockData.blockBytes;\n\n            gpu.device.queue.writeTexture(\n                {\n                    texture: gpuTexture,\n                    mipLevel: i,\n                    origin: { x: 0, y: 0, z: originZOverride },\n                },\n                levelBuffer as BufferSource,\n                {\n                    offset: 0,\n                    bytesPerRow,\n                },\n                {\n                    width: Math.ceil(mipWidth / blockData.blockWidth) * blockData.blockWidth,\n                    height: Math.ceil(mipHeight / blockData.blockHeight) * blockData.blockHeight,\n                    depthOrArrayLayers: 1,\n                }\n            );\n\n            mipWidth = Math.max(mipWidth >> 1, 1);\n            mipHeight = Math.max(mipHeight >> 1, 1);\n        }\n    }\n} as GpuTextureUploader<CompressedSource>;\n"],"names":[],"mappings":";AAKO,MAAM,YAAA,GAA8F;AAAA,EACvG,kBAAkB,EAAE,UAAA,EAAY,GAAG,UAAA,EAAY,CAAA,EAAG,aAAa,CAAA,EAAE;AAAA,EACjE,kBAAkB,EAAE,UAAA,EAAY,IAAI,UAAA,EAAY,CAAA,EAAG,aAAa,CAAA,EAAE;AAAA,EAClE,kBAAkB,EAAE,UAAA,EAAY,IAAI,UAAA,EAAY,CAAA,EAAG,aAAa,CAAA,EAAE;AAAA,EAClE,kBAAkB,EAAE,UAAA,EAAY,IAAI,UAAA,EAAY,CAAA,EAAG,aAAa,CAAA,EAAE;AAAA,EAClE,kBAAkB,EAAE,UAAA,EAAY,GAAG,UAAA,EAAY,CAAA,EAAG,aAAa,CAAA,EAAE;AAAA,EACjE,mBAAmB,EAAE,UAAA,EAAY,IAAI,UAAA,EAAY,CAAA,EAAG,aAAa,CAAA,EAAE;AAAA,EACnE,kBAAkB,EAAE,UAAA,EAAY,IAAI,UAAA,EAAY,CAAA,EAAG,aAAa,CAAA;AACpE;AAEA,MAAM,mBAAmB,EAAE,UAAA,EAAY,GAAG,UAAA,EAAY,CAAA,EAAG,aAAa,CAAA,EAAE;AAGjE,MAAM,kCAAA,GAAqC;AAAA,EAE9C,IAAA,EAAM,YAAA;AAAA,EAEN,MAAA,CAAO,MAAA,EAA0B,UAAA,EAAwB,GAAA,EAAU,kBAAkB,CAAA,EACrF;AACI,IAAA,IAAI,WAAW,MAAA,CAAO,UAAA;AACtB,IAAA,IAAI,YAAY,MAAA,CAAO,WAAA;AAEvB,IAAA,MAAM,SAAA,GAAY,YAAA,CAAa,MAAA,CAAO,MAAM,CAAA,IAAK,gBAAA;AAEjD,IAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,MAAA,CAAO,QAAA,CAAS,QAAQ,CAAA,EAAA,EAC5C;AACI,MAAA,MAAM,WAAA,GAAc,MAAA,CAAO,QAAA,CAAS,CAAC,CAAA;AAErC,MAAA,MAAM,cAAc,IAAA,CAAK,IAAA,CAAK,WAAW,SAAA,CAAU,UAAU,IAAI,SAAA,CAAU,UAAA;AAE3E,MAAA,GAAA,CAAI,OAAO,KAAA,CAAM,YAAA;AAAA,QACb;AAAA,UACI,OAAA,EAAS,UAAA;AAAA,UACT,QAAA,EAAU,CAAA;AAAA,UACV,QAAQ,EAAE,CAAA,EAAG,GAAG,CAAA,EAAG,CAAA,EAAG,GAAG,eAAA;AAAgB,SAC7C;AAAA,QACA,WAAA;AAAA,QACA;AAAA,UACI,MAAA,EAAQ,CAAA;AAAA,UACR;AAAA,SACJ;AAAA,QACA;AAAA,UACI,OAAO,IAAA,CAAK,IAAA,CAAK,WAAW,SAAA,CAAU,UAAU,IAAI,SAAA,CAAU,UAAA;AAAA,UAC9D,QAAQ,IAAA,CAAK,IAAA,CAAK,YAAY,SAAA,CAAU,WAAW,IAAI,SAAA,CAAU,WAAA;AAAA,UACjE,kBAAA,EAAoB;AAAA;AACxB,OACJ;AAEA,MAAA,QAAA,GAAW,IAAA,CAAK,GAAA,CAAI,QAAA,IAAY,CAAA,EAAG,CAAC,CAAA;AACpC,MAAA,SAAA,GAAY,IAAA,CAAK,GAAA,CAAI,SAAA,IAAa,CAAA,EAAG,CAAC,CAAA;AAAA,IAC1C;AAAA,EACJ;AACJ;;;;"}