{"version":3,"file":"parseDDS.mjs","sources":["../../src/parsers/parseDDS.ts"],"sourcesContent":["import { INTERNAL_FORMAT_TO_BYTES_PER_PIXEL, INTERNAL_FORMATS } from '../const';\nimport { CompressedTextureResource } from '../resources';\n\nconst DDS_MAGIC_SIZE = 4;\nconst DDS_HEADER_SIZE = 124;\nconst DDS_HEADER_PF_SIZE = 32;\nconst DDS_HEADER_DX10_SIZE = 20;\n\n// DDS file format magic word\nconst DDS_MAGIC = 0x20534444;\n\n/**\n * DWORD offsets of the DDS file header fields (relative to file start).\n * @ignore\n */\nconst DDS_FIELDS = {\n    SIZE: 1,\n    FLAGS: 2,\n    HEIGHT: 3,\n    WIDTH: 4,\n    MIPMAP_COUNT: 7,\n    PIXEL_FORMAT: 19,\n};\n\n/**\n * DWORD offsets of the DDS PIXEL_FORMAT fields.\n * @ignore\n */\nconst DDS_PF_FIELDS = {\n    SIZE: 0,\n    FLAGS: 1,\n    FOURCC: 2,\n    RGB_BITCOUNT: 3,\n    R_BIT_MASK: 4,\n    G_BIT_MASK: 5,\n    B_BIT_MASK: 6,\n    A_BIT_MASK: 7\n};\n\n/**\n * DWORD offsets of the DDS_HEADER_DX10 fields.\n * @ignore\n */\nconst DDS_DX10_FIELDS = {\n    DXGI_FORMAT: 0,\n    RESOURCE_DIMENSION: 1,\n    MISC_FLAG: 2,\n    ARRAY_SIZE: 3,\n    MISC_FLAGS2: 4\n};\n\n/**\n * @see https://docs.microsoft.com/en-us/windows/win32/api/dxgiformat/ne-dxgiformat-dxgi_format\n * This is way over-blown for us! Lend us a hand, and remove the ones that aren't used (but set the remaining\n * ones to their correct value)\n * @ignore\n */\nenum DXGI_FORMAT\n    {\n    DXGI_FORMAT_UNKNOWN,\n    DXGI_FORMAT_R32G32B32A32_TYPELESS,\n    DXGI_FORMAT_R32G32B32A32_FLOAT,\n    DXGI_FORMAT_R32G32B32A32_UINT,\n    DXGI_FORMAT_R32G32B32A32_SINT,\n    DXGI_FORMAT_R32G32B32_TYPELESS,\n    DXGI_FORMAT_R32G32B32_FLOAT,\n    DXGI_FORMAT_R32G32B32_UINT,\n    DXGI_FORMAT_R32G32B32_SINT,\n    DXGI_FORMAT_R16G16B16A16_TYPELESS,\n    DXGI_FORMAT_R16G16B16A16_FLOAT,\n    DXGI_FORMAT_R16G16B16A16_UNORM,\n    DXGI_FORMAT_R16G16B16A16_UINT,\n    DXGI_FORMAT_R16G16B16A16_SNORM,\n    DXGI_FORMAT_R16G16B16A16_SINT,\n    DXGI_FORMAT_R32G32_TYPELESS,\n    DXGI_FORMAT_R32G32_FLOAT,\n    DXGI_FORMAT_R32G32_UINT,\n    DXGI_FORMAT_R32G32_SINT,\n    DXGI_FORMAT_R32G8X24_TYPELESS,\n    DXGI_FORMAT_D32_FLOAT_S8X24_UINT,\n    DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS,\n    DXGI_FORMAT_X32_TYPELESS_G8X24_UINT,\n    DXGI_FORMAT_R10G10B10A2_TYPELESS,\n    DXGI_FORMAT_R10G10B10A2_UNORM,\n    DXGI_FORMAT_R10G10B10A2_UINT,\n    DXGI_FORMAT_R11G11B10_FLOAT,\n    DXGI_FORMAT_R8G8B8A8_TYPELESS,\n    DXGI_FORMAT_R8G8B8A8_UNORM,\n    DXGI_FORMAT_R8G8B8A8_UNORM_SRGB,\n    DXGI_FORMAT_R8G8B8A8_UINT,\n    DXGI_FORMAT_R8G8B8A8_SNORM,\n    DXGI_FORMAT_R8G8B8A8_SINT,\n    DXGI_FORMAT_R16G16_TYPELESS,\n    DXGI_FORMAT_R16G16_FLOAT,\n    DXGI_FORMAT_R16G16_UNORM,\n    DXGI_FORMAT_R16G16_UINT,\n    DXGI_FORMAT_R16G16_SNORM,\n    DXGI_FORMAT_R16G16_SINT,\n    DXGI_FORMAT_R32_TYPELESS,\n    DXGI_FORMAT_D32_FLOAT,\n    DXGI_FORMAT_R32_FLOAT,\n    DXGI_FORMAT_R32_UINT,\n    DXGI_FORMAT_R32_SINT,\n    DXGI_FORMAT_R24G8_TYPELESS,\n    DXGI_FORMAT_D24_UNORM_S8_UINT,\n    DXGI_FORMAT_R24_UNORM_X8_TYPELESS,\n    DXGI_FORMAT_X24_TYPELESS_G8_UINT,\n    DXGI_FORMAT_R8G8_TYPELESS,\n    DXGI_FORMAT_R8G8_UNORM,\n    DXGI_FORMAT_R8G8_UINT,\n    DXGI_FORMAT_R8G8_SNORM,\n    DXGI_FORMAT_R8G8_SINT,\n    DXGI_FORMAT_R16_TYPELESS,\n    DXGI_FORMAT_R16_FLOAT,\n    DXGI_FORMAT_D16_UNORM,\n    DXGI_FORMAT_R16_UNORM,\n    DXGI_FORMAT_R16_UINT,\n    DXGI_FORMAT_R16_SNORM,\n    DXGI_FORMAT_R16_SINT,\n    DXGI_FORMAT_R8_TYPELESS,\n    DXGI_FORMAT_R8_UNORM,\n    DXGI_FORMAT_R8_UINT,\n    DXGI_FORMAT_R8_SNORM,\n    DXGI_FORMAT_R8_SINT,\n    DXGI_FORMAT_A8_UNORM,\n    DXGI_FORMAT_R1_UNORM,\n    DXGI_FORMAT_R9G9B9E5_SHAREDEXP,\n    DXGI_FORMAT_R8G8_B8G8_UNORM,\n    DXGI_FORMAT_G8R8_G8B8_UNORM,\n    DXGI_FORMAT_BC1_TYPELESS,\n    DXGI_FORMAT_BC1_UNORM,\n    DXGI_FORMAT_BC1_UNORM_SRGB,\n    DXGI_FORMAT_BC2_TYPELESS,\n    DXGI_FORMAT_BC2_UNORM,\n    DXGI_FORMAT_BC2_UNORM_SRGB,\n    DXGI_FORMAT_BC3_TYPELESS,\n    DXGI_FORMAT_BC3_UNORM,\n    DXGI_FORMAT_BC3_UNORM_SRGB,\n    DXGI_FORMAT_BC4_TYPELESS,\n    DXGI_FORMAT_BC4_UNORM,\n    DXGI_FORMAT_BC4_SNORM,\n    DXGI_FORMAT_BC5_TYPELESS,\n    DXGI_FORMAT_BC5_UNORM,\n    DXGI_FORMAT_BC5_SNORM,\n    DXGI_FORMAT_B5G6R5_UNORM,\n    DXGI_FORMAT_B5G5R5A1_UNORM,\n    DXGI_FORMAT_B8G8R8A8_UNORM,\n    DXGI_FORMAT_B8G8R8X8_UNORM,\n    DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM,\n    DXGI_FORMAT_B8G8R8A8_TYPELESS,\n    DXGI_FORMAT_B8G8R8A8_UNORM_SRGB,\n    DXGI_FORMAT_B8G8R8X8_TYPELESS,\n    DXGI_FORMAT_B8G8R8X8_UNORM_SRGB,\n    DXGI_FORMAT_BC6H_TYPELESS,\n    DXGI_FORMAT_BC6H_UF16,\n    DXGI_FORMAT_BC6H_SF16,\n    DXGI_FORMAT_BC7_TYPELESS,\n    DXGI_FORMAT_BC7_UNORM,\n    DXGI_FORMAT_BC7_UNORM_SRGB,\n    DXGI_FORMAT_AYUV,\n    DXGI_FORMAT_Y410,\n    DXGI_FORMAT_Y416,\n    DXGI_FORMAT_NV12,\n    DXGI_FORMAT_P010,\n    DXGI_FORMAT_P016,\n    DXGI_FORMAT_420_OPAQUE,\n    DXGI_FORMAT_YUY2,\n    DXGI_FORMAT_Y210,\n    DXGI_FORMAT_Y216,\n    DXGI_FORMAT_NV11,\n    DXGI_FORMAT_AI44,\n    DXGI_FORMAT_IA44,\n    DXGI_FORMAT_P8,\n    DXGI_FORMAT_A8P8,\n    DXGI_FORMAT_B4G4R4A4_UNORM,\n    DXGI_FORMAT_P208,\n    DXGI_FORMAT_V208,\n    DXGI_FORMAT_V408,\n    DXGI_FORMAT_SAMPLER_FEEDBACK_MIN_MIP_OPAQUE,\n    DXGI_FORMAT_SAMPLER_FEEDBACK_MIP_REGION_USED_OPAQUE,\n    DXGI_FORMAT_FORCE_UINT\n}\n\n/**\n * Possible values of the field {@link DDS_DX10_FIELDS.RESOURCE_DIMENSION}\n * @ignore\n */\nenum D3D10_RESOURCE_DIMENSION\n    {\n    DDS_DIMENSION_TEXTURE1D = 2,\n    DDS_DIMENSION_TEXTURE2D = 3,\n    DDS_DIMENSION_TEXTURE3D = 6\n}\n\nconst PF_FLAGS = 1;\n\n// PIXEL_FORMAT flags\nconst DDPF_ALPHA = 0x2;\nconst DDPF_FOURCC = 0x4;\nconst DDPF_RGB = 0x40;\nconst DDPF_YUV = 0x200;\nconst DDPF_LUMINANCE = 0x20000;\n\n// Four character codes for DXTn formats\nconst FOURCC_DXT1 = 0x31545844;\nconst FOURCC_DXT3 = 0x33545844;\nconst FOURCC_DXT5 = 0x35545844;\nconst FOURCC_DX10 = 0x30315844;\n\n// Cubemap texture flag (for DDS_DX10_FIELDS.MISC_FLAG)\nconst DDS_RESOURCE_MISC_TEXTURECUBE = 0x4;\n\n/**\n * Maps `FOURCC_*` formats to internal formats (see {@link PIXI.INTERNAL_FORMATS}).\n * @ignore\n */\nconst FOURCC_TO_FORMAT: { [id: number]: number } = {\n    [FOURCC_DXT1]: INTERNAL_FORMATS.COMPRESSED_RGBA_S3TC_DXT1_EXT,\n    [FOURCC_DXT3]: INTERNAL_FORMATS.COMPRESSED_RGBA_S3TC_DXT3_EXT,\n    [FOURCC_DXT5]: INTERNAL_FORMATS.COMPRESSED_RGBA_S3TC_DXT5_EXT\n};\n\n/**\n * Maps {@link DXGI_FORMAT} to types/internal-formats (see {@link PIXI.TYPES}, {@link PIXI.INTERNAL_FORMATS})\n * @ignore\n */\nconst DXGI_TO_FORMAT: { [id: number]: number } = {\n    // WEBGL_compressed_texture_s3tc\n    [DXGI_FORMAT.DXGI_FORMAT_BC1_TYPELESS]: INTERNAL_FORMATS.COMPRESSED_RGBA_S3TC_DXT1_EXT,\n    [DXGI_FORMAT.DXGI_FORMAT_BC1_UNORM]: INTERNAL_FORMATS.COMPRESSED_RGBA_S3TC_DXT1_EXT,\n    [DXGI_FORMAT.DXGI_FORMAT_BC2_TYPELESS]: INTERNAL_FORMATS.COMPRESSED_RGBA_S3TC_DXT3_EXT,\n    [DXGI_FORMAT.DXGI_FORMAT_BC2_UNORM]: INTERNAL_FORMATS.COMPRESSED_RGBA_S3TC_DXT3_EXT,\n    [DXGI_FORMAT.DXGI_FORMAT_BC3_TYPELESS]: INTERNAL_FORMATS.COMPRESSED_RGBA_S3TC_DXT5_EXT,\n    [DXGI_FORMAT.DXGI_FORMAT_BC3_UNORM]: INTERNAL_FORMATS.COMPRESSED_RGBA_S3TC_DXT5_EXT,\n\n    // WEBGL_compressed_texture_s3tc_srgb\n    [DXGI_FORMAT.DXGI_FORMAT_BC1_UNORM_SRGB]: INTERNAL_FORMATS.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT,\n    [DXGI_FORMAT.DXGI_FORMAT_BC2_UNORM_SRGB]: INTERNAL_FORMATS.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT,\n    [DXGI_FORMAT.DXGI_FORMAT_BC3_UNORM_SRGB]: INTERNAL_FORMATS.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT\n};\n\n/**\n * Parses the DDS file header, generates base-textures, and puts them into the texture cache.\n * @see https://docs.microsoft.com/en-us/windows/win32/direct3ddds/dx-graphics-dds-pguide\n * @param arrayBuffer\n * @memberof PIXI\n */\nexport function parseDDS(arrayBuffer: ArrayBuffer): CompressedTextureResource[]\n{\n    const data = new Uint32Array(arrayBuffer);\n    const magicWord = data[0];\n\n    if (magicWord !== DDS_MAGIC)\n    {\n        throw new Error('Invalid DDS file magic word');\n    }\n\n    const header = new Uint32Array(arrayBuffer, 0, DDS_HEADER_SIZE / Uint32Array.BYTES_PER_ELEMENT);\n\n    // DDS header fields\n    const height = header[DDS_FIELDS.HEIGHT];\n    const width = header[DDS_FIELDS.WIDTH];\n    const mipmapCount = header[DDS_FIELDS.MIPMAP_COUNT];\n\n    // PIXEL_FORMAT fields\n    const pixelFormat = new Uint32Array(\n        arrayBuffer,\n        DDS_FIELDS.PIXEL_FORMAT * Uint32Array.BYTES_PER_ELEMENT,\n        DDS_HEADER_PF_SIZE / Uint32Array.BYTES_PER_ELEMENT);\n    const formatFlags = pixelFormat[PF_FLAGS];\n\n    // File contains compressed texture(s)\n    if (formatFlags & DDPF_FOURCC)\n    {\n        const fourCC = pixelFormat[DDS_PF_FIELDS.FOURCC];\n\n        // File contains one DXTn compressed texture\n        if (fourCC !== FOURCC_DX10)\n        {\n            const internalFormat = FOURCC_TO_FORMAT[fourCC];\n\n            const dataOffset = DDS_MAGIC_SIZE + DDS_HEADER_SIZE;\n            const texData = new Uint8Array(arrayBuffer, dataOffset);\n\n            const resource = new CompressedTextureResource(texData, {\n                format: internalFormat,\n                width,\n                height,\n                levels: mipmapCount // CompressedTextureResource will separate the levelBuffers for us!\n            });\n\n            return [resource];\n        }\n\n        // FOURCC_DX10 indicates there is a 20-byte DDS_HEADER_DX10 after DDS_HEADER\n        const dx10Offset = DDS_MAGIC_SIZE + DDS_HEADER_SIZE;\n        const dx10Header = new Uint32Array(\n            data.buffer,\n            dx10Offset,\n            DDS_HEADER_DX10_SIZE / Uint32Array.BYTES_PER_ELEMENT);\n        const dxgiFormat = dx10Header[DDS_DX10_FIELDS.DXGI_FORMAT];\n        const resourceDimension = dx10Header[DDS_DX10_FIELDS.RESOURCE_DIMENSION];\n        const miscFlag = dx10Header[DDS_DX10_FIELDS.MISC_FLAG];\n        const arraySize = dx10Header[DDS_DX10_FIELDS.ARRAY_SIZE];\n\n        // Map dxgiFormat to PIXI.INTERNAL_FORMATS\n        const internalFormat = DXGI_TO_FORMAT[dxgiFormat];\n\n        if (internalFormat === undefined)\n        {\n            throw new Error(`DDSParser cannot parse texture data with DXGI format ${dxgiFormat}`);\n        }\n        if (miscFlag === DDS_RESOURCE_MISC_TEXTURECUBE)\n        {\n            // FIXME: Anybody excited about cubemap compressed textures?\n            throw new Error('DDSParser does not support cubemap textures');\n        }\n        if (resourceDimension === D3D10_RESOURCE_DIMENSION.DDS_DIMENSION_TEXTURE3D)\n        {\n            // FIXME: Anybody excited about 3D compressed textures?\n            throw new Error('DDSParser does not supported 3D texture data');\n        }\n\n        // Uint8Array buffers of image data, including all mipmap levels in each image\n        const imageBuffers = new Array<Uint8Array>();\n        const dataOffset = DDS_MAGIC_SIZE\n                + DDS_HEADER_SIZE\n                + DDS_HEADER_DX10_SIZE;\n\n        if (arraySize === 1)\n        {\n            // No need bothering with the imageSize calculation!\n            imageBuffers.push(new Uint8Array(arrayBuffer, dataOffset));\n        }\n        else\n        {\n            // Calculate imageSize for each texture, and then locate each image's texture data\n\n            const pixelSize = INTERNAL_FORMAT_TO_BYTES_PER_PIXEL[internalFormat];\n            let imageSize = 0;\n            let levelWidth = width;\n            let levelHeight = height;\n\n            for (let i = 0; i < mipmapCount; i++)\n            {\n                const alignedLevelWidth = Math.max(1, (levelWidth + 3) & ~3);\n                const alignedLevelHeight = Math.max(1, (levelHeight + 3) & ~3);\n\n                const levelSize = alignedLevelWidth * alignedLevelHeight * pixelSize;\n\n                imageSize += levelSize;\n\n                levelWidth = levelWidth >>> 1;\n                levelHeight = levelHeight >>> 1;\n            }\n\n            let imageOffset = dataOffset;\n\n            // NOTE: Cubemaps have 6-images per texture (but they aren't supported so ^_^)\n            for (let i = 0; i < arraySize; i++)\n            {\n                imageBuffers.push(new Uint8Array(arrayBuffer, imageOffset, imageSize));\n                imageOffset += imageSize;\n            }\n        }\n\n        // Uint8Array -> CompressedTextureResource, and we're done!\n        return imageBuffers.map((buffer) => new CompressedTextureResource(buffer, {\n            format: internalFormat,\n            width,\n            height,\n            levels: mipmapCount\n        }));\n    }\n    if (formatFlags & DDPF_RGB)\n    {\n        // FIXME: We might want to allow uncompressed *.dds files?\n        throw new Error('DDSParser does not support uncompressed texture data.');\n    }\n    if (formatFlags & DDPF_YUV)\n    {\n        // FIXME: Does anybody need this feature?\n        throw new Error('DDSParser does not supported YUV uncompressed texture data.');\n    }\n    if (formatFlags & DDPF_LUMINANCE)\n    {\n        // FIXME: Microsoft says older DDS filers use this feature! Probably not worth the effort!\n        throw new Error('DDSParser does not support single-channel (lumninance) texture data!');\n    }\n    if (formatFlags & DDPF_ALPHA)\n    {\n        // FIXME: I'm tired! See above =)\n        throw new Error('DDSParser does not support single-channel (alpha) texture data!');\n    }\n\n    throw new Error('DDSParser failed to load a texture file due to an unknown reason!');\n}\n\n"],"names":[],"mappings":"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4BAAA,CAAA,GAAA,EAAA,CAAA,GAAA,4BAAA,CAAA;AACA,EAAA,YAAA,CAAA,YAAA,CAAA,0BAAA,CAAA,GAAA,EAAA,CAAA,GAAA,0BAAA,CAAA;AACA,EAAA,YAAA,CAAA,YAAA,CAAA,uBAAA,CAAA,GAAA,EAAA,CAAA,GAAA,uBAAA,CAAA;AACA,EAAA,YAAA,CAAA,YAAA,CAAA,4BAAA,CAAA,GAAA,EAAA,CAAA,GAAA,4BAAA,CAAA;AACA,EAAA,YAAA,CAAA,YAAA,CAAA,0BAAA,CAAA,GAAA,EAAA,CAAA,GAAA,0BAAA,CAAA;AACA,EAAA,YAAA,CAAA,YAAA,CAAA,uBAAA,CAAA,GAAA,EAAA,CAAA,GAAA,uBAAA,CAAA;AACA,EAAA,YAAA,CAAA,YAAA,CAAA,4BAAA,CAAA,GAAA,EAAA,CAAA,GAAA,4BAAA,CAAA;AACA,EAAA,YAAA,CAAA,YAAA,CAAA,0BAAA,CAAA,GAAA,EAAA,CAAA,GAAA,0BAAA,CAAA;AACA,EAAA,YAAA,CAAA,YAAA,CAAA,uBAAA,CAAA,GAAA,EAAA,CAAA,GAAA,uBAAA,CAAA;AACA,EAAA,YAAA,CAAA,YAAA,CAAA,uBAAA,CAAA,GAAA,EAAA,CAAA,GAAA,uBAAA,CAAA;AACA,EAAA,YAAA,CAAA,YAAA,CAAA,0BAAA,CAAA,GAAA,EAAA,CAAA,GAAA,0BAAA,CAAA;AACA,EAAA,YAAA,CAAA,YAAA,CAAA,uBAAA,CAAA,GAAA,EAAA,CAAA,GAAA,uBAAA,CAAA;AACA,EAAA,YAAA,CAAA,YAAA,CAAA,uBAAA,CAAA,GAAA,EAAA,CAAA,GAAA,uBAAA,CAAA;AACA,EAAA,YAAA,CAAA,YAAA,CAAA,0BAAA,CAAA,GAAA,EAAA,CAAA,GAAA,0BAAA,CAAA;AACA,EAAA,YAAA,CAAA,YAAA,CAAA,4BAAA,CAAA,GAAA,EAAA,CAAA,GAAA,4BAAA,CAAA;AACA,EAAA,YAAA,CAAA,YAAA,CAAA,4BAAA,CAAA,GAAA,EAAA,CAAA,GAAA,4BAAA,CAAA;AACA,EAAA,YAAA,CAAA,YAAA,CAAA,4BAAA,CAAA,GAAA,EAAA,CAAA,GAAA,4BAAA,CAAA;AACA,E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"}