@carbonenginejs/runtime-resource 0.19.0 → 0.19.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -471,16 +471,42 @@ function readDdsToRgba(bytes, metadata) {
471
471
  throw error;
472
472
  }
473
473
  const subresource = buildDdsSubresources(bytes, metadata)[0];
474
- const source = bytes.subarray(metadata.dataOffset + subresource.offset, metadata.dataOffset + subresource.offset + subresource.byteLength);
475
- const rgba = metadata.pixelFormat.startsWith("bc1-") ? decodeBc1(source, metadata.width, metadata.height, subresource.rowPitch) : metadata.pixelFormat.startsWith("bc2-") ? decodeBc2(source, metadata.width, metadata.height, subresource.rowPitch) : metadata.pixelFormat.startsWith("bc3-") ? decodeBc3(source, metadata.width, metadata.height, subresource.rowPitch) : metadata.pixelFormat.startsWith("bc4-") ? decodeBc4(source, metadata.width, metadata.height, subresource.rowPitch, metadata.pixelFormat.endsWith("-snorm")) : metadata.pixelFormat.startsWith("bc5-") ? decodeBc5(source, metadata.width, metadata.height, subresource.rowPitch, metadata.pixelFormat.endsWith("-snorm")) : metadata.pixelFormat.startsWith("bc6h-") ? decodeBc6h(source, metadata.width, metadata.height, subresource.rowPitch, metadata.pixelFormat === "bc6h-rgb-float") : metadata.pixelFormat.startsWith("bc7-") ? decodeBc7(source, metadata.width, metadata.height, subresource.rowPitch) : isFloatPixelFormat(metadata.pixelFormat) ? decodeFloatUncompressed(source, metadata) : decodeUncompressed(source, metadata);
476
474
  const isFloat = isFloatPixelFormat(metadata.pixelFormat);
475
+ const depth = Math.max(subresource.depth ?? 1, 1);
476
+
477
+ // Every slice, not just the first.
478
+ //
479
+ // This decoded subresource[0] with the source's own width and height, which
480
+ // for a volume reads one slice out of a buffer holding all of them and
481
+ // returns it as though it were the image. A 128-cube came back as 65,536
482
+ // bytes with `depth` absent from the payload, so a caller could not even
483
+ // tell it had been handed 1/128th of what it asked for. Silent and
484
+ // plausible, which is worse than an error: nothing downstream can detect it.
485
+ //
486
+ // Slices are `slicePitch` apart and each decodes exactly like a 2D image of
487
+ // the same dimensions, so this is a loop rather than a second decoder.
488
+ const slices = [];
489
+ for (let z = 0; z < depth; z++) {
490
+ const start = metadata.dataOffset + subresource.offset + z * subresource.slicePitch;
491
+ const source = bytes.subarray(start, start + subresource.slicePitch);
492
+ slices.push(decodeDdsSlice(source, metadata, subresource));
493
+ }
494
+ const rgba = depth === 1 ? slices[0] : concatTypedArrays(slices);
495
+ const sliceBytes = metadata.width * metadata.height * (isFloat ? 16 : 4);
477
496
  return {
478
497
  payloadType: OUTPUT_RGBA,
479
498
  sourceFormat: "dds",
480
499
  width: metadata.width,
481
500
  height: metadata.height,
501
+ // Always present, and 1 for a flat image. An optional field that only
502
+ // appears for volumes is one every caller forgets to look for.
503
+ depth,
504
+ isVolume: depth > 1,
482
505
  pixelFormat: isFloat ? "rgba32float" : "rgba8unorm",
483
506
  strideBytes: metadata.width * (isFloat ? 16 : 4),
507
+ // What one z-slice occupies, so a caller can cut the buffer up without
508
+ // recomputing it from a pixel format it should not have to know about.
509
+ sliceBytes,
484
510
  origin: "top-left",
485
511
  colorSpace: isFloat ? "linear" : metadata.pixelFormat.endsWith("-srgb") ? "srgb" : "unknown",
486
512
  alphaMode: metadata.hasAlpha ? "straight" : "opaque",
@@ -488,6 +514,37 @@ function readDdsToRgba(bytes, metadata) {
488
514
  data: rgba
489
515
  };
490
516
  }
517
+
518
+ /** Decodes one 2D slice of a DDS subresource to RGBA, whatever its block format. */
519
+ function decodeDdsSlice(source, metadata, subresource) {
520
+ const {
521
+ width,
522
+ height
523
+ } = metadata;
524
+ const pitch = subresource.rowPitch;
525
+ const format = metadata.pixelFormat;
526
+ if (format.startsWith("bc1-")) return decodeBc1(source, width, height, pitch);
527
+ if (format.startsWith("bc2-")) return decodeBc2(source, width, height, pitch);
528
+ if (format.startsWith("bc3-")) return decodeBc3(source, width, height, pitch);
529
+ if (format.startsWith("bc4-")) return decodeBc4(source, width, height, pitch, format.endsWith("-snorm"));
530
+ if (format.startsWith("bc5-")) return decodeBc5(source, width, height, pitch, format.endsWith("-snorm"));
531
+ if (format.startsWith("bc6h-")) return decodeBc6h(source, width, height, pitch, format === "bc6h-rgb-float");
532
+ if (format.startsWith("bc7-")) return decodeBc7(source, width, height, pitch);
533
+ return isFloatPixelFormat(format) ? decodeFloatUncompressed(source, metadata) : decodeUncompressed(source, metadata);
534
+ }
535
+
536
+ /** Joins same-typed slice buffers into one, preserving the element type. */
537
+ function concatTypedArrays(parts) {
538
+ let total = 0;
539
+ for (const part of parts) total += part.length;
540
+ const out = new parts[0].constructor(total);
541
+ let at = 0;
542
+ for (const part of parts) {
543
+ out.set(part, at);
544
+ at += part.length;
545
+ }
546
+ return out;
547
+ }
491
548
  function buildDdsSubresources(bytes, metadata) {
492
549
  const subresources = [];
493
550
  let offset = 0;
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.js","sources":["../../../../../src/formats/dds/core/helpers.js"],"sourcesContent":["import { decodeBc6h } from \"./bc6h.js\";\nimport { decodeBc7 } from \"./bc7.js\";\n\nexport const OUTPUT_IMAGE = \"image\";\nexport const OUTPUT_TEXTURE = \"texture\";\nexport const OUTPUT_RGBA = \"rgba\";\nexport const OUTPUT_RAW = \"raw\";\nexport const OUTPUT_JSON = \"json\";\n\nexport const DEFAULT_VALUES = Object.freeze({\n emit: OUTPUT_RAW,\n inputType: \"\",\n source: \"\"\n});\n\nconst DDS_HEADER_SIZE = 124;\nconst DDS_PIXELFORMAT_OFFSET = 76;\nconst DDS_FOURCC = 0x00000004;\nconst DDS_RGB = 0x00000040;\nconst DDS_ALPHAPIXELS = 0x00000001;\nconst DDS_ALPHA = 0x00000002;\nconst DDS_LUMINANCE = 0x00020000;\nconst DDSCAPS2_CUBEMAP = 0x00000200;\nconst DDSCAPS2_VOLUME = 0x00200000;\n\nconst DDS_CUBE_FACE_FLAGS = Object.freeze([\n [ \"positive-x\", 0x00000400 ],\n [ \"negative-x\", 0x00000800 ],\n [ \"positive-y\", 0x00001000 ],\n [ \"negative-y\", 0x00002000 ],\n [ \"positive-z\", 0x00004000 ],\n [ \"negative-z\", 0x00008000 ]\n]);\n\nconst FOURCC_PIXEL_FORMATS = Object.freeze({\n DXT1: \"bc1-rgba-unorm\",\n DXT3: \"bc2-rgba-unorm\",\n DXT5: \"bc3-rgba-unorm\",\n ATI1: \"bc4-r-unorm\",\n BC4U: \"bc4-r-unorm\",\n BC4S: \"bc4-r-snorm\",\n ATI2: \"bc5-rg-unorm\",\n BC5U: \"bc5-rg-unorm\",\n BC5S: \"bc5-rg-snorm\"\n});\n\nconst DXGI_PIXEL_FORMATS = Object.freeze({\n 2: \"rgba32float\",\n 6: \"rgb32float\",\n 10: \"rgba16float\",\n 16: \"rg32float\",\n 34: \"rg16float\",\n 41: \"r32float\",\n 54: \"r16float\",\n 28: \"rgba8unorm\",\n 29: \"rgba8unorm-srgb\",\n 49: \"rg8unorm\",\n 61: \"r8unorm\",\n 71: \"bc1-rgba-unorm\",\n 72: \"bc1-rgba-unorm-srgb\",\n 74: \"bc2-rgba-unorm\",\n 75: \"bc2-rgba-unorm-srgb\",\n 77: \"bc3-rgba-unorm\",\n 78: \"bc3-rgba-unorm-srgb\",\n 80: \"bc4-r-unorm\",\n 81: \"bc4-r-snorm\",\n 83: \"bc5-rg-unorm\",\n 84: \"bc5-rg-snorm\",\n 87: \"bgra8unorm\",\n 88: \"bgrx8unorm\",\n 91: \"bgra8unorm-srgb\",\n 93: \"bgrx8unorm-srgb\",\n 95: \"bc6h-rgb-ufloat\",\n 96: \"bc6h-rgb-float\",\n 98: \"bc7-rgba-unorm\",\n 99: \"bc7-rgba-unorm-srgb\"\n});\n\nconst COMPRESSED_PIXEL_FORMATS = new Set([\n \"bc1-rgba-unorm\",\n \"bc1-rgba-unorm-srgb\",\n \"bc2-rgba-unorm\",\n \"bc2-rgba-unorm-srgb\",\n \"bc3-rgba-unorm\",\n \"bc3-rgba-unorm-srgb\",\n \"bc4-r-unorm\",\n \"bc4-r-snorm\",\n \"bc5-rg-unorm\",\n \"bc5-rg-snorm\",\n \"bc6h-rgb-ufloat\",\n \"bc6h-rgb-float\",\n \"bc7-rgba-unorm\",\n \"bc7-rgba-unorm-srgb\"\n]);\n\nconst DEBUG_OUTPUTS = Object.freeze({\n png: \"pngJson\",\n jpeg: \"jpegJson\",\n jpg: \"jpegJson\",\n tga: \"tgaJson\",\n dds: \"ddsJson\"\n});\n\n/**\n * Normalizes reader options against their supported defaults for the DDS format\n * reader.\n */\nexport function normalizeValues(base = DEFAULT_VALUES, options = {}, readerName = \"CjsImageFormat\")\n{\n const values = { ...DEFAULT_VALUES, ...(base || {}), ...(options || {}) };\n values.inputType = normalizeInputType(values.inputType);\n values.emit = normalizeEmit(values.emit, values.inputType, readerName);\n return values;\n}\n\n/** Normalizes the requested input representation for the DDS format reader. */\nexport function normalizeInputType(inputType)\n{\n if (!inputType) return \"\";\n const value = String(inputType).replace(/^\\./u, \"\").toLowerCase();\n return value === \"jpg\" ? \"jpeg\" : value;\n}\n\n/** Normalizes the requested output representation for the DDS format reader. */\nexport function normalizeEmit(emit, inputType, readerName)\n{\n if (emit === undefined || emit === null) return OUTPUT_RAW;\n if (emit === OUTPUT_JSON && inputType) return DEBUG_OUTPUTS[inputType] || OUTPUT_JSON;\n if ([ OUTPUT_IMAGE, OUTPUT_TEXTURE, OUTPUT_RGBA, OUTPUT_RAW, OUTPUT_JSON ].includes(emit)) return emit;\n if (Object.values(DEBUG_OUTPUTS).includes(emit)) return emit;\n throw new TypeError(`${readerName}: unknown emit value ${JSON.stringify(emit)}`);\n}\n\n/** Returns a byte view over the supplied binary input for the DDS format reader. */\nexport function toBytes(input)\n{\n if (input instanceof Uint8Array) return input;\n if (input instanceof ArrayBuffer) return new Uint8Array(input);\n if (ArrayBuffer.isView(input)) return new Uint8Array(input.buffer, input.byteOffset, input.byteLength);\n throw new TypeError(\"Image input must be Uint8Array, ArrayBuffer, or DataView\");\n}\n\n/** Inspects input using normalized format options for the DDS format reader. */\nexport function inspectWithValues(input, values = DEFAULT_VALUES, expectedType = \"\")\n{\n const bytes = toBytes(input);\n const detected = inspectBytes(bytes);\n const sourceFormat = expectedType || values.inputType || detected.sourceFormat;\n\n if (expectedType && detected.sourceFormat && detected.sourceFormat !== expectedType)\n {\n throw new TypeError(`CjsFormat${capitalize(expectedType)}: expected ${expectedType}, got ${detected.sourceFormat}`);\n }\n\n return {\n payloadType: sourceFormat === \"dds\" ? \"texture\" : \"image\",\n mediaTypes: sourceFormat === \"dds\" ? [ \"texture\", \"image\" ] : [ \"image\" ],\n sourceFormat,\n byteLength: bytes.byteLength,\n ...detected\n };\n}\n\n/**\n * Reports whether input is supported under normalized format options for the DDS\n * format reader.\n */\nexport function isSupportedWithValues(input, values = DEFAULT_VALUES, expectedType = \"\")\n{\n try\n {\n const metadata = inspectWithValues(input, values, expectedType);\n const hasCompleteTextureData = metadata.isDataComplete !== false;\n const canEmitTexture = metadata.sourceFormat === \"dds\" && metadata.dataOffset > 0 && !!metadata.pixelFormat && hasCompleteTextureData;\n const canEmitRgba = canDecodeDdsToRgba(metadata) && hasCompleteTextureData;\n const textureUnsupportedReason = !metadata.pixelFormat\n ? \"DDS texture format is not recognized yet.\"\n : !hasCompleteTextureData\n ? `DDS texture data is truncated: expected ${metadata.expectedDataBytes} bytes, got ${metadata.dataBytes}.`\n : \"\";\n const variants = metadata.sourceFormat === \"dds\"\n ? [\n {\n kind: \"compressed\",\n payloadType: \"texture\",\n codec: metadata.pixelFormat || metadata.textureFormat || \"unknown\",\n supported: canEmitTexture && metadata.isCompressed,\n nativeOnly: !!metadata.nativeTextureOnly,\n reason: metadata.isCompressed ? textureUnsupportedReason : \"DDS is not block-compressed.\"\n },\n {\n kind: \"texture\",\n payloadType: \"texture\",\n codec: metadata.pixelFormat || metadata.textureFormat || \"unknown\",\n supported: canEmitTexture,\n reason: canEmitTexture ? \"\" : textureUnsupportedReason\n },\n {\n kind: \"rgba\",\n payloadType: \"rgba\",\n codec: canEmitRgba\n ? (isFloatPixelFormat(metadata.pixelFormat) ? \"rgba32float\" : \"rgba8unorm\")\n : \"rgba8unorm\",\n supported: canEmitRgba,\n reason: canEmitRgba\n ? \"\"\n : textureUnsupportedReason || (metadata.nativeTextureOnly\n ? `${metadata.pixelFormat} is available as a native compressed texture only; register a software decoder or alternate representation for RGBA fallback.`\n : \"DDS RGBA decode is not implemented for this pixel format.\")\n },\n { kind: \"raw\", payloadType: \"raw\", codec: \"dds\", supported: true }\n ]\n : [\n { kind: \"rgba\", codec: \"rgba8\", supported: false, reason: `${metadata.sourceFormat.toUpperCase()} RGBA decode is not implemented yet.` }\n ];\n const preferredVariant = variants.find(v => v.supported && v.kind !== \"raw\") || variants.find(v => v.supported);\n\n return {\n format: metadata.sourceFormat,\n source: values.source || \"buffer\",\n supported: metadata.sourceFormat ? (variants.some(v => v.supported && v.kind !== \"raw\") ? \"full\" : (variants.some(v => v.supported) ? \"partial\" : \"none\")) : \"none\",\n confidence: metadata.sourceFormat ? 1 : 0,\n preferred: preferredVariant?.codec || \"\",\n reason: metadata.sourceFormat ? \"Container/header recognized.\" : \"Unrecognized image format.\",\n metadata,\n variants,\n warnings: [],\n errors: []\n };\n }\n catch (error)\n {\n return {\n format: expectedType || values.inputType || \"\",\n source: values.source || \"buffer\",\n supported: \"none\",\n confidence: 0,\n preferred: \"\",\n reason: error.message,\n metadata: null,\n variants: [],\n warnings: [],\n errors: [ error.message ]\n };\n }\n}\n\n/** Reads input using normalized format options for the DDS format reader. */\nexport function readWithValues(input, values = DEFAULT_VALUES, expectedType = \"\")\n{\n const bytes = toBytes(input);\n const metadata = inspectWithValues(bytes, values, expectedType);\n\n if (values.emit === OUTPUT_RAW)\n {\n return {\n payloadType: \"raw\",\n sourceFormat: metadata.sourceFormat,\n metadata,\n bytes\n };\n }\n\n if (values.emit === OUTPUT_JSON || values.emit === DEBUG_OUTPUTS[metadata.sourceFormat])\n {\n return metadata;\n }\n\n if (values.emit === OUTPUT_TEXTURE && metadata.sourceFormat === \"dds\")\n {\n return readDdsTexture(bytes, metadata);\n }\n\n if ((values.emit === OUTPUT_RGBA || values.emit === OUTPUT_IMAGE) && metadata.sourceFormat === \"dds\")\n {\n return readDdsToRgba(bytes, metadata);\n }\n\n const error = new Error(`${metadata.sourceFormat}: emit \"${values.emit}\" is not implemented yet`);\n error.code = \"CJS_FORMAT_OUTPUT_NOT_IMPLEMENTED\";\n error.sourceFormat = metadata.sourceFormat;\n error.emit = values.emit;\n throw error;\n}\n\n/** Converts a parsed payload into a JSON-safe value for the DDS format reader. */\nexport function toJsonValue(value)\n{\n if (value instanceof Uint8Array)\n {\n return { byteLength: value.byteLength };\n }\n if (Array.isArray(value)) return value.map(toJsonValue);\n if (value && typeof value === \"object\")\n {\n const output = {};\n for (const [ key, entry ] of Object.entries(value)) output[key] = toJsonValue(entry);\n return output;\n }\n return value;\n}\n\n/**\n * Inspects the supplied bytes without decoding their payload for the DDS format\n * reader.\n */\nexport function inspectBytes(bytes)\n{\n if (isPNG(bytes)) return inspectPNG(bytes);\n if (isJPEG(bytes)) return inspectJPEG(bytes);\n if (isDDS(bytes)) return inspectDDS(bytes);\n if (isTGA(bytes)) return inspectTGA(bytes);\n return { sourceFormat: \"\", width: 0, height: 0 };\n}\n\n/**\n * Reports whether the supplied bytes begin with a PNG signature for the DDS\n * format reader.\n */\nexport function isPNG(bytes)\n{\n return bytes.byteLength >= 24 &&\n bytes[0] === 0x89 && bytes[1] === 0x50 && bytes[2] === 0x4e && bytes[3] === 0x47 &&\n bytes[4] === 0x0d && bytes[5] === 0x0a && bytes[6] === 0x1a && bytes[7] === 0x0a;\n}\n\n/**\n * Reports whether the supplied bytes begin with a JPEG signature for the DDS\n * format reader.\n */\nexport function isJPEG(bytes)\n{\n return bytes.byteLength >= 4 && bytes[0] === 0xff && bytes[1] === 0xd8;\n}\n\n/**\n * Reports whether the supplied bytes begin with a DDS signature for the DDS\n * format reader.\n */\nexport function isDDS(bytes)\n{\n return bytes.byteLength >= DDS_HEADER_SIZE + 4 &&\n bytes[0] === 0x44 && bytes[1] === 0x44 && bytes[2] === 0x53 && bytes[3] === 0x20 &&\n readU32LE(bytes, 4) === DDS_HEADER_SIZE;\n}\n\n/**\n * Reports whether the supplied bytes have a supported TGA header for the DDS\n * format reader.\n */\nexport function isTGA(bytes)\n{\n if (bytes.byteLength < 18) return false;\n const imageType = bytes[2], width = readU16LE(bytes, 12), height = readU16LE(bytes, 14), bpp = bytes[16];\n return width > 0 && height > 0 && [ 1, 2, 3, 9, 10, 11 ].includes(imageType) && [ 8, 16, 24, 32 ].includes(bpp);\n}\n\nfunction inspectPNG(bytes)\n{\n const colorType = bytes[25], bitDepth = bytes[24];\n return {\n sourceFormat: \"png\",\n width: readU32BE(bytes, 16),\n height: readU32BE(bytes, 20),\n bitDepth,\n colorType,\n channels: pngChannels(colorType),\n pixelFormat: `png-${bitDepth}-${colorType}`,\n isCompressed: false\n };\n}\n\nfunction inspectJPEG(bytes)\n{\n let offset = 2;\n while (offset + 9 < bytes.byteLength)\n {\n if (bytes[offset] !== 0xff)\n {\n offset++;\n continue;\n }\n const marker = bytes[offset + 1], length = readU16BE(bytes, offset + 2);\n if ([ 0xc0, 0xc1, 0xc2, 0xc3 ].includes(marker))\n {\n return {\n sourceFormat: \"jpeg\",\n width: readU16BE(bytes, offset + 7),\n height: readU16BE(bytes, offset + 5),\n channels: bytes[offset + 9],\n marker,\n pixelFormat: \"jpeg-ycbcr\",\n isCompressed: true\n };\n }\n offset += Math.max(length + 2, 2);\n }\n return { sourceFormat: \"jpeg\", width: 0, height: 0, channels: 0, pixelFormat: \"jpeg\", isCompressed: true };\n}\n\nfunction inspectDDS(bytes)\n{\n const headerSize = readU32LE(bytes, 4);\n const pfOffset = DDS_PIXELFORMAT_OFFSET;\n const pfFlags = readU32LE(bytes, pfOffset + 4);\n const fourCcCode = readU32LE(bytes, pfOffset + 8);\n const fourCc = String.fromCharCode(bytes[84], bytes[85], bytes[86], bytes[87]).replace(/\\0+$/u, \"\");\n const rgbBitCount = readU32LE(bytes, pfOffset + 12);\n const rBitMask = readU32LE(bytes, pfOffset + 16);\n const gBitMask = readU32LE(bytes, pfOffset + 20);\n const bBitMask = readU32LE(bytes, pfOffset + 24);\n const aBitMask = readU32LE(bytes, pfOffset + 28);\n const caps2 = readU32LE(bytes, 112);\n const isCube = !!(caps2 & DDSCAPS2_CUBEMAP);\n const isVolume = !!(caps2 & DDSCAPS2_VOLUME);\n const cubeFaces = getDdsCubeFaces(caps2);\n const hasDx10 = fourCc === \"DX10\" && bytes.byteLength >= 148;\n const dxgiFormat = hasDx10 ? readU32LE(bytes, 128) : 0;\n const resourceDimension = hasDx10 ? readU32LE(bytes, 132) : 0;\n const arraySize = hasDx10 ? readU32LE(bytes, 140) : 1;\n const dataOffset = hasDx10 ? 148 : 128;\n const pixelFormat = getDdsPixelFormat({ pfFlags, fourCc, fourCcCode, rgbBitCount, rBitMask, gBitMask, bBitMask, aBitMask, dxgiFormat });\n const width = readU32LE(bytes, 16);\n const height = readU32LE(bytes, 12);\n const depth = readU32LE(bytes, 24);\n const mipCount = Math.max(readU32LE(bytes, 28), 1);\n const dataBytes = Math.max(bytes.byteLength - dataOffset, 0);\n const expectedDataBytes = pixelFormat ? getDdsExpectedDataBytes({\n pixelFormat,\n width,\n height,\n depth,\n mipCount,\n arraySize,\n isCube,\n isVolume\n }) : null;\n\n return {\n sourceFormat: \"dds\",\n headerSize,\n width,\n height,\n depth,\n mipCount,\n pitchOrLinearSize: readU32LE(bytes, 20),\n pfFlags,\n fourCc,\n fourCcCode,\n rgbBitCount,\n rBitMask,\n gBitMask,\n bBitMask,\n aBitMask,\n caps2,\n hasDx10,\n dxgiFormat,\n resourceDimension,\n arraySize,\n dataOffset,\n dataBytes,\n expectedDataBytes,\n isDataComplete: expectedDataBytes !== null && dataBytes >= expectedDataBytes,\n missingDataBytes: expectedDataBytes === null ? null : Math.max(expectedDataBytes - dataBytes, 0),\n extraDataBytes: expectedDataBytes === null ? null : Math.max(dataBytes - expectedDataBytes, 0),\n faces: isCube ? 6 : 1,\n cubeFaces,\n isCubeComplete: isCube && cubeFaces.length === 6,\n isCube,\n isVolume,\n dimension: isVolume ? \"3d\" : (isCube ? \"cube\" : \"2d\"),\n pixelFormat,\n textureFormat: pixelFormat || fourCc || \"dds-legacy\",\n isCompressed: COMPRESSED_PIXEL_FORMATS.has(pixelFormat),\n nativeTextureOnly: COMPRESSED_PIXEL_FORMATS.has(pixelFormat) && !canDecodeDdsToRgba({ pixelFormat }),\n hasAlpha: !!(pfFlags & DDS_ALPHAPIXELS) || /rgba|bgra/u.test(pixelFormat),\n hasMipMaps: readU32LE(bytes, 28) > 1\n };\n}\n\nfunction readDdsTexture(bytes, metadata)\n{\n if (!metadata.pixelFormat)\n {\n const error = new Error(\"dds: texture format is not recognized yet\");\n error.code = \"CJS_FORMAT_OUTPUT_NOT_SUPPORTED\";\n error.sourceFormat = metadata.sourceFormat;\n throw error;\n }\n\n const subresources = buildDdsSubresources(bytes, metadata);\n return {\n payloadType: OUTPUT_TEXTURE,\n sourceFormat: \"dds\",\n width: metadata.width,\n height: metadata.height,\n depth: metadata.depth,\n faces: metadata.faces,\n cubeFaces: metadata.cubeFaces,\n isCubeComplete: metadata.isCubeComplete,\n dimension: metadata.dimension,\n mipCount: metadata.mipCount,\n arraySize: metadata.arraySize,\n pixelFormat: metadata.pixelFormat,\n isCompressed: metadata.isCompressed,\n dataBytes: metadata.dataBytes,\n expectedDataBytes: metadata.expectedDataBytes,\n isDataComplete: metadata.isDataComplete,\n missingDataBytes: metadata.missingDataBytes,\n extraDataBytes: metadata.extraDataBytes,\n subresources,\n metadata,\n data: bytes.subarray(metadata.dataOffset, metadata.dataOffset + subresources.reduce((sum, entry) => sum + entry.byteLength, 0))\n };\n}\n\nfunction canDecodeDdsToRgba(metadata)\n{\n return [\n \"rgba32float\",\n \"rgb32float\",\n \"rgba16float\",\n \"rg32float\",\n \"rg16float\",\n \"r32float\",\n \"r16float\",\n \"rgba8unorm\",\n \"rgba8unorm-srgb\",\n \"bgra8unorm\",\n \"bgra8unorm-srgb\",\n \"bgrx8unorm\",\n \"bgrx8unorm-srgb\",\n \"rgbx8unorm\",\n \"bgr8unorm\",\n \"l8unorm\",\n \"l8a8unorm\",\n \"a8unorm\",\n \"rg8unorm\",\n \"r8unorm\",\n \"bc1-rgba-unorm\",\n \"bc1-rgba-unorm-srgb\",\n \"bc2-rgba-unorm\",\n \"bc2-rgba-unorm-srgb\",\n \"bc3-rgba-unorm\",\n \"bc3-rgba-unorm-srgb\",\n \"bc4-r-unorm\",\n \"bc4-r-snorm\",\n \"bc5-rg-unorm\",\n \"bc5-rg-snorm\",\n \"bc6h-rgb-ufloat\",\n \"bc6h-rgb-float\",\n \"bc7-rgba-unorm\",\n \"bc7-rgba-unorm-srgb\"\n ].includes(metadata.pixelFormat);\n}\n\nfunction readDdsToRgba(bytes, metadata)\n{\n if (!canDecodeDdsToRgba(metadata))\n {\n const error = new Error(`dds: RGBA decode is not implemented for ${metadata.pixelFormat || \"unknown\"}`);\n error.code = \"CJS_FORMAT_OUTPUT_NOT_SUPPORTED\";\n error.sourceFormat = metadata.sourceFormat;\n throw error;\n }\n\n const subresource = buildDdsSubresources(bytes, metadata)[0];\n const source = bytes.subarray(metadata.dataOffset + subresource.offset, metadata.dataOffset + subresource.offset + subresource.byteLength);\n const rgba = metadata.pixelFormat.startsWith(\"bc1-\")\n ? decodeBc1(source, metadata.width, metadata.height, subresource.rowPitch)\n : metadata.pixelFormat.startsWith(\"bc2-\")\n ? decodeBc2(source, metadata.width, metadata.height, subresource.rowPitch)\n : metadata.pixelFormat.startsWith(\"bc3-\")\n ? decodeBc3(source, metadata.width, metadata.height, subresource.rowPitch)\n : metadata.pixelFormat.startsWith(\"bc4-\")\n ? decodeBc4(source, metadata.width, metadata.height, subresource.rowPitch, metadata.pixelFormat.endsWith(\"-snorm\"))\n : metadata.pixelFormat.startsWith(\"bc5-\")\n ? decodeBc5(source, metadata.width, metadata.height, subresource.rowPitch, metadata.pixelFormat.endsWith(\"-snorm\"))\n : metadata.pixelFormat.startsWith(\"bc6h-\")\n ? decodeBc6h(source, metadata.width, metadata.height, subresource.rowPitch, metadata.pixelFormat === \"bc6h-rgb-float\")\n : metadata.pixelFormat.startsWith(\"bc7-\")\n ? decodeBc7(source, metadata.width, metadata.height, subresource.rowPitch)\n : isFloatPixelFormat(metadata.pixelFormat)\n ? decodeFloatUncompressed(source, metadata)\n : decodeUncompressed(source, metadata);\n\n const isFloat = isFloatPixelFormat(metadata.pixelFormat);\n\n return {\n payloadType: OUTPUT_RGBA,\n sourceFormat: \"dds\",\n width: metadata.width,\n height: metadata.height,\n pixelFormat: isFloat ? \"rgba32float\" : \"rgba8unorm\",\n strideBytes: metadata.width * (isFloat ? 16 : 4),\n origin: \"top-left\",\n colorSpace: isFloat ? \"linear\" : (metadata.pixelFormat.endsWith(\"-srgb\") ? \"srgb\" : \"unknown\"),\n alphaMode: metadata.hasAlpha ? \"straight\" : \"opaque\",\n metadata,\n data: rgba\n };\n}\n\nfunction buildDdsSubresources(bytes, metadata)\n{\n const subresources = [];\n let offset = 0;\n const layers = Math.max(metadata.arraySize, 1) * (metadata.isCube ? 6 : 1);\n\n for (let layer = 0; layer < layers; layer++)\n {\n const arrayIndex = metadata.isCube ? Math.floor(layer / 6) : layer;\n const face = metadata.isCube ? layer % 6 : 0;\n for (let mip = 0; mip < metadata.mipCount; mip++)\n {\n const width = Math.max(metadata.width >> mip, 1);\n const height = Math.max(metadata.height >> mip, 1);\n const depth = metadata.isVolume ? Math.max(metadata.depth >> mip, 1) : 1;\n const layout = getDdsLevelLayout(metadata.pixelFormat, width, height, depth);\n if (offset + layout.byteLength > bytes.byteLength - metadata.dataOffset)\n {\n const error = new Error(\"dds: texture data is truncated\");\n error.code = \"CJS_FORMAT_TRUNCATED\";\n error.sourceFormat = metadata.sourceFormat;\n error.expectedDataBytes = metadata.expectedDataBytes;\n error.dataBytes = metadata.dataBytes;\n error.missingDataBytes = metadata.missingDataBytes;\n throw error;\n }\n subresources.push({\n mip,\n layer,\n arrayIndex,\n face,\n offset,\n byteLength: layout.byteLength,\n rowPitch: layout.rowPitch,\n slicePitch: layout.slicePitch,\n width,\n height,\n depth\n });\n offset += layout.byteLength;\n }\n }\n\n return subresources;\n}\n\nfunction getDdsExpectedDataBytes(metadata)\n{\n let total = 0;\n const layers = Math.max(metadata.arraySize, 1) * (metadata.isCube ? 6 : 1);\n\n for (let layer = 0; layer < layers; layer++)\n {\n for (let mip = 0; mip < metadata.mipCount; mip++)\n {\n const width = Math.max(metadata.width >> mip, 1);\n const height = Math.max(metadata.height >> mip, 1);\n const depth = metadata.isVolume ? Math.max(metadata.depth >> mip, 1) : 1;\n total += getDdsLevelLayout(metadata.pixelFormat, width, height, depth).byteLength;\n }\n }\n\n return total;\n}\n\nfunction getDdsCubeFaces(caps2)\n{\n if (!(caps2 & DDSCAPS2_CUBEMAP))\n {\n return [];\n }\n return DDS_CUBE_FACE_FLAGS\n .filter((entry) => !!(caps2 & entry[1]))\n .map((entry) => entry[0]);\n}\n\nfunction getDdsLevelLayout(pixelFormat, width, height, depth)\n{\n const blockBytes = pixelFormat.startsWith(\"bc1-\") || pixelFormat.startsWith(\"bc4-\") ? 8 :\n pixelFormat.startsWith(\"bc\") ? 16 : 0;\n if (blockBytes)\n {\n const blocksWide = Math.max(Math.ceil(width / 4), 1);\n const blocksHigh = Math.max(Math.ceil(height / 4), 1);\n const rowPitch = blocksWide * blockBytes;\n const slicePitch = rowPitch * blocksHigh;\n return { rowPitch, slicePitch, byteLength: slicePitch * depth };\n }\n\n const bytesPerPixel = {\n \"rgba32float\": 16,\n \"rgb32float\": 12,\n \"rgba16float\": 8,\n \"rg32float\": 8,\n \"rg16float\": 4,\n \"r32float\": 4,\n \"r16float\": 2,\n \"rgba8unorm\": 4,\n \"rgba8unorm-srgb\": 4,\n \"bgra8unorm\": 4,\n \"bgra8unorm-srgb\": 4,\n \"bgrx8unorm\": 4,\n \"bgrx8unorm-srgb\": 4,\n \"rgbx8unorm\": 4,\n \"bgr8unorm\": 3,\n \"l8a8unorm\": 2,\n \"l8unorm\": 1,\n \"a8unorm\": 1,\n \"rg8unorm\": 2,\n \"r8unorm\": 1\n }[pixelFormat];\n if (!bytesPerPixel)\n {\n const error = new Error(`dds: cannot calculate subresource layout for ${pixelFormat || \"unknown\"}`);\n error.code = \"CJS_FORMAT_OUTPUT_NOT_SUPPORTED\";\n throw error;\n }\n const rowPitch = width * bytesPerPixel;\n const slicePitch = rowPitch * height;\n return { rowPitch, slicePitch, byteLength: slicePitch * depth };\n}\n\nfunction decodeUncompressed(source, metadata)\n{\n const rgba = new Uint8Array(metadata.width * metadata.height * 4);\n const bytesPerPixel = metadata.pixelFormat === \"bgr8unorm\" ? 3 :\n metadata.pixelFormat === \"rg8unorm\" ? 2 :\n metadata.pixelFormat === \"r8unorm\" ? 1 : 4;\n for (let pixel = 0; pixel < metadata.width * metadata.height; pixel++)\n {\n const sourceOffset = pixel * bytesPerPixel;\n const outputOffset = pixel * 4;\n if (metadata.pixelFormat.startsWith(\"bgra\") || metadata.pixelFormat.startsWith(\"bgrx\"))\n {\n rgba[outputOffset] = source[sourceOffset + 2];\n rgba[outputOffset + 1] = source[sourceOffset + 1];\n rgba[outputOffset + 2] = source[sourceOffset];\n rgba[outputOffset + 3] = metadata.pixelFormat.startsWith(\"bgrx\") ? 255 : source[sourceOffset + 3];\n }\n else if (metadata.pixelFormat === \"bgr8unorm\")\n {\n rgba[outputOffset] = source[sourceOffset + 2];\n rgba[outputOffset + 1] = source[sourceOffset + 1];\n rgba[outputOffset + 2] = source[sourceOffset];\n rgba[outputOffset + 3] = 255;\n }\n else if (metadata.pixelFormat.startsWith(\"rgbx\"))\n {\n // Fourth byte is padding, not alpha.\n rgba[outputOffset] = source[sourceOffset];\n rgba[outputOffset + 1] = source[sourceOffset + 1];\n rgba[outputOffset + 2] = source[sourceOffset + 2];\n rgba[outputOffset + 3] = 255;\n }\n else if (metadata.pixelFormat === \"l8unorm\" || metadata.pixelFormat === \"l8a8unorm\")\n {\n // Luminance replicates its one channel across RGB.\n const luminance = source[sourceOffset];\n rgba[outputOffset] = luminance;\n rgba[outputOffset + 1] = luminance;\n rgba[outputOffset + 2] = luminance;\n rgba[outputOffset + 3] = metadata.pixelFormat === \"l8a8unorm\" ? source[sourceOffset + 1] : 255;\n }\n else if (metadata.pixelFormat === \"a8unorm\")\n {\n rgba[outputOffset] = 0;\n rgba[outputOffset + 1] = 0;\n rgba[outputOffset + 2] = 0;\n rgba[outputOffset + 3] = source[sourceOffset];\n }\n else if (metadata.pixelFormat === \"rg8unorm\")\n {\n rgba[outputOffset] = source[sourceOffset];\n rgba[outputOffset + 1] = source[sourceOffset + 1];\n rgba[outputOffset + 2] = 0;\n rgba[outputOffset + 3] = 255;\n }\n else\n {\n rgba[outputOffset] = source[sourceOffset];\n rgba[outputOffset + 1] = bytesPerPixel > 1 ? source[sourceOffset + 1] : source[sourceOffset];\n rgba[outputOffset + 2] = bytesPerPixel > 2 ? source[sourceOffset + 2] : source[sourceOffset];\n rgba[outputOffset + 3] = bytesPerPixel > 3 ? source[sourceOffset + 3] : 255;\n }\n }\n return rgba;\n}\n\nfunction decodeFloatUncompressed(source, metadata)\n{\n const rgba = new Float32Array(metadata.width * metadata.height * 4);\n const view = new DataView(source.buffer, source.byteOffset, source.byteLength);\n const bytesPerPixel = {\n \"rgba32float\": 16,\n \"rgb32float\": 12,\n \"rgba16float\": 8,\n \"rg32float\": 8,\n \"rg16float\": 4,\n \"r32float\": 4,\n \"r16float\": 2\n }[metadata.pixelFormat];\n\n for (let pixel = 0; pixel < metadata.width * metadata.height; pixel++)\n {\n const sourceOffset = pixel * bytesPerPixel;\n const outputOffset = pixel * 4;\n let red, green, blue, alpha;\n if (metadata.pixelFormat === \"rgba32float\")\n {\n red = view.getFloat32(sourceOffset, true);\n green = view.getFloat32(sourceOffset + 4, true);\n blue = view.getFloat32(sourceOffset + 8, true);\n alpha = view.getFloat32(sourceOffset + 12, true);\n }\n else if (metadata.pixelFormat === \"rgb32float\")\n {\n red = view.getFloat32(sourceOffset, true);\n green = view.getFloat32(sourceOffset + 4, true);\n blue = view.getFloat32(sourceOffset + 8, true);\n alpha = 1;\n }\n else if (metadata.pixelFormat === \"rgba16float\")\n {\n red = halfToFloat(view.getUint16(sourceOffset, true));\n green = halfToFloat(view.getUint16(sourceOffset + 2, true));\n blue = halfToFloat(view.getUint16(sourceOffset + 4, true));\n alpha = halfToFloat(view.getUint16(sourceOffset + 6, true));\n }\n else if (metadata.pixelFormat === \"rg32float\")\n {\n red = view.getFloat32(sourceOffset, true);\n green = view.getFloat32(sourceOffset + 4, true);\n blue = 0;\n alpha = 1;\n }\n else if (metadata.pixelFormat === \"rg16float\")\n {\n red = halfToFloat(view.getUint16(sourceOffset, true));\n green = halfToFloat(view.getUint16(sourceOffset + 2, true));\n blue = 0;\n alpha = 1;\n }\n else\n {\n red = metadata.pixelFormat === \"r16float\"\n ? halfToFloat(view.getUint16(sourceOffset, true))\n : view.getFloat32(sourceOffset, true);\n green = red;\n blue = red;\n alpha = 1;\n }\n rgba[outputOffset] = red;\n rgba[outputOffset + 1] = green;\n rgba[outputOffset + 2] = blue;\n rgba[outputOffset + 3] = alpha;\n }\n return rgba;\n}\n\nfunction isFloatPixelFormat(pixelFormat)\n{\n return typeof pixelFormat === \"string\" && (pixelFormat.startsWith(\"bc6h-\") ||\n [ \"rgba32float\", \"rgb32float\", \"rgba16float\", \"rg32float\", \"rg16float\", \"r32float\",\n \"r16float\" ].includes(pixelFormat));\n}\n\nfunction halfToFloat(value)\n{\n const sign = (value & 0x8000) ? -1 : 1;\n const exponent = (value >>> 10) & 0x1f;\n const mantissa = value & 0x03ff;\n if (exponent === 0)\n {\n return sign * Math.pow(2, -14) * (mantissa / 1024);\n }\n if (exponent === 0x1f)\n {\n return mantissa === 0 ? sign * Infinity : NaN;\n }\n return sign * Math.pow(2, exponent - 15) * (1 + mantissa / 1024);\n}\n\nfunction decodeBc1(source, width, height, rowPitch)\n{\n const rgba = new Uint8Array(width * height * 4);\n for (let blockY = 0; blockY < Math.ceil(height / 4); blockY++)\n {\n for (let blockX = 0; blockX < Math.ceil(width / 4); blockX++)\n {\n const blockOffset = blockY * rowPitch + blockX * 8;\n const c0 = source[blockOffset] | (source[blockOffset + 1] << 8);\n const c1 = source[blockOffset + 2] | (source[blockOffset + 3] << 8);\n const colors = decodeBc1Colors(c0, c1);\n const indices = source[blockOffset + 4] |\n (source[blockOffset + 5] << 8) |\n (source[blockOffset + 6] << 16) |\n (source[blockOffset + 7] << 24);\n for (let y = 0; y < 4; y++)\n {\n for (let x = 0; x < 4; x++)\n {\n const outputX = blockX * 4 + x;\n const outputY = blockY * 4 + y;\n if (outputX >= width || outputY >= height) continue;\n const color = colors[(indices >>> (2 * (y * 4 + x))) & 3];\n rgba.set(color, (outputY * width + outputX) * 4);\n }\n }\n }\n }\n return rgba;\n}\n\nfunction decodeBc2(source, width, height, rowPitch)\n{\n return decodeBcAlphaColor(source, width, height, rowPitch, (blockOffset, x, y) =>\n {\n const alphaNibble = (source[blockOffset + y * 2 + Math.floor(x / 2)] >>> ((x % 2) * 4)) & 0x0f;\n return alphaNibble * 17;\n }, 8);\n}\n\nfunction decodeBc3(source, width, height, rowPitch)\n{\n return decodeBcAlphaColor(source, width, height, rowPitch, (blockOffset, x, y) =>\n {\n const alpha0 = source[blockOffset], alpha1 = source[blockOffset + 1];\n const alphaValues = alpha0 > alpha1\n ? [ alpha0, alpha1,\n Math.round((6 * alpha0 + alpha1) / 7),\n Math.round((5 * alpha0 + 2 * alpha1) / 7),\n Math.round((4 * alpha0 + 3 * alpha1) / 7),\n Math.round((3 * alpha0 + 4 * alpha1) / 7),\n Math.round((2 * alpha0 + 5 * alpha1) / 7),\n Math.round((alpha0 + 6 * alpha1) / 7) ]\n : [ alpha0, alpha1,\n Math.round((4 * alpha0 + alpha1) / 5),\n Math.round((3 * alpha0 + 2 * alpha1) / 5),\n Math.round((2 * alpha0 + 3 * alpha1) / 5),\n Math.round((alpha0 + 4 * alpha1) / 5),\n 0, 255 ];\n let alphaBits = 0n;\n for (let i = 0; i < 6; i++) alphaBits |= BigInt(source[blockOffset + 2 + i]) << BigInt(i * 8);\n return alphaValues[Number((alphaBits >> BigInt((y * 4 + x) * 3)) & 7n)];\n }, 8);\n}\n\nfunction decodeBc4(source, width, height, rowPitch, signed)\n{\n const rgba = new Uint8Array(width * height * 4);\n forEachBcPixel(width, height, rowPitch, 8, (blockOffset, x, y, outputOffset) =>\n {\n const value = decodeBc4Value(source, blockOffset, x, y, signed);\n rgba[outputOffset] = value;\n rgba[outputOffset + 1] = value;\n rgba[outputOffset + 2] = value;\n rgba[outputOffset + 3] = 255;\n });\n return rgba;\n}\n\nfunction decodeBc5(source, width, height, rowPitch, signed)\n{\n const rgba = new Uint8Array(width * height * 4);\n forEachBcPixel(width, height, rowPitch, 16, (blockOffset, x, y, outputOffset) =>\n {\n rgba[outputOffset] = decodeBc4Value(source, blockOffset, x, y, signed);\n rgba[outputOffset + 1] = decodeBc4Value(source, blockOffset + 8, x, y, signed);\n rgba[outputOffset + 2] = 0;\n rgba[outputOffset + 3] = 255;\n });\n return rgba;\n}\n\nfunction decodeBc4Value(source, blockOffset, x, y, signed)\n{\n const endpoint0 = signed ? decodeSnormByte(source[blockOffset]) : source[blockOffset];\n const endpoint1 = signed ? decodeSnormByte(source[blockOffset + 1]) : source[blockOffset + 1];\n const values = endpoint0 > endpoint1\n ? [ endpoint0, endpoint1,\n (6 * endpoint0 + endpoint1) / 7,\n (5 * endpoint0 + 2 * endpoint1) / 7,\n (4 * endpoint0 + 3 * endpoint1) / 7,\n (3 * endpoint0 + 4 * endpoint1) / 7,\n (2 * endpoint0 + 5 * endpoint1) / 7,\n (endpoint0 + 6 * endpoint1) / 7 ]\n : [ endpoint0, endpoint1,\n (4 * endpoint0 + endpoint1) / 5,\n (3 * endpoint0 + 2 * endpoint1) / 5,\n (2 * endpoint0 + 3 * endpoint1) / 5,\n (endpoint0 + 4 * endpoint1) / 5,\n signed ? -1 : 0,\n signed ? 1 : 255 ];\n let bits = 0n;\n for (let i = 0; i < 6; i++) bits |= BigInt(source[blockOffset + 2 + i]) << BigInt(i * 8);\n const value = values[Number((bits >> BigInt((y * 4 + x) * 3)) & 7n)];\n return signed ? Math.max(0, Math.min(255, Math.round((value + 1) * 127.5))) : Math.round(value);\n}\n\nfunction decodeSnormByte(value)\n{\n const signed = value > 127 ? value - 256 : value;\n return Math.max(-1, signed / 127);\n}\n\nfunction forEachBcPixel(width, height, rowPitch, blockBytes, callback)\n{\n for (let blockY = 0; blockY < Math.ceil(height / 4); blockY++)\n {\n for (let blockX = 0; blockX < Math.ceil(width / 4); blockX++)\n {\n const blockOffset = blockY * rowPitch + blockX * blockBytes;\n for (let y = 0; y < 4; y++)\n {\n for (let x = 0; x < 4; x++)\n {\n const outputX = blockX * 4 + x;\n const outputY = blockY * 4 + y;\n if (outputX < width && outputY < height)\n {\n callback(blockOffset, x, y, (outputY * width + outputX) * 4);\n }\n }\n }\n }\n }\n}\n\nfunction decodeBcAlphaColor(source, width, height, rowPitch, alphaAt, colorOffset = 0)\n{\n const rgba = new Uint8Array(width * height * 4);\n for (let blockY = 0; blockY < Math.ceil(height / 4); blockY++)\n {\n for (let blockX = 0; blockX < Math.ceil(width / 4); blockX++)\n {\n const blockOffset = blockY * rowPitch + blockX * 16;\n const colorOffsetInBlock = blockOffset + colorOffset;\n const c0 = source[colorOffsetInBlock] | (source[colorOffsetInBlock + 1] << 8);\n const c1 = source[colorOffsetInBlock + 2] | (source[colorOffsetInBlock + 3] << 8);\n const colors = decodeBc1Colors(c0, c1, true);\n const indices = source[colorOffsetInBlock + 4] |\n (source[colorOffsetInBlock + 5] << 8) |\n (source[colorOffsetInBlock + 6] << 16) |\n (source[colorOffsetInBlock + 7] << 24);\n for (let y = 0; y < 4; y++)\n {\n for (let x = 0; x < 4; x++)\n {\n const outputX = blockX * 4 + x;\n const outputY = blockY * 4 + y;\n if (outputX >= width || outputY >= height) continue;\n const color = colors[(indices >>> (2 * (y * 4 + x))) & 3];\n const outputOffset = (outputY * width + outputX) * 4;\n rgba[outputOffset] = color[0];\n rgba[outputOffset + 1] = color[1];\n rgba[outputOffset + 2] = color[2];\n rgba[outputOffset + 3] = alphaAt(blockOffset, x, y);\n }\n }\n }\n }\n return rgba;\n}\n\nfunction decodeBc1Colors(c0, c1, forceFourColor = false)\n{\n const first = decode565(c0);\n const second = decode565(c1);\n const colors = [ first, second ];\n if (c0 > c1 || forceFourColor)\n {\n colors.push([\n Math.round((2 * first[0] + second[0]) / 3),\n Math.round((2 * first[1] + second[1]) / 3),\n Math.round((2 * first[2] + second[2]) / 3),\n 255\n ], [\n Math.round((first[0] + 2 * second[0]) / 3),\n Math.round((first[1] + 2 * second[1]) / 3),\n Math.round((first[2] + 2 * second[2]) / 3),\n 255\n ]);\n }\n else\n {\n colors.push([\n Math.round((first[0] + second[0]) / 2),\n Math.round((first[1] + second[1]) / 2),\n Math.round((first[2] + second[2]) / 2),\n 255\n ], [ 0, 0, 0, 0 ]);\n }\n return colors;\n}\n\nfunction decode565(value)\n{\n return [\n Math.round(((value >>> 11) & 0x1f) * 255 / 31),\n Math.round(((value >>> 5) & 0x3f) * 255 / 63),\n Math.round((value & 0x1f) * 255 / 31),\n 255\n ];\n}\n\n/**\n * The floating-point `D3DFORMAT` enumerators, which a legacy DDS stores as a\n * NUMBER in the four-character-code field rather than as four characters.\n *\n * That is the whole trap. `DDPF_FOURCC` is set and the field reads `114`, which\n * as text is `\"r\\0\\0\\0\"` and matches nothing, so a reader that only compares\n * character codes reports an unrecognized format for a file whose format is\n * perfectly ordinary. Every one of these six is a plain uncompressed surface.\n *\n * Two were mapped when BC6H support landed and the other four were not, so\n * `A16B16G16R16F` and `A32B32G32R32F` loaded while their one- and two-channel\n * siblings did not. Found 2026-08-16 on\n * `res:/dx9/model/ship/amarr/battleship/ab3/effects/ab3_traffic.dds`, a 256x9\n * `R32F` gradient.\n */\nconst LEGACY_D3DFMT_PIXEL_FORMATS = {\n 111: \"r16float\",\n 112: \"rg16float\",\n 113: \"rgba16float\",\n 114: \"r32float\",\n 115: \"rg32float\",\n 116: \"rgba32float\"\n};\n\nfunction getDdsPixelFormat(format)\n{\n if (format.dxgiFormat) return DXGI_PIXEL_FORMATS[format.dxgiFormat] || \"\";\n if ((format.pfFlags & DDS_FOURCC) && format.fourCc)\n {\n return FOURCC_PIXEL_FORMATS[format.fourCc] || LEGACY_D3DFMT_PIXEL_FORMATS[format.fourCcCode] || \"\";\n }\n if (format.pfFlags & DDS_RGB)\n {\n if (format.rgbBitCount === 32 &&\n format.rBitMask === 0x000000ff &&\n format.gBitMask === 0x0000ff00 &&\n format.bBitMask === 0x00ff0000 &&\n format.aBitMask === 0xff000000) return \"rgba8unorm\";\n if (format.rgbBitCount === 32 &&\n format.rBitMask === 0x00ff0000 &&\n format.gBitMask === 0x0000ff00 &&\n format.bBitMask === 0x000000ff &&\n format.aBitMask === 0xff000000) return \"bgra8unorm\";\n // D3DFMT_X8R8G8B8 / D3DFMT_X8B8G8R8: 32bpp with no alpha channel.\n // DDPF_ALPHAPIXELS is clear and the alpha mask is zero, so the fourth\n // byte is padding and reads as opaque.\n if (format.rgbBitCount === 32 &&\n format.rBitMask === 0x00ff0000 &&\n format.gBitMask === 0x0000ff00 &&\n format.bBitMask === 0x000000ff &&\n !format.aBitMask) return \"bgrx8unorm\";\n if (format.rgbBitCount === 32 &&\n format.rBitMask === 0x000000ff &&\n format.gBitMask === 0x0000ff00 &&\n format.bBitMask === 0x00ff0000 &&\n !format.aBitMask) return \"rgbx8unorm\";\n if (format.rgbBitCount === 24 &&\n format.rBitMask === 0x00ff0000 &&\n format.gBitMask === 0x0000ff00 &&\n format.bBitMask === 0x000000ff) return \"bgr8unorm\";\n }\n // Single-channel masks are authored both ways: some declare DDPF_LUMINANCE,\n // others DDPF_RGB with only a red mask. Both mean one channel replicated\n // across RGB, which is not the same as r8unorm (that samples as red only).\n if ((format.pfFlags & DDS_RGB) &&\n format.rgbBitCount === 8 &&\n format.rBitMask === 0x000000ff &&\n !format.gBitMask &&\n !format.bBitMask &&\n !format.aBitMask) return \"l8unorm\";\n if (format.pfFlags & DDS_LUMINANCE)\n {\n if (format.rgbBitCount === 8 && !(format.pfFlags & DDS_ALPHAPIXELS)) return \"l8unorm\";\n if (format.rgbBitCount === 16 && (format.pfFlags & DDS_ALPHAPIXELS)) return \"l8a8unorm\";\n }\n // D3DFMT_A8: alpha only.\n if ((format.pfFlags & DDS_ALPHA) && format.rgbBitCount === 8) return \"a8unorm\";\n return \"\";\n}\n\nfunction inspectTGA(bytes)\n{\n return {\n sourceFormat: \"tga\",\n width: readU16LE(bytes, 12),\n height: readU16LE(bytes, 14),\n channels: Math.max(bytes[16] / 8, 1),\n imageType: bytes[2],\n pixelFormat: `tga-${bytes[16]}`,\n isCompressed: [ 9, 10, 11 ].includes(bytes[2])\n };\n}\n\nfunction pngChannels(colorType)\n{\n if (colorType === 0) return 1;\n if (colorType === 2) return 3;\n if (colorType === 3) return 1;\n if (colorType === 4) return 2;\n if (colorType === 6) return 4;\n return 0;\n}\n\nfunction readU16BE(bytes, offset)\n{\n return (bytes[offset] << 8) | bytes[offset + 1];\n}\n\nfunction readU16LE(bytes, offset)\n{\n return bytes[offset] | (bytes[offset + 1] << 8);\n}\n\nfunction readU32BE(bytes, offset)\n{\n return ((bytes[offset] * 0x1000000) + ((bytes[offset + 1] << 16) | (bytes[offset + 2] << 8) | bytes[offset + 3])) >>> 0;\n}\n\nfunction readU32LE(bytes, offset)\n{\n return (bytes[offset] | (bytes[offset + 1] << 8) | (bytes[offset + 2] << 16) | (bytes[offset + 3] * 0x1000000)) >>> 0;\n}\n\nfunction capitalize(value)\n{\n return value ? value[0].toUpperCase() + value.slice(1) : \"Image\";\n}\n"],"names":["OUTPUT_IMAGE","OUTPUT_TEXTURE","OUTPUT_RGBA","OUTPUT_RAW","OUTPUT_JSON","DEFAULT_VALUES","Object","freeze","emit","inputType","source","DDS_HEADER_SIZE","DDS_PIXELFORMAT_OFFSET","DDS_FOURCC","DDS_RGB","DDS_ALPHAPIXELS","DDS_ALPHA","DDS_LUMINANCE","DDSCAPS2_CUBEMAP","DDSCAPS2_VOLUME","DDS_CUBE_FACE_FLAGS","FOURCC_PIXEL_FORMATS","DXT1","DXT3","DXT5","ATI1","BC4U","BC4S","ATI2","BC5U","BC5S","DXGI_PIXEL_FORMATS","COMPRESSED_PIXEL_FORMATS","Set","DEBUG_OUTPUTS","png","jpeg","jpg","tga","dds","normalizeValues","base","options","readerName","values","normalizeInputType","normalizeEmit","value","String","replace","toLowerCase","undefined","includes","TypeError","JSON","stringify","toBytes","input","Uint8Array","ArrayBuffer","isView","buffer","byteOffset","byteLength","inspectWithValues","expectedType","bytes","detected","inspectBytes","sourceFormat","capitalize","payloadType","mediaTypes","isSupportedWithValues","metadata","hasCompleteTextureData","isDataComplete","canEmitTexture","dataOffset","pixelFormat","canEmitRgba","canDecodeDdsToRgba","textureUnsupportedReason","expectedDataBytes","dataBytes","variants","kind","codec","textureFormat","supported","isCompressed","nativeOnly","nativeTextureOnly","reason","isFloatPixelFormat","toUpperCase","preferredVariant","find","v","format","some","confidence","preferred","warnings","errors","error","message","readWithValues","readDdsTexture","readDdsToRgba","Error","code","toJsonValue","Array","isArray","map","output","key","entry","entries","isPNG","inspectPNG","isJPEG","inspectJPEG","isDDS","inspectDDS","isTGA","inspectTGA","width","height","readU32LE","imageType","readU16LE","bpp","colorType","bitDepth","readU32BE","channels","pngChannels","offset","marker","length","readU16BE","Math","max","headerSize","pfOffset","pfFlags","fourCcCode","fourCc","fromCharCode","rgbBitCount","rBitMask","gBitMask","bBitMask","aBitMask","caps2","isCube","isVolume","cubeFaces","getDdsCubeFaces","hasDx10","dxgiFormat","resourceDimension","arraySize","getDdsPixelFormat","depth","mipCount","getDdsExpectedDataBytes","pitchOrLinearSize","missingDataBytes","extraDataBytes","faces","isCubeComplete","dimension","has","hasAlpha","test","hasMipMaps","subresources","buildDdsSubresources","data","subarray","reduce","sum","subresource","rgba","startsWith","decodeBc1","rowPitch","decodeBc2","decodeBc3","decodeBc4","endsWith","decodeBc5","decodeBc6h","decodeBc7","decodeFloatUncompressed","decodeUncompressed","isFloat","strideBytes","origin","colorSpace","alphaMode","layers","layer","arrayIndex","floor","face","mip","layout","getDdsLevelLayout","push","slicePitch","total","filter","blockBytes","blocksWide","ceil","blocksHigh","bytesPerPixel","pixel","sourceOffset","outputOffset","luminance","Float32Array","view","DataView","red","green","blue","alpha","getFloat32","halfToFloat","getUint16","sign","exponent","mantissa","pow","Infinity","NaN","blockY","blockX","blockOffset","c0","c1","colors","decodeBc1Colors","indices","y","x","outputX","outputY","color","set","decodeBcAlphaColor","alphaNibble","alpha0","alpha1","alphaValues","round","alphaBits","i","BigInt","Number","signed","forEachBcPixel","decodeBc4Value","endpoint0","decodeSnormByte","endpoint1","bits","min","callback","alphaAt","colorOffset","colorOffsetInBlock","forceFourColor","first","decode565","second","LEGACY_D3DFMT_PIXEL_FORMATS","slice"],"mappings":"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"}
1
+ {"version":3,"file":"helpers.js","sources":["../../../../../src/formats/dds/core/helpers.js"],"sourcesContent":["import { decodeBc6h } from \"./bc6h.js\";\nimport { decodeBc7 } from \"./bc7.js\";\n\nexport const OUTPUT_IMAGE = \"image\";\nexport const OUTPUT_TEXTURE = \"texture\";\nexport const OUTPUT_RGBA = \"rgba\";\nexport const OUTPUT_RAW = \"raw\";\nexport const OUTPUT_JSON = \"json\";\n\nexport const DEFAULT_VALUES = Object.freeze({\n emit: OUTPUT_RAW,\n inputType: \"\",\n source: \"\"\n});\n\nconst DDS_HEADER_SIZE = 124;\nconst DDS_PIXELFORMAT_OFFSET = 76;\nconst DDS_FOURCC = 0x00000004;\nconst DDS_RGB = 0x00000040;\nconst DDS_ALPHAPIXELS = 0x00000001;\nconst DDS_ALPHA = 0x00000002;\nconst DDS_LUMINANCE = 0x00020000;\nconst DDSCAPS2_CUBEMAP = 0x00000200;\nconst DDSCAPS2_VOLUME = 0x00200000;\n\nconst DDS_CUBE_FACE_FLAGS = Object.freeze([\n [ \"positive-x\", 0x00000400 ],\n [ \"negative-x\", 0x00000800 ],\n [ \"positive-y\", 0x00001000 ],\n [ \"negative-y\", 0x00002000 ],\n [ \"positive-z\", 0x00004000 ],\n [ \"negative-z\", 0x00008000 ]\n]);\n\nconst FOURCC_PIXEL_FORMATS = Object.freeze({\n DXT1: \"bc1-rgba-unorm\",\n DXT3: \"bc2-rgba-unorm\",\n DXT5: \"bc3-rgba-unorm\",\n ATI1: \"bc4-r-unorm\",\n BC4U: \"bc4-r-unorm\",\n BC4S: \"bc4-r-snorm\",\n ATI2: \"bc5-rg-unorm\",\n BC5U: \"bc5-rg-unorm\",\n BC5S: \"bc5-rg-snorm\"\n});\n\nconst DXGI_PIXEL_FORMATS = Object.freeze({\n 2: \"rgba32float\",\n 6: \"rgb32float\",\n 10: \"rgba16float\",\n 16: \"rg32float\",\n 34: \"rg16float\",\n 41: \"r32float\",\n 54: \"r16float\",\n 28: \"rgba8unorm\",\n 29: \"rgba8unorm-srgb\",\n 49: \"rg8unorm\",\n 61: \"r8unorm\",\n 71: \"bc1-rgba-unorm\",\n 72: \"bc1-rgba-unorm-srgb\",\n 74: \"bc2-rgba-unorm\",\n 75: \"bc2-rgba-unorm-srgb\",\n 77: \"bc3-rgba-unorm\",\n 78: \"bc3-rgba-unorm-srgb\",\n 80: \"bc4-r-unorm\",\n 81: \"bc4-r-snorm\",\n 83: \"bc5-rg-unorm\",\n 84: \"bc5-rg-snorm\",\n 87: \"bgra8unorm\",\n 88: \"bgrx8unorm\",\n 91: \"bgra8unorm-srgb\",\n 93: \"bgrx8unorm-srgb\",\n 95: \"bc6h-rgb-ufloat\",\n 96: \"bc6h-rgb-float\",\n 98: \"bc7-rgba-unorm\",\n 99: \"bc7-rgba-unorm-srgb\"\n});\n\nconst COMPRESSED_PIXEL_FORMATS = new Set([\n \"bc1-rgba-unorm\",\n \"bc1-rgba-unorm-srgb\",\n \"bc2-rgba-unorm\",\n \"bc2-rgba-unorm-srgb\",\n \"bc3-rgba-unorm\",\n \"bc3-rgba-unorm-srgb\",\n \"bc4-r-unorm\",\n \"bc4-r-snorm\",\n \"bc5-rg-unorm\",\n \"bc5-rg-snorm\",\n \"bc6h-rgb-ufloat\",\n \"bc6h-rgb-float\",\n \"bc7-rgba-unorm\",\n \"bc7-rgba-unorm-srgb\"\n]);\n\nconst DEBUG_OUTPUTS = Object.freeze({\n png: \"pngJson\",\n jpeg: \"jpegJson\",\n jpg: \"jpegJson\",\n tga: \"tgaJson\",\n dds: \"ddsJson\"\n});\n\n/**\n * Normalizes reader options against their supported defaults for the DDS format\n * reader.\n */\nexport function normalizeValues(base = DEFAULT_VALUES, options = {}, readerName = \"CjsImageFormat\")\n{\n const values = { ...DEFAULT_VALUES, ...(base || {}), ...(options || {}) };\n values.inputType = normalizeInputType(values.inputType);\n values.emit = normalizeEmit(values.emit, values.inputType, readerName);\n return values;\n}\n\n/** Normalizes the requested input representation for the DDS format reader. */\nexport function normalizeInputType(inputType)\n{\n if (!inputType) return \"\";\n const value = String(inputType).replace(/^\\./u, \"\").toLowerCase();\n return value === \"jpg\" ? \"jpeg\" : value;\n}\n\n/** Normalizes the requested output representation for the DDS format reader. */\nexport function normalizeEmit(emit, inputType, readerName)\n{\n if (emit === undefined || emit === null) return OUTPUT_RAW;\n if (emit === OUTPUT_JSON && inputType) return DEBUG_OUTPUTS[inputType] || OUTPUT_JSON;\n if ([ OUTPUT_IMAGE, OUTPUT_TEXTURE, OUTPUT_RGBA, OUTPUT_RAW, OUTPUT_JSON ].includes(emit)) return emit;\n if (Object.values(DEBUG_OUTPUTS).includes(emit)) return emit;\n throw new TypeError(`${readerName}: unknown emit value ${JSON.stringify(emit)}`);\n}\n\n/** Returns a byte view over the supplied binary input for the DDS format reader. */\nexport function toBytes(input)\n{\n if (input instanceof Uint8Array) return input;\n if (input instanceof ArrayBuffer) return new Uint8Array(input);\n if (ArrayBuffer.isView(input)) return new Uint8Array(input.buffer, input.byteOffset, input.byteLength);\n throw new TypeError(\"Image input must be Uint8Array, ArrayBuffer, or DataView\");\n}\n\n/** Inspects input using normalized format options for the DDS format reader. */\nexport function inspectWithValues(input, values = DEFAULT_VALUES, expectedType = \"\")\n{\n const bytes = toBytes(input);\n const detected = inspectBytes(bytes);\n const sourceFormat = expectedType || values.inputType || detected.sourceFormat;\n\n if (expectedType && detected.sourceFormat && detected.sourceFormat !== expectedType)\n {\n throw new TypeError(`CjsFormat${capitalize(expectedType)}: expected ${expectedType}, got ${detected.sourceFormat}`);\n }\n\n return {\n payloadType: sourceFormat === \"dds\" ? \"texture\" : \"image\",\n mediaTypes: sourceFormat === \"dds\" ? [ \"texture\", \"image\" ] : [ \"image\" ],\n sourceFormat,\n byteLength: bytes.byteLength,\n ...detected\n };\n}\n\n/**\n * Reports whether input is supported under normalized format options for the DDS\n * format reader.\n */\nexport function isSupportedWithValues(input, values = DEFAULT_VALUES, expectedType = \"\")\n{\n try\n {\n const metadata = inspectWithValues(input, values, expectedType);\n const hasCompleteTextureData = metadata.isDataComplete !== false;\n const canEmitTexture = metadata.sourceFormat === \"dds\" && metadata.dataOffset > 0 && !!metadata.pixelFormat && hasCompleteTextureData;\n const canEmitRgba = canDecodeDdsToRgba(metadata) && hasCompleteTextureData;\n const textureUnsupportedReason = !metadata.pixelFormat\n ? \"DDS texture format is not recognized yet.\"\n : !hasCompleteTextureData\n ? `DDS texture data is truncated: expected ${metadata.expectedDataBytes} bytes, got ${metadata.dataBytes}.`\n : \"\";\n const variants = metadata.sourceFormat === \"dds\"\n ? [\n {\n kind: \"compressed\",\n payloadType: \"texture\",\n codec: metadata.pixelFormat || metadata.textureFormat || \"unknown\",\n supported: canEmitTexture && metadata.isCompressed,\n nativeOnly: !!metadata.nativeTextureOnly,\n reason: metadata.isCompressed ? textureUnsupportedReason : \"DDS is not block-compressed.\"\n },\n {\n kind: \"texture\",\n payloadType: \"texture\",\n codec: metadata.pixelFormat || metadata.textureFormat || \"unknown\",\n supported: canEmitTexture,\n reason: canEmitTexture ? \"\" : textureUnsupportedReason\n },\n {\n kind: \"rgba\",\n payloadType: \"rgba\",\n codec: canEmitRgba\n ? (isFloatPixelFormat(metadata.pixelFormat) ? \"rgba32float\" : \"rgba8unorm\")\n : \"rgba8unorm\",\n supported: canEmitRgba,\n reason: canEmitRgba\n ? \"\"\n : textureUnsupportedReason || (metadata.nativeTextureOnly\n ? `${metadata.pixelFormat} is available as a native compressed texture only; register a software decoder or alternate representation for RGBA fallback.`\n : \"DDS RGBA decode is not implemented for this pixel format.\")\n },\n { kind: \"raw\", payloadType: \"raw\", codec: \"dds\", supported: true }\n ]\n : [\n { kind: \"rgba\", codec: \"rgba8\", supported: false, reason: `${metadata.sourceFormat.toUpperCase()} RGBA decode is not implemented yet.` }\n ];\n const preferredVariant = variants.find(v => v.supported && v.kind !== \"raw\") || variants.find(v => v.supported);\n\n return {\n format: metadata.sourceFormat,\n source: values.source || \"buffer\",\n supported: metadata.sourceFormat ? (variants.some(v => v.supported && v.kind !== \"raw\") ? \"full\" : (variants.some(v => v.supported) ? \"partial\" : \"none\")) : \"none\",\n confidence: metadata.sourceFormat ? 1 : 0,\n preferred: preferredVariant?.codec || \"\",\n reason: metadata.sourceFormat ? \"Container/header recognized.\" : \"Unrecognized image format.\",\n metadata,\n variants,\n warnings: [],\n errors: []\n };\n }\n catch (error)\n {\n return {\n format: expectedType || values.inputType || \"\",\n source: values.source || \"buffer\",\n supported: \"none\",\n confidence: 0,\n preferred: \"\",\n reason: error.message,\n metadata: null,\n variants: [],\n warnings: [],\n errors: [ error.message ]\n };\n }\n}\n\n/** Reads input using normalized format options for the DDS format reader. */\nexport function readWithValues(input, values = DEFAULT_VALUES, expectedType = \"\")\n{\n const bytes = toBytes(input);\n const metadata = inspectWithValues(bytes, values, expectedType);\n\n if (values.emit === OUTPUT_RAW)\n {\n return {\n payloadType: \"raw\",\n sourceFormat: metadata.sourceFormat,\n metadata,\n bytes\n };\n }\n\n if (values.emit === OUTPUT_JSON || values.emit === DEBUG_OUTPUTS[metadata.sourceFormat])\n {\n return metadata;\n }\n\n if (values.emit === OUTPUT_TEXTURE && metadata.sourceFormat === \"dds\")\n {\n return readDdsTexture(bytes, metadata);\n }\n\n if ((values.emit === OUTPUT_RGBA || values.emit === OUTPUT_IMAGE) && metadata.sourceFormat === \"dds\")\n {\n return readDdsToRgba(bytes, metadata);\n }\n\n const error = new Error(`${metadata.sourceFormat}: emit \"${values.emit}\" is not implemented yet`);\n error.code = \"CJS_FORMAT_OUTPUT_NOT_IMPLEMENTED\";\n error.sourceFormat = metadata.sourceFormat;\n error.emit = values.emit;\n throw error;\n}\n\n/** Converts a parsed payload into a JSON-safe value for the DDS format reader. */\nexport function toJsonValue(value)\n{\n if (value instanceof Uint8Array)\n {\n return { byteLength: value.byteLength };\n }\n if (Array.isArray(value)) return value.map(toJsonValue);\n if (value && typeof value === \"object\")\n {\n const output = {};\n for (const [ key, entry ] of Object.entries(value)) output[key] = toJsonValue(entry);\n return output;\n }\n return value;\n}\n\n/**\n * Inspects the supplied bytes without decoding their payload for the DDS format\n * reader.\n */\nexport function inspectBytes(bytes)\n{\n if (isPNG(bytes)) return inspectPNG(bytes);\n if (isJPEG(bytes)) return inspectJPEG(bytes);\n if (isDDS(bytes)) return inspectDDS(bytes);\n if (isTGA(bytes)) return inspectTGA(bytes);\n return { sourceFormat: \"\", width: 0, height: 0 };\n}\n\n/**\n * Reports whether the supplied bytes begin with a PNG signature for the DDS\n * format reader.\n */\nexport function isPNG(bytes)\n{\n return bytes.byteLength >= 24 &&\n bytes[0] === 0x89 && bytes[1] === 0x50 && bytes[2] === 0x4e && bytes[3] === 0x47 &&\n bytes[4] === 0x0d && bytes[5] === 0x0a && bytes[6] === 0x1a && bytes[7] === 0x0a;\n}\n\n/**\n * Reports whether the supplied bytes begin with a JPEG signature for the DDS\n * format reader.\n */\nexport function isJPEG(bytes)\n{\n return bytes.byteLength >= 4 && bytes[0] === 0xff && bytes[1] === 0xd8;\n}\n\n/**\n * Reports whether the supplied bytes begin with a DDS signature for the DDS\n * format reader.\n */\nexport function isDDS(bytes)\n{\n return bytes.byteLength >= DDS_HEADER_SIZE + 4 &&\n bytes[0] === 0x44 && bytes[1] === 0x44 && bytes[2] === 0x53 && bytes[3] === 0x20 &&\n readU32LE(bytes, 4) === DDS_HEADER_SIZE;\n}\n\n/**\n * Reports whether the supplied bytes have a supported TGA header for the DDS\n * format reader.\n */\nexport function isTGA(bytes)\n{\n if (bytes.byteLength < 18) return false;\n const imageType = bytes[2], width = readU16LE(bytes, 12), height = readU16LE(bytes, 14), bpp = bytes[16];\n return width > 0 && height > 0 && [ 1, 2, 3, 9, 10, 11 ].includes(imageType) && [ 8, 16, 24, 32 ].includes(bpp);\n}\n\nfunction inspectPNG(bytes)\n{\n const colorType = bytes[25], bitDepth = bytes[24];\n return {\n sourceFormat: \"png\",\n width: readU32BE(bytes, 16),\n height: readU32BE(bytes, 20),\n bitDepth,\n colorType,\n channels: pngChannels(colorType),\n pixelFormat: `png-${bitDepth}-${colorType}`,\n isCompressed: false\n };\n}\n\nfunction inspectJPEG(bytes)\n{\n let offset = 2;\n while (offset + 9 < bytes.byteLength)\n {\n if (bytes[offset] !== 0xff)\n {\n offset++;\n continue;\n }\n const marker = bytes[offset + 1], length = readU16BE(bytes, offset + 2);\n if ([ 0xc0, 0xc1, 0xc2, 0xc3 ].includes(marker))\n {\n return {\n sourceFormat: \"jpeg\",\n width: readU16BE(bytes, offset + 7),\n height: readU16BE(bytes, offset + 5),\n channels: bytes[offset + 9],\n marker,\n pixelFormat: \"jpeg-ycbcr\",\n isCompressed: true\n };\n }\n offset += Math.max(length + 2, 2);\n }\n return { sourceFormat: \"jpeg\", width: 0, height: 0, channels: 0, pixelFormat: \"jpeg\", isCompressed: true };\n}\n\nfunction inspectDDS(bytes)\n{\n const headerSize = readU32LE(bytes, 4);\n const pfOffset = DDS_PIXELFORMAT_OFFSET;\n const pfFlags = readU32LE(bytes, pfOffset + 4);\n const fourCcCode = readU32LE(bytes, pfOffset + 8);\n const fourCc = String.fromCharCode(bytes[84], bytes[85], bytes[86], bytes[87]).replace(/\\0+$/u, \"\");\n const rgbBitCount = readU32LE(bytes, pfOffset + 12);\n const rBitMask = readU32LE(bytes, pfOffset + 16);\n const gBitMask = readU32LE(bytes, pfOffset + 20);\n const bBitMask = readU32LE(bytes, pfOffset + 24);\n const aBitMask = readU32LE(bytes, pfOffset + 28);\n const caps2 = readU32LE(bytes, 112);\n const isCube = !!(caps2 & DDSCAPS2_CUBEMAP);\n const isVolume = !!(caps2 & DDSCAPS2_VOLUME);\n const cubeFaces = getDdsCubeFaces(caps2);\n const hasDx10 = fourCc === \"DX10\" && bytes.byteLength >= 148;\n const dxgiFormat = hasDx10 ? readU32LE(bytes, 128) : 0;\n const resourceDimension = hasDx10 ? readU32LE(bytes, 132) : 0;\n const arraySize = hasDx10 ? readU32LE(bytes, 140) : 1;\n const dataOffset = hasDx10 ? 148 : 128;\n const pixelFormat = getDdsPixelFormat({ pfFlags, fourCc, fourCcCode, rgbBitCount, rBitMask, gBitMask, bBitMask, aBitMask, dxgiFormat });\n const width = readU32LE(bytes, 16);\n const height = readU32LE(bytes, 12);\n const depth = readU32LE(bytes, 24);\n const mipCount = Math.max(readU32LE(bytes, 28), 1);\n const dataBytes = Math.max(bytes.byteLength - dataOffset, 0);\n const expectedDataBytes = pixelFormat ? getDdsExpectedDataBytes({\n pixelFormat,\n width,\n height,\n depth,\n mipCount,\n arraySize,\n isCube,\n isVolume\n }) : null;\n\n return {\n sourceFormat: \"dds\",\n headerSize,\n width,\n height,\n depth,\n mipCount,\n pitchOrLinearSize: readU32LE(bytes, 20),\n pfFlags,\n fourCc,\n fourCcCode,\n rgbBitCount,\n rBitMask,\n gBitMask,\n bBitMask,\n aBitMask,\n caps2,\n hasDx10,\n dxgiFormat,\n resourceDimension,\n arraySize,\n dataOffset,\n dataBytes,\n expectedDataBytes,\n isDataComplete: expectedDataBytes !== null && dataBytes >= expectedDataBytes,\n missingDataBytes: expectedDataBytes === null ? null : Math.max(expectedDataBytes - dataBytes, 0),\n extraDataBytes: expectedDataBytes === null ? null : Math.max(dataBytes - expectedDataBytes, 0),\n faces: isCube ? 6 : 1,\n cubeFaces,\n isCubeComplete: isCube && cubeFaces.length === 6,\n isCube,\n isVolume,\n dimension: isVolume ? \"3d\" : (isCube ? \"cube\" : \"2d\"),\n pixelFormat,\n textureFormat: pixelFormat || fourCc || \"dds-legacy\",\n isCompressed: COMPRESSED_PIXEL_FORMATS.has(pixelFormat),\n nativeTextureOnly: COMPRESSED_PIXEL_FORMATS.has(pixelFormat) && !canDecodeDdsToRgba({ pixelFormat }),\n hasAlpha: !!(pfFlags & DDS_ALPHAPIXELS) || /rgba|bgra/u.test(pixelFormat),\n hasMipMaps: readU32LE(bytes, 28) > 1\n };\n}\n\nfunction readDdsTexture(bytes, metadata)\n{\n if (!metadata.pixelFormat)\n {\n const error = new Error(\"dds: texture format is not recognized yet\");\n error.code = \"CJS_FORMAT_OUTPUT_NOT_SUPPORTED\";\n error.sourceFormat = metadata.sourceFormat;\n throw error;\n }\n\n const subresources = buildDdsSubresources(bytes, metadata);\n return {\n payloadType: OUTPUT_TEXTURE,\n sourceFormat: \"dds\",\n width: metadata.width,\n height: metadata.height,\n depth: metadata.depth,\n faces: metadata.faces,\n cubeFaces: metadata.cubeFaces,\n isCubeComplete: metadata.isCubeComplete,\n dimension: metadata.dimension,\n mipCount: metadata.mipCount,\n arraySize: metadata.arraySize,\n pixelFormat: metadata.pixelFormat,\n isCompressed: metadata.isCompressed,\n dataBytes: metadata.dataBytes,\n expectedDataBytes: metadata.expectedDataBytes,\n isDataComplete: metadata.isDataComplete,\n missingDataBytes: metadata.missingDataBytes,\n extraDataBytes: metadata.extraDataBytes,\n subresources,\n metadata,\n data: bytes.subarray(metadata.dataOffset, metadata.dataOffset + subresources.reduce((sum, entry) => sum + entry.byteLength, 0))\n };\n}\n\nfunction canDecodeDdsToRgba(metadata)\n{\n return [\n \"rgba32float\",\n \"rgb32float\",\n \"rgba16float\",\n \"rg32float\",\n \"rg16float\",\n \"r32float\",\n \"r16float\",\n \"rgba8unorm\",\n \"rgba8unorm-srgb\",\n \"bgra8unorm\",\n \"bgra8unorm-srgb\",\n \"bgrx8unorm\",\n \"bgrx8unorm-srgb\",\n \"rgbx8unorm\",\n \"bgr8unorm\",\n \"l8unorm\",\n \"l8a8unorm\",\n \"a8unorm\",\n \"rg8unorm\",\n \"r8unorm\",\n \"bc1-rgba-unorm\",\n \"bc1-rgba-unorm-srgb\",\n \"bc2-rgba-unorm\",\n \"bc2-rgba-unorm-srgb\",\n \"bc3-rgba-unorm\",\n \"bc3-rgba-unorm-srgb\",\n \"bc4-r-unorm\",\n \"bc4-r-snorm\",\n \"bc5-rg-unorm\",\n \"bc5-rg-snorm\",\n \"bc6h-rgb-ufloat\",\n \"bc6h-rgb-float\",\n \"bc7-rgba-unorm\",\n \"bc7-rgba-unorm-srgb\"\n ].includes(metadata.pixelFormat);\n}\n\nfunction readDdsToRgba(bytes, metadata)\n{\n if (!canDecodeDdsToRgba(metadata))\n {\n const error = new Error(`dds: RGBA decode is not implemented for ${metadata.pixelFormat || \"unknown\"}`);\n error.code = \"CJS_FORMAT_OUTPUT_NOT_SUPPORTED\";\n error.sourceFormat = metadata.sourceFormat;\n throw error;\n }\n\n const subresource = buildDdsSubresources(bytes, metadata)[0];\n const isFloat = isFloatPixelFormat(metadata.pixelFormat);\n const depth = Math.max(subresource.depth ?? 1, 1);\n\n // Every slice, not just the first.\n //\n // This decoded subresource[0] with the source's own width and height, which\n // for a volume reads one slice out of a buffer holding all of them and\n // returns it as though it were the image. A 128-cube came back as 65,536\n // bytes with `depth` absent from the payload, so a caller could not even\n // tell it had been handed 1/128th of what it asked for. Silent and\n // plausible, which is worse than an error: nothing downstream can detect it.\n //\n // Slices are `slicePitch` apart and each decodes exactly like a 2D image of\n // the same dimensions, so this is a loop rather than a second decoder.\n const slices = [];\n\n for (let z = 0; z < depth; z++)\n {\n const start = metadata.dataOffset + subresource.offset + (z * subresource.slicePitch);\n const source = bytes.subarray(start, start + subresource.slicePitch);\n\n slices.push(decodeDdsSlice(source, metadata, subresource));\n }\n\n const rgba = depth === 1 ? slices[0] : concatTypedArrays(slices);\n const sliceBytes = metadata.width * metadata.height * (isFloat ? 16 : 4);\n\n return {\n payloadType: OUTPUT_RGBA,\n sourceFormat: \"dds\",\n width: metadata.width,\n height: metadata.height,\n // Always present, and 1 for a flat image. An optional field that only\n // appears for volumes is one every caller forgets to look for.\n depth,\n isVolume: depth > 1,\n pixelFormat: isFloat ? \"rgba32float\" : \"rgba8unorm\",\n strideBytes: metadata.width * (isFloat ? 16 : 4),\n // What one z-slice occupies, so a caller can cut the buffer up without\n // recomputing it from a pixel format it should not have to know about.\n sliceBytes,\n origin: \"top-left\",\n colorSpace: isFloat ? \"linear\" : (metadata.pixelFormat.endsWith(\"-srgb\") ? \"srgb\" : \"unknown\"),\n alphaMode: metadata.hasAlpha ? \"straight\" : \"opaque\",\n metadata,\n data: rgba\n };\n}\n\n/** Decodes one 2D slice of a DDS subresource to RGBA, whatever its block format. */\nfunction decodeDdsSlice(source, metadata, subresource)\n{\n const { width, height } = metadata;\n const pitch = subresource.rowPitch;\n const format = metadata.pixelFormat;\n\n if (format.startsWith(\"bc1-\")) return decodeBc1(source, width, height, pitch);\n if (format.startsWith(\"bc2-\")) return decodeBc2(source, width, height, pitch);\n if (format.startsWith(\"bc3-\")) return decodeBc3(source, width, height, pitch);\n if (format.startsWith(\"bc4-\")) return decodeBc4(source, width, height, pitch, format.endsWith(\"-snorm\"));\n if (format.startsWith(\"bc5-\")) return decodeBc5(source, width, height, pitch, format.endsWith(\"-snorm\"));\n if (format.startsWith(\"bc6h-\")) return decodeBc6h(source, width, height, pitch, format === \"bc6h-rgb-float\");\n if (format.startsWith(\"bc7-\")) return decodeBc7(source, width, height, pitch);\n\n return isFloatPixelFormat(format) ? decodeFloatUncompressed(source, metadata) : decodeUncompressed(source, metadata);\n}\n\n/** Joins same-typed slice buffers into one, preserving the element type. */\nfunction concatTypedArrays(parts)\n{\n let total = 0;\n\n for (const part of parts) total += part.length;\n\n const out = new parts[0].constructor(total);\n let at = 0;\n\n for (const part of parts)\n {\n out.set(part, at);\n at += part.length;\n }\n\n return out;\n}\n\nfunction buildDdsSubresources(bytes, metadata)\n{\n const subresources = [];\n let offset = 0;\n const layers = Math.max(metadata.arraySize, 1) * (metadata.isCube ? 6 : 1);\n\n for (let layer = 0; layer < layers; layer++)\n {\n const arrayIndex = metadata.isCube ? Math.floor(layer / 6) : layer;\n const face = metadata.isCube ? layer % 6 : 0;\n for (let mip = 0; mip < metadata.mipCount; mip++)\n {\n const width = Math.max(metadata.width >> mip, 1);\n const height = Math.max(metadata.height >> mip, 1);\n const depth = metadata.isVolume ? Math.max(metadata.depth >> mip, 1) : 1;\n const layout = getDdsLevelLayout(metadata.pixelFormat, width, height, depth);\n if (offset + layout.byteLength > bytes.byteLength - metadata.dataOffset)\n {\n const error = new Error(\"dds: texture data is truncated\");\n error.code = \"CJS_FORMAT_TRUNCATED\";\n error.sourceFormat = metadata.sourceFormat;\n error.expectedDataBytes = metadata.expectedDataBytes;\n error.dataBytes = metadata.dataBytes;\n error.missingDataBytes = metadata.missingDataBytes;\n throw error;\n }\n subresources.push({\n mip,\n layer,\n arrayIndex,\n face,\n offset,\n byteLength: layout.byteLength,\n rowPitch: layout.rowPitch,\n slicePitch: layout.slicePitch,\n width,\n height,\n depth\n });\n offset += layout.byteLength;\n }\n }\n\n return subresources;\n}\n\nfunction getDdsExpectedDataBytes(metadata)\n{\n let total = 0;\n const layers = Math.max(metadata.arraySize, 1) * (metadata.isCube ? 6 : 1);\n\n for (let layer = 0; layer < layers; layer++)\n {\n for (let mip = 0; mip < metadata.mipCount; mip++)\n {\n const width = Math.max(metadata.width >> mip, 1);\n const height = Math.max(metadata.height >> mip, 1);\n const depth = metadata.isVolume ? Math.max(metadata.depth >> mip, 1) : 1;\n total += getDdsLevelLayout(metadata.pixelFormat, width, height, depth).byteLength;\n }\n }\n\n return total;\n}\n\nfunction getDdsCubeFaces(caps2)\n{\n if (!(caps2 & DDSCAPS2_CUBEMAP))\n {\n return [];\n }\n return DDS_CUBE_FACE_FLAGS\n .filter((entry) => !!(caps2 & entry[1]))\n .map((entry) => entry[0]);\n}\n\nfunction getDdsLevelLayout(pixelFormat, width, height, depth)\n{\n const blockBytes = pixelFormat.startsWith(\"bc1-\") || pixelFormat.startsWith(\"bc4-\") ? 8 :\n pixelFormat.startsWith(\"bc\") ? 16 : 0;\n if (blockBytes)\n {\n const blocksWide = Math.max(Math.ceil(width / 4), 1);\n const blocksHigh = Math.max(Math.ceil(height / 4), 1);\n const rowPitch = blocksWide * blockBytes;\n const slicePitch = rowPitch * blocksHigh;\n return { rowPitch, slicePitch, byteLength: slicePitch * depth };\n }\n\n const bytesPerPixel = {\n \"rgba32float\": 16,\n \"rgb32float\": 12,\n \"rgba16float\": 8,\n \"rg32float\": 8,\n \"rg16float\": 4,\n \"r32float\": 4,\n \"r16float\": 2,\n \"rgba8unorm\": 4,\n \"rgba8unorm-srgb\": 4,\n \"bgra8unorm\": 4,\n \"bgra8unorm-srgb\": 4,\n \"bgrx8unorm\": 4,\n \"bgrx8unorm-srgb\": 4,\n \"rgbx8unorm\": 4,\n \"bgr8unorm\": 3,\n \"l8a8unorm\": 2,\n \"l8unorm\": 1,\n \"a8unorm\": 1,\n \"rg8unorm\": 2,\n \"r8unorm\": 1\n }[pixelFormat];\n if (!bytesPerPixel)\n {\n const error = new Error(`dds: cannot calculate subresource layout for ${pixelFormat || \"unknown\"}`);\n error.code = \"CJS_FORMAT_OUTPUT_NOT_SUPPORTED\";\n throw error;\n }\n const rowPitch = width * bytesPerPixel;\n const slicePitch = rowPitch * height;\n return { rowPitch, slicePitch, byteLength: slicePitch * depth };\n}\n\nfunction decodeUncompressed(source, metadata)\n{\n const rgba = new Uint8Array(metadata.width * metadata.height * 4);\n const bytesPerPixel = metadata.pixelFormat === \"bgr8unorm\" ? 3 :\n metadata.pixelFormat === \"rg8unorm\" ? 2 :\n metadata.pixelFormat === \"r8unorm\" ? 1 : 4;\n for (let pixel = 0; pixel < metadata.width * metadata.height; pixel++)\n {\n const sourceOffset = pixel * bytesPerPixel;\n const outputOffset = pixel * 4;\n if (metadata.pixelFormat.startsWith(\"bgra\") || metadata.pixelFormat.startsWith(\"bgrx\"))\n {\n rgba[outputOffset] = source[sourceOffset + 2];\n rgba[outputOffset + 1] = source[sourceOffset + 1];\n rgba[outputOffset + 2] = source[sourceOffset];\n rgba[outputOffset + 3] = metadata.pixelFormat.startsWith(\"bgrx\") ? 255 : source[sourceOffset + 3];\n }\n else if (metadata.pixelFormat === \"bgr8unorm\")\n {\n rgba[outputOffset] = source[sourceOffset + 2];\n rgba[outputOffset + 1] = source[sourceOffset + 1];\n rgba[outputOffset + 2] = source[sourceOffset];\n rgba[outputOffset + 3] = 255;\n }\n else if (metadata.pixelFormat.startsWith(\"rgbx\"))\n {\n // Fourth byte is padding, not alpha.\n rgba[outputOffset] = source[sourceOffset];\n rgba[outputOffset + 1] = source[sourceOffset + 1];\n rgba[outputOffset + 2] = source[sourceOffset + 2];\n rgba[outputOffset + 3] = 255;\n }\n else if (metadata.pixelFormat === \"l8unorm\" || metadata.pixelFormat === \"l8a8unorm\")\n {\n // Luminance replicates its one channel across RGB.\n const luminance = source[sourceOffset];\n rgba[outputOffset] = luminance;\n rgba[outputOffset + 1] = luminance;\n rgba[outputOffset + 2] = luminance;\n rgba[outputOffset + 3] = metadata.pixelFormat === \"l8a8unorm\" ? source[sourceOffset + 1] : 255;\n }\n else if (metadata.pixelFormat === \"a8unorm\")\n {\n rgba[outputOffset] = 0;\n rgba[outputOffset + 1] = 0;\n rgba[outputOffset + 2] = 0;\n rgba[outputOffset + 3] = source[sourceOffset];\n }\n else if (metadata.pixelFormat === \"rg8unorm\")\n {\n rgba[outputOffset] = source[sourceOffset];\n rgba[outputOffset + 1] = source[sourceOffset + 1];\n rgba[outputOffset + 2] = 0;\n rgba[outputOffset + 3] = 255;\n }\n else\n {\n rgba[outputOffset] = source[sourceOffset];\n rgba[outputOffset + 1] = bytesPerPixel > 1 ? source[sourceOffset + 1] : source[sourceOffset];\n rgba[outputOffset + 2] = bytesPerPixel > 2 ? source[sourceOffset + 2] : source[sourceOffset];\n rgba[outputOffset + 3] = bytesPerPixel > 3 ? source[sourceOffset + 3] : 255;\n }\n }\n return rgba;\n}\n\nfunction decodeFloatUncompressed(source, metadata)\n{\n const rgba = new Float32Array(metadata.width * metadata.height * 4);\n const view = new DataView(source.buffer, source.byteOffset, source.byteLength);\n const bytesPerPixel = {\n \"rgba32float\": 16,\n \"rgb32float\": 12,\n \"rgba16float\": 8,\n \"rg32float\": 8,\n \"rg16float\": 4,\n \"r32float\": 4,\n \"r16float\": 2\n }[metadata.pixelFormat];\n\n for (let pixel = 0; pixel < metadata.width * metadata.height; pixel++)\n {\n const sourceOffset = pixel * bytesPerPixel;\n const outputOffset = pixel * 4;\n let red, green, blue, alpha;\n if (metadata.pixelFormat === \"rgba32float\")\n {\n red = view.getFloat32(sourceOffset, true);\n green = view.getFloat32(sourceOffset + 4, true);\n blue = view.getFloat32(sourceOffset + 8, true);\n alpha = view.getFloat32(sourceOffset + 12, true);\n }\n else if (metadata.pixelFormat === \"rgb32float\")\n {\n red = view.getFloat32(sourceOffset, true);\n green = view.getFloat32(sourceOffset + 4, true);\n blue = view.getFloat32(sourceOffset + 8, true);\n alpha = 1;\n }\n else if (metadata.pixelFormat === \"rgba16float\")\n {\n red = halfToFloat(view.getUint16(sourceOffset, true));\n green = halfToFloat(view.getUint16(sourceOffset + 2, true));\n blue = halfToFloat(view.getUint16(sourceOffset + 4, true));\n alpha = halfToFloat(view.getUint16(sourceOffset + 6, true));\n }\n else if (metadata.pixelFormat === \"rg32float\")\n {\n red = view.getFloat32(sourceOffset, true);\n green = view.getFloat32(sourceOffset + 4, true);\n blue = 0;\n alpha = 1;\n }\n else if (metadata.pixelFormat === \"rg16float\")\n {\n red = halfToFloat(view.getUint16(sourceOffset, true));\n green = halfToFloat(view.getUint16(sourceOffset + 2, true));\n blue = 0;\n alpha = 1;\n }\n else\n {\n red = metadata.pixelFormat === \"r16float\"\n ? halfToFloat(view.getUint16(sourceOffset, true))\n : view.getFloat32(sourceOffset, true);\n green = red;\n blue = red;\n alpha = 1;\n }\n rgba[outputOffset] = red;\n rgba[outputOffset + 1] = green;\n rgba[outputOffset + 2] = blue;\n rgba[outputOffset + 3] = alpha;\n }\n return rgba;\n}\n\nfunction isFloatPixelFormat(pixelFormat)\n{\n return typeof pixelFormat === \"string\" && (pixelFormat.startsWith(\"bc6h-\") ||\n [ \"rgba32float\", \"rgb32float\", \"rgba16float\", \"rg32float\", \"rg16float\", \"r32float\",\n \"r16float\" ].includes(pixelFormat));\n}\n\nfunction halfToFloat(value)\n{\n const sign = (value & 0x8000) ? -1 : 1;\n const exponent = (value >>> 10) & 0x1f;\n const mantissa = value & 0x03ff;\n if (exponent === 0)\n {\n return sign * Math.pow(2, -14) * (mantissa / 1024);\n }\n if (exponent === 0x1f)\n {\n return mantissa === 0 ? sign * Infinity : NaN;\n }\n return sign * Math.pow(2, exponent - 15) * (1 + mantissa / 1024);\n}\n\nfunction decodeBc1(source, width, height, rowPitch)\n{\n const rgba = new Uint8Array(width * height * 4);\n for (let blockY = 0; blockY < Math.ceil(height / 4); blockY++)\n {\n for (let blockX = 0; blockX < Math.ceil(width / 4); blockX++)\n {\n const blockOffset = blockY * rowPitch + blockX * 8;\n const c0 = source[blockOffset] | (source[blockOffset + 1] << 8);\n const c1 = source[blockOffset + 2] | (source[blockOffset + 3] << 8);\n const colors = decodeBc1Colors(c0, c1);\n const indices = source[blockOffset + 4] |\n (source[blockOffset + 5] << 8) |\n (source[blockOffset + 6] << 16) |\n (source[blockOffset + 7] << 24);\n for (let y = 0; y < 4; y++)\n {\n for (let x = 0; x < 4; x++)\n {\n const outputX = blockX * 4 + x;\n const outputY = blockY * 4 + y;\n if (outputX >= width || outputY >= height) continue;\n const color = colors[(indices >>> (2 * (y * 4 + x))) & 3];\n rgba.set(color, (outputY * width + outputX) * 4);\n }\n }\n }\n }\n return rgba;\n}\n\nfunction decodeBc2(source, width, height, rowPitch)\n{\n return decodeBcAlphaColor(source, width, height, rowPitch, (blockOffset, x, y) =>\n {\n const alphaNibble = (source[blockOffset + y * 2 + Math.floor(x / 2)] >>> ((x % 2) * 4)) & 0x0f;\n return alphaNibble * 17;\n }, 8);\n}\n\nfunction decodeBc3(source, width, height, rowPitch)\n{\n return decodeBcAlphaColor(source, width, height, rowPitch, (blockOffset, x, y) =>\n {\n const alpha0 = source[blockOffset], alpha1 = source[blockOffset + 1];\n const alphaValues = alpha0 > alpha1\n ? [ alpha0, alpha1,\n Math.round((6 * alpha0 + alpha1) / 7),\n Math.round((5 * alpha0 + 2 * alpha1) / 7),\n Math.round((4 * alpha0 + 3 * alpha1) / 7),\n Math.round((3 * alpha0 + 4 * alpha1) / 7),\n Math.round((2 * alpha0 + 5 * alpha1) / 7),\n Math.round((alpha0 + 6 * alpha1) / 7) ]\n : [ alpha0, alpha1,\n Math.round((4 * alpha0 + alpha1) / 5),\n Math.round((3 * alpha0 + 2 * alpha1) / 5),\n Math.round((2 * alpha0 + 3 * alpha1) / 5),\n Math.round((alpha0 + 4 * alpha1) / 5),\n 0, 255 ];\n let alphaBits = 0n;\n for (let i = 0; i < 6; i++) alphaBits |= BigInt(source[blockOffset + 2 + i]) << BigInt(i * 8);\n return alphaValues[Number((alphaBits >> BigInt((y * 4 + x) * 3)) & 7n)];\n }, 8);\n}\n\nfunction decodeBc4(source, width, height, rowPitch, signed)\n{\n const rgba = new Uint8Array(width * height * 4);\n forEachBcPixel(width, height, rowPitch, 8, (blockOffset, x, y, outputOffset) =>\n {\n const value = decodeBc4Value(source, blockOffset, x, y, signed);\n rgba[outputOffset] = value;\n rgba[outputOffset + 1] = value;\n rgba[outputOffset + 2] = value;\n rgba[outputOffset + 3] = 255;\n });\n return rgba;\n}\n\nfunction decodeBc5(source, width, height, rowPitch, signed)\n{\n const rgba = new Uint8Array(width * height * 4);\n forEachBcPixel(width, height, rowPitch, 16, (blockOffset, x, y, outputOffset) =>\n {\n rgba[outputOffset] = decodeBc4Value(source, blockOffset, x, y, signed);\n rgba[outputOffset + 1] = decodeBc4Value(source, blockOffset + 8, x, y, signed);\n rgba[outputOffset + 2] = 0;\n rgba[outputOffset + 3] = 255;\n });\n return rgba;\n}\n\nfunction decodeBc4Value(source, blockOffset, x, y, signed)\n{\n const endpoint0 = signed ? decodeSnormByte(source[blockOffset]) : source[blockOffset];\n const endpoint1 = signed ? decodeSnormByte(source[blockOffset + 1]) : source[blockOffset + 1];\n const values = endpoint0 > endpoint1\n ? [ endpoint0, endpoint1,\n (6 * endpoint0 + endpoint1) / 7,\n (5 * endpoint0 + 2 * endpoint1) / 7,\n (4 * endpoint0 + 3 * endpoint1) / 7,\n (3 * endpoint0 + 4 * endpoint1) / 7,\n (2 * endpoint0 + 5 * endpoint1) / 7,\n (endpoint0 + 6 * endpoint1) / 7 ]\n : [ endpoint0, endpoint1,\n (4 * endpoint0 + endpoint1) / 5,\n (3 * endpoint0 + 2 * endpoint1) / 5,\n (2 * endpoint0 + 3 * endpoint1) / 5,\n (endpoint0 + 4 * endpoint1) / 5,\n signed ? -1 : 0,\n signed ? 1 : 255 ];\n let bits = 0n;\n for (let i = 0; i < 6; i++) bits |= BigInt(source[blockOffset + 2 + i]) << BigInt(i * 8);\n const value = values[Number((bits >> BigInt((y * 4 + x) * 3)) & 7n)];\n return signed ? Math.max(0, Math.min(255, Math.round((value + 1) * 127.5))) : Math.round(value);\n}\n\nfunction decodeSnormByte(value)\n{\n const signed = value > 127 ? value - 256 : value;\n return Math.max(-1, signed / 127);\n}\n\nfunction forEachBcPixel(width, height, rowPitch, blockBytes, callback)\n{\n for (let blockY = 0; blockY < Math.ceil(height / 4); blockY++)\n {\n for (let blockX = 0; blockX < Math.ceil(width / 4); blockX++)\n {\n const blockOffset = blockY * rowPitch + blockX * blockBytes;\n for (let y = 0; y < 4; y++)\n {\n for (let x = 0; x < 4; x++)\n {\n const outputX = blockX * 4 + x;\n const outputY = blockY * 4 + y;\n if (outputX < width && outputY < height)\n {\n callback(blockOffset, x, y, (outputY * width + outputX) * 4);\n }\n }\n }\n }\n }\n}\n\nfunction decodeBcAlphaColor(source, width, height, rowPitch, alphaAt, colorOffset = 0)\n{\n const rgba = new Uint8Array(width * height * 4);\n for (let blockY = 0; blockY < Math.ceil(height / 4); blockY++)\n {\n for (let blockX = 0; blockX < Math.ceil(width / 4); blockX++)\n {\n const blockOffset = blockY * rowPitch + blockX * 16;\n const colorOffsetInBlock = blockOffset + colorOffset;\n const c0 = source[colorOffsetInBlock] | (source[colorOffsetInBlock + 1] << 8);\n const c1 = source[colorOffsetInBlock + 2] | (source[colorOffsetInBlock + 3] << 8);\n const colors = decodeBc1Colors(c0, c1, true);\n const indices = source[colorOffsetInBlock + 4] |\n (source[colorOffsetInBlock + 5] << 8) |\n (source[colorOffsetInBlock + 6] << 16) |\n (source[colorOffsetInBlock + 7] << 24);\n for (let y = 0; y < 4; y++)\n {\n for (let x = 0; x < 4; x++)\n {\n const outputX = blockX * 4 + x;\n const outputY = blockY * 4 + y;\n if (outputX >= width || outputY >= height) continue;\n const color = colors[(indices >>> (2 * (y * 4 + x))) & 3];\n const outputOffset = (outputY * width + outputX) * 4;\n rgba[outputOffset] = color[0];\n rgba[outputOffset + 1] = color[1];\n rgba[outputOffset + 2] = color[2];\n rgba[outputOffset + 3] = alphaAt(blockOffset, x, y);\n }\n }\n }\n }\n return rgba;\n}\n\nfunction decodeBc1Colors(c0, c1, forceFourColor = false)\n{\n const first = decode565(c0);\n const second = decode565(c1);\n const colors = [ first, second ];\n if (c0 > c1 || forceFourColor)\n {\n colors.push([\n Math.round((2 * first[0] + second[0]) / 3),\n Math.round((2 * first[1] + second[1]) / 3),\n Math.round((2 * first[2] + second[2]) / 3),\n 255\n ], [\n Math.round((first[0] + 2 * second[0]) / 3),\n Math.round((first[1] + 2 * second[1]) / 3),\n Math.round((first[2] + 2 * second[2]) / 3),\n 255\n ]);\n }\n else\n {\n colors.push([\n Math.round((first[0] + second[0]) / 2),\n Math.round((first[1] + second[1]) / 2),\n Math.round((first[2] + second[2]) / 2),\n 255\n ], [ 0, 0, 0, 0 ]);\n }\n return colors;\n}\n\nfunction decode565(value)\n{\n return [\n Math.round(((value >>> 11) & 0x1f) * 255 / 31),\n Math.round(((value >>> 5) & 0x3f) * 255 / 63),\n Math.round((value & 0x1f) * 255 / 31),\n 255\n ];\n}\n\n/**\n * The floating-point `D3DFORMAT` enumerators, which a legacy DDS stores as a\n * NUMBER in the four-character-code field rather than as four characters.\n *\n * That is the whole trap. `DDPF_FOURCC` is set and the field reads `114`, which\n * as text is `\"r\\0\\0\\0\"` and matches nothing, so a reader that only compares\n * character codes reports an unrecognized format for a file whose format is\n * perfectly ordinary. Every one of these six is a plain uncompressed surface.\n *\n * Two were mapped when BC6H support landed and the other four were not, so\n * `A16B16G16R16F` and `A32B32G32R32F` loaded while their one- and two-channel\n * siblings did not. Found 2026-08-16 on\n * `res:/dx9/model/ship/amarr/battleship/ab3/effects/ab3_traffic.dds`, a 256x9\n * `R32F` gradient.\n */\nconst LEGACY_D3DFMT_PIXEL_FORMATS = {\n 111: \"r16float\",\n 112: \"rg16float\",\n 113: \"rgba16float\",\n 114: \"r32float\",\n 115: \"rg32float\",\n 116: \"rgba32float\"\n};\n\nfunction getDdsPixelFormat(format)\n{\n if (format.dxgiFormat) return DXGI_PIXEL_FORMATS[format.dxgiFormat] || \"\";\n if ((format.pfFlags & DDS_FOURCC) && format.fourCc)\n {\n return FOURCC_PIXEL_FORMATS[format.fourCc] || LEGACY_D3DFMT_PIXEL_FORMATS[format.fourCcCode] || \"\";\n }\n if (format.pfFlags & DDS_RGB)\n {\n if (format.rgbBitCount === 32 &&\n format.rBitMask === 0x000000ff &&\n format.gBitMask === 0x0000ff00 &&\n format.bBitMask === 0x00ff0000 &&\n format.aBitMask === 0xff000000) return \"rgba8unorm\";\n if (format.rgbBitCount === 32 &&\n format.rBitMask === 0x00ff0000 &&\n format.gBitMask === 0x0000ff00 &&\n format.bBitMask === 0x000000ff &&\n format.aBitMask === 0xff000000) return \"bgra8unorm\";\n // D3DFMT_X8R8G8B8 / D3DFMT_X8B8G8R8: 32bpp with no alpha channel.\n // DDPF_ALPHAPIXELS is clear and the alpha mask is zero, so the fourth\n // byte is padding and reads as opaque.\n if (format.rgbBitCount === 32 &&\n format.rBitMask === 0x00ff0000 &&\n format.gBitMask === 0x0000ff00 &&\n format.bBitMask === 0x000000ff &&\n !format.aBitMask) return \"bgrx8unorm\";\n if (format.rgbBitCount === 32 &&\n format.rBitMask === 0x000000ff &&\n format.gBitMask === 0x0000ff00 &&\n format.bBitMask === 0x00ff0000 &&\n !format.aBitMask) return \"rgbx8unorm\";\n if (format.rgbBitCount === 24 &&\n format.rBitMask === 0x00ff0000 &&\n format.gBitMask === 0x0000ff00 &&\n format.bBitMask === 0x000000ff) return \"bgr8unorm\";\n }\n // Single-channel masks are authored both ways: some declare DDPF_LUMINANCE,\n // others DDPF_RGB with only a red mask. Both mean one channel replicated\n // across RGB, which is not the same as r8unorm (that samples as red only).\n if ((format.pfFlags & DDS_RGB) &&\n format.rgbBitCount === 8 &&\n format.rBitMask === 0x000000ff &&\n !format.gBitMask &&\n !format.bBitMask &&\n !format.aBitMask) return \"l8unorm\";\n if (format.pfFlags & DDS_LUMINANCE)\n {\n if (format.rgbBitCount === 8 && !(format.pfFlags & DDS_ALPHAPIXELS)) return \"l8unorm\";\n if (format.rgbBitCount === 16 && (format.pfFlags & DDS_ALPHAPIXELS)) return \"l8a8unorm\";\n }\n // D3DFMT_A8: alpha only.\n if ((format.pfFlags & DDS_ALPHA) && format.rgbBitCount === 8) return \"a8unorm\";\n return \"\";\n}\n\nfunction inspectTGA(bytes)\n{\n return {\n sourceFormat: \"tga\",\n width: readU16LE(bytes, 12),\n height: readU16LE(bytes, 14),\n channels: Math.max(bytes[16] / 8, 1),\n imageType: bytes[2],\n pixelFormat: `tga-${bytes[16]}`,\n isCompressed: [ 9, 10, 11 ].includes(bytes[2])\n };\n}\n\nfunction pngChannels(colorType)\n{\n if (colorType === 0) return 1;\n if (colorType === 2) return 3;\n if (colorType === 3) return 1;\n if (colorType === 4) return 2;\n if (colorType === 6) return 4;\n return 0;\n}\n\nfunction readU16BE(bytes, offset)\n{\n return (bytes[offset] << 8) | bytes[offset + 1];\n}\n\nfunction readU16LE(bytes, offset)\n{\n return bytes[offset] | (bytes[offset + 1] << 8);\n}\n\nfunction readU32BE(bytes, offset)\n{\n return ((bytes[offset] * 0x1000000) + ((bytes[offset + 1] << 16) | (bytes[offset + 2] << 8) | bytes[offset + 3])) >>> 0;\n}\n\nfunction readU32LE(bytes, offset)\n{\n return (bytes[offset] | (bytes[offset + 1] << 8) | (bytes[offset + 2] << 16) | (bytes[offset + 3] * 0x1000000)) >>> 0;\n}\n\nfunction capitalize(value)\n{\n return value ? value[0].toUpperCase() + value.slice(1) : \"Image\";\n}\n"],"names":["OUTPUT_IMAGE","OUTPUT_TEXTURE","OUTPUT_RGBA","OUTPUT_RAW","OUTPUT_JSON","DEFAULT_VALUES","Object","freeze","emit","inputType","source","DDS_HEADER_SIZE","DDS_PIXELFORMAT_OFFSET","DDS_FOURCC","DDS_RGB","DDS_ALPHAPIXELS","DDS_ALPHA","DDS_LUMINANCE","DDSCAPS2_CUBEMAP","DDSCAPS2_VOLUME","DDS_CUBE_FACE_FLAGS","FOURCC_PIXEL_FORMATS","DXT1","DXT3","DXT5","ATI1","BC4U","BC4S","ATI2","BC5U","BC5S","DXGI_PIXEL_FORMATS","COMPRESSED_PIXEL_FORMATS","Set","DEBUG_OUTPUTS","png","jpeg","jpg","tga","dds","normalizeValues","base","options","readerName","values","normalizeInputType","normalizeEmit","value","String","replace","toLowerCase","undefined","includes","TypeError","JSON","stringify","toBytes","input","Uint8Array","ArrayBuffer","isView","buffer","byteOffset","byteLength","inspectWithValues","expectedType","bytes","detected","inspectBytes","sourceFormat","capitalize","payloadType","mediaTypes","isSupportedWithValues","metadata","hasCompleteTextureData","isDataComplete","canEmitTexture","dataOffset","pixelFormat","canEmitRgba","canDecodeDdsToRgba","textureUnsupportedReason","expectedDataBytes","dataBytes","variants","kind","codec","textureFormat","supported","isCompressed","nativeOnly","nativeTextureOnly","reason","isFloatPixelFormat","toUpperCase","preferredVariant","find","v","format","some","confidence","preferred","warnings","errors","error","message","readWithValues","readDdsTexture","readDdsToRgba","Error","code","toJsonValue","Array","isArray","map","output","key","entry","entries","isPNG","inspectPNG","isJPEG","inspectJPEG","isDDS","inspectDDS","isTGA","inspectTGA","width","height","readU32LE","imageType","readU16LE","bpp","colorType","bitDepth","readU32BE","channels","pngChannels","offset","marker","length","readU16BE","Math","max","headerSize","pfOffset","pfFlags","fourCcCode","fourCc","fromCharCode","rgbBitCount","rBitMask","gBitMask","bBitMask","aBitMask","caps2","isCube","isVolume","cubeFaces","getDdsCubeFaces","hasDx10","dxgiFormat","resourceDimension","arraySize","getDdsPixelFormat","depth","mipCount","getDdsExpectedDataBytes","pitchOrLinearSize","missingDataBytes","extraDataBytes","faces","isCubeComplete","dimension","has","hasAlpha","test","hasMipMaps","subresources","buildDdsSubresources","data","subarray","reduce","sum","subresource","isFloat","slices","z","start","slicePitch","push","decodeDdsSlice","rgba","concatTypedArrays","sliceBytes","strideBytes","origin","colorSpace","endsWith","alphaMode","pitch","rowPitch","startsWith","decodeBc1","decodeBc2","decodeBc3","decodeBc4","decodeBc5","decodeBc6h","decodeBc7","decodeFloatUncompressed","decodeUncompressed","parts","total","part","out","constructor","at","set","layers","layer","arrayIndex","floor","face","mip","layout","getDdsLevelLayout","filter","blockBytes","blocksWide","ceil","blocksHigh","bytesPerPixel","pixel","sourceOffset","outputOffset","luminance","Float32Array","view","DataView","red","green","blue","alpha","getFloat32","halfToFloat","getUint16","sign","exponent","mantissa","pow","Infinity","NaN","blockY","blockX","blockOffset","c0","c1","colors","decodeBc1Colors","indices","y","x","outputX","outputY","color","decodeBcAlphaColor","alphaNibble","alpha0","alpha1","alphaValues","round","alphaBits","i","BigInt","Number","signed","forEachBcPixel","decodeBc4Value","endpoint0","decodeSnormByte","endpoint1","bits","min","callback","alphaAt","colorOffset","colorOffsetInBlock","forceFourColor","first","decode565","second","LEGACY_D3DFMT_PIXEL_FORMATS","slice"],"mappings":"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"}
@@ -234,6 +234,25 @@ function readGlslEffectContainer(input, values = {}) {
234
234
  stageType: stage.type,
235
235
  shaderKey,
236
236
  manifest: manifestStages.get(`${passKey}.${name}`) ?? null,
237
+ // The pass's D3D render states, verbatim from the
238
+ // description. They are not reflection and nothing in
239
+ // the GLSL implies them, so a consumer that only reads
240
+ // programs and bindings renders every effect with
241
+ // whatever state the previous draw happened to leave
242
+ // set. That is invisible for an effect whose states
243
+ // match the ambient ones and total for one whose do
244
+ // not - an additive pass writing alpha 0 disappears
245
+ // completely under a src-alpha blend.
246
+ //
247
+ // `states`, not `renderStates`. Carbon's `Tr2Pass`
248
+ // reserves `renderStates` for the `unsigned int`
249
+ // handle `RegisterRenderStateSetup` hands back
250
+ // (Tr2EffectDescription.h:205), and calls the pairs
251
+ // themselves `states` - as do the WebGPU analysis
252
+ // passes and both of ccpwgl's legacy readers. This
253
+ // path never registers anything, so it carries the
254
+ // list and no handle rather than inventing a number.
255
+ states: pass.renderStates ?? [],
237
256
  // The pass's transforms, so a rule can ask whether a
238
257
  // description resource was merged away rather than lost.
239
258
  transforms
@@ -1 +1 @@
1
- {"version":3,"file":"readGlslEffectContainer.js","sources":["../../../../../src/formats/webgl/core/readGlslEffectContainer.js"],"sourcesContent":["import { CjsCarbonEffectReader } from \"../../../format/carbonEffect/CjsCarbonEffectReader.js\";\nimport { readGlslBackendBlock } from \"./glslBackendBlock.js\";\nimport {\n CARBON_BACKEND_ENGINE_ID,\n peekBackendEngineId\n} from \"../../../format/carbonEffect/backendEngineId.js\";\nimport { hlslShaderStageName } from \"../../hlsl/core/tr2/HlslRenderContextEnum.js\";\nimport { runtimeDescriptionFromCarbon } from \"../../hlsl/core/carbonDescriptionToRuntime.js\";\nimport { HlslEffectBindingManifest } from \"../../hlsl/core/tr2/shader/HlslEffectBindingManifest.js\";\n\n/**\n * Decodes a WebGL effect container into the stage/shader records the\n * completeness rules consume.\n *\n * This exists so the rules run from container bytes alone. The alternative was\n * to hand them the in-memory translation, which works inside `buildEffectPackage`\n * and nowhere else — the validator reads a finished file and has no translation\n * in scope. That would have cost the validator its completeness check while\n * still requiring a decoder to produce the programs it compiles in a browser, so\n * it was strictly more work for strictly less checking.\n *\n * The vocabulary is deliberately the one the rules already speak — `stages` with\n * pass coordinates, `shaders` with source and a translation verdict. The rules\n * are about the translation, not about how it was stored, so retargeting them\n * meant changing where the records come from and nothing about what they mean.\n *\n * **What the wire cannot tell you.** `buildCarbonEffectContainer` stores a body\n * the translator could not lower as its full pass tree with zero-length\n * programs; the *reason* it failed stays in the in-memory build result and is\n * never written. So a shader decoded from bytes reports `ok: false` with\n * \"no program was stored\" and nothing more specific. That is the honest answer:\n * a file on disk does not know why a translation failed months ago. Callers that\n * do know — `buildEffectPackage`, at build time — keep their specific\n * diagnostics by feeding the rules their own records instead.\n */\n\n/** The verdict a stage carrying no stored program gets. */\nconst NO_PROGRAM_REASON = \"no program was stored\";\n\n/**\n * Derives the per-stage binding manifests for one body through the one\n * manifest builder the source path uses.\n *\n * This replaces a hand-built reshape of the wire records into the manifest\n * vocabulary. That copy had already diverged from the real manifest once —\n * `isAutoregister` was silently dropped, making every resource look\n * user-settable — which is the whole argument against a second producer: two\n * hand-maintained spellings of one reflection drift, and the drift is exactly\n * the kind of bug that draws, links and renders black without an error. The\n * record tree now flows through `runtimeDescriptionFromCarbon` — the\n * corpus-proven adapter the runtime read path uses — and\n * `HlslEffectBindingManifest`, so the container read and the build-time\n * package derive their manifests from the same code.\n *\n * No `bytecodeFor` is supplied: program text lives in the shader records this\n * reader emits, so the manifest's `shaderBytecode` stays null rather than\n * duplicating every program into the reflection.\n *\n * @param {object} description Decoded Carbon description record tree.\n * @param {number} version Container data version.\n * @param {string} source Source name for diagnostics.\n * @returns {Map<string, object>} Manifest stage records keyed by\n * `technique.passN.stageName`.\n */\nfunction bodyManifestStages(description, version, source)\n{\n const runtime = runtimeDescriptionFromCarbon(description, {\n effectName: source,\n version\n });\n const manifest = HlslEffectBindingManifest.fromEffectDescription(runtime).toJSON();\n return new Map(manifest.stages.map((stage) => [\n `${stage.techniqueName}.pass${stage.passIndex}.${stage.stageName}`,\n stage\n ]));\n}\n\n/**\n * Decodes one pass's backend block, tolerating a pass that has none.\n *\n * @param {object} pass Decoded pass record.\n * @param {string} passKey Enclosing pass key.\n * @param {string} source Source name for error details.\n * @returns {object} Per-stage backend data, keyed by stage name.\n */\nfunction backendStages(pass, passKey, source)\n{\n if (!pass.backendBlock?.size) return { stages: {}, transforms: [] };\n\n // A block belonging to another backend is not an error here. The container\n // is Carbon-shaped whatever it targets, and loading it must not depend on\n // being able to use its programs - a dx11 container loads and simply cannot\n // be executed by this library. Report no backend data and let prepare fail\n // where the backend actually matters.\n const engineId = peekBackendEngineId(pass.backendBlock.bytes);\n if (engineId !== CARBON_BACKEND_ENGINE_ID.webgl2)\n {\n return { stages: {}, transforms: [], foreignEngineId: engineId };\n }\n\n const block = readGlslBackendBlock(pass.backendBlock.bytes, { layoutKey: passKey, source });\n return { stages: block.stages ?? {}, transforms: block.transforms ?? [] };\n}\n\n/**\n * Decodes container bytes into stage and shader records.\n *\n * Bodies are decoded once each rather than once per permutation row: rows alias\n * onto shared bodies, and a rule that saw the same body 4,096 times would report\n * 4,096 identical incomplete passes.\n *\n * @param {Uint8Array|ArrayBuffer|Buffer|DataView} input Container payload.\n * @param {object} [values] Read values.\n * @param {string} [values.source] Source name, for diagnostics.\n * @returns {{stages:object[], shaders:object[], recordCount:number, bodyCount:number}}\n * Stage graph in the completeness rules' vocabulary.\n */\nexport function readGlslEffectContainer(input, values = {})\n{\n const source = values.source ?? \"memory\";\n const reader = new CjsCarbonEffectReader(input, { source });\n\n const stages = [];\n const shaders = [];\n const bodyKeyByOffset = new Map();\n\n // Every permutation index that resolves to each body.\n //\n // This is the bridge a caller actually needs, and the only one that is\n // sound. `bodyKey` here is this reader's own ordinal spelling; the\n // permutation graph mints `body${N}` for the same body, and the two are not\n // merely spelled differently — the graph dedupes by content (SHA-256 plus\n // byte equality) while this reader dedupes by source-record offset. Those\n // partitions coincide only because the container writer aliases\n // byte-identical bodies onto one offset, which is a property of the writer\n // rather than a contract.\n //\n // So a consumer must never map between the two by string surgery on either\n // spelling, and must not assume the two ordinal sequences agree. It holds a\n // permutation index; this gives it the body directly.\n const permutationIndicesByOffset = new Map();\n\n for (let index = 0; index < reader.records.length; index += 1)\n {\n const { offset } = reader.records[index];\n const seen = permutationIndicesByOffset.get(offset);\n if (seen) seen.push(index);\n else permutationIndicesByOffset.set(offset, [ index ]);\n }\n\n // Distinct program texts share one shader record, so `shaders` counts unique\n // translations the way the chunk package's shader table did. Empty stages are\n // deliberately *not* pooled: each keeps its own record so a report can name\n // every pass that is missing a program rather than one shared \"absent\".\n //\n // The pool key is the program text *and* the backend reflection that came\n // with it, not the text alone. A pooled record carries the bindings and\n // stage inputs of whichever stage was seen first, and\n // `validateShaderRuntimeContract` judges the emitted GLSL against them — so\n // pooling on text alone would let two stages with identical source but\n // different reflection be checked against the wrong metadata, silently. It\n // is unlikely that identical GLSL ever carries different reflection, which\n // is exactly why it would not be noticed.\n const shaderKeyByIdentity = new Map();\n\n for (let index = 0; index < reader.records.length; index += 1)\n {\n const { offset } = reader.records[index];\n if (bodyKeyByOffset.has(offset)) continue;\n\n const bodyKey = `body_${bodyKeyByOffset.size}`;\n bodyKeyByOffset.set(offset, bodyKey);\n\n const description = reader.readDescription(index, { backend: true });\n const manifestStages = bodyManifestStages(description, reader.version, source);\n\n for (const technique of description.techniques)\n {\n const techniqueName = technique.name.value;\n for (const [ passIndex, pass ] of technique.passes.entries())\n {\n const passKey = `${techniqueName}.pass${passIndex}`;\n const { stages: backend, transforms } = backendStages(\n pass,\n passKey,\n source\n );\n\n for (const stage of pass.stages)\n {\n const name = hlslShaderStageName(stage.type);\n const stageKey = `${bodyKey}.${passKey}.${name}`;\n const stageBackend = backend[name] ?? {};\n\n let shaderKey;\n if (stage.shaderData?.size)\n {\n const code = new TextDecoder().decode(stage.shaderData.bytes);\n const identity = `${JSON.stringify([\n stageBackend.bindings ?? [],\n stageBackend.stageInputs ?? [],\n stageBackend.computeFragment ?? null\n ])} ${code}`;\n const pooled = shaderKeyByIdentity.get(identity);\n if (pooled)\n {\n shaderKey = pooled;\n }\n else\n {\n shaderKey = `shader_${shaderKeyByIdentity.size}`;\n shaderKeyByIdentity.set(identity, shaderKey);\n shaders.push({\n key: shaderKey,\n stageName: name,\n source: code,\n hlsl2webgl: { ok: true },\n bindings: stageBackend.bindings ?? [],\n stageInputs: stageBackend.stageInputs ?? [],\n ...(stageBackend.computeFragment\n ? { computeFragment: stageBackend.computeFragment }\n : {})\n });\n }\n }\n else\n {\n shaderKey = `${stageKey}.absent`;\n shaders.push({\n key: shaderKey,\n stageName: name,\n source: \"\",\n hlsl2webgl: { ok: false, reason: NO_PROGRAM_REASON },\n bindings: stageBackend.bindings ?? [],\n stageInputs: stageBackend.stageInputs ?? []\n });\n }\n\n stages.push({\n key: stageKey,\n bodyKey,\n techniqueName,\n passIndex,\n stageName: name,\n stageType: stage.type,\n shaderKey,\n manifest: manifestStages.get(`${passKey}.${name}`) ?? null,\n // The pass's transforms, so a rule can ask whether a\n // description resource was merged away rather than lost.\n transforms\n });\n }\n }\n }\n }\n\n // Ordered by first appearance, matching `bodyKey`'s ordinal.\n const bodies = [];\n for (const [ offset, key ] of bodyKeyByOffset)\n {\n bodies.push({\n key,\n permutationIndices: Object.freeze(permutationIndicesByOffset.get(offset) ?? [])\n });\n }\n\n return {\n stages,\n shaders,\n bodies,\n recordCount: reader.records.length,\n bodyCount: bodyKeyByOffset.size\n };\n}\n\nexport default readGlslEffectContainer;\n"],"names":["NO_PROGRAM_REASON","bodyManifestStages","description","version","source","runtime","runtimeDescriptionFromCarbon","effectName","manifest","HlslEffectBindingManifest","fromEffectDescription","toJSON","Map","stages","map","stage","techniqueName","passIndex","stageName","backendStages","pass","passKey","backendBlock","size","transforms","engineId","peekBackendEngineId","bytes","CARBON_BACKEND_ENGINE_ID","webgl2","foreignEngineId","block","readGlslBackendBlock","layoutKey","readGlslEffectContainer","input","values","reader","CjsCarbonEffectReader","shaders","bodyKeyByOffset","permutationIndicesByOffset","index","records","length","offset","seen","get","push","set","shaderKeyByIdentity","has","bodyKey","readDescription","backend","manifestStages","technique","techniques","name","value","passes","entries","hlslShaderStageName","type","stageKey","stageBackend","shaderKey","shaderData","code","TextDecoder","decode","identity","JSON","stringify","bindings","stageInputs","computeFragment","pooled","key","hlsl2webgl","ok","reason","stageType","bodies","permutationIndices","Object","freeze","recordCount","bodyCount"],"mappings":"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"}
1
+ {"version":3,"file":"readGlslEffectContainer.js","sources":["../../../../../src/formats/webgl/core/readGlslEffectContainer.js"],"sourcesContent":["import { CjsCarbonEffectReader } from \"../../../format/carbonEffect/CjsCarbonEffectReader.js\";\nimport { readGlslBackendBlock } from \"./glslBackendBlock.js\";\nimport {\n CARBON_BACKEND_ENGINE_ID,\n peekBackendEngineId\n} from \"../../../format/carbonEffect/backendEngineId.js\";\nimport { hlslShaderStageName } from \"../../hlsl/core/tr2/HlslRenderContextEnum.js\";\nimport { runtimeDescriptionFromCarbon } from \"../../hlsl/core/carbonDescriptionToRuntime.js\";\nimport { HlslEffectBindingManifest } from \"../../hlsl/core/tr2/shader/HlslEffectBindingManifest.js\";\n\n/**\n * Decodes a WebGL effect container into the stage/shader records the\n * completeness rules consume.\n *\n * This exists so the rules run from container bytes alone. The alternative was\n * to hand them the in-memory translation, which works inside `buildEffectPackage`\n * and nowhere else — the validator reads a finished file and has no translation\n * in scope. That would have cost the validator its completeness check while\n * still requiring a decoder to produce the programs it compiles in a browser, so\n * it was strictly more work for strictly less checking.\n *\n * The vocabulary is deliberately the one the rules already speak — `stages` with\n * pass coordinates, `shaders` with source and a translation verdict. The rules\n * are about the translation, not about how it was stored, so retargeting them\n * meant changing where the records come from and nothing about what they mean.\n *\n * **What the wire cannot tell you.** `buildCarbonEffectContainer` stores a body\n * the translator could not lower as its full pass tree with zero-length\n * programs; the *reason* it failed stays in the in-memory build result and is\n * never written. So a shader decoded from bytes reports `ok: false` with\n * \"no program was stored\" and nothing more specific. That is the honest answer:\n * a file on disk does not know why a translation failed months ago. Callers that\n * do know — `buildEffectPackage`, at build time — keep their specific\n * diagnostics by feeding the rules their own records instead.\n */\n\n/** The verdict a stage carrying no stored program gets. */\nconst NO_PROGRAM_REASON = \"no program was stored\";\n\n/**\n * Derives the per-stage binding manifests for one body through the one\n * manifest builder the source path uses.\n *\n * This replaces a hand-built reshape of the wire records into the manifest\n * vocabulary. That copy had already diverged from the real manifest once —\n * `isAutoregister` was silently dropped, making every resource look\n * user-settable — which is the whole argument against a second producer: two\n * hand-maintained spellings of one reflection drift, and the drift is exactly\n * the kind of bug that draws, links and renders black without an error. The\n * record tree now flows through `runtimeDescriptionFromCarbon` — the\n * corpus-proven adapter the runtime read path uses — and\n * `HlslEffectBindingManifest`, so the container read and the build-time\n * package derive their manifests from the same code.\n *\n * No `bytecodeFor` is supplied: program text lives in the shader records this\n * reader emits, so the manifest's `shaderBytecode` stays null rather than\n * duplicating every program into the reflection.\n *\n * @param {object} description Decoded Carbon description record tree.\n * @param {number} version Container data version.\n * @param {string} source Source name for diagnostics.\n * @returns {Map<string, object>} Manifest stage records keyed by\n * `technique.passN.stageName`.\n */\nfunction bodyManifestStages(description, version, source)\n{\n const runtime = runtimeDescriptionFromCarbon(description, {\n effectName: source,\n version\n });\n const manifest = HlslEffectBindingManifest.fromEffectDescription(runtime).toJSON();\n return new Map(manifest.stages.map((stage) => [\n `${stage.techniqueName}.pass${stage.passIndex}.${stage.stageName}`,\n stage\n ]));\n}\n\n/**\n * Decodes one pass's backend block, tolerating a pass that has none.\n *\n * @param {object} pass Decoded pass record.\n * @param {string} passKey Enclosing pass key.\n * @param {string} source Source name for error details.\n * @returns {object} Per-stage backend data, keyed by stage name.\n */\nfunction backendStages(pass, passKey, source)\n{\n if (!pass.backendBlock?.size) return { stages: {}, transforms: [] };\n\n // A block belonging to another backend is not an error here. The container\n // is Carbon-shaped whatever it targets, and loading it must not depend on\n // being able to use its programs - a dx11 container loads and simply cannot\n // be executed by this library. Report no backend data and let prepare fail\n // where the backend actually matters.\n const engineId = peekBackendEngineId(pass.backendBlock.bytes);\n if (engineId !== CARBON_BACKEND_ENGINE_ID.webgl2)\n {\n return { stages: {}, transforms: [], foreignEngineId: engineId };\n }\n\n const block = readGlslBackendBlock(pass.backendBlock.bytes, { layoutKey: passKey, source });\n return { stages: block.stages ?? {}, transforms: block.transforms ?? [] };\n}\n\n/**\n * Decodes container bytes into stage and shader records.\n *\n * Bodies are decoded once each rather than once per permutation row: rows alias\n * onto shared bodies, and a rule that saw the same body 4,096 times would report\n * 4,096 identical incomplete passes.\n *\n * @param {Uint8Array|ArrayBuffer|Buffer|DataView} input Container payload.\n * @param {object} [values] Read values.\n * @param {string} [values.source] Source name, for diagnostics.\n * @returns {{stages:object[], shaders:object[], recordCount:number, bodyCount:number}}\n * Stage graph in the completeness rules' vocabulary.\n */\nexport function readGlslEffectContainer(input, values = {})\n{\n const source = values.source ?? \"memory\";\n const reader = new CjsCarbonEffectReader(input, { source });\n\n const stages = [];\n const shaders = [];\n const bodyKeyByOffset = new Map();\n\n // Every permutation index that resolves to each body.\n //\n // This is the bridge a caller actually needs, and the only one that is\n // sound. `bodyKey` here is this reader's own ordinal spelling; the\n // permutation graph mints `body${N}` for the same body, and the two are not\n // merely spelled differently — the graph dedupes by content (SHA-256 plus\n // byte equality) while this reader dedupes by source-record offset. Those\n // partitions coincide only because the container writer aliases\n // byte-identical bodies onto one offset, which is a property of the writer\n // rather than a contract.\n //\n // So a consumer must never map between the two by string surgery on either\n // spelling, and must not assume the two ordinal sequences agree. It holds a\n // permutation index; this gives it the body directly.\n const permutationIndicesByOffset = new Map();\n\n for (let index = 0; index < reader.records.length; index += 1)\n {\n const { offset } = reader.records[index];\n const seen = permutationIndicesByOffset.get(offset);\n if (seen) seen.push(index);\n else permutationIndicesByOffset.set(offset, [ index ]);\n }\n\n // Distinct program texts share one shader record, so `shaders` counts unique\n // translations the way the chunk package's shader table did. Empty stages are\n // deliberately *not* pooled: each keeps its own record so a report can name\n // every pass that is missing a program rather than one shared \"absent\".\n //\n // The pool key is the program text *and* the backend reflection that came\n // with it, not the text alone. A pooled record carries the bindings and\n // stage inputs of whichever stage was seen first, and\n // `validateShaderRuntimeContract` judges the emitted GLSL against them — so\n // pooling on text alone would let two stages with identical source but\n // different reflection be checked against the wrong metadata, silently. It\n // is unlikely that identical GLSL ever carries different reflection, which\n // is exactly why it would not be noticed.\n const shaderKeyByIdentity = new Map();\n\n for (let index = 0; index < reader.records.length; index += 1)\n {\n const { offset } = reader.records[index];\n if (bodyKeyByOffset.has(offset)) continue;\n\n const bodyKey = `body_${bodyKeyByOffset.size}`;\n bodyKeyByOffset.set(offset, bodyKey);\n\n const description = reader.readDescription(index, { backend: true });\n const manifestStages = bodyManifestStages(description, reader.version, source);\n\n for (const technique of description.techniques)\n {\n const techniqueName = technique.name.value;\n for (const [ passIndex, pass ] of technique.passes.entries())\n {\n const passKey = `${techniqueName}.pass${passIndex}`;\n const { stages: backend, transforms } = backendStages(\n pass,\n passKey,\n source\n );\n\n for (const stage of pass.stages)\n {\n const name = hlslShaderStageName(stage.type);\n const stageKey = `${bodyKey}.${passKey}.${name}`;\n const stageBackend = backend[name] ?? {};\n\n let shaderKey;\n if (stage.shaderData?.size)\n {\n const code = new TextDecoder().decode(stage.shaderData.bytes);\n const identity = `${JSON.stringify([\n stageBackend.bindings ?? [],\n stageBackend.stageInputs ?? [],\n stageBackend.computeFragment ?? null\n ])} ${code}`;\n const pooled = shaderKeyByIdentity.get(identity);\n if (pooled)\n {\n shaderKey = pooled;\n }\n else\n {\n shaderKey = `shader_${shaderKeyByIdentity.size}`;\n shaderKeyByIdentity.set(identity, shaderKey);\n shaders.push({\n key: shaderKey,\n stageName: name,\n source: code,\n hlsl2webgl: { ok: true },\n bindings: stageBackend.bindings ?? [],\n stageInputs: stageBackend.stageInputs ?? [],\n ...(stageBackend.computeFragment\n ? { computeFragment: stageBackend.computeFragment }\n : {})\n });\n }\n }\n else\n {\n shaderKey = `${stageKey}.absent`;\n shaders.push({\n key: shaderKey,\n stageName: name,\n source: \"\",\n hlsl2webgl: { ok: false, reason: NO_PROGRAM_REASON },\n bindings: stageBackend.bindings ?? [],\n stageInputs: stageBackend.stageInputs ?? []\n });\n }\n\n stages.push({\n key: stageKey,\n bodyKey,\n techniqueName,\n passIndex,\n stageName: name,\n stageType: stage.type,\n shaderKey,\n manifest: manifestStages.get(`${passKey}.${name}`) ?? null,\n // The pass's D3D render states, verbatim from the\n // description. They are not reflection and nothing in\n // the GLSL implies them, so a consumer that only reads\n // programs and bindings renders every effect with\n // whatever state the previous draw happened to leave\n // set. That is invisible for an effect whose states\n // match the ambient ones and total for one whose do\n // not - an additive pass writing alpha 0 disappears\n // completely under a src-alpha blend.\n //\n // `states`, not `renderStates`. Carbon's `Tr2Pass`\n // reserves `renderStates` for the `unsigned int`\n // handle `RegisterRenderStateSetup` hands back\n // (Tr2EffectDescription.h:205), and calls the pairs\n // themselves `states` - as do the WebGPU analysis\n // passes and both of ccpwgl's legacy readers. This\n // path never registers anything, so it carries the\n // list and no handle rather than inventing a number.\n states: pass.renderStates ?? [],\n // The pass's transforms, so a rule can ask whether a\n // description resource was merged away rather than lost.\n transforms\n });\n }\n }\n }\n }\n\n // Ordered by first appearance, matching `bodyKey`'s ordinal.\n const bodies = [];\n for (const [ offset, key ] of bodyKeyByOffset)\n {\n bodies.push({\n key,\n permutationIndices: Object.freeze(permutationIndicesByOffset.get(offset) ?? [])\n });\n }\n\n return {\n stages,\n shaders,\n bodies,\n recordCount: reader.records.length,\n bodyCount: bodyKeyByOffset.size\n };\n}\n\nexport default readGlslEffectContainer;\n"],"names":["NO_PROGRAM_REASON","bodyManifestStages","description","version","source","runtime","runtimeDescriptionFromCarbon","effectName","manifest","HlslEffectBindingManifest","fromEffectDescription","toJSON","Map","stages","map","stage","techniqueName","passIndex","stageName","backendStages","pass","passKey","backendBlock","size","transforms","engineId","peekBackendEngineId","bytes","CARBON_BACKEND_ENGINE_ID","webgl2","foreignEngineId","block","readGlslBackendBlock","layoutKey","readGlslEffectContainer","input","values","reader","CjsCarbonEffectReader","shaders","bodyKeyByOffset","permutationIndicesByOffset","index","records","length","offset","seen","get","push","set","shaderKeyByIdentity","has","bodyKey","readDescription","backend","manifestStages","technique","techniques","name","value","passes","entries","hlslShaderStageName","type","stageKey","stageBackend","shaderKey","shaderData","code","TextDecoder","decode","identity","JSON","stringify","bindings","stageInputs","computeFragment","pooled","key","hlsl2webgl","ok","reason","stageType","states","renderStates","bodies","permutationIndices","Object","freeze","recordCount","bodyCount"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@carbonenginejs/runtime-resource",
3
- "version": "0.19.0",
3
+ "version": "0.19.2",
4
4
  "description": "CarbonEngineJS resource lifecycle, cache, source, and object loading contracts.",
5
5
  "type": "module",
6
6
  "exports": {