@carbonenginejs/runtime-resource 0.18.0 → 0.18.1

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.
Files changed (72) hide show
  1. package/dist/format/carbonEffect/CjsCarbonEffectWriter.js +16 -4
  2. package/dist/format/carbonEffect/CjsCarbonEffectWriter.js.map +1 -1
  3. package/dist/format/carbonEffect/buildCarbonEffectContainer.js +11 -1
  4. package/dist/format/carbonEffect/buildCarbonEffectContainer.js.map +1 -1
  5. package/dist/format/carbonEffect/carbonEffectBackendBlock.js +36 -0
  6. package/dist/format/carbonEffect/carbonEffectBackendBlock.js.map +1 -1
  7. package/dist/format/carbonEffect/carbonEffectRecords.js +45 -1
  8. package/dist/format/carbonEffect/carbonEffectRecords.js.map +1 -1
  9. package/dist/format/carbonEffect/carbonEffectResourceTransform.js +120 -60
  10. package/dist/format/carbonEffect/carbonEffectResourceTransform.js.map +1 -1
  11. package/dist/format/index.js +1 -1
  12. package/dist/formats/dds/core/helpers.js +35 -6
  13. package/dist/formats/dds/core/helpers.js.map +1 -1
  14. package/dist/formats/hlsl/core/carbonDescriptionToRuntime.js +53 -1
  15. package/dist/formats/hlsl/core/carbonDescriptionToRuntime.js.map +1 -1
  16. package/dist/formats/hlsl/core/tr2/shader/HlslEffectBindingManifest.js +10 -1
  17. package/dist/formats/hlsl/core/tr2/shader/HlslEffectBindingManifest.js.map +1 -1
  18. package/dist/formats/index.js +3 -0
  19. package/dist/formats/index.js.map +1 -1
  20. package/dist/formats/schemabound/CjsSchemaBoundFormat.js +236 -0
  21. package/dist/formats/schemabound/CjsSchemaBoundFormat.js.map +1 -0
  22. package/dist/formats/schemabound/core/schemaBoundErrors.js +9 -0
  23. package/dist/formats/schemabound/core/schemaBoundErrors.js.map +1 -0
  24. package/dist/formats/schemabound/core/schemaBoundValues.js +307 -0
  25. package/dist/formats/schemabound/core/schemaBoundValues.js.map +1 -0
  26. package/dist/formats/schemabound/index.js +2 -0
  27. package/dist/formats/schemabound/index.js.map +1 -0
  28. package/dist/formats/sqlite/CjsSqliteFormat.js +244 -0
  29. package/dist/formats/sqlite/CjsSqliteFormat.js.map +1 -0
  30. package/dist/formats/sqlite/core/sqlitePages.js +159 -0
  31. package/dist/formats/sqlite/core/sqlitePages.js.map +1 -0
  32. package/dist/formats/sqlite/core/sqliteRecords.js +174 -0
  33. package/dist/formats/sqlite/core/sqliteRecords.js.map +1 -0
  34. package/dist/formats/sqlite/core/sqliteSchema.js +100 -0
  35. package/dist/formats/sqlite/core/sqliteSchema.js.map +1 -0
  36. package/dist/formats/sqlite/index.js +2 -0
  37. package/dist/formats/sqlite/index.js.map +1 -0
  38. package/dist/formats/static/CjsStaticFormat.js +220 -0
  39. package/dist/formats/static/CjsStaticFormat.js.map +1 -0
  40. package/dist/formats/static/index.js +2 -0
  41. package/dist/formats/static/index.js.map +1 -0
  42. package/dist/formats/webgl/core/buildGlslEffectContainer.js +3 -1
  43. package/dist/formats/webgl/core/buildGlslEffectContainer.js.map +1 -1
  44. package/dist/formats/webgl/core/effectPackage.js +11 -2
  45. package/dist/formats/webgl/core/effectPackage.js.map +1 -1
  46. package/dist/formats/webgl/core/glsl/DxbcGlslEmitter.js +10 -2
  47. package/dist/formats/webgl/core/glsl/DxbcGlslEmitter.js.map +1 -1
  48. package/dist/formats/webgpu/core/buildCarbonEffectContainer.js +3 -1
  49. package/dist/formats/webgpu/core/buildCarbonEffectContainer.js.map +1 -1
  50. package/dist/formats/webgpu/core/carbonWebgpu/containerViews.js +179 -131
  51. package/dist/formats/webgpu/core/carbonWebgpu/containerViews.js.map +1 -1
  52. package/dist/formats/webgpu/core/effectBackendBodySet.js +20 -20
  53. package/dist/formats/webgpu/core/effectBackendBodySet.js.map +1 -1
  54. package/dist/formats/webgpu/core/packageEffect.js +14 -1
  55. package/dist/formats/webgpu/core/packageEffect.js.map +1 -1
  56. package/dist/formats/webgpu/core/wgsl/buildResourceTransformPlan.js +9 -1
  57. package/dist/formats/webgpu/core/wgsl/buildResourceTransformPlan.js.map +1 -1
  58. package/dist/resource/shader/reflection/Tr2EffectStageInput.js +14 -0
  59. package/dist/resource/shader/reflection/Tr2EffectStageInput.js.map +1 -1
  60. package/docs/concepts/shader-resource-model.md +34 -1
  61. package/docs/formats/README.md +21 -0
  62. package/docs/formats/carbon-effect-container.md +54 -27
  63. package/docs/formats/schemabound.md +112 -0
  64. package/docs/formats/static.md +119 -0
  65. package/docs/formats/webgl/README.md +5 -3
  66. package/docs/formats/webgpu/README.md +2 -2
  67. package/docs/formats/webgpu/architecture.md +2 -2
  68. package/docs/formats/webgpu/formats/carbon-webgpu.md +13 -2
  69. package/docs/formats/webgpu/guides/effect-packaging.md +1 -2
  70. package/docs/formats/webgpu/reference/wgsl-compatibility.md +2 -2
  71. package/docs/reference/classes/formats.md +33 -0
  72. package/package.json +4 -1
@@ -1 +1 @@
1
- {"version":3,"file":"carbonEffectRecords.js","sources":["../../../../src/format/carbonEffect/carbonEffectRecords.js"],"sourcesContent":["// Source: trinity/shadercompiler/EffectData.h (Save methods)\n// Source: trinity/trinity/Shader/Tr2EffectDescription.cpp (Read)\n\nimport { CjsFormatWriteError } from \"../CjsFormatError.js\";\nimport { compareUtf8 } from \"../compareUtf8.js\";\n\n/**\n * The current description-blob version, and the only one this module writes.\n *\n * `DATA_VERSION` in `EffectData.h:10`. Carbon's reader accepts 2..15\n * (`Tr2EffectRes.cpp:209`) but annotates the v13/v14 field-order boundaries as\n * unverified — `// CHECK IS IT IN RIGHT FUNCTION?` at\n * `Tr2EffectDescription.cpp:177`, `// CHECK` at `:257` and `:578`. The v15\n * layout is the one with an authoritative writer to check against, it is the\n * only version the shipped corpus contains, and it is byte-identical to v14 in\n * the body — v15 differs from v14 only by the 36 outer header bytes.\n */\nexport const CARBON_EFFECT_DATA_VERSION = 15;\n\n/**\n * The oldest description-blob version this module reads.\n *\n * Carbon threads the version through parsing rather than gating on it twice,\n * and its branches reach back to version 2. Maintainer decision, 2026-08-02:\n * **8 is the lowest version worth reading** — the branches below 8 have no\n * examined file, no writer, and no consumer, so restoring them would be code\n * with no evidence. Reading a version is not supporting it: the reader's job\n * ends at a correct record tree, normalized to the v15 record shape.\n */\nexport const CARBON_EFFECT_MIN_DATA_VERSION = 8;\n\n/**\n * Annotation type codes (`EffectData.h:35-41`). Only `STRING` changes the wire\n * shape of the value that follows.\n */\nexport const CARBON_ANNOTATION_TYPE = Object.freeze({\n BOOL: 0,\n INT: 1,\n FLOAT: 2,\n STRING: 3\n});\n\n/**\n * Carbon's inclusive count limits, from the `SanityCheck` call sites in\n * `Tr2EffectDescription.cpp:28-36`. `SanityCheck` throws only when\n * `value > limit`, so each number is the largest accepted count.\n *\n * The absent entries are absent in Carbon too: `techniques`, `registers`,\n * `staticSamplers`, `constants`, `libraries`, `exports` and the per-annotation\n * counts are read with no limit at all, guarded only by the end-of-buffer\n * check. We do not invent caps Carbon does not have.\n */\nexport const CARBON_EFFECT_COUNT_CAPS = Object.freeze({\n pipelineInputs: 64,\n passes: 64,\n stages: 6,\n textures: 64,\n samplers: 64,\n uavs: 64,\n renderStates: 64,\n effectAnnotations: 256\n});\n\n/**\n * `SHADER_CONSTANTS_MAX` (`Tr2EffectDescription.h:160`) — Carbon clamps a\n * stage's default-constant-value copy to this without rejecting the file, while\n * still advancing the cursor by the untruncated size.\n */\nexport const CARBON_SHADER_CONSTANTS_MAX = 4096;\n\n/**\n * Compares two annotation names the way Carbon sorts annotation keys before\n * writing them (`strcmp`, `EffectData.h:613-616` and `:839-842`).\n *\n * `strcmp` orders by unsigned byte, which for names outside ASCII is not the\n * same as JavaScript's UTF-16 code-unit order — hence the explicit UTF-8\n * comparison.\n *\n * @param {string} a First name.\n * @param {string} b Second name.\n * @returns {number} Negative, zero, or positive ordering result.\n */\nexport function compareAnnotationNames(a, b)\n{\n return compareUtf8(a, b);\n}\n\n/**\n * Resolver that writes each arena reference back at the offset it was read\n * from, reusing the source arena verbatim.\n *\n * This is what proves field order independently of arena policy: a re-emit\n * through this resolver must reproduce the original description bytes exactly,\n * whatever the arena happens to contain.\n */\nexport const passthroughArena = Object.freeze({\n /**\n * Returns a parsed string reference's original offset.\n *\n * @param {{offset:number}} reference Parsed string reference.\n * @returns {number} Original arena offset.\n */\n string(reference)\n {\n return reference.offset;\n },\n\n /**\n * Returns a parsed blob reference's original offset.\n *\n * @param {{offset:number}} reference Parsed blob reference.\n * @returns {number} Original arena offset.\n */\n blob(reference)\n {\n return reference.offset;\n }\n});\n\n/**\n * Creates a resolver that re-interns every reference into a fresh string table,\n * so the emitted arena is rebuilt under Carbon's sorted-offset policy.\n *\n * @param {import(\"../CjsStringTable.js\").CjsStringTable} table Target arena.\n * @returns {{string:Function, blob:Function}} Arena resolver.\n */\nexport function internArena(table)\n{\n return {\n /**\n * Interns a string reference's text and returns its offset.\n *\n * @param {{value:string}} reference Parsed string reference.\n * @returns {number} Arena offset.\n */\n string(reference)\n {\n return table.offsetOf(table.addString(reference.value));\n },\n\n /**\n * Interns a blob reference's bytes and returns its offset. A zero-size\n * blob keeps its original reference — Carbon leaves the offset word\n * unset in that case, and the reader never dereferences it.\n *\n * @param {{size:number, offset:number, bytes:Uint8Array}} reference Parsed blob reference.\n * @returns {number} Arena offset.\n */\n blob(reference)\n {\n if (reference.size === 0) return reference.offset;\n return table.offsetOf(table.addBytes(reference.bytes));\n }\n };\n}\n\n/**\n * Creates a resolver that only interns, emitting a placeholder offset.\n *\n * Carbon resolves an arena offset while packing a body\n * (`PackedStream::Save(StringReference)`, `EffectData.h:187-193`), by which\n * point every string must already be in the table — a late `AddString` marks\n * the table dirty and the next `GetOffset` re-sorts it, silently invalidating\n * every offset already baked into a packed body. Carbon dodges this by\n * interning all late strings up front (`ShaderCompiler.cpp:686-694`, before the\n * packing loop at `:697-714`).\n *\n * Running the write walk twice — once collecting, once emitting — reproduces\n * that discipline without depending on a caller remembering it, and because\n * both passes traverse the same code they cannot drift apart.\n *\n * @param {import(\"../CjsStringTable.js\").CjsStringTable} table Target arena.\n * @returns {{string:Function, blob:Function}} Collect-only resolver.\n */\nexport function collectArena(table)\n{\n return {\n /**\n * Interns a string reference's text.\n *\n * @param {{value:string}} reference Parsed string reference.\n * @returns {number} Placeholder offset.\n */\n string(reference)\n {\n table.addString(reference.value);\n return 0;\n },\n\n /**\n * Interns a blob reference's bytes, skipping zero-size blobs.\n *\n * @param {{size:number, bytes:Uint8Array}} reference Parsed blob reference.\n * @returns {number} Placeholder offset.\n */\n blob(reference)\n {\n if (reference.size !== 0) table.addBytes(reference.bytes);\n return 0;\n }\n };\n}\n\n/**\n * Reads a bare `u32` arena offset and the NUL-terminated string behind it.\n *\n * @param {import(\"../CjsByteReader.js\").CjsByteReader} reader Source reader.\n * @returns {{offset:number, value:string}} String reference.\n */\nfunction readStringRef(reader)\n{\n const offset = reader.readUint32();\n return { offset, value: reader.readStringAt(offset) };\n}\n\n/**\n * Reads a `{u32 size, u32 offset}` blob reference.\n *\n * @param {import(\"../CjsByteReader.js\").CjsByteReader} reader Source reader.\n * @returns {{size:number, offset:number, bytes:Uint8Array}} Blob reference.\n */\nfunction readBlobRef(reader)\n{\n const size = reader.readUint32();\n const blob = reader.readTableBlobOptional(size);\n return { size, offset: blob.offset, bytes: blob.bytes };\n}\n\n/**\n * Writes a `{u32 size, u32 offset}` blob reference.\n *\n * @param {import(\"../CjsByteWriter.js\").CjsByteWriter} writer Target writer.\n * @param {object} arena Arena resolver.\n * @param {{size:number}} reference Blob reference.\n */\nfunction writeBlobRef(writer, arena, reference)\n{\n writer.u32(reference.size);\n writer.u32(arena.blob(reference));\n}\n\n/**\n * An absent sized blob: zero length, Carbon's null offset. The offset word is\n * still written, and a reader must not dereference it.\n */\nconst EMPTY_BLOB = Object.freeze({ size: 0, offset: 0xffffffff, bytes: new Uint8Array(0) });\n\n/**\n * Error factory used by the write path's cap checks.\n *\n * @param {string} message Failure reason.\n * @param {object} details Structured details.\n * @returns {CjsFormatWriteError} Write error.\n */\nfunction writeError(message, details)\n{\n return new CjsFormatWriteError(message, details);\n}\n\n/**\n * Requires that a sized record parsed to exactly its declared end.\n *\n * This is the universal form of the rule the backend block discovered, and it\n * carries real weight: it is the successor to roughly 600 lines of cross-chunk\n * agreement checks that the container rewrite deletes. Those checks caught a\n * malformed *tree* — our writer emitting something structurally wrong — not only a\n * malformed file. Under a record layout a writer bug either fails to parse, which\n * is self-announcing, or it parses and leaves the cursor somewhere other than the\n * declared end. Trailing bytes therefore mean one of two things, both fatal: the\n * writer knew fields this reader does not, or the writer miscounted.\n *\n * Applying it to some sized records and not others is a gap that stays invisible\n * until a writer bug hides in one of the others, so every sized record gets it.\n *\n * @param {import(\"../CjsByteReader.js\").CjsByteReader} reader Reader at the record end.\n * @param {string} what Record name for the error message.\n * @param {Function} makeError Error factory.\n */\nfunction requireExhaustive(reader, what, makeError)\n{\n if (reader.remaining !== 0)\n {\n throw makeError(\n `Carbon effect ${what} has ${reader.remaining} unparsed trailing byte(s)`,\n { trailingBytes: reader.remaining, offset: reader.offset, end: reader.end }\n );\n }\n}\n\n/**\n * Rejects a count above Carbon's inclusive limit for that field.\n *\n * @param {number} value Count read or about to be written.\n * @param {string} field Cap key in `CARBON_EFFECT_COUNT_CAPS`.\n * @param {Function} makeError Error factory taking a message and details.\n * @returns {number} The count.\n */\nfunction sanityCheck(value, field, makeError)\n{\n const limit = CARBON_EFFECT_COUNT_CAPS[field];\n if (limit !== undefined && value > limit)\n {\n throw makeError(`Effect ${field} count ${value} exceeds Carbon's limit of ${limit}`, {\n field,\n value,\n limit\n });\n }\n return value;\n}\n\n/**\n * Reads one annotation map: `u8 count`, then name/type/value triples\n * (`ParameterAnnotation::Save` `EffectData.h:601-623`, `ReadAnnotations`\n * `Tr2EffectDescription.cpp:114-134`).\n *\n * A non-string value is kept as its raw four bytes. Carbon writes it through\n * the `float` member of a `{float,int32_t}` union and reads it back through a\n * different union, so the bytes are the only faithful representation; applying\n * an int/float conversion here would corrupt round-trips.\n *\n * @param {import(\"../CjsByteReader.js\").CjsByteReader} reader Source reader.\n * @returns {object[]} Annotation records.\n */\nfunction readAnnotations(reader)\n{\n const count = reader.readUint8();\n const annotations = [];\n for (let index = 0; index < count; index += 1)\n {\n const name = readStringRef(reader);\n const type = reader.readUint8();\n if (type === CARBON_ANNOTATION_TYPE.STRING)\n {\n annotations.push({ name, type, stringValue: readStringRef(reader), rawValue: null });\n }\n else\n {\n annotations.push({ name, type, stringValue: null, rawValue: Uint8Array.from(reader.readRaw(4)) });\n }\n }\n return annotations;\n}\n\n/**\n * Writes one annotation map.\n *\n * @param {import(\"../CjsByteWriter.js\").CjsByteWriter} writer Target writer.\n * @param {object} arena Arena resolver.\n * @param {object[]} annotations Annotation records.\n */\nfunction writeAnnotations(writer, arena, annotations)\n{\n writer.u8(annotations.length);\n for (const annotation of annotations)\n {\n writer.u32(arena.string(annotation.name));\n writer.u8(annotation.type);\n if (annotation.type === CARBON_ANNOTATION_TYPE.STRING)\n {\n writer.u32(arena.string(annotation.stringValue));\n }\n else\n {\n writer.bytes(annotation.rawValue);\n }\n }\n}\n\n/**\n * Maps a pre-v11 constant type byte onto the current enum\n * (`Tr2EffectDescription.cpp:141-158`). The old wire knew FLOAT/INT/BOOL;\n * the current numbering is FLOAT 0, INT 1, UINT 2, BOOL 3, OTHER 4.\n *\n * @param {number} value Pre-v11 type byte.\n * @returns {number} Current constant type value.\n */\nfunction mapOldConstantType(value)\n{\n if (value === 0) return 0;\n if (value === 1) return 1;\n if (value === 2) return 3;\n return 4;\n}\n\n/**\n * Reads one `Constant` (`EffectData.h:283-294`, `ReadConstant`\n * `Tr2EffectDescription.cpp:136-170`). The byte layout is identical across\n * versions 8..15; only the type byte's numbering changed at v11.\n *\n * @param {import(\"../CjsByteReader.js\").CjsByteReader} reader Source reader.\n * @param {number} version Container data version.\n * @returns {object} Constant record.\n */\nfunction readConstant(reader, version)\n{\n const name = readStringRef(reader);\n const offset = reader.readUint32();\n const size = reader.readUint32();\n const rawType = reader.readUint8();\n return {\n name,\n offset,\n size,\n type: version < 11 ? mapOldConstantType(rawType) : rawType,\n dimension: reader.readUint8(),\n elements: reader.readUint32(),\n isSRGB: reader.readUint8(),\n isAutoregister: reader.readUint8()\n };\n}\n\n/**\n * Writes one `Constant`.\n *\n * @param {import(\"../CjsByteWriter.js\").CjsByteWriter} writer Target writer.\n * @param {object} arena Arena resolver.\n * @param {object} constant Constant record.\n */\nfunction writeConstant(writer, arena, constant)\n{\n writer.u32(arena.string(constant.name));\n writer.u32(constant.offset);\n writer.u32(constant.size);\n writer.u8(constant.type);\n writer.u8(constant.dimension);\n writer.u32(constant.elements);\n writer.u8(constant.isSRGB);\n writer.u8(constant.isAutoregister);\n}\n\n/**\n * Reads one `Texture` (`EffectData.h:320-328`, `ReadResource`\n * `Tr2EffectDescription.cpp:172-190`). `count` is the reader's\n * `arrayElements`; before v13 the field is not on the wire and Carbon\n * defaults it to one element.\n *\n * @param {import(\"../CjsByteReader.js\").CjsByteReader} reader Source reader.\n * @param {number} version Container data version.\n * @returns {object} Texture record.\n */\nfunction readTexture(reader, version)\n{\n return {\n name: readStringRef(reader),\n type: reader.readUint8(),\n count: version >= 13 ? reader.readUint32() : 1,\n isSRGB: reader.readUint8(),\n isAutoregister: reader.readUint8()\n };\n}\n\n/**\n * Writes one `Texture`.\n *\n * @param {import(\"../CjsByteWriter.js\").CjsByteWriter} writer Target writer.\n * @param {object} arena Arena resolver.\n * @param {object} texture Texture record.\n */\nfunction writeTexture(writer, arena, texture)\n{\n writer.u32(arena.string(texture.name));\n writer.u8(texture.type);\n writer.u32(texture.count);\n writer.u8(texture.isSRGB);\n writer.u8(texture.isAutoregister);\n}\n\n/**\n * Reads one `Uav` (`EffectData.h:345-352`, inline at\n * `Tr2EffectDescription.cpp:449-463`).\n *\n * A UAV record is one byte shorter than a texture record: it carries no\n * `isSRGB`. Carbon's reader hardcodes `isSRGB = false`\n * (`Tr2EffectDescription.cpp:450`) rather than reading it, and `Uav::Save`\n * omits it. Reusing a shared \"resource\" codec for both is the mistake this\n * comment exists to prevent.\n *\n * @param {import(\"../CjsByteReader.js\").CjsByteReader} reader Source reader.\n * @param {number} version Container data version.\n * @returns {object} UAV record.\n */\nfunction readUav(reader, version)\n{\n return {\n name: readStringRef(reader),\n type: reader.readUint8(),\n count: version >= 13 ? reader.readUint32() : 1,\n isAutoregister: reader.readUint8()\n };\n}\n\n/**\n * Writes one `Uav`.\n *\n * @param {import(\"../CjsByteWriter.js\").CjsByteWriter} writer Target writer.\n * @param {object} arena Arena resolver.\n * @param {object} uav UAV record.\n */\nfunction writeUav(writer, arena, uav)\n{\n writer.u32(arena.string(uav.name));\n writer.u8(uav.type);\n writer.u32(uav.count);\n writer.u8(uav.isAutoregister);\n}\n\n/**\n * Reads one `Sampler` (`EffectData.h:368-390`, `ReadSampler`\n * `Tr2EffectDescription.cpp:192-232` plus the name at `:413` and `isDynamic`\n * at `:429`). Border colour here is four floats — unlike a static sampler,\n * where it is a one-byte enum.\n *\n * `isDynamic` joined the wire at v13. For older versions the key is OMITTED\n * from the record rather than synthesised: the concept did not exist, so any\n * invented value would either lie or (via the v15 rule that a non-dynamic\n * sampler's name is cleared) silently erase names a legacy file does carry.\n *\n * @param {import(\"../CjsByteReader.js\").CjsByteReader} reader Source reader.\n * @param {number} version Container data version.\n * @returns {object} Sampler record.\n */\nfunction readSampler(reader, version)\n{\n const record = {\n name: readStringRef(reader),\n comparison: reader.readUint8(),\n minFilter: reader.readUint8(),\n magFilter: reader.readUint8(),\n mipFilter: reader.readUint8(),\n addressU: reader.readUint8(),\n addressV: reader.readUint8(),\n addressW: reader.readUint8(),\n mipLODBias: reader.readFloat32(),\n maxAnisotropy: reader.readUint8(),\n comparisonFunc: reader.readUint8(),\n borderColor: [\n reader.readFloat32(),\n reader.readFloat32(),\n reader.readFloat32(),\n reader.readFloat32()\n ],\n minLOD: reader.readFloat32(),\n maxLOD: reader.readFloat32()\n };\n if (version > 12)\n {\n record.isDynamic = reader.readUint8();\n }\n return record;\n}\n\n/**\n * Writes one `Sampler`.\n *\n * @param {import(\"../CjsByteWriter.js\").CjsByteWriter} writer Target writer.\n * @param {object} arena Arena resolver.\n * @param {object} sampler Sampler record.\n */\nfunction writeSampler(writer, arena, sampler)\n{\n writer.u32(arena.string(sampler.name));\n writer.u8(sampler.comparison);\n writer.u8(sampler.minFilter);\n writer.u8(sampler.magFilter);\n writer.u8(sampler.mipFilter);\n writer.u8(sampler.addressU);\n writer.u8(sampler.addressV);\n writer.u8(sampler.addressW);\n writer.f32(sampler.mipLODBias);\n writer.u8(sampler.maxAnisotropy);\n writer.u8(sampler.comparisonFunc);\n writer.f32(sampler.borderColor[0]);\n writer.f32(sampler.borderColor[1]);\n writer.f32(sampler.borderColor[2]);\n writer.f32(sampler.borderColor[3]);\n writer.f32(sampler.minLOD);\n writer.f32(sampler.maxLOD);\n writer.u8(sampler.isDynamic);\n}\n\n/**\n * Reads one `StaticSampler` (`EffectData.h:512-531`, read inside\n * `ReadRegisters` at `Tr2EffectDescription.cpp:324-365`). Border colour is a\n * one-byte enum here, and there is no name.\n *\n * @param {import(\"../CjsByteReader.js\").CjsByteReader} reader Source reader.\n * @returns {object} Static sampler record.\n */\nfunction readStaticSampler(reader)\n{\n return {\n registerIndex: reader.readUint32(),\n registerSpace: reader.readUint8(),\n comparison: reader.readUint8(),\n minFilter: reader.readUint8(),\n magFilter: reader.readUint8(),\n mipFilter: reader.readUint8(),\n addressU: reader.readUint8(),\n addressV: reader.readUint8(),\n addressW: reader.readUint8(),\n mipLODBias: reader.readFloat32(),\n maxAnisotropy: reader.readUint8(),\n comparisonFunc: reader.readUint8(),\n borderColor: reader.readUint8(),\n minLOD: reader.readFloat32(),\n maxLOD: reader.readFloat32()\n };\n}\n\n/**\n * Writes one `StaticSampler`.\n *\n * @param {import(\"../CjsByteWriter.js\").CjsByteWriter} writer Target writer.\n * @param {object} sampler Static sampler record.\n */\nfunction writeStaticSampler(writer, sampler)\n{\n writer.u32(sampler.registerIndex);\n writer.u8(sampler.registerSpace);\n writer.u8(sampler.comparison);\n writer.u8(sampler.minFilter);\n writer.u8(sampler.magFilter);\n writer.u8(sampler.mipFilter);\n writer.u8(sampler.addressU);\n writer.u8(sampler.addressV);\n writer.u8(sampler.addressW);\n writer.f32(sampler.mipLODBias);\n writer.u8(sampler.maxAnisotropy);\n writer.u8(sampler.comparisonFunc);\n writer.u8(sampler.borderColor);\n writer.f32(sampler.minLOD);\n writer.f32(sampler.maxLOD);\n}\n\n/**\n * Maps a pre-v10 register type byte onto the current register-type values\n * (`Tr2EffectDescription.cpp:262-276`).\n *\n * @param {number} value Pre-v10 register type byte.\n * @returns {number} Current register type value.\n */\nfunction mapOldRegisterType(value)\n{\n if (value === 0) return 0;\n if (value === 1) return 36;\n if (value === 2) return 68;\n if (value === 3) return 1;\n return 36;\n}\n\n/**\n * Reads the register signature and (v13+) static-sampler table\n * (`ReadRegisters`, `Tr2EffectDescription.cpp:258-367`).\n *\n * Before v13 a register carries only its type and index; Carbon defaults the\n * count to one and the space to the stage type (`:340-343`), and the record is\n * normalized here so consumers see one shape.\n *\n * @param {import(\"../CjsByteReader.js\").CjsByteReader} reader Source reader.\n * @param {number} version Container data version.\n * @param {number} stageType Stage type owning the signature; only consulted\n * for the pre-v13 register-space default.\n * @returns {{registers:object[], staticSamplers:object[]}} Signature records.\n */\nfunction readSignature(reader, version, stageType)\n{\n const registers = [];\n const registerCount = reader.readUint8();\n for (let index = 0; index < registerCount; index += 1)\n {\n const rawType = reader.readUint8();\n const registerType = version > 9 ? rawType : mapOldRegisterType(rawType);\n const registerIndex = reader.readUint32();\n if (version > 12)\n {\n registers.push({\n registerType,\n registerIndex,\n registerCount: reader.readUint32(),\n registerSpace: reader.readUint8()\n });\n }\n else\n {\n registers.push({\n registerType,\n registerIndex,\n registerCount: 1,\n registerSpace: stageType\n });\n }\n }\n\n const staticSamplers = [];\n if (version > 12)\n {\n const staticSamplerCount = reader.readUint8();\n for (let index = 0; index < staticSamplerCount; index += 1)\n {\n staticSamplers.push(readStaticSampler(reader));\n }\n }\n\n return { registers, staticSamplers };\n}\n\n/**\n * Reads the resource half of a `StageData` block: constants, default constant\n * values, textures, samplers, UAVs, annotations (`ReadInput`,\n * `Tr2EffectDescription.cpp:369-472`).\n *\n * @param {import(\"../CjsByteReader.js\").CjsByteReader} reader Source reader.\n * @param {number} version Container data version.\n * @param {Function} makeError Error factory.\n * @returns {object} Stage resource records.\n */\nfunction readStageResources(reader, version, makeError)\n{\n const constants = [];\n const constantCount = reader.readUint32();\n for (let index = 0; index < constantCount; index += 1)\n {\n constants.push(readConstant(reader, version));\n }\n\n const defaultValues = readBlobRef(reader);\n\n const textures = [];\n const textureCount = sanityCheck(reader.readUint8(), \"textures\", makeError);\n for (let index = 0; index < textureCount; index += 1)\n {\n const registerIndex = reader.readUint8();\n textures.push({ registerIndex, ...readTexture(reader, version) });\n }\n\n const samplers = [];\n const samplerCount = sanityCheck(reader.readUint8(), \"samplers\", makeError);\n for (let index = 0; index < samplerCount; index += 1)\n {\n const registerIndex = reader.readUint8();\n samplers.push({ registerIndex, ...readSampler(reader, version) });\n }\n\n const uavs = [];\n const uavCount = sanityCheck(reader.readUint8(), \"uavs\", makeError);\n for (let index = 0; index < uavCount; index += 1)\n {\n const registerIndex = reader.readUint8();\n uavs.push({ registerIndex, ...readUav(reader, version) });\n }\n\n return {\n constants,\n defaultValues,\n textures,\n samplers,\n uavs,\n annotations: readAnnotations(reader)\n };\n}\n\n/**\n * Reads a whole `StageData` block: registers, static samplers, then the\n * resource half (`StageData::Save` `EffectData.h:631-676`).\n *\n * Carbon's reader splits this single contiguous run across two functions —\n * `ReadRegisters` takes the first two sub-records\n * (`Tr2EffectDescription.cpp:258-367`) and `ReadInput` the remaining six\n * (`:369-472`). The split exists here too, because before v14 the two halves\n * are not adjacent on the wire — the signature precedes the program blob\n * while the resources follow the thread-group size — and `readStage` places\n * each half where its version put it.\n *\n * @param {import(\"../CjsByteReader.js\").CjsByteReader} reader Source reader.\n * @param {number} version Container data version.\n * @param {Function} makeError Error factory.\n * @param {number} stageType Stage type owning the signature.\n * @returns {object} Stage data record.\n */\nfunction readStageData(reader, version, makeError, stageType)\n{\n return {\n ...readSignature(reader, version, stageType),\n ...readStageResources(reader, version, makeError)\n };\n}\n\n/**\n * Writes the `StageData` block.\n *\n * @param {import(\"../CjsByteWriter.js\").CjsByteWriter} writer Target writer.\n * @param {object} arena Arena resolver.\n * @param {object} stageData Stage data record.\n */\nfunction writeStageData(writer, arena, stageData)\n{\n writer.u8(stageData.registers.length);\n for (const register of stageData.registers)\n {\n writer.u8(register.registerType);\n writer.u32(register.registerIndex);\n writer.u32(register.registerCount);\n writer.u8(register.registerSpace);\n }\n\n writer.u8(stageData.staticSamplers.length);\n for (const sampler of stageData.staticSamplers)\n {\n writeStaticSampler(writer, sampler);\n }\n\n writer.u32(stageData.constants.length);\n for (const constant of stageData.constants)\n {\n writeConstant(writer, arena, constant);\n }\n\n writeBlobRef(writer, arena, stageData.defaultValues);\n\n // Carbon's compiler enforces none of these caps while its runtime rejects\n // anything above them, so an over-large effect compiles and then fails to\n // load. Check on the way out instead.\n sanityCheck(stageData.textures.length, \"textures\", writeError);\n sanityCheck(stageData.samplers.length, \"samplers\", writeError);\n sanityCheck(stageData.uavs.length, \"uavs\", writeError);\n\n writer.u8(stageData.textures.length);\n for (const texture of stageData.textures)\n {\n writer.u8(texture.registerIndex);\n writeTexture(writer, arena, texture);\n }\n\n writer.u8(stageData.samplers.length);\n for (const sampler of stageData.samplers)\n {\n writer.u8(sampler.registerIndex);\n writeSampler(writer, arena, sampler);\n }\n\n writer.u8(stageData.uavs.length);\n for (const uav of stageData.uavs)\n {\n writer.u8(uav.registerIndex);\n writeUav(writer, arena, uav);\n }\n\n writeAnnotations(writer, arena, stageData.annotations);\n}\n\n/**\n * Reads the pipeline-input list (`Tr2EffectDescription.cpp:234-256`).\n *\n * The `type`/`dimension` bytes joined the wire at v11; before that Carbon\n * derives them — UINT for the blend-index usage, FLOAT otherwise, always four\n * components (`:247-252`) — and the record is normalized here the same way.\n *\n * @param {import(\"../CjsByteReader.js\").CjsByteReader} reader Source reader.\n * @param {number} version Container data version.\n * @param {Function} makeError Error factory.\n * @returns {object[]} Pipeline-input records.\n */\nfunction readPipelineInputs(reader, version, makeError)\n{\n const pipelineInputs = [];\n const pipelineInputCount = sanityCheck(reader.readUint8(), \"pipelineInputs\", makeError);\n for (let index = 0; index < pipelineInputCount; index += 1)\n {\n const usage = reader.readUint8();\n const registerIndex = reader.readUint8();\n const usageIndex = reader.readUint8();\n const usedMask = reader.readUint8();\n if (version > 10)\n {\n pipelineInputs.push({\n usage,\n registerIndex,\n usageIndex,\n usedMask,\n type: reader.readUint8(),\n dimension: reader.readUint8()\n });\n }\n else\n {\n pipelineInputs.push({\n usage,\n registerIndex,\n usageIndex,\n usedMask,\n // Constant-type values: 2 is UINT, 0 is FLOAT; usage 6 is the\n // blend-index semantic.\n type: usage === 6 ? 2 : 0,\n dimension: 4\n });\n }\n }\n return pipelineInputs;\n}\n\n/**\n * Reads one stage (`StageInput::Save` `EffectData.h:691-709`,\n * `Tr2EffectDescription.cpp:532-585`).\n *\n * At v15 the program payload comes first and the signature tables follow.\n * Before v14 it was the other way round; the reorder is the v14 change, and\n * Carbon marks its own v14 branch `// CHECK` (`:578`). Verified against the\n * writer for v15: `type`, `shaderSize`, `shaderData`,\n * `threadGroupSize[0..2]`, `pipelineInputs`, then `StageData`. Two further\n * legacy wrinkles, both from Carbon's reader: a stage carries no register\n * signature at all before v9 (`:544`), and two legacy dwords follow the\n * program reference before v12, read and discarded (`:559-563`).\n *\n * @param {import(\"../CjsByteReader.js\").CjsByteReader} reader Source reader.\n * @param {number} version Container data version.\n * @param {Function} makeError Error factory.\n * @returns {object} Stage record.\n */\nfunction readStage(reader, version, makeError)\n{\n const type = reader.readUint8();\n\n let pipelineInputs = [];\n let signature = { registers: [], staticSamplers: [] };\n if (version < 14)\n {\n pipelineInputs = readPipelineInputs(reader, version, makeError);\n if (version > 8)\n {\n signature = readSignature(reader, version, type);\n }\n }\n\n const shaderData = readBlobRef(reader);\n if (version < 12)\n {\n reader.readUint32();\n reader.readUint32();\n }\n const threadGroupSize = [ reader.readUint32(), reader.readUint32(), reader.readUint32() ];\n\n if (version >= 14)\n {\n pipelineInputs = readPipelineInputs(reader, version, makeError);\n signature = readSignature(reader, version, type);\n }\n\n return {\n type,\n shaderData,\n threadGroupSize,\n pipelineInputs,\n ...signature,\n ...readStageResources(reader, version, makeError)\n };\n}\n\n/**\n * Writes one stage.\n *\n * @param {import(\"../CjsByteWriter.js\").CjsByteWriter} writer Target writer.\n * @param {object} arena Arena resolver.\n * @param {object} stage Stage record.\n */\nfunction writeStage(writer, arena, stage)\n{\n sanityCheck(stage.pipelineInputs.length, \"pipelineInputs\", writeError);\n writer.u8(stage.type);\n writeBlobRef(writer, arena, stage.shaderData);\n writer.u32(stage.threadGroupSize[0]);\n writer.u32(stage.threadGroupSize[1]);\n writer.u32(stage.threadGroupSize[2]);\n\n writer.u8(stage.pipelineInputs.length);\n for (const input of stage.pipelineInputs)\n {\n writer.u8(input.usage);\n writer.u8(input.registerIndex);\n writer.u8(input.usageIndex);\n writer.u8(input.usedMask);\n writer.u8(input.type);\n writer.u8(input.dimension);\n }\n\n writeStageData(writer, arena, stage);\n}\n\n/**\n * Reads one pass (`Pass::Save` `EffectData.h:724-738`).\n *\n * @param {import(\"../CjsByteReader.js\").CjsByteReader} reader Source reader.\n * @param {number} version Container data version.\n * @param {Function} makeError Error factory.\n * @param {boolean} backend Whether the optional trailing block is present.\n * @returns {object} Pass record.\n */\nfunction readPass(reader, version, makeError, backend)\n{\n const stages = [];\n const stageCount = sanityCheck(reader.readUint8(), \"stages\", makeError);\n for (let index = 0; index < stageCount; index += 1)\n {\n stages.push(readStage(reader, version, makeError));\n }\n\n const renderStates = [];\n const stateCount = sanityCheck(reader.readUint8(), \"renderStates\", makeError);\n for (let index = 0; index < stateCount; index += 1)\n {\n renderStates.push({ state: reader.readUint32(), value: reader.readUint32() });\n }\n\n // The one optional trailing block, present only in our own containers. A\n // Carbon file ends the pass at the render-state table, so leaving this gate\n // closed reproduces Carbon's bytes exactly.\n const backendBlock = backend ? readBlobRef(reader) : null;\n\n return { stages, renderStates, ...(backendBlock ? { backendBlock } : {}) };\n}\n\n/**\n * Writes one pass.\n *\n * @param {import(\"../CjsByteWriter.js\").CjsByteWriter} writer Target writer.\n * @param {object} arena Arena resolver.\n * @param {object} pass Pass record.\n * @param {boolean} backend Whether to emit the optional trailing block.\n */\nfunction writePass(writer, arena, pass, backend)\n{\n writer.u8(pass.stages.length);\n for (const stage of pass.stages)\n {\n writeStage(writer, arena, stage);\n }\n writer.u8(pass.renderStates.length);\n for (const entry of pass.renderStates)\n {\n writer.u32(entry.state);\n writer.u32(entry.value);\n }\n if (backend)\n {\n writeBlobRef(writer, arena, pass.backendBlock ?? EMPTY_BLOB);\n }\n}\n\n/**\n * Reads one raytracing library (`Library::Save` `EffectData.h:760-775`,\n * `Tr2EffectDescription.cpp:675-721`). A library carries two `StageData`\n * blocks and no pipeline inputs, thread group size, or stage type.\n *\n * @param {import(\"../CjsByteReader.js\").CjsByteReader} reader Source reader.\n * @param {number} version Container data version.\n * @param {Function} makeError Error factory.\n * @returns {object} Library record.\n */\nfunction readLibrary(reader, version, makeError)\n{\n const payloadSize = reader.readUint32();\n const shaderData = readBlobRef(reader);\n\n const exports = [];\n const exportCount = reader.readUint32();\n for (let index = 0; index < exportCount; index += 1)\n {\n exports.push({ type: reader.readUint8(), name: readStringRef(reader) });\n }\n\n // Libraries exist only from v14, so the pre-v13 register-space default in\n // the signature reader is unreachable here; the stage type it would need\n // is passed as zero.\n return {\n payloadSize,\n shaderData,\n exports,\n hitGroupName: readStringRef(reader),\n globalInputs: readStageData(reader, version, makeError, 0),\n localInputs: readStageData(reader, version, makeError, 0)\n };\n}\n\n/**\n * Writes one raytracing library.\n *\n * @param {import(\"../CjsByteWriter.js\").CjsByteWriter} writer Target writer.\n * @param {object} arena Arena resolver.\n * @param {object} library Library record.\n */\nfunction writeLibrary(writer, arena, library)\n{\n writer.u32(library.payloadSize);\n writeBlobRef(writer, arena, library.shaderData);\n writer.u32(library.exports.length);\n for (const entry of library.exports)\n {\n writer.u8(entry.type);\n writer.u32(arena.string(entry.name));\n }\n writer.u32(arena.string(library.hitGroupName));\n writeStageData(writer, arena, library.globalInputs);\n writeStageData(writer, arena, library.localInputs);\n}\n\n/**\n * Reads a whole v15 description blob (`EffectData::Save`\n * `EffectData.h:821-849`, `Tr2EffectDescription::Read`\n * `Tr2EffectDescription.cpp:476-731`).\n *\n * @param {import(\"../CjsByteReader.js\").CjsByteReader} reader Reader positioned at the blob.\n * @param {object} [options] Read options.\n * @param {Function} [options.makeError] Error factory taking a message and details.\n * @param {number} [options.version] Container data version; defaults to the\n * current version. Accepted range is `CARBON_EFFECT_MIN_DATA_VERSION` to\n * `CARBON_EFFECT_DATA_VERSION`; the record tree comes out normalized to\n * the v15 shape whatever the wire carried.\n * @param {boolean} [options.backend] Expect our optional per-pass trailing block.\n * Leave false for a Carbon file, which ends each pass at the render states.\n * @returns {object} Description record tree.\n */\nexport function readEffectDescription(reader, options = {})\n{\n const makeError = options.makeError\n ?? ((message, details) => reader._error(message, details));\n const backend = options.backend === true;\n const version = Number.isInteger(options.version)\n ? options.version\n : CARBON_EFFECT_DATA_VERSION;\n if (version < CARBON_EFFECT_MIN_DATA_VERSION || version > CARBON_EFFECT_DATA_VERSION)\n {\n throw makeError(\n `Unsupported Carbon effect version ${version}; expected ${CARBON_EFFECT_MIN_DATA_VERSION}..${CARBON_EFFECT_DATA_VERSION}`,\n { version }\n );\n }\n\n const techniques = [];\n const techniqueCount = reader.readUint8();\n for (let techniqueIndex = 0; techniqueIndex < techniqueCount; techniqueIndex += 1)\n {\n const name = readStringRef(reader);\n\n const passes = [];\n const passCount = sanityCheck(reader.readUint8(), \"passes\", makeError);\n for (let passIndex = 0; passIndex < passCount; passIndex += 1)\n {\n passes.push(readPass(reader, version, makeError, backend));\n }\n\n // The library table joined the wire at v14; older files end the\n // technique at its passes.\n const libraries = [];\n if (version > 13)\n {\n const libraryCount = reader.readUint8();\n for (let libraryIndex = 0; libraryIndex < libraryCount; libraryIndex += 1)\n {\n libraries.push(readLibrary(reader, version, makeError));\n }\n }\n\n techniques.push({ name, passes, libraries });\n }\n\n const annotations = [];\n const parameterCount = sanityCheck(reader.readUint16(), \"effectAnnotations\", makeError);\n for (let index = 0; index < parameterCount; index += 1)\n {\n annotations.push({ name: readStringRef(reader), annotations: readAnnotations(reader) });\n }\n\n requireExhaustive(reader, \"description blob\", makeError);\n\n return { techniques, annotations };\n}\n\n/**\n * Writes a whole v15 description blob.\n *\n * The `arena` resolver decides what an arena reference becomes: `passthroughArena`\n * keeps the source offsets, `internArena(table)` re-interns into a new table.\n *\n * @param {import(\"../CjsByteWriter.js\").CjsByteWriter} writer Target writer.\n * @param {object} description Description record tree.\n * @param {object} [options] Write options.\n * @param {object} [options.arena] Arena resolver; defaults to passthrough.\n * @param {boolean} [options.backend] Emit our optional per-pass trailing block.\n * Leave false to produce bytes a Carbon reader accepts unchanged.\n * @returns {import(\"../CjsByteWriter.js\").CjsByteWriter} The writer.\n */\nexport function writeEffectDescription(writer, description, options = {})\n{\n const arena = options.arena ?? passthroughArena;\n const backend = options.backend === true;\n\n writer.u8(description.techniques.length);\n for (const technique of description.techniques)\n {\n writer.u32(arena.string(technique.name));\n writer.u8(sanityCheck(technique.passes.length, \"passes\", writeError));\n for (const pass of technique.passes)\n {\n sanityCheck(pass.stages.length, \"stages\", writeError);\n sanityCheck(pass.renderStates.length, \"renderStates\", writeError);\n writePass(writer, arena, pass, backend);\n }\n writer.u8(technique.libraries.length);\n for (const library of technique.libraries)\n {\n writeLibrary(writer, arena, library);\n }\n }\n\n writer.u16(sanityCheck(description.annotations.length, \"effectAnnotations\", writeError));\n for (const parameter of description.annotations)\n {\n writer.u32(arena.string(parameter.name));\n writeAnnotations(writer, arena, parameter.annotations);\n }\n\n return writer;\n}\n"],"names":["CARBON_EFFECT_DATA_VERSION","CARBON_EFFECT_MIN_DATA_VERSION","CARBON_ANNOTATION_TYPE","Object","freeze","BOOL","INT","FLOAT","STRING","CARBON_EFFECT_COUNT_CAPS","pipelineInputs","passes","stages","textures","samplers","uavs","renderStates","effectAnnotations","CARBON_SHADER_CONSTANTS_MAX","compareAnnotationNames","a","b","compareUtf8","passthroughArena","string","reference","offset","blob","internArena","table","offsetOf","addString","value","size","addBytes","bytes","collectArena","readStringRef","reader","readUint32","readStringAt","readBlobRef","readTableBlobOptional","writeBlobRef","writer","arena","u32","EMPTY_BLOB","Uint8Array","writeError","message","details","CjsFormatWriteError","requireExhaustive","what","makeError","remaining","trailingBytes","end","sanityCheck","field","limit","undefined","readAnnotations","count","readUint8","annotations","index","name","type","push","stringValue","rawValue","from","readRaw","writeAnnotations","u8","length","annotation","mapOldConstantType","readConstant","version","rawType","dimension","elements","isSRGB","isAutoregister","writeConstant","constant","readTexture","writeTexture","texture","readUav","writeUav","uav","readSampler","record","comparison","minFilter","magFilter","mipFilter","addressU","addressV","addressW","mipLODBias","readFloat32","maxAnisotropy","comparisonFunc","borderColor","minLOD","maxLOD","isDynamic","writeSampler","sampler","f32","readStaticSampler","registerIndex","registerSpace","writeStaticSampler","mapOldRegisterType","readSignature","stageType","registers","registerCount","registerType","staticSamplers","staticSamplerCount","readStageResources","constants","constantCount","defaultValues","textureCount","samplerCount","uavCount","readStageData","writeStageData","stageData","register","readPipelineInputs","pipelineInputCount","usage","usageIndex","usedMask","readStage","signature","shaderData","threadGroupSize","writeStage","stage","input","readPass","backend","stageCount","stateCount","state","backendBlock","writePass","pass","entry","readLibrary","payloadSize","exports","exportCount","hitGroupName","globalInputs","localInputs","writeLibrary","library","readEffectDescription","options","_error","Number","isInteger","techniques","techniqueCount","techniqueIndex","passCount","passIndex","libraries","libraryCount","libraryIndex","parameterCount","readUint16","writeEffectDescription","description","technique","u16","parameter"],"mappings":";;;AAAA;AACA;;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMA,0BAA0B,GAAG;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMC,8BAA8B,GAAG;;AAE9C;AACA;AACA;AACA;MACaC,sBAAsB,GAAGC,MAAM,CAACC,MAAM,CAAC;AAChDC,EAAAA,IAAI,EAAE,CAAC;AACPC,EAAAA,GAAG,EAAE,CAAC;AACNC,EAAAA,KAAK,EAAE,CAAC;AACRC,EAAAA,MAAM,EAAE;AACZ,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;MACaC,wBAAwB,GAAGN,MAAM,CAACC,MAAM,CAAC;AAClDM,EAAAA,cAAc,EAAE,EAAE;AAClBC,EAAAA,MAAM,EAAE,EAAE;AACVC,EAAAA,MAAM,EAAE,CAAC;AACTC,EAAAA,QAAQ,EAAE,EAAE;AACZC,EAAAA,QAAQ,EAAE,EAAE;AACZC,EAAAA,IAAI,EAAE,EAAE;AACRC,EAAAA,YAAY,EAAE,EAAE;AAChBC,EAAAA,iBAAiB,EAAE;AACvB,CAAC;;AAED;AACA;AACA;AACA;AACA;AACO,MAAMC,2BAA2B,GAAG;;AAE3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,sBAAsBA,CAACC,CAAC,EAAEC,CAAC,EAC3C;AACI,EAAA,OAAOC,WAAW,CAACF,CAAC,EAAEC,CAAC,CAAC;AAC5B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;MACaE,gBAAgB,GAAGpB,MAAM,CAACC,MAAM,CAAC;AAC1C;AACJ;AACA;AACA;AACA;AACA;EACIoB,MAAMA,CAACC,SAAS,EAChB;IACI,OAAOA,SAAS,CAACC,MAAM;EAC3B,CAAC;AAED;AACJ;AACA;AACA;AACA;AACA;EACIC,IAAIA,CAACF,SAAS,EACd;IACI,OAAOA,SAAS,CAACC,MAAM;AAC3B,EAAA;AACJ,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASE,WAAWA,CAACC,KAAK,EACjC;EACI,OAAO;AACH;AACR;AACA;AACA;AACA;AACA;IACQL,MAAMA,CAACC,SAAS,EAChB;AACI,MAAA,OAAOI,KAAK,CAACC,QAAQ,CAACD,KAAK,CAACE,SAAS,CAACN,SAAS,CAACO,KAAK,CAAC,CAAC;IAC3D,CAAC;AAED;AACR;AACA;AACA;AACA;AACA;AACA;AACA;IACQL,IAAIA,CAACF,SAAS,EACd;MACI,IAAIA,SAAS,CAACQ,IAAI,KAAK,CAAC,EAAE,OAAOR,SAAS,CAACC,MAAM;AACjD,MAAA,OAAOG,KAAK,CAACC,QAAQ,CAACD,KAAK,CAACK,QAAQ,CAACT,SAAS,CAACU,KAAK,CAAC,CAAC;AAC1D,IAAA;GACH;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,YAAYA,CAACP,KAAK,EAClC;EACI,OAAO;AACH;AACR;AACA;AACA;AACA;AACA;IACQL,MAAMA,CAACC,SAAS,EAChB;AACII,MAAAA,KAAK,CAACE,SAAS,CAACN,SAAS,CAACO,KAAK,CAAC;AAChC,MAAA,OAAO,CAAC;IACZ,CAAC;AAED;AACR;AACA;AACA;AACA;AACA;IACQL,IAAIA,CAACF,SAAS,EACd;AACI,MAAA,IAAIA,SAAS,CAACQ,IAAI,KAAK,CAAC,EAAEJ,KAAK,CAACK,QAAQ,CAACT,SAAS,CAACU,KAAK,CAAC;AACzD,MAAA,OAAO,CAAC;AACZ,IAAA;GACH;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAASE,aAAaA,CAACC,MAAM,EAC7B;AACI,EAAA,MAAMZ,MAAM,GAAGY,MAAM,CAACC,UAAU,EAAE;EAClC,OAAO;IAAEb,MAAM;AAAEM,IAAAA,KAAK,EAAEM,MAAM,CAACE,YAAY,CAACd,MAAM;GAAG;AACzD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAASe,WAAWA,CAACH,MAAM,EAC3B;AACI,EAAA,MAAML,IAAI,GAAGK,MAAM,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"}
1
+ {"version":3,"file":"carbonEffectRecords.js","sources":["../../../../src/format/carbonEffect/carbonEffectRecords.js"],"sourcesContent":["// Source: trinity/shadercompiler/EffectData.h (Save methods)\n// Source: trinity/trinity/Shader/Tr2EffectDescription.cpp (Read)\n\nimport { CjsFormatWriteError } from \"../CjsFormatError.js\";\nimport { compareUtf8 } from \"../compareUtf8.js\";\n\n/**\n * The current description-blob version, and the only one this module writes.\n *\n * `DATA_VERSION` in `EffectData.h:10`. Carbon's reader accepts 2..15\n * (`Tr2EffectRes.cpp:209`) but annotates the v13/v14 field-order boundaries as\n * unverified — `// CHECK IS IT IN RIGHT FUNCTION?` at\n * `Tr2EffectDescription.cpp:177`, `// CHECK` at `:257` and `:578`. The v15\n * layout is the one with an authoritative writer to check against, it is the\n * only version the shipped corpus contains, and it is byte-identical to v14 in\n * the body — v15 differs from v14 only by the 36 outer header bytes.\n */\nexport const CARBON_EFFECT_DATA_VERSION = 15;\n\n/**\n * Every version the WRITER can actually produce, newest first.\n *\n * This is deliberately separate from what the reader accepts\n * (`CARBON_EFFECT_MIN_DATA_VERSION`..`CARBON_EFFECT_DATA_VERSION`) and from the\n * default above. Reading a version needs a branch that interprets bytes;\n * emitting one needs a branch that produces them, and we have only ever written\n * the v15 shape.\n *\n * **The version is a parameter, not a constant, so that adding v16 is a matter\n * of adding branches and one entry here rather than re-plumbing every caller.**\n * It is not a promise that any listed version can be requested today.\n *\n * The failure this guards against is the tempting one: accepting a version we\n * cannot emit and writing v15 bytes under its number. That produces a file that\n * lies about itself, which is strictly worse than refusing.\n */\nexport const CARBON_EFFECT_WRITE_VERSIONS = Object.freeze([ 15 ]);\n\n/**\n * Validate a requested write version, or fall back to the default.\n *\n * @param {number} [version] Requested container data version.\n * @returns {number} A version this writer can emit.\n */\nexport function resolveWriteVersion(version)\n{\n if (version === undefined || version === null) return CARBON_EFFECT_DATA_VERSION;\n if (!CARBON_EFFECT_WRITE_VERSIONS.includes(version))\n {\n throw new CjsFormatWriteError(\n `Cannot write Carbon effect container version ${version}`,\n { requested: version, writable: [ ...CARBON_EFFECT_WRITE_VERSIONS ] }\n );\n }\n return version;\n}\n\n/**\n * The oldest description-blob version this module reads.\n *\n * Carbon threads the version through parsing rather than gating on it twice,\n * and its branches reach back to version 2. Maintainer decision, 2026-08-02:\n * **8 is the lowest version worth reading** — the branches below 8 have no\n * examined file, no writer, and no consumer, so restoring them would be code\n * with no evidence. Reading a version is not supporting it: the reader's job\n * ends at a correct record tree, normalized to the v15 record shape.\n */\nexport const CARBON_EFFECT_MIN_DATA_VERSION = 8;\n\n/**\n * Annotation type codes (`EffectData.h:35-41`). Only `STRING` changes the wire\n * shape of the value that follows.\n */\nexport const CARBON_ANNOTATION_TYPE = Object.freeze({\n BOOL: 0,\n INT: 1,\n FLOAT: 2,\n STRING: 3\n});\n\n/**\n * Carbon's inclusive count limits, from the `SanityCheck` call sites in\n * `Tr2EffectDescription.cpp:28-36`. `SanityCheck` throws only when\n * `value > limit`, so each number is the largest accepted count.\n *\n * The absent entries are absent in Carbon too: `techniques`, `registers`,\n * `staticSamplers`, `constants`, `libraries`, `exports` and the per-annotation\n * counts are read with no limit at all, guarded only by the end-of-buffer\n * check. We do not invent caps Carbon does not have.\n */\nexport const CARBON_EFFECT_COUNT_CAPS = Object.freeze({\n pipelineInputs: 64,\n passes: 64,\n stages: 6,\n textures: 64,\n samplers: 64,\n uavs: 64,\n renderStates: 64,\n effectAnnotations: 256\n});\n\n/**\n * `SHADER_CONSTANTS_MAX` (`Tr2EffectDescription.h:160`) — Carbon clamps a\n * stage's default-constant-value copy to this without rejecting the file, while\n * still advancing the cursor by the untruncated size.\n */\nexport const CARBON_SHADER_CONSTANTS_MAX = 4096;\n\n/**\n * Compares two annotation names the way Carbon sorts annotation keys before\n * writing them (`strcmp`, `EffectData.h:613-616` and `:839-842`).\n *\n * `strcmp` orders by unsigned byte, which for names outside ASCII is not the\n * same as JavaScript's UTF-16 code-unit order — hence the explicit UTF-8\n * comparison.\n *\n * @param {string} a First name.\n * @param {string} b Second name.\n * @returns {number} Negative, zero, or positive ordering result.\n */\nexport function compareAnnotationNames(a, b)\n{\n return compareUtf8(a, b);\n}\n\n/**\n * Resolver that writes each arena reference back at the offset it was read\n * from, reusing the source arena verbatim.\n *\n * This is what proves field order independently of arena policy: a re-emit\n * through this resolver must reproduce the original description bytes exactly,\n * whatever the arena happens to contain.\n */\nexport const passthroughArena = Object.freeze({\n /**\n * Returns a parsed string reference's original offset.\n *\n * @param {{offset:number}} reference Parsed string reference.\n * @returns {number} Original arena offset.\n */\n string(reference)\n {\n return reference.offset;\n },\n\n /**\n * Returns a parsed blob reference's original offset.\n *\n * @param {{offset:number}} reference Parsed blob reference.\n * @returns {number} Original arena offset.\n */\n blob(reference)\n {\n return reference.offset;\n }\n});\n\n/**\n * Creates a resolver that re-interns every reference into a fresh string table,\n * so the emitted arena is rebuilt under Carbon's sorted-offset policy.\n *\n * @param {import(\"../CjsStringTable.js\").CjsStringTable} table Target arena.\n * @returns {{string:Function, blob:Function}} Arena resolver.\n */\nexport function internArena(table)\n{\n return {\n /**\n * Interns a string reference's text and returns its offset.\n *\n * @param {{value:string}} reference Parsed string reference.\n * @returns {number} Arena offset.\n */\n string(reference)\n {\n return table.offsetOf(table.addString(reference.value));\n },\n\n /**\n * Interns a blob reference's bytes and returns its offset. A zero-size\n * blob keeps its original reference — Carbon leaves the offset word\n * unset in that case, and the reader never dereferences it.\n *\n * @param {{size:number, offset:number, bytes:Uint8Array}} reference Parsed blob reference.\n * @returns {number} Arena offset.\n */\n blob(reference)\n {\n if (reference.size === 0) return reference.offset;\n return table.offsetOf(table.addBytes(reference.bytes));\n }\n };\n}\n\n/**\n * Creates a resolver that only interns, emitting a placeholder offset.\n *\n * Carbon resolves an arena offset while packing a body\n * (`PackedStream::Save(StringReference)`, `EffectData.h:187-193`), by which\n * point every string must already be in the table — a late `AddString` marks\n * the table dirty and the next `GetOffset` re-sorts it, silently invalidating\n * every offset already baked into a packed body. Carbon dodges this by\n * interning all late strings up front (`ShaderCompiler.cpp:686-694`, before the\n * packing loop at `:697-714`).\n *\n * Running the write walk twice — once collecting, once emitting — reproduces\n * that discipline without depending on a caller remembering it, and because\n * both passes traverse the same code they cannot drift apart.\n *\n * @param {import(\"../CjsStringTable.js\").CjsStringTable} table Target arena.\n * @returns {{string:Function, blob:Function}} Collect-only resolver.\n */\nexport function collectArena(table)\n{\n return {\n /**\n * Interns a string reference's text.\n *\n * @param {{value:string}} reference Parsed string reference.\n * @returns {number} Placeholder offset.\n */\n string(reference)\n {\n table.addString(reference.value);\n return 0;\n },\n\n /**\n * Interns a blob reference's bytes, skipping zero-size blobs.\n *\n * @param {{size:number, bytes:Uint8Array}} reference Parsed blob reference.\n * @returns {number} Placeholder offset.\n */\n blob(reference)\n {\n if (reference.size !== 0) table.addBytes(reference.bytes);\n return 0;\n }\n };\n}\n\n/**\n * Reads a bare `u32` arena offset and the NUL-terminated string behind it.\n *\n * @param {import(\"../CjsByteReader.js\").CjsByteReader} reader Source reader.\n * @returns {{offset:number, value:string}} String reference.\n */\nfunction readStringRef(reader)\n{\n const offset = reader.readUint32();\n return { offset, value: reader.readStringAt(offset) };\n}\n\n/**\n * Reads a `{u32 size, u32 offset}` blob reference.\n *\n * @param {import(\"../CjsByteReader.js\").CjsByteReader} reader Source reader.\n * @returns {{size:number, offset:number, bytes:Uint8Array}} Blob reference.\n */\nfunction readBlobRef(reader)\n{\n const size = reader.readUint32();\n const blob = reader.readTableBlobOptional(size);\n return { size, offset: blob.offset, bytes: blob.bytes };\n}\n\n/**\n * Writes a `{u32 size, u32 offset}` blob reference.\n *\n * @param {import(\"../CjsByteWriter.js\").CjsByteWriter} writer Target writer.\n * @param {object} arena Arena resolver.\n * @param {{size:number}} reference Blob reference.\n */\nfunction writeBlobRef(writer, arena, reference)\n{\n writer.u32(reference.size);\n writer.u32(arena.blob(reference));\n}\n\n/**\n * An absent sized blob: zero length, Carbon's null offset. The offset word is\n * still written, and a reader must not dereference it.\n */\nconst EMPTY_BLOB = Object.freeze({ size: 0, offset: 0xffffffff, bytes: new Uint8Array(0) });\n\n/**\n * Error factory used by the write path's cap checks.\n *\n * @param {string} message Failure reason.\n * @param {object} details Structured details.\n * @returns {CjsFormatWriteError} Write error.\n */\nfunction writeError(message, details)\n{\n return new CjsFormatWriteError(message, details);\n}\n\n/**\n * Requires that a sized record parsed to exactly its declared end.\n *\n * This is the universal form of the rule the backend block discovered, and it\n * carries real weight: it is the successor to roughly 600 lines of cross-chunk\n * agreement checks that the container rewrite deletes. Those checks caught a\n * malformed *tree* — our writer emitting something structurally wrong — not only a\n * malformed file. Under a record layout a writer bug either fails to parse, which\n * is self-announcing, or it parses and leaves the cursor somewhere other than the\n * declared end. Trailing bytes therefore mean one of two things, both fatal: the\n * writer knew fields this reader does not, or the writer miscounted.\n *\n * Applying it to some sized records and not others is a gap that stays invisible\n * until a writer bug hides in one of the others, so every sized record gets it.\n *\n * @param {import(\"../CjsByteReader.js\").CjsByteReader} reader Reader at the record end.\n * @param {string} what Record name for the error message.\n * @param {Function} makeError Error factory.\n */\nfunction requireExhaustive(reader, what, makeError)\n{\n if (reader.remaining !== 0)\n {\n throw makeError(\n `Carbon effect ${what} has ${reader.remaining} unparsed trailing byte(s)`,\n { trailingBytes: reader.remaining, offset: reader.offset, end: reader.end }\n );\n }\n}\n\n/**\n * Rejects a count above Carbon's inclusive limit for that field.\n *\n * @param {number} value Count read or about to be written.\n * @param {string} field Cap key in `CARBON_EFFECT_COUNT_CAPS`.\n * @param {Function} makeError Error factory taking a message and details.\n * @returns {number} The count.\n */\nfunction sanityCheck(value, field, makeError)\n{\n const limit = CARBON_EFFECT_COUNT_CAPS[field];\n if (limit !== undefined && value > limit)\n {\n throw makeError(`Effect ${field} count ${value} exceeds Carbon's limit of ${limit}`, {\n field,\n value,\n limit\n });\n }\n return value;\n}\n\n/**\n * Reads one annotation map: `u8 count`, then name/type/value triples\n * (`ParameterAnnotation::Save` `EffectData.h:601-623`, `ReadAnnotations`\n * `Tr2EffectDescription.cpp:114-134`).\n *\n * A non-string value is kept as its raw four bytes. Carbon writes it through\n * the `float` member of a `{float,int32_t}` union and reads it back through a\n * different union, so the bytes are the only faithful representation; applying\n * an int/float conversion here would corrupt round-trips.\n *\n * @param {import(\"../CjsByteReader.js\").CjsByteReader} reader Source reader.\n * @returns {object[]} Annotation records.\n */\nfunction readAnnotations(reader)\n{\n const count = reader.readUint8();\n const annotations = [];\n for (let index = 0; index < count; index += 1)\n {\n const name = readStringRef(reader);\n const type = reader.readUint8();\n if (type === CARBON_ANNOTATION_TYPE.STRING)\n {\n annotations.push({ name, type, stringValue: readStringRef(reader), rawValue: null });\n }\n else\n {\n annotations.push({ name, type, stringValue: null, rawValue: Uint8Array.from(reader.readRaw(4)) });\n }\n }\n return annotations;\n}\n\n/**\n * Writes one annotation map.\n *\n * @param {import(\"../CjsByteWriter.js\").CjsByteWriter} writer Target writer.\n * @param {object} arena Arena resolver.\n * @param {object[]} annotations Annotation records.\n */\nfunction writeAnnotations(writer, arena, annotations)\n{\n writer.u8(annotations.length);\n for (const annotation of annotations)\n {\n writer.u32(arena.string(annotation.name));\n writer.u8(annotation.type);\n if (annotation.type === CARBON_ANNOTATION_TYPE.STRING)\n {\n writer.u32(arena.string(annotation.stringValue));\n }\n else\n {\n writer.bytes(annotation.rawValue);\n }\n }\n}\n\n/**\n * Maps a pre-v11 constant type byte onto the current enum\n * (`Tr2EffectDescription.cpp:141-158`). The old wire knew FLOAT/INT/BOOL;\n * the current numbering is FLOAT 0, INT 1, UINT 2, BOOL 3, OTHER 4.\n *\n * @param {number} value Pre-v11 type byte.\n * @returns {number} Current constant type value.\n */\nfunction mapOldConstantType(value)\n{\n if (value === 0) return 0;\n if (value === 1) return 1;\n if (value === 2) return 3;\n return 4;\n}\n\n/**\n * Reads one `Constant` (`EffectData.h:283-294`, `ReadConstant`\n * `Tr2EffectDescription.cpp:136-170`). The byte layout is identical across\n * versions 8..15; only the type byte's numbering changed at v11.\n *\n * @param {import(\"../CjsByteReader.js\").CjsByteReader} reader Source reader.\n * @param {number} version Container data version.\n * @returns {object} Constant record.\n */\nfunction readConstant(reader, version)\n{\n const name = readStringRef(reader);\n const offset = reader.readUint32();\n const size = reader.readUint32();\n const rawType = reader.readUint8();\n return {\n name,\n offset,\n size,\n type: version < 11 ? mapOldConstantType(rawType) : rawType,\n dimension: reader.readUint8(),\n elements: reader.readUint32(),\n isSRGB: reader.readUint8(),\n isAutoregister: reader.readUint8()\n };\n}\n\n/**\n * Writes one `Constant`.\n *\n * @param {import(\"../CjsByteWriter.js\").CjsByteWriter} writer Target writer.\n * @param {object} arena Arena resolver.\n * @param {object} constant Constant record.\n */\nfunction writeConstant(writer, arena, constant)\n{\n writer.u32(arena.string(constant.name));\n writer.u32(constant.offset);\n writer.u32(constant.size);\n writer.u8(constant.type);\n writer.u8(constant.dimension);\n writer.u32(constant.elements);\n writer.u8(constant.isSRGB);\n writer.u8(constant.isAutoregister);\n}\n\n/**\n * Reads one `Texture` (`EffectData.h:320-328`, `ReadResource`\n * `Tr2EffectDescription.cpp:172-190`). `count` is the reader's\n * `arrayElements`; before v13 the field is not on the wire and Carbon\n * defaults it to one element.\n *\n * @param {import(\"../CjsByteReader.js\").CjsByteReader} reader Source reader.\n * @param {number} version Container data version.\n * @returns {object} Texture record.\n */\nfunction readTexture(reader, version)\n{\n return {\n name: readStringRef(reader),\n type: reader.readUint8(),\n count: version >= 13 ? reader.readUint32() : 1,\n isSRGB: reader.readUint8(),\n isAutoregister: reader.readUint8()\n };\n}\n\n/**\n * Writes one `Texture`.\n *\n * @param {import(\"../CjsByteWriter.js\").CjsByteWriter} writer Target writer.\n * @param {object} arena Arena resolver.\n * @param {object} texture Texture record.\n */\nfunction writeTexture(writer, arena, texture)\n{\n writer.u32(arena.string(texture.name));\n writer.u8(texture.type);\n writer.u32(texture.count);\n writer.u8(texture.isSRGB);\n writer.u8(texture.isAutoregister);\n}\n\n/**\n * Reads one `Uav` (`EffectData.h:345-352`, inline at\n * `Tr2EffectDescription.cpp:449-463`).\n *\n * A UAV record is one byte shorter than a texture record: it carries no\n * `isSRGB`. Carbon's reader hardcodes `isSRGB = false`\n * (`Tr2EffectDescription.cpp:450`) rather than reading it, and `Uav::Save`\n * omits it. Reusing a shared \"resource\" codec for both is the mistake this\n * comment exists to prevent.\n *\n * @param {import(\"../CjsByteReader.js\").CjsByteReader} reader Source reader.\n * @param {number} version Container data version.\n * @returns {object} UAV record.\n */\nfunction readUav(reader, version)\n{\n return {\n name: readStringRef(reader),\n type: reader.readUint8(),\n count: version >= 13 ? reader.readUint32() : 1,\n isAutoregister: reader.readUint8()\n };\n}\n\n/**\n * Writes one `Uav`.\n *\n * @param {import(\"../CjsByteWriter.js\").CjsByteWriter} writer Target writer.\n * @param {object} arena Arena resolver.\n * @param {object} uav UAV record.\n */\nfunction writeUav(writer, arena, uav)\n{\n writer.u32(arena.string(uav.name));\n writer.u8(uav.type);\n writer.u32(uav.count);\n writer.u8(uav.isAutoregister);\n}\n\n/**\n * Reads one `Sampler` (`EffectData.h:368-390`, `ReadSampler`\n * `Tr2EffectDescription.cpp:192-232` plus the name at `:413` and `isDynamic`\n * at `:429`). Border colour here is four floats — unlike a static sampler,\n * where it is a one-byte enum.\n *\n * `isDynamic` joined the wire at v13. For older versions the key is OMITTED\n * from the record rather than synthesised: the concept did not exist, so any\n * invented value would either lie or (via the v15 rule that a non-dynamic\n * sampler's name is cleared) silently erase names a legacy file does carry.\n *\n * @param {import(\"../CjsByteReader.js\").CjsByteReader} reader Source reader.\n * @param {number} version Container data version.\n * @returns {object} Sampler record.\n */\nfunction readSampler(reader, version)\n{\n const record = {\n name: readStringRef(reader),\n comparison: reader.readUint8(),\n minFilter: reader.readUint8(),\n magFilter: reader.readUint8(),\n mipFilter: reader.readUint8(),\n addressU: reader.readUint8(),\n addressV: reader.readUint8(),\n addressW: reader.readUint8(),\n mipLODBias: reader.readFloat32(),\n maxAnisotropy: reader.readUint8(),\n comparisonFunc: reader.readUint8(),\n borderColor: [\n reader.readFloat32(),\n reader.readFloat32(),\n reader.readFloat32(),\n reader.readFloat32()\n ],\n minLOD: reader.readFloat32(),\n maxLOD: reader.readFloat32()\n };\n if (version > 12)\n {\n record.isDynamic = reader.readUint8();\n }\n return record;\n}\n\n/**\n * Writes one `Sampler`.\n *\n * @param {import(\"../CjsByteWriter.js\").CjsByteWriter} writer Target writer.\n * @param {object} arena Arena resolver.\n * @param {object} sampler Sampler record.\n */\nfunction writeSampler(writer, arena, sampler)\n{\n writer.u32(arena.string(sampler.name));\n writer.u8(sampler.comparison);\n writer.u8(sampler.minFilter);\n writer.u8(sampler.magFilter);\n writer.u8(sampler.mipFilter);\n writer.u8(sampler.addressU);\n writer.u8(sampler.addressV);\n writer.u8(sampler.addressW);\n writer.f32(sampler.mipLODBias);\n writer.u8(sampler.maxAnisotropy);\n writer.u8(sampler.comparisonFunc);\n writer.f32(sampler.borderColor[0]);\n writer.f32(sampler.borderColor[1]);\n writer.f32(sampler.borderColor[2]);\n writer.f32(sampler.borderColor[3]);\n writer.f32(sampler.minLOD);\n writer.f32(sampler.maxLOD);\n writer.u8(sampler.isDynamic);\n}\n\n/**\n * Reads one `StaticSampler` (`EffectData.h:512-531`, read inside\n * `ReadRegisters` at `Tr2EffectDescription.cpp:324-365`). Border colour is a\n * one-byte enum here, and there is no name.\n *\n * @param {import(\"../CjsByteReader.js\").CjsByteReader} reader Source reader.\n * @returns {object} Static sampler record.\n */\nfunction readStaticSampler(reader)\n{\n return {\n registerIndex: reader.readUint32(),\n registerSpace: reader.readUint8(),\n comparison: reader.readUint8(),\n minFilter: reader.readUint8(),\n magFilter: reader.readUint8(),\n mipFilter: reader.readUint8(),\n addressU: reader.readUint8(),\n addressV: reader.readUint8(),\n addressW: reader.readUint8(),\n mipLODBias: reader.readFloat32(),\n maxAnisotropy: reader.readUint8(),\n comparisonFunc: reader.readUint8(),\n borderColor: reader.readUint8(),\n minLOD: reader.readFloat32(),\n maxLOD: reader.readFloat32()\n };\n}\n\n/**\n * Writes one `StaticSampler`.\n *\n * @param {import(\"../CjsByteWriter.js\").CjsByteWriter} writer Target writer.\n * @param {object} sampler Static sampler record.\n */\nfunction writeStaticSampler(writer, sampler)\n{\n writer.u32(sampler.registerIndex);\n writer.u8(sampler.registerSpace);\n writer.u8(sampler.comparison);\n writer.u8(sampler.minFilter);\n writer.u8(sampler.magFilter);\n writer.u8(sampler.mipFilter);\n writer.u8(sampler.addressU);\n writer.u8(sampler.addressV);\n writer.u8(sampler.addressW);\n writer.f32(sampler.mipLODBias);\n writer.u8(sampler.maxAnisotropy);\n writer.u8(sampler.comparisonFunc);\n writer.u8(sampler.borderColor);\n writer.f32(sampler.minLOD);\n writer.f32(sampler.maxLOD);\n}\n\n/**\n * Maps a pre-v10 register type byte onto the current register-type values\n * (`Tr2EffectDescription.cpp:262-276`).\n *\n * @param {number} value Pre-v10 register type byte.\n * @returns {number} Current register type value.\n */\nfunction mapOldRegisterType(value)\n{\n if (value === 0) return 0;\n if (value === 1) return 36;\n if (value === 2) return 68;\n if (value === 3) return 1;\n return 36;\n}\n\n/**\n * Reads the register signature and (v13+) static-sampler table\n * (`ReadRegisters`, `Tr2EffectDescription.cpp:258-367`).\n *\n * Before v13 a register carries only its type and index; Carbon defaults the\n * count to one and the space to the stage type (`:340-343`), and the record is\n * normalized here so consumers see one shape.\n *\n * @param {import(\"../CjsByteReader.js\").CjsByteReader} reader Source reader.\n * @param {number} version Container data version.\n * @param {number} stageType Stage type owning the signature; only consulted\n * for the pre-v13 register-space default.\n * @returns {{registers:object[], staticSamplers:object[]}} Signature records.\n */\nfunction readSignature(reader, version, stageType)\n{\n const registers = [];\n const registerCount = reader.readUint8();\n for (let index = 0; index < registerCount; index += 1)\n {\n const rawType = reader.readUint8();\n const registerType = version > 9 ? rawType : mapOldRegisterType(rawType);\n const registerIndex = reader.readUint32();\n if (version > 12)\n {\n registers.push({\n registerType,\n registerIndex,\n registerCount: reader.readUint32(),\n registerSpace: reader.readUint8()\n });\n }\n else\n {\n registers.push({\n registerType,\n registerIndex,\n registerCount: 1,\n registerSpace: stageType\n });\n }\n }\n\n const staticSamplers = [];\n if (version > 12)\n {\n const staticSamplerCount = reader.readUint8();\n for (let index = 0; index < staticSamplerCount; index += 1)\n {\n staticSamplers.push(readStaticSampler(reader));\n }\n }\n\n return { registers, staticSamplers };\n}\n\n/**\n * Reads the resource half of a `StageData` block: constants, default constant\n * values, textures, samplers, UAVs, annotations (`ReadInput`,\n * `Tr2EffectDescription.cpp:369-472`).\n *\n * @param {import(\"../CjsByteReader.js\").CjsByteReader} reader Source reader.\n * @param {number} version Container data version.\n * @param {Function} makeError Error factory.\n * @returns {object} Stage resource records.\n */\nfunction readStageResources(reader, version, makeError)\n{\n const constants = [];\n const constantCount = reader.readUint32();\n for (let index = 0; index < constantCount; index += 1)\n {\n constants.push(readConstant(reader, version));\n }\n\n const defaultValues = readBlobRef(reader);\n\n const textures = [];\n const textureCount = sanityCheck(reader.readUint8(), \"textures\", makeError);\n for (let index = 0; index < textureCount; index += 1)\n {\n const registerIndex = reader.readUint8();\n textures.push({ registerIndex, ...readTexture(reader, version) });\n }\n\n const samplers = [];\n const samplerCount = sanityCheck(reader.readUint8(), \"samplers\", makeError);\n for (let index = 0; index < samplerCount; index += 1)\n {\n const registerIndex = reader.readUint8();\n samplers.push({ registerIndex, ...readSampler(reader, version) });\n }\n\n const uavs = [];\n const uavCount = sanityCheck(reader.readUint8(), \"uavs\", makeError);\n for (let index = 0; index < uavCount; index += 1)\n {\n const registerIndex = reader.readUint8();\n uavs.push({ registerIndex, ...readUav(reader, version) });\n }\n\n return {\n constants,\n defaultValues,\n textures,\n samplers,\n uavs,\n annotations: readAnnotations(reader)\n };\n}\n\n/**\n * Reads a whole `StageData` block: registers, static samplers, then the\n * resource half (`StageData::Save` `EffectData.h:631-676`).\n *\n * Carbon's reader splits this single contiguous run across two functions —\n * `ReadRegisters` takes the first two sub-records\n * (`Tr2EffectDescription.cpp:258-367`) and `ReadInput` the remaining six\n * (`:369-472`). The split exists here too, because before v14 the two halves\n * are not adjacent on the wire — the signature precedes the program blob\n * while the resources follow the thread-group size — and `readStage` places\n * each half where its version put it.\n *\n * @param {import(\"../CjsByteReader.js\").CjsByteReader} reader Source reader.\n * @param {number} version Container data version.\n * @param {Function} makeError Error factory.\n * @param {number} stageType Stage type owning the signature.\n * @returns {object} Stage data record.\n */\nfunction readStageData(reader, version, makeError, stageType)\n{\n return {\n ...readSignature(reader, version, stageType),\n ...readStageResources(reader, version, makeError)\n };\n}\n\n/**\n * Writes the `StageData` block.\n *\n * @param {import(\"../CjsByteWriter.js\").CjsByteWriter} writer Target writer.\n * @param {object} arena Arena resolver.\n * @param {object} stageData Stage data record.\n */\nfunction writeStageData(writer, arena, stageData)\n{\n writer.u8(stageData.registers.length);\n for (const register of stageData.registers)\n {\n writer.u8(register.registerType);\n writer.u32(register.registerIndex);\n writer.u32(register.registerCount);\n writer.u8(register.registerSpace);\n }\n\n writer.u8(stageData.staticSamplers.length);\n for (const sampler of stageData.staticSamplers)\n {\n writeStaticSampler(writer, sampler);\n }\n\n writer.u32(stageData.constants.length);\n for (const constant of stageData.constants)\n {\n writeConstant(writer, arena, constant);\n }\n\n writeBlobRef(writer, arena, stageData.defaultValues);\n\n // Carbon's compiler enforces none of these caps while its runtime rejects\n // anything above them, so an over-large effect compiles and then fails to\n // load. Check on the way out instead.\n sanityCheck(stageData.textures.length, \"textures\", writeError);\n sanityCheck(stageData.samplers.length, \"samplers\", writeError);\n sanityCheck(stageData.uavs.length, \"uavs\", writeError);\n\n writer.u8(stageData.textures.length);\n for (const texture of stageData.textures)\n {\n writer.u8(texture.registerIndex);\n writeTexture(writer, arena, texture);\n }\n\n writer.u8(stageData.samplers.length);\n for (const sampler of stageData.samplers)\n {\n writer.u8(sampler.registerIndex);\n writeSampler(writer, arena, sampler);\n }\n\n writer.u8(stageData.uavs.length);\n for (const uav of stageData.uavs)\n {\n writer.u8(uav.registerIndex);\n writeUav(writer, arena, uav);\n }\n\n writeAnnotations(writer, arena, stageData.annotations);\n}\n\n/**\n * Reads the pipeline-input list (`Tr2EffectDescription.cpp:234-256`).\n *\n * The `type`/`dimension` bytes joined the wire at v11; before that Carbon\n * derives them — UINT for the blend-index usage, FLOAT otherwise, always four\n * components (`:247-252`) — and the record is normalized here the same way.\n *\n * @param {import(\"../CjsByteReader.js\").CjsByteReader} reader Source reader.\n * @param {number} version Container data version.\n * @param {Function} makeError Error factory.\n * @returns {object[]} Pipeline-input records.\n */\nfunction readPipelineInputs(reader, version, makeError)\n{\n const pipelineInputs = [];\n const pipelineInputCount = sanityCheck(reader.readUint8(), \"pipelineInputs\", makeError);\n for (let index = 0; index < pipelineInputCount; index += 1)\n {\n const usage = reader.readUint8();\n const registerIndex = reader.readUint8();\n const usageIndex = reader.readUint8();\n const usedMask = reader.readUint8();\n if (version > 10)\n {\n pipelineInputs.push({\n usage,\n registerIndex,\n usageIndex,\n usedMask,\n type: reader.readUint8(),\n dimension: reader.readUint8()\n });\n }\n else\n {\n pipelineInputs.push({\n usage,\n registerIndex,\n usageIndex,\n usedMask,\n // Constant-type values: 2 is UINT, 0 is FLOAT; usage 6 is the\n // blend-index semantic.\n type: usage === 6 ? 2 : 0,\n dimension: 4\n });\n }\n }\n return pipelineInputs;\n}\n\n/**\n * Reads one stage (`StageInput::Save` `EffectData.h:691-709`,\n * `Tr2EffectDescription.cpp:532-585`).\n *\n * At v15 the program payload comes first and the signature tables follow.\n * Before v14 it was the other way round; the reorder is the v14 change, and\n * Carbon marks its own v14 branch `// CHECK` (`:578`). Verified against the\n * writer for v15: `type`, `shaderSize`, `shaderData`,\n * `threadGroupSize[0..2]`, `pipelineInputs`, then `StageData`. Two further\n * legacy wrinkles, both from Carbon's reader: a stage carries no register\n * signature at all before v9 (`:544`), and two legacy dwords follow the\n * program reference before v12, read and discarded (`:559-563`).\n *\n * @param {import(\"../CjsByteReader.js\").CjsByteReader} reader Source reader.\n * @param {number} version Container data version.\n * @param {Function} makeError Error factory.\n * @returns {object} Stage record.\n */\nfunction readStage(reader, version, makeError)\n{\n const type = reader.readUint8();\n\n let pipelineInputs = [];\n let signature = { registers: [], staticSamplers: [] };\n if (version < 14)\n {\n pipelineInputs = readPipelineInputs(reader, version, makeError);\n if (version > 8)\n {\n signature = readSignature(reader, version, type);\n }\n }\n\n const shaderData = readBlobRef(reader);\n if (version < 12)\n {\n reader.readUint32();\n reader.readUint32();\n }\n const threadGroupSize = [ reader.readUint32(), reader.readUint32(), reader.readUint32() ];\n\n if (version >= 14)\n {\n pipelineInputs = readPipelineInputs(reader, version, makeError);\n signature = readSignature(reader, version, type);\n }\n\n return {\n type,\n shaderData,\n threadGroupSize,\n pipelineInputs,\n ...signature,\n ...readStageResources(reader, version, makeError)\n };\n}\n\n/**\n * Writes one stage.\n *\n * @param {import(\"../CjsByteWriter.js\").CjsByteWriter} writer Target writer.\n * @param {object} arena Arena resolver.\n * @param {object} stage Stage record.\n */\nfunction writeStage(writer, arena, stage)\n{\n sanityCheck(stage.pipelineInputs.length, \"pipelineInputs\", writeError);\n writer.u8(stage.type);\n writeBlobRef(writer, arena, stage.shaderData);\n writer.u32(stage.threadGroupSize[0]);\n writer.u32(stage.threadGroupSize[1]);\n writer.u32(stage.threadGroupSize[2]);\n\n writer.u8(stage.pipelineInputs.length);\n for (const input of stage.pipelineInputs)\n {\n writer.u8(input.usage);\n writer.u8(input.registerIndex);\n writer.u8(input.usageIndex);\n writer.u8(input.usedMask);\n writer.u8(input.type);\n writer.u8(input.dimension);\n }\n\n writeStageData(writer, arena, stage);\n}\n\n/**\n * Reads one pass (`Pass::Save` `EffectData.h:724-738`).\n *\n * @param {import(\"../CjsByteReader.js\").CjsByteReader} reader Source reader.\n * @param {number} version Container data version.\n * @param {Function} makeError Error factory.\n * @param {boolean} backend Whether the optional trailing block is present.\n * @returns {object} Pass record.\n */\nfunction readPass(reader, version, makeError, backend)\n{\n const stages = [];\n const stageCount = sanityCheck(reader.readUint8(), \"stages\", makeError);\n for (let index = 0; index < stageCount; index += 1)\n {\n stages.push(readStage(reader, version, makeError));\n }\n\n const renderStates = [];\n const stateCount = sanityCheck(reader.readUint8(), \"renderStates\", makeError);\n for (let index = 0; index < stateCount; index += 1)\n {\n renderStates.push({ state: reader.readUint32(), value: reader.readUint32() });\n }\n\n // The one optional trailing block, present only in our own containers. A\n // Carbon file ends the pass at the render-state table, so leaving this gate\n // closed reproduces Carbon's bytes exactly.\n const backendBlock = backend ? readBlobRef(reader) : null;\n\n return { stages, renderStates, ...(backendBlock ? { backendBlock } : {}) };\n}\n\n/**\n * Writes one pass.\n *\n * @param {import(\"../CjsByteWriter.js\").CjsByteWriter} writer Target writer.\n * @param {object} arena Arena resolver.\n * @param {object} pass Pass record.\n * @param {boolean} backend Whether to emit the optional trailing block.\n */\nfunction writePass(writer, arena, pass, backend)\n{\n writer.u8(pass.stages.length);\n for (const stage of pass.stages)\n {\n writeStage(writer, arena, stage);\n }\n writer.u8(pass.renderStates.length);\n for (const entry of pass.renderStates)\n {\n writer.u32(entry.state);\n writer.u32(entry.value);\n }\n if (backend)\n {\n writeBlobRef(writer, arena, pass.backendBlock ?? EMPTY_BLOB);\n }\n}\n\n/**\n * Reads one raytracing library (`Library::Save` `EffectData.h:760-775`,\n * `Tr2EffectDescription.cpp:675-721`). A library carries two `StageData`\n * blocks and no pipeline inputs, thread group size, or stage type.\n *\n * @param {import(\"../CjsByteReader.js\").CjsByteReader} reader Source reader.\n * @param {number} version Container data version.\n * @param {Function} makeError Error factory.\n * @returns {object} Library record.\n */\nfunction readLibrary(reader, version, makeError)\n{\n const payloadSize = reader.readUint32();\n const shaderData = readBlobRef(reader);\n\n const exports = [];\n const exportCount = reader.readUint32();\n for (let index = 0; index < exportCount; index += 1)\n {\n exports.push({ type: reader.readUint8(), name: readStringRef(reader) });\n }\n\n // Libraries exist only from v14, so the pre-v13 register-space default in\n // the signature reader is unreachable here; the stage type it would need\n // is passed as zero.\n return {\n payloadSize,\n shaderData,\n exports,\n hitGroupName: readStringRef(reader),\n globalInputs: readStageData(reader, version, makeError, 0),\n localInputs: readStageData(reader, version, makeError, 0)\n };\n}\n\n/**\n * Writes one raytracing library.\n *\n * @param {import(\"../CjsByteWriter.js\").CjsByteWriter} writer Target writer.\n * @param {object} arena Arena resolver.\n * @param {object} library Library record.\n */\nfunction writeLibrary(writer, arena, library)\n{\n writer.u32(library.payloadSize);\n writeBlobRef(writer, arena, library.shaderData);\n writer.u32(library.exports.length);\n for (const entry of library.exports)\n {\n writer.u8(entry.type);\n writer.u32(arena.string(entry.name));\n }\n writer.u32(arena.string(library.hitGroupName));\n writeStageData(writer, arena, library.globalInputs);\n writeStageData(writer, arena, library.localInputs);\n}\n\n/**\n * Reads a whole v15 description blob (`EffectData::Save`\n * `EffectData.h:821-849`, `Tr2EffectDescription::Read`\n * `Tr2EffectDescription.cpp:476-731`).\n *\n * @param {import(\"../CjsByteReader.js\").CjsByteReader} reader Reader positioned at the blob.\n * @param {object} [options] Read options.\n * @param {Function} [options.makeError] Error factory taking a message and details.\n * @param {number} [options.version] Container data version; defaults to the\n * current version. Accepted range is `CARBON_EFFECT_MIN_DATA_VERSION` to\n * `CARBON_EFFECT_DATA_VERSION`; the record tree comes out normalized to\n * the v15 shape whatever the wire carried.\n * @param {boolean} [options.backend] Expect our optional per-pass trailing block.\n * Leave false for a Carbon file, which ends each pass at the render states.\n * @returns {object} Description record tree.\n */\nexport function readEffectDescription(reader, options = {})\n{\n const makeError = options.makeError\n ?? ((message, details) => reader._error(message, details));\n const backend = options.backend === true;\n const version = Number.isInteger(options.version)\n ? options.version\n : CARBON_EFFECT_DATA_VERSION;\n if (version < CARBON_EFFECT_MIN_DATA_VERSION || version > CARBON_EFFECT_DATA_VERSION)\n {\n throw makeError(\n `Unsupported Carbon effect version ${version}; expected ${CARBON_EFFECT_MIN_DATA_VERSION}..${CARBON_EFFECT_DATA_VERSION}`,\n { version }\n );\n }\n\n const techniques = [];\n const techniqueCount = reader.readUint8();\n for (let techniqueIndex = 0; techniqueIndex < techniqueCount; techniqueIndex += 1)\n {\n const name = readStringRef(reader);\n\n const passes = [];\n const passCount = sanityCheck(reader.readUint8(), \"passes\", makeError);\n for (let passIndex = 0; passIndex < passCount; passIndex += 1)\n {\n passes.push(readPass(reader, version, makeError, backend));\n }\n\n // The library table joined the wire at v14; older files end the\n // technique at its passes.\n const libraries = [];\n if (version > 13)\n {\n const libraryCount = reader.readUint8();\n for (let libraryIndex = 0; libraryIndex < libraryCount; libraryIndex += 1)\n {\n libraries.push(readLibrary(reader, version, makeError));\n }\n }\n\n techniques.push({ name, passes, libraries });\n }\n\n const annotations = [];\n const parameterCount = sanityCheck(reader.readUint16(), \"effectAnnotations\", makeError);\n for (let index = 0; index < parameterCount; index += 1)\n {\n annotations.push({ name: readStringRef(reader), annotations: readAnnotations(reader) });\n }\n\n requireExhaustive(reader, \"description blob\", makeError);\n\n return { techniques, annotations };\n}\n\n/**\n * Writes a whole v15 description blob.\n *\n * The `arena` resolver decides what an arena reference becomes: `passthroughArena`\n * keeps the source offsets, `internArena(table)` re-interns into a new table.\n *\n * @param {import(\"../CjsByteWriter.js\").CjsByteWriter} writer Target writer.\n * @param {object} description Description record tree.\n * @param {object} [options] Write options.\n * @param {object} [options.arena] Arena resolver; defaults to passthrough.\n * @param {boolean} [options.backend] Emit our optional per-pass trailing block.\n * Leave false to produce bytes a Carbon reader accepts unchanged.\n * @param {number} [options.version] Container data version to emit; must be one\n * of `CARBON_EFFECT_WRITE_VERSIONS`. Defaults to the current version.\n * @returns {import(\"../CjsByteWriter.js\").CjsByteWriter} The writer.\n */\nexport function writeEffectDescription(writer, description, options = {})\n{\n const arena = options.arena ?? passthroughArena;\n const backend = options.backend === true;\n // Validated, though nothing below branches on it yet: today every writable\n // version produces the same body shape. A caller asking for a version we\n // cannot emit must be refused here, at the description boundary, rather\n // than have its request ignored and v15 bytes written under another number.\n // When a version changes the body, branch on this.\n resolveWriteVersion(options.version);\n\n writer.u8(description.techniques.length);\n for (const technique of description.techniques)\n {\n writer.u32(arena.string(technique.name));\n writer.u8(sanityCheck(technique.passes.length, \"passes\", writeError));\n for (const pass of technique.passes)\n {\n sanityCheck(pass.stages.length, \"stages\", writeError);\n sanityCheck(pass.renderStates.length, \"renderStates\", writeError);\n writePass(writer, arena, pass, backend);\n }\n writer.u8(technique.libraries.length);\n for (const library of technique.libraries)\n {\n writeLibrary(writer, arena, library);\n }\n }\n\n writer.u16(sanityCheck(description.annotations.length, \"effectAnnotations\", writeError));\n for (const parameter of description.annotations)\n {\n writer.u32(arena.string(parameter.name));\n writeAnnotations(writer, arena, parameter.annotations);\n }\n\n return writer;\n}\n"],"names":["CARBON_EFFECT_DATA_VERSION","CARBON_EFFECT_WRITE_VERSIONS","Object","freeze","resolveWriteVersion","version","undefined","includes","CjsFormatWriteError","requested","writable","CARBON_EFFECT_MIN_DATA_VERSION","CARBON_ANNOTATION_TYPE","BOOL","INT","FLOAT","STRING","CARBON_EFFECT_COUNT_CAPS","pipelineInputs","passes","stages","textures","samplers","uavs","renderStates","effectAnnotations","CARBON_SHADER_CONSTANTS_MAX","compareAnnotationNames","a","b","compareUtf8","passthroughArena","string","reference","offset","blob","internArena","table","offsetOf","addString","value","size","addBytes","bytes","collectArena","readStringRef","reader","readUint32","readStringAt","readBlobRef","readTableBlobOptional","writeBlobRef","writer","arena","u32","EMPTY_BLOB","Uint8Array","writeError","message","details","requireExhaustive","what","makeError","remaining","trailingBytes","end","sanityCheck","field","limit","readAnnotations","count","readUint8","annotations","index","name","type","push","stringValue","rawValue","from","readRaw","writeAnnotations","u8","length","annotation","mapOldConstantType","readConstant","rawType","dimension","elements","isSRGB","isAutoregister","writeConstant","constant","readTexture","writeTexture","texture","readUav","writeUav","uav","readSampler","record","comparison","minFilter","magFilter","mipFilter","addressU","addressV","addressW","mipLODBias","readFloat32","maxAnisotropy","comparisonFunc","borderColor","minLOD","maxLOD","isDynamic","writeSampler","sampler","f32","readStaticSampler","registerIndex","registerSpace","writeStaticSampler","mapOldRegisterType","readSignature","stageType","registers","registerCount","registerType","staticSamplers","staticSamplerCount","readStageResources","constants","constantCount","defaultValues","textureCount","samplerCount","uavCount","readStageData","writeStageData","stageData","register","readPipelineInputs","pipelineInputCount","usage","usageIndex","usedMask","readStage","signature","shaderData","threadGroupSize","writeStage","stage","input","readPass","backend","stageCount","stateCount","state","backendBlock","writePass","pass","entry","readLibrary","payloadSize","exports","exportCount","hitGroupName","globalInputs","localInputs","writeLibrary","library","readEffectDescription","options","_error","Number","isInteger","techniques","techniqueCount","techniqueIndex","passCount","passIndex","libraries","libraryCount","libraryIndex","parameterCount","readUint16","writeEffectDescription","description","technique","u16","parameter"],"mappings":";;;AAAA;AACA;;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMA,0BAA0B,GAAG;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMC,4BAA4B,GAAGC,MAAM,CAACC,MAAM,CAAC,CAAE,EAAE,CAAE;;AAEhE;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,mBAAmBA,CAACC,OAAO,EAC3C;EACI,IAAIA,OAAO,KAAKC,SAAS,IAAID,OAAO,KAAK,IAAI,EAAE,OAAOL,0BAA0B;AAChF,EAAA,IAAI,CAACC,4BAA4B,CAACM,QAAQ,CAACF,OAAO,CAAC,EACnD;AACI,IAAA,MAAM,IAAIG,mBAAmB,CACzB,CAAA,6CAAA,EAAgDH,OAAO,EAAE,EACzD;AAAEI,MAAAA,SAAS,EAAEJ,OAAO;MAAEK,QAAQ,EAAE,CAAE,GAAGT,4BAA4B;AAAG,KACxE,CAAC;AACL,EAAA;AACA,EAAA,OAAOI,OAAO;AAClB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMM,8BAA8B,GAAG;;AAE9C;AACA;AACA;AACA;MACaC,sBAAsB,GAAGV,MAAM,CAACC,MAAM,CAAC;AAChDU,EAAAA,IAAI,EAAE,CAAC;AACPC,EAAAA,GAAG,EAAE,CAAC;AACNC,EAAAA,KAAK,EAAE,CAAC;AACRC,EAAAA,MAAM,EAAE;AACZ,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;MACaC,wBAAwB,GAAGf,MAAM,CAACC,MAAM,CAAC;AAClDe,EAAAA,cAAc,EAAE,EAAE;AAClBC,EAAAA,MAAM,EAAE,EAAE;AACVC,EAAAA,MAAM,EAAE,CAAC;AACTC,EAAAA,QAAQ,EAAE,EAAE;AACZC,EAAAA,QAAQ,EAAE,EAAE;AACZC,EAAAA,IAAI,EAAE,EAAE;AACRC,EAAAA,YAAY,EAAE,EAAE;AAChBC,EAAAA,iBAAiB,EAAE;AACvB,CAAC;;AAED;AACA;AACA;AACA;AACA;AACO,MAAMC,2BAA2B,GAAG;;AAE3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,sBAAsBA,CAACC,CAAC,EAAEC,CAAC,EAC3C;AACI,EAAA,OAAOC,WAAW,CAACF,CAAC,EAAEC,CAAC,CAAC;AAC5B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;MACaE,gBAAgB,GAAG7B,MAAM,CAACC,MAAM,CAAC;AAC1C;AACJ;AACA;AACA;AACA;AACA;EACI6B,MAAMA,CAACC,SAAS,EAChB;IACI,OAAOA,SAAS,CAACC,MAAM;EAC3B,CAAC;AAED;AACJ;AACA;AACA;AACA;AACA;EACIC,IAAIA,CAACF,SAAS,EACd;IACI,OAAOA,SAAS,CAACC,MAAM;AAC3B,EAAA;AACJ,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASE,WAAWA,CAACC,KAAK,EACjC;EACI,OAAO;AACH;AACR;AACA;AACA;AACA;AACA;IACQL,MAAMA,CAACC,SAAS,EAChB;AACI,MAAA,OAAOI,KAAK,CAACC,QAAQ,CAACD,KAAK,CAACE,SAAS,CAACN,SAAS,CAACO,KAAK,CAAC,CAAC;IAC3D,CAAC;AAED;AACR;AACA;AACA;AACA;AACA;AACA;AACA;IACQL,IAAIA,CAACF,SAAS,EACd;MACI,IAAIA,SAAS,CAACQ,IAAI,KAAK,CAAC,EAAE,OAAOR,SAAS,CAACC,MAAM;AACjD,MAAA,OAAOG,KAAK,CAACC,QAAQ,CAACD,KAAK,CAACK,QAAQ,CAACT,SAAS,CAACU,KAAK,CAAC,CAAC;AAC1D,IAAA;GACH;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,YAAYA,CAACP,KAAK,EAClC;EACI,OAAO;AACH;AACR;AACA;AACA;AACA;AACA;IACQL,MAAMA,CAACC,SAAS,EAChB;AACII,MAAAA,KAAK,CAACE,SAAS,CAACN,SAAS,CAACO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"}
@@ -1,26 +1,27 @@
1
1
  import { CjsFormatReadError, CjsFormatWriteError } from '../CjsFormatError.js';
2
+ import { DETAIL_MAP_ARRAY_NAME } from '../../formats/hlsl/core/detailMapFamily.js';
2
3
 
3
- /**
4
- * The resource-transform section, shared by every backend's per-pass block.
5
- *
6
- * A resource transform is a recipe for building one backend resource out of
7
- * several Carbon ones. It is deliberately backend-neutral: `detail-map-array`
8
- * merges `Detail1Map`, `Detail2Map` and `Detail3Map` into one array texture, and
9
- * that decision is about the *resources*, not about WGSL or GLSL. Both backends
10
- * want the identical merge, for different reasons - WebGPU to reduce binding
11
- * churn, WebGL 2 because the family otherwise needs 17 texture units against a
12
- * limit of 16.
13
- *
14
- * So the section lives here rather than in either backend's block codec, and the
15
- * two codecs compose it. A transform written by one backend decodes identically
16
- * under the other.
4
+ /**
5
+ * The resource-transform section, shared by every backend's per-pass block.
6
+ *
7
+ * A resource transform is a recipe for building one backend resource out of
8
+ * several Carbon ones. It is deliberately backend-neutral: `detail-map-array`
9
+ * merges `Detail1Map`, `Detail2Map` and `Detail3Map` into one array texture, and
10
+ * that decision is about the *resources*, not about WGSL or GLSL. Both backends
11
+ * want the identical merge, for different reasons - WebGPU to reduce binding
12
+ * churn, WebGL 2 because the family otherwise needs 17 texture units against a
13
+ * limit of 16.
14
+ *
15
+ * So the section lives here rather than in either backend's block codec, and the
16
+ * two codecs compose it. A transform written by one backend decodes identically
17
+ * under the other.
17
18
  */
18
19
 
19
- /**
20
- * Resource-transform families. The discriminator exists so `kind`,
21
- * `representation`, `missingLayer` and the output name stay derivable without
22
- * pinning the format to one recognizer: a second family costs an enum value
23
- * rather than a format version bump.
20
+ /**
21
+ * Resource-transform families. The discriminator exists so `kind`,
22
+ * `representation`, `missingLayer` and the output name stay derivable without
23
+ * pinning the format to one recognizer: a second family costs an enum value
24
+ * rather than a format version bump.
24
25
  */
25
26
  const CARBON_BACKEND_TRANSFORM_FAMILY = Object.freeze(["detail-map-array", "local-light-profile-neutral"]);
26
27
 
@@ -32,22 +33,25 @@ const DETAIL_MAP_ARRAY_DEFAULTS = Object.freeze({
32
33
  representation: "native-or-rgba8",
33
34
  missingLayer: "reject",
34
35
  viewDimension: "2d-array",
35
- outputName: "DetailArrayMap"
36
+ // The merged array's name is owned by the detail-map family, not restated
37
+ // here. It has been renamed once already (DetailMapArray -> DetailArrayMap),
38
+ // and a second literal is a second place for the next rename to miss.
39
+ outputName: DETAIL_MAP_ARRAY_NAME
36
40
  });
37
41
 
38
- /**
39
- * Constants a `local-light-profile-neutral` transform restores rather than
40
- * storing.
41
- *
42
- * Unlike `detail-map-array` this transform has no output resource: its whole
43
- * content is that an input resource was replaced by a constant. It exists so a
44
- * described Carbon resource that the backend deliberately dropped is still
45
- * accounted for - a resource that simply disappears is indistinguishable from
46
- * one that was lost, and the integrity rules reject that on purpose.
47
- *
48
- * `LightProfileArray` is multiplied into a light's attenuation, so the constant
49
- * is one, not zero. That is the same value the shader's own no-profile path
50
- * produces, which is why dropping it is neutral rather than dark.
42
+ /**
43
+ * Constants a `local-light-profile-neutral` transform restores rather than
44
+ * storing.
45
+ *
46
+ * Unlike `detail-map-array` this transform has no output resource: its whole
47
+ * content is that an input resource was replaced by a constant. It exists so a
48
+ * described Carbon resource that the backend deliberately dropped is still
49
+ * accounted for - a resource that simply disappears is indistinguishable from
50
+ * one that was lost, and the integrity rules reject that on purpose.
51
+ *
52
+ * `LightProfileArray` is multiplied into a light's attenuation, so the constant
53
+ * is one, not zero. That is the same value the shader's own no-profile path
54
+ * produces, which is why dropping it is neutral rather than dark.
51
55
  */
52
56
  const LOCAL_LIGHT_PROFILE_NEUTRAL_DEFAULTS = Object.freeze({
53
57
  version: 1,
@@ -59,22 +63,67 @@ const LOCAL_LIGHT_PROFILE_NEUTRAL_DEFAULTS = Object.freeze({
59
63
  outputName: null
60
64
  });
61
65
 
62
- /**
63
- * Per-family constant sets, keyed by family name.
64
- *
65
- * The reader restores these rather than storing them, so a family that omitted
66
- * its entry here would silently inherit another family's constants.
66
+ /**
67
+ * Per-family constant sets, keyed by family name.
68
+ *
69
+ * The reader restores these rather than storing them, so a family that omitted
70
+ * its entry here would silently inherit another family's constants.
67
71
  */
68
72
  const TRANSFORM_DEFAULTS_BY_FAMILY = Object.freeze({
69
73
  "detail-map-array": DETAIL_MAP_ARRAY_DEFAULTS,
70
74
  "local-light-profile-neutral": LOCAL_LIGHT_PROFILE_NEUTRAL_DEFAULTS
71
75
  });
72
76
 
73
- /**
74
- * Writes a length-prefixed UTF-8 string.
75
- *
76
- * @param {object} writer Target byte writer.
77
- * @param {string} value Text value.
77
+ /**
78
+ * Refuses a transform whose restored fields disagree with its family.
79
+ *
80
+ * Every field below is dropped on write and rebuilt from the family constants
81
+ * on read, so a document that disagrees does not fail - it round-trips into a
82
+ * *different* document, which is the failure shape that produced both the
83
+ * `selectedOptions` and the register-pair bugs. A caller may supply its own
84
+ * transform plan, so agreement is checked here rather than assumed from the
85
+ * one producer that happens to emit constants.
86
+ *
87
+ * An absent field is not a disagreement: omitting it is the normal way to say
88
+ * "restore the family value".
89
+ *
90
+ * @param {object} transform Resource transform.
91
+ * @param {string} family Resolved family name.
92
+ * @param {object} defaults Family constants the reader restores.
93
+ */
94
+ function assertRestoredFieldsAgree(transform, family, defaults) {
95
+ const restored = [["version", transform.version, defaults.version], ["kind", transform.kind, defaults.kind], ["stage", transform.stage, defaults.stage], ["representation", transform.representation, defaults.representation], ["missingLayer", transform.missingLayer, defaults.missingLayer], ["output.name", transform.output?.name, defaults.outputName], ["output.viewDimension", transform.output?.viewDimension, defaults.viewDimension]];
96
+ for (const [field, actual, expected] of restored) {
97
+ if (actual === undefined || actual === null) continue;
98
+ if (actual === expected) continue;
99
+ throw new CjsFormatWriteError(`Resource transform "${transform.id}" sets ${field} to ${JSON.stringify(actual)}, but the` + ` "${family}" family restores ${JSON.stringify(expected)} on read. The value is not` + ` stored, so writing this would silently change the document.`, {
100
+ transform: transform.id,
101
+ family,
102
+ field,
103
+ actual,
104
+ expected
105
+ });
106
+ }
107
+
108
+ // Layer count is positional on the wire: the reader counts the inputs it
109
+ // read. A document claiming a different count is claiming something the
110
+ // bytes cannot carry.
111
+ const layerCount = transform.output?.layerCount;
112
+ if (layerCount !== undefined && layerCount !== null && layerCount !== transform.inputs.length) {
113
+ throw new CjsFormatWriteError(`Resource transform "${transform.id}" declares ${layerCount} output layers but carries` + ` ${transform.inputs.length} inputs; the reader derives the count from the inputs.`, {
114
+ transform: transform.id,
115
+ family,
116
+ declared: layerCount,
117
+ inputs: transform.inputs.length
118
+ });
119
+ }
120
+ }
121
+
122
+ /**
123
+ * Writes a length-prefixed UTF-8 string.
124
+ *
125
+ * @param {object} writer Target byte writer.
126
+ * @param {string} value Text value.
78
127
  */
79
128
  function writeInlineString(writer, value) {
80
129
  const bytes = new TextEncoder().encode(String(value ?? ""));
@@ -87,11 +136,11 @@ function writeInlineString(writer, value) {
87
136
  writer.bytes(bytes);
88
137
  }
89
138
 
90
- /**
91
- * Reads a length-prefixed UTF-8 string.
92
- *
93
- * @param {object} reader Source byte reader.
94
- * @returns {string} Decoded text.
139
+ /**
140
+ * Reads a length-prefixed UTF-8 string.
141
+ *
142
+ * @param {object} reader Source byte reader.
143
+ * @returns {string} Decoded text.
95
144
  */
96
145
  function readInlineString(reader) {
97
146
  const length = reader.readUint16();
@@ -100,21 +149,23 @@ function readInlineString(reader) {
100
149
  }).decode(reader.readRaw(length));
101
150
  }
102
151
 
103
- /**
104
- * Writes the count-prefixed resource-transform section.
105
- *
106
- * @param {object} writer Target byte writer.
107
- * @param {object[]} transforms Resource transforms.
152
+ /**
153
+ * Writes the count-prefixed resource-transform section.
154
+ *
155
+ * @param {object} writer Target byte writer.
156
+ * @param {object[]} transforms Resource transforms.
108
157
  */
109
158
  function writeTransformSection(writer, transforms) {
110
159
  writer.u8(transforms.length);
111
160
  for (const transform of transforms) {
112
- const family = CARBON_BACKEND_TRANSFORM_FAMILY.indexOf(transform.family ?? "detail-map-array");
161
+ const familyName = transform.family ?? "detail-map-array";
162
+ const family = CARBON_BACKEND_TRANSFORM_FAMILY.indexOf(familyName);
113
163
  if (family < 0) {
114
164
  throw new CjsFormatWriteError(`Unknown transform family "${transform.family}"`, {
115
165
  family: transform.family
116
166
  });
117
167
  }
168
+ assertRestoredFieldsAgree(transform, familyName, TRANSFORM_DEFAULTS_BY_FAMILY[familyName]);
118
169
  writer.u8(family);
119
170
  // `id` stays on the wire: a caller may supply it, and it propagates into
120
171
  // the engine binding as `transformId`. Deriving it would foreclose the
@@ -125,6 +176,15 @@ function writeTransformSection(writer, transforms) {
125
176
  // Array position is the layer. Safe because `parameter` stays on the
126
177
  // wire, so layer identity remains cross-checkable rather than
127
178
  // asserted by position.
179
+ //
180
+ // Checked rather than trusted: the reader rebuilds each input's
181
+ // identity from this pair, so a producer that omits it does not fail
182
+ // here -- it writes two zero bytes and every layer reads back as
183
+ // register 0. That is a wrong package that loads, which is worse
184
+ // than one that throws.
185
+ if (!Number.isInteger(input.registerSpace) || !Number.isInteger(input.registerIndex)) {
186
+ throw new TypeError(`Resource transform input ${input.parameter} needs integer registerSpace and` + ` registerIndex; the reader rebuilds its identity from them`);
187
+ }
128
188
  writer.u8(input.registerSpace);
129
189
  writer.u8(input.registerIndex);
130
190
  writeInlineString(writer, input.parameter);
@@ -132,12 +192,12 @@ function writeTransformSection(writer, transforms) {
132
192
  }
133
193
  }
134
194
 
135
- /**
136
- * Reads the count-prefixed resource-transform section, restoring derived fields.
137
- *
138
- * @param {object} reader Source byte reader.
139
- * @param {string|null} layoutKey Enclosing pass key, restored onto records.
140
- * @returns {object[]} Resource transforms.
195
+ /**
196
+ * Reads the count-prefixed resource-transform section, restoring derived fields.
197
+ *
198
+ * @param {object} reader Source byte reader.
199
+ * @param {string|null} layoutKey Enclosing pass key, restored onto records.
200
+ * @returns {object[]} Resource transforms.
141
201
  */
142
202
  function readTransformSection(reader, layoutKey) {
143
203
  const transforms = [];