@carbonenginejs/runtime-resource 0.12.2 → 0.14.0

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 (238) hide show
  1. package/README.md +21 -0
  2. package/dist/CjsResMan.js +393 -29
  3. package/dist/CjsResMan.js.map +1 -1
  4. package/dist/format/carbonEffect/CjsCarbonEffectReader.js +165 -118
  5. package/dist/format/carbonEffect/CjsCarbonEffectReader.js.map +1 -1
  6. package/dist/format/carbonEffect/buildCarbonEffectContainer.js +182 -0
  7. package/dist/format/carbonEffect/buildCarbonEffectContainer.js.map +1 -0
  8. package/dist/format/carbonEffect/carbonEffectBackendBlock.js +7 -113
  9. package/dist/format/carbonEffect/carbonEffectBackendBlock.js.map +1 -1
  10. package/dist/format/carbonEffect/carbonEffectRecords.js +258 -66
  11. package/dist/format/carbonEffect/carbonEffectRecords.js.map +1 -1
  12. package/dist/format/carbonEffect/carbonEffectResourceTransform.js +197 -0
  13. package/dist/format/carbonEffect/carbonEffectResourceTransform.js.map +1 -0
  14. package/dist/format/effect/effectBodyInventory.js +146 -0
  15. package/dist/format/effect/effectBodyInventory.js.map +1 -0
  16. package/dist/format/effect/effectPermutationGraph.js +13 -13
  17. package/dist/format/effect/effectPermutationGraph.js.map +1 -1
  18. package/dist/format/index.js +4 -4
  19. package/dist/formats/black/CjsBlackFormat.js +19 -1
  20. package/dist/formats/black/CjsBlackFormat.js.map +1 -1
  21. package/dist/formats/bnk/CjsBnkFormat.js +28 -9
  22. package/dist/formats/bnk/CjsBnkFormat.js.map +1 -1
  23. package/dist/formats/bnk/core/busNodes.js +252 -0
  24. package/dist/formats/bnk/core/busNodes.js.map +1 -0
  25. package/dist/formats/bnk/core/effectNodes.js +147 -0
  26. package/dist/formats/bnk/core/effectNodes.js.map +1 -0
  27. package/dist/formats/bnk/core/eventAction.js +135 -24
  28. package/dist/formats/bnk/core/eventAction.js.map +1 -1
  29. package/dist/formats/bnk/core/globalSettings.js +215 -0
  30. package/dist/formats/bnk/core/globalSettings.js.map +1 -0
  31. package/dist/formats/bnk/core/helpers.js +37 -5
  32. package/dist/formats/bnk/core/helpers.js.map +1 -1
  33. package/dist/formats/bnk/core/musicNodes.js +43 -19
  34. package/dist/formats/bnk/core/musicNodes.js.map +1 -1
  35. package/dist/formats/bnk/core/nodeBase.js +28 -7
  36. package/dist/formats/bnk/core/nodeBase.js.map +1 -1
  37. package/dist/formats/dds/core/helpers.js +40 -1
  38. package/dist/formats/dds/core/helpers.js.map +1 -1
  39. package/dist/formats/dxbc/CjsDxbcFormat.js +45 -0
  40. package/dist/formats/dxbc/CjsDxbcFormat.js.map +1 -1
  41. package/dist/formats/dxbc/core/disassemble.js +240 -0
  42. package/dist/formats/dxbc/core/disassemble.js.map +1 -0
  43. package/dist/formats/gltf/CjsGltfFormat.js +1 -39
  44. package/dist/formats/gltf/CjsGltfFormat.js.map +1 -1
  45. package/dist/formats/gltf/core/helpers.js +1 -21
  46. package/dist/formats/gltf/core/helpers.js.map +1 -1
  47. package/dist/formats/hlsl/CjsHlslFormat.js +0 -21
  48. package/dist/formats/hlsl/CjsHlslFormat.js.map +1 -1
  49. package/dist/formats/hlsl/core/carbonDescriptionToRuntime.js +118 -49
  50. package/dist/formats/hlsl/core/carbonDescriptionToRuntime.js.map +1 -1
  51. package/dist/formats/hlsl/core/detailMapFamily.js +128 -0
  52. package/dist/formats/hlsl/core/detailMapFamily.js.map +1 -0
  53. package/dist/formats/hlsl/core/localLightFamily.js +133 -0
  54. package/dist/formats/hlsl/core/localLightFamily.js.map +1 -0
  55. package/dist/formats/hlsl/core/tr2/resources/HlslEffectRes.js +79 -73
  56. package/dist/formats/hlsl/core/tr2/resources/HlslEffectRes.js.map +1 -1
  57. package/dist/formats/hlsl/core/tr2/shader/HlslEffectBindingManifest.js +8 -1
  58. package/dist/formats/hlsl/core/tr2/shader/HlslEffectBindingManifest.js.map +1 -1
  59. package/dist/formats/hlsl/core/tr2/shader/HlslEffectDescription.js +11 -691
  60. package/dist/formats/hlsl/core/tr2/shader/HlslEffectDescription.js.map +1 -1
  61. package/dist/formats/index.js +4 -2
  62. package/dist/formats/index.js.map +1 -1
  63. package/dist/formats/obj/CjsObjFormat.js +1 -22
  64. package/dist/formats/obj/CjsObjFormat.js.map +1 -1
  65. package/dist/formats/obj/core/helpers.js +1 -21
  66. package/dist/formats/obj/core/helpers.js.map +1 -1
  67. package/dist/formats/pickle/CjsPickleFormat.js +214 -0
  68. package/dist/formats/pickle/CjsPickleFormat.js.map +1 -0
  69. package/dist/formats/pickle/core/CjsPickleProtocol0Reader.js +551 -0
  70. package/dist/formats/pickle/core/CjsPickleProtocol0Reader.js.map +1 -0
  71. package/dist/formats/pickle/index.js +2 -0
  72. package/dist/formats/pickle/index.js.map +1 -0
  73. package/dist/formats/red/core/redGraph.js +11 -8
  74. package/dist/formats/red/core/redGraph.js.map +1 -1
  75. package/dist/formats/stl/CjsStlFormat.js +1 -46
  76. package/dist/formats/stl/CjsStlFormat.js.map +1 -1
  77. package/dist/formats/stl/core/helpers.js +1 -21
  78. package/dist/formats/stl/core/helpers.js.map +1 -1
  79. package/dist/formats/webgl/CjsWebglFormat.js +33 -55
  80. package/dist/formats/webgl/CjsWebglFormat.js.map +1 -1
  81. package/dist/formats/webgl/core/buildGlslEffectContainer.js +70 -0
  82. package/dist/formats/webgl/core/buildGlslEffectContainer.js.map +1 -0
  83. package/dist/formats/webgl/core/effectPackage.js +216 -108
  84. package/dist/formats/webgl/core/effectPackage.js.map +1 -1
  85. package/dist/formats/webgl/core/errors.js +1 -1
  86. package/dist/formats/webgl/core/errors.js.map +1 -1
  87. package/dist/formats/webgl/core/glsl/DxbcGlslEmitter.js +166 -24
  88. package/dist/formats/webgl/core/glsl/DxbcGlslEmitter.js.map +1 -1
  89. package/dist/formats/webgl/core/glsl/DxbcGlslOperandFormatter.js +63 -5
  90. package/dist/formats/webgl/core/glsl/DxbcGlslOperandFormatter.js.map +1 -1
  91. package/dist/formats/webgl/core/glsl/packedLightFixups.js +98 -0
  92. package/dist/formats/webgl/core/glsl/packedLightFixups.js.map +1 -0
  93. package/dist/formats/webgl/core/glslBackendBlock.js +552 -0
  94. package/dist/formats/webgl/core/glslBackendBlock.js.map +1 -0
  95. package/dist/formats/webgl/core/glslBackendBodySet.js +243 -0
  96. package/dist/formats/webgl/core/glslBackendBodySet.js.map +1 -0
  97. package/dist/formats/webgl/core/{cewgCompleteness.js → glslEffectCompleteness.js} +12 -8
  98. package/dist/formats/webgl/core/glslEffectCompleteness.js.map +1 -0
  99. package/dist/formats/webgl/core/helpers.js +33 -172
  100. package/dist/formats/webgl/core/helpers.js.map +1 -1
  101. package/dist/formats/webgl/core/inspectGlslEffectContainer.js +122 -0
  102. package/dist/formats/webgl/core/inspectGlslEffectContainer.js.map +1 -0
  103. package/dist/formats/webgl/core/readGlslEffectContainer.js +249 -0
  104. package/dist/formats/webgl/core/readGlslEffectContainer.js.map +1 -0
  105. package/dist/formats/webgpu/CjsWebgpuFormat.js +15 -15
  106. package/dist/formats/webgpu/CjsWebgpuFormat.js.map +1 -1
  107. package/dist/formats/webgpu/core/buildCarbonEffectContainer.js +37 -145
  108. package/dist/formats/webgpu/core/buildCarbonEffectContainer.js.map +1 -1
  109. package/dist/formats/webgpu/core/{cewgpu/CewgpuContainer.js → carbonWebgpu/CarbonWebgpuContainer.js} +13 -27
  110. package/dist/formats/webgpu/core/carbonWebgpu/CarbonWebgpuContainer.js.map +1 -0
  111. package/dist/formats/webgpu/core/{cewgpu → carbonWebgpu}/containerViews.js +1 -1
  112. package/dist/formats/webgpu/core/carbonWebgpu/containerViews.js.map +1 -0
  113. package/dist/formats/webgpu/core/{cewgpu → carbonWebgpu}/validateContainer.js +4 -4
  114. package/dist/formats/webgpu/core/carbonWebgpu/validateContainer.js.map +1 -0
  115. package/dist/formats/webgpu/core/effectBackendBodySet.js +18 -18
  116. package/dist/formats/webgpu/core/effectBackendBodySet.js.map +1 -1
  117. package/dist/formats/webgpu/core/errors.js +1 -1
  118. package/dist/formats/webgpu/core/errors.js.map +1 -1
  119. package/dist/formats/webgpu/core/helpers.js +22 -22
  120. package/dist/formats/webgpu/core/helpers.js.map +1 -1
  121. package/dist/formats/webgpu/core/packageEffect.js +11 -15
  122. package/dist/formats/webgpu/core/packageEffect.js.map +1 -1
  123. package/dist/formats/webgpu/core/packageEffectSelection.js +1 -1
  124. package/dist/formats/webgpu/core/packageEffectSelection.js.map +1 -1
  125. package/dist/formats/webgpu/core/wgsl/buildResourceTransformPlan.js +23 -23
  126. package/dist/formats/webgpu/core/wgsl/buildResourceTransformPlan.js.map +1 -1
  127. package/dist/formats/webgpu/core/wgsl/buildWgslSet.js +6 -6
  128. package/dist/formats/webgpu/core/wgsl/buildWgslSet.js.map +1 -1
  129. package/dist/formats/yaml/CjsYamlFormat.js +3 -3
  130. package/dist/formats/yaml/CjsYamlFormat.js.map +1 -1
  131. package/dist/formats/yaml/core/CjsYamlReader.js +4 -6
  132. package/dist/formats/yaml/core/CjsYamlReader.js.map +1 -1
  133. package/dist/formats/yaml/core/helpers.js +27 -1
  134. package/dist/formats/yaml/core/helpers.js.map +1 -1
  135. package/dist/index.js +2 -0
  136. package/dist/index.js.map +1 -1
  137. package/dist/resource/CjsLoadingObject.js +19 -0
  138. package/dist/resource/CjsLoadingObject.js.map +1 -0
  139. package/dist/resource/CjsResource.js +4 -0
  140. package/dist/resource/CjsResource.js.map +1 -1
  141. package/dist/resource/ResourceHandlerMode.js +14 -0
  142. package/dist/resource/ResourceHandlerMode.js.map +1 -0
  143. package/dist/resource/index.js +2 -0
  144. package/dist/resource/index.js.map +1 -1
  145. package/dist/resource/shader/Tr2EffectRes.js +118 -213
  146. package/dist/resource/shader/Tr2EffectRes.js.map +1 -1
  147. package/dist/resource/shader/Tr2Shader.js +37 -15
  148. package/dist/resource/shader/Tr2Shader.js.map +1 -1
  149. package/dist/resource/shader/reflection/Tr2EffectConstant.js +37 -29
  150. package/dist/resource/shader/reflection/Tr2EffectConstant.js.map +1 -1
  151. package/dist/resource/shader/reflection/Tr2EffectDescription.js +39 -34
  152. package/dist/resource/shader/reflection/Tr2EffectDescription.js.map +1 -1
  153. package/dist/resource/shader/reflection/Tr2EffectLibrary.js +51 -30
  154. package/dist/resource/shader/reflection/Tr2EffectLibrary.js.map +1 -1
  155. package/dist/resource/shader/reflection/Tr2EffectParameterAnnotation.js +45 -25
  156. package/dist/resource/shader/reflection/Tr2EffectParameterAnnotation.js.map +1 -1
  157. package/dist/resource/shader/reflection/Tr2EffectResource.js +51 -17
  158. package/dist/resource/shader/reflection/Tr2EffectResource.js.map +1 -1
  159. package/dist/resource/shader/reflection/Tr2EffectStageInput.js +219 -88
  160. package/dist/resource/shader/reflection/Tr2EffectStageInput.js.map +1 -1
  161. package/dist/resource/shader/reflection/Tr2EffectTechnique.js +28 -18
  162. package/dist/resource/shader/reflection/Tr2EffectTechnique.js.map +1 -1
  163. package/dist/resource/shader/reflection/Tr2Pass.js +96 -39
  164. package/dist/resource/shader/reflection/Tr2Pass.js.map +1 -1
  165. package/dist/resource/shader/reflection/carbonRecordFields.js +159 -0
  166. package/dist/resource/shader/reflection/carbonRecordFields.js.map +1 -0
  167. package/dist/resource/shader/reflection/shaderStage.js +22 -0
  168. package/dist/resource/shader/reflection/shaderStage.js.map +1 -0
  169. package/dist/resource/shader/sampler/Tr2SamplerSetup.js +68 -10
  170. package/dist/resource/shader/sampler/Tr2SamplerSetup.js.map +1 -1
  171. package/dist/worker/CjsResManMainThreadLoader.js +9 -7
  172. package/dist/worker/CjsResManMainThreadLoader.js.map +1 -1
  173. package/dist/worker/CjsResManWorker.js +5 -4
  174. package/dist/worker/CjsResManWorker.js.map +1 -1
  175. package/dist/worker/CjsResManWorkerLoader.js +9 -6
  176. package/dist/worker/CjsResManWorkerLoader.js.map +1 -1
  177. package/docs/README.md +2 -2
  178. package/docs/architecture.md +12 -3
  179. package/docs/concepts/resource-lifecycle.md +9 -8
  180. package/docs/concepts/shader-resource-model.md +14 -17
  181. package/docs/concepts/writing-an-engine-adapter.md +1 -1
  182. package/docs/formats/README.md +4 -2
  183. package/docs/formats/carbon-effect-container.md +127 -26
  184. package/docs/formats/dxbc/architecture.md +1 -1
  185. package/docs/formats/dxbc/reference/api.md +28 -0
  186. package/docs/formats/hlsl/README.md +3 -3
  187. package/docs/formats/hlsl/architecture.md +8 -9
  188. package/docs/formats/hlsl/guides/hydrating-json-output.md +3 -5
  189. package/docs/formats/hlsl/guides/reading-effects.md +5 -1
  190. package/docs/formats/hlsl/reference/advanced-analysis.md +20 -25
  191. package/docs/formats/hlsl/reference/api.md +0 -7
  192. package/docs/formats/hlsl/reference/json-graph.md +1 -4
  193. package/docs/formats/pickle.md +82 -0
  194. package/docs/formats/webgl/README.md +71 -13
  195. package/docs/formats/webgl/architecture.md +16 -17
  196. package/docs/formats/webgl/carbon-constant-layouts.md +3 -3
  197. package/docs/formats/webgl/decl-io.md +3 -3
  198. package/docs/formats/webgl/memory-structured.md +27 -8
  199. package/docs/formats/webgl/texture-sample.md +1 -1
  200. package/docs/formats/webgpu/README.md +3 -3
  201. package/docs/formats/webgpu/architecture.md +5 -6
  202. package/docs/formats/webgpu/formats/{cewgpu.md → carbon-webgpu.md} +10 -11
  203. package/docs/formats/webgpu/guides/effect-packaging.md +6 -8
  204. package/docs/formats/webgpu/reference/api.md +11 -12
  205. package/docs/formats/webgpu/reference/wgsl-compatibility.md +11 -8
  206. package/docs/formats/wwise.md +63 -2
  207. package/docs/reference/classes/core.md +10 -0
  208. package/docs/reference/classes/formats.md +40 -48
  209. package/docs/reference/classes/resources.md +2 -2
  210. package/docs/reference/queues.md +88 -4
  211. package/docs/reference/workers.md +7 -0
  212. package/package.json +61 -61
  213. package/dist/format/carbonEffect/carbonDescriptionFromPortable.js +0 -372
  214. package/dist/format/carbonEffect/carbonDescriptionFromPortable.js.map +0 -1
  215. package/dist/format/effect/effectReflectionPackage.js +0 -636
  216. package/dist/format/effect/effectReflectionPackage.js.map +0 -1
  217. package/dist/formats/hlsl/core/HlslReader.js +0 -16
  218. package/dist/formats/hlsl/core/HlslReader.js.map +0 -1
  219. package/dist/formats/hlsl/core/portableReflection.js +0 -848
  220. package/dist/formats/hlsl/core/portableReflection.js.map +0 -1
  221. package/dist/formats/hlsl/portable.js +0 -2
  222. package/dist/formats/hlsl/portable.js.map +0 -1
  223. package/dist/formats/webgl/core/cewg/CewgPackage.js +0 -340
  224. package/dist/formats/webgl/core/cewg/CewgPackage.js.map +0 -1
  225. package/dist/formats/webgl/core/cewg/CewgPackageBuilder.js +0 -104
  226. package/dist/formats/webgl/core/cewg/CewgPackageBuilder.js.map +0 -1
  227. package/dist/formats/webgl/core/cewg/binary.js +0 -19
  228. package/dist/formats/webgl/core/cewg/binary.js.map +0 -1
  229. package/dist/formats/webgl/core/cewgCompleteness.js.map +0 -1
  230. package/dist/formats/webgl/core/effectPackageValidation.js +0 -331
  231. package/dist/formats/webgl/core/effectPackageValidation.js.map +0 -1
  232. package/dist/formats/webgpu/core/cewgpu/CewgpuContainer.js.map +0 -1
  233. package/dist/formats/webgpu/core/cewgpu/containerViews.js.map +0 -1
  234. package/dist/formats/webgpu/core/cewgpu/validateContainer.js.map +0 -1
  235. package/dist/resource/shader/portable.js +0 -33
  236. package/dist/resource/shader/portable.js.map +0 -1
  237. package/docs/formats/hlsl/reference/portable-reflection.md +0 -141
  238. package/docs/formats/webgl/effect-reflection.md +0 -127
@@ -1 +1 @@
1
- {"version":3,"file":"effectBackendBodySet.js","sources":["../../../../../src/formats/webgpu/core/effectBackendBodySet.js"],"sourcesContent":["import { HlslEffectBindingManifest } from \"../../hlsl/core/tr2/shader/HlslEffectBindingManifest.js\";\r\nimport { enumerateUniqueEffectBodies } from \"../../hlsl/portable.js\";\r\nimport { buildEffectAnalysis } from \"./helpers.js\";\r\nimport { normalizeBytecodeBytes } from \"./effectAnalysis.js\";\r\nimport { lowerDxbcToIr } from \"./ir/lowerDxbcToIr.js\";\r\nimport { buildWgslBindingPlan } from \"./wgsl/buildWgslBindingPlan.js\";\r\nimport { buildWgsl } from \"./wgsl/emitWgsl.js\";\r\nimport { buildWgslSet } from \"./wgsl/buildWgslSet.js\";\r\nimport { buildResourceTransformPlan } from \"./wgsl/buildResourceTransformPlan.js\";\r\nimport { sha256Bytes, sha256Utf8 } from \"../../../format/effect/sha256.js\";\r\nimport { selectEffectStages } from \"./packageEffectSelection.js\";\r\nimport { compareUtf8 } from \"../../../format/compareUtf8.js\";\r\nimport {\r\n isParticleClearEffectCandidate,\r\n particleClearEffectProofFor,\r\n preflightParticleClearEffectProfile\r\n} from \"./wgsl/lowerParticleClearComputePrograms.js\";\r\n\r\nexport const EFFECT_BACKEND_BODY_SET_CHUNK = \"WGSB\";\r\nexport const EFFECT_BACKEND_BODY_SET_FORMAT = \"CJS_WGSL_BODY_SET\";\r\nexport const EFFECT_BACKEND_BODY_SET_VERSION = 1;\r\n\r\n/**\r\n * One translation unit is exactly one pass of one body: the binding plan, the\r\n * resource-transform plan, and every stage's emitted WGSL are derived together.\r\n * Bodies that share an identical pass signature therefore share one unit.\r\n *\r\n * @param {object} pass Pass entry carrying its ordered stage records.\r\n * @returns {string} Stable signature for the pass translation unit.\r\n */\r\nfunction passUnitSignature(pass)\r\n{\r\n return JSON.stringify({\r\n passKey: pass.passKey,\r\n stages: pass.stages\r\n .map((stage) => ({\r\n stageName: stage.stageName,\r\n bytecode: stage.bytecodeDigest,\r\n semanticBindings: stage.semanticBindings,\r\n // An effect profile changes emission, so two otherwise identical\r\n // passes must not share one unit when their proofs differ.\r\n effectProfileProof: stage.effectProfileProof\r\n ? sha256Utf8(JSON.stringify(stage.effectProfileProof))\r\n : null\r\n }))\r\n .sort((left, right) => compareUtf8(left.stageName, right.stageName))\r\n });\r\n}\r\n\r\nfunction collectBodyStageBytecode(effectDescription)\r\n{\r\n const bytecodeByKey = new Map();\r\n\r\n for (const technique of effectDescription?.techniques ?? [])\r\n {\r\n for (let passIndex = 0; passIndex < technique.passes.length; passIndex++)\r\n {\r\n const stageInputs = technique.passes[passIndex].stageInputs;\r\n\r\n for (let stageType = 0; stageType < stageInputs.length; stageType++)\r\n {\r\n const stage = stageInputs[stageType];\r\n if (!stage?.m_exists) continue;\r\n\r\n const stageName = stage.cjsShaderBytecode?.stageName;\r\n const value = stage.cjsShaderBytecode?.bytes;\r\n if (!stageName || value === undefined || value === null) continue;\r\n\r\n const key = `${technique.name}.pass${passIndex}.${stageName}`;\r\n const bytes = normalizeBytecodeBytes(value, `${key} stage bytecode`);\r\n\r\n if (!bytes?.length)\r\n {\r\n throw new TypeError(`${key} stage bytecode must be a non-empty byte view`);\r\n }\r\n\r\n bytecodeByKey.set(key, {\r\n techniqueName: technique.name,\r\n passIndex,\r\n stageType,\r\n stageName,\r\n bytes\r\n });\r\n }\r\n }\r\n }\r\n\r\n return bytecodeByKey;\r\n}\r\n\r\nfunction resolveBody(effectRes, permutationIndex, source)\r\n{\r\n const shader = effectRes.GetShaderByIndex(permutationIndex);\r\n\r\n if (!shader)\r\n {\r\n throw new Error(\r\n `Effect body at permutation ${permutationIndex} could not be decoded`\r\n );\r\n }\r\n\r\n const effectDescription = shader.GetEffectDescription();\r\n\r\n if (!effectDescription)\r\n {\r\n throw new Error(\r\n `Effect body at permutation ${permutationIndex} has no effect description`\r\n );\r\n }\r\n\r\n const resolved = {\r\n effectRes,\r\n shader,\r\n selection: { bodyIndex: permutationIndex, selectedOptions: [] },\r\n effectDescription,\r\n bindingManifest: HlslEffectBindingManifest.fromEffectDescription(effectDescription),\r\n stageBytecodeByKey: collectBodyStageBytecode(effectDescription)\r\n };\r\n\r\n return {\r\n resolved,\r\n analysis: buildEffectAnalysis(resolved, {\r\n source,\r\n decodeBytecode: false,\r\n decodeInstructions: false\r\n })\r\n };\r\n}\r\n\r\nfunction buildPassEntries(analysis, resolved, selection, effectProfileContext)\r\n{\r\n const selectedStages = selectEffectStages(analysis.stages, selection);\r\n const passes = new Map();\r\n\r\n for (const stage of selectedStages)\r\n {\r\n const passKey = `${stage.techniqueName}.pass${stage.passIndex}`;\r\n\r\n if (!passes.has(passKey))\r\n {\r\n passes.set(passKey, { passKey, stages: [] });\r\n }\r\n\r\n const bytecode = resolved.stageBytecodeByKey.get(stage.key)?.bytes;\r\n\r\n if (!bytecode?.length)\r\n {\r\n throw new Error(`${stage.key} has no shader bytecode`);\r\n }\r\n\r\n passes.get(passKey).stages.push({\r\n key: stage.key,\r\n stageName: stage.stageName,\r\n bytecodeKey: stage.key,\r\n bytecodeDigest: sha256Bytes(bytecode),\r\n semanticBindings: analysis.stages.find((candidate) =>\r\n candidate.techniqueName === stage.techniqueName\r\n && candidate.passIndex === stage.passIndex\r\n && candidate.stageName === stage.stageName)?.bindings || [],\r\n effectProfileProof: particleClearEffectProofFor(\r\n effectProfileContext,\r\n stage.key\r\n )\r\n });\r\n }\r\n\r\n return Array.from(passes.values());\r\n}\r\n\r\nfunction translatePassUnit(pass, programForKey, source, bindingPolicy)\r\n{\r\n const irEntries = pass.stages.map((stage) => ({\r\n key: stage.key,\r\n ir: programForKey(stage.bytecodeKey),\r\n semanticBindings: stage.semanticBindings,\r\n effectProfileProof: stage.effectProfileProof\r\n }));\r\n const resourceTransformPlan = buildResourceTransformPlan(\r\n irEntries.map((entry) => ({\r\n ir: entry.ir,\r\n semanticBindings: entry.semanticBindings\r\n })),\r\n { layoutKey: pass.passKey }\r\n );\r\n const proof = irEntries.find((entry) => entry.effectProfileProof)\r\n ?.effectProfileProof ?? null;\r\n const plan = buildWgslBindingPlan(\r\n irEntries.map((entry) => entry.ir),\r\n {\r\n ...(bindingPolicy ?? {}),\r\n ...(proof ? { effectProfileProof: proof } : {}),\r\n ...(resourceTransformPlan ? { resourceTransformPlan } : {})\r\n }\r\n );\r\n\r\n return buildWgslSet(irEntries.map((entry) => ({\r\n key: entry.key,\r\n shader: buildWgsl(entry.ir, {\r\n bindingPlan: plan,\r\n ...(resourceTransformPlan ? { resourceTransformPlan } : {}),\r\n ...(entry.effectProfileProof\r\n ? { effectProfileProof: entry.effectProfileProof }\r\n : {})\r\n })\r\n })));\r\n}\r\n\r\n/**\r\n * Translate every unique source body into backend programs, layouts, and\r\n * resource transforms, sharing one translation unit between bodies whose pass\r\n * is byte-for-byte identical.\r\n *\r\n * A body that cannot be lowered is retained as an explicitly unsupported\n * in-memory record carrying its reason. Portable source reflection is built\n * separately from the same effect; this body-set document does not store it.\n *\r\n * @param {object} effectRes Loaded version-15 `Tr2EffectRes`.\r\n * @param {object} permutationGraph Validated `PGRF` document.\r\n * @param {object} [options] Source label, stage selection, and binding policy.\r\n * @returns {object} Frozen `CJS_WGSL_BODY_SET` document.\r\n */\r\nexport function buildEffectBackendBodySet(effectRes, permutationGraph, options = {})\r\n{\r\n const source = options.source || \"memory\";\r\n const selection = options.selection ?? null;\r\n const bindingPolicy = options.bindingPolicy ?? null;\r\n const groups = enumerateUniqueEffectBodies(effectRes);\r\n\r\n if (groups.length !== permutationGraph.bodies.length)\r\n {\r\n throw new Error(\r\n \"Effect backend body set requires one unique body per permutation-graph body\"\r\n );\r\n }\r\n\r\n const unitsBySignature = new Map();\r\n const graphBodiesByKey = new Map(permutationGraph.bodies.map((body) => [ body.key, body ]));\r\n const passUnits = [];\r\n const bodies = [];\r\n const seenBodyKeys = new Set();\r\n\r\n for (const group of groups)\r\n {\r\n const variant = permutationGraph.variants[group.permutationIndex];\r\n const graphBody = variant ? graphBodiesByKey.get(variant.bodyKey) : null;\r\n\r\n if (!graphBody)\r\n {\r\n throw new Error(\r\n `Effect backend body ${group.permutationIndex} does not reconcile with its permutation graph record`\r\n );\r\n }\r\n\r\n if (seenBodyKeys.has(graphBody.key))\r\n {\r\n throw new Error(\r\n `Effect backend body ${graphBody.key} was enumerated more than once`\r\n );\r\n }\r\n\r\n seenBodyKeys.add(graphBody.key);\r\n\r\n let resolvedBody = null;\r\n let passes = null;\r\n let programForKey = null;\r\n\r\n try\r\n {\r\n resolvedBody = resolveBody(effectRes, group.permutationIndex, source);\r\n\r\n // One IR cache per body, so a stage shared by two passes lowers once\r\n // and the effect-profile preflight can seed it exactly as the\r\n // selected-body path does.\r\n const programsByKey = new Map();\r\n programForKey = (key) =>\r\n {\r\n if (programsByKey.has(key)) return programsByKey.get(key);\r\n\r\n const bytecode = resolvedBody.resolved.stageBytecodeByKey.get(key)?.bytes;\r\n\r\n if (!bytecode?.length)\r\n {\r\n throw new Error(`${key} has no shader bytecode`);\r\n }\r\n\r\n const program = lowerDxbcToIr(bytecode, { source: `${source}#${key}` });\r\n programsByKey.set(key, program);\r\n return program;\r\n };\r\n\r\n let effectProfileContext = null;\r\n\r\n if (isParticleClearEffectCandidate(resolvedBody.resolved.effectDescription))\r\n {\r\n programForKey(\"Main.pass0.compute\");\r\n programForKey(\"Main.pass1.compute\");\r\n effectProfileContext = preflightParticleClearEffectProfile(\r\n resolvedBody.resolved.effectDescription,\r\n programsByKey\r\n );\r\n }\r\n\r\n passes = buildPassEntries(\r\n resolvedBody.analysis,\r\n resolvedBody.resolved,\r\n selection,\r\n effectProfileContext\r\n );\r\n }\r\n catch (error)\r\n {\r\n // Stage selection and profile preflight fail closed per body: an\r\n // unsupported stage kind in one body must not fail the package.\r\n bodies.push(Object.freeze({\r\n bodyKey: graphBody.key,\r\n representativePermutationIndex: group.permutationIndex,\r\n status: \"unsupported\",\r\n error: String(error?.message ?? error),\r\n passCount: 0,\r\n passes: Object.freeze([])\r\n }));\r\n continue;\r\n }\r\n\r\n const bodyPasses = [];\r\n let failure = null;\r\n\r\n for (const pass of passes)\r\n {\r\n const signature = passUnitSignature(pass);\r\n let unit = unitsBySignature.get(signature);\r\n\r\n if (!unit)\r\n {\r\n let wgsl = null;\r\n\r\n try\r\n {\r\n wgsl = translatePassUnit(\r\n pass,\r\n programForKey,\r\n source,\r\n bindingPolicy\r\n );\r\n }\r\n catch (error)\r\n {\r\n failure = String(error?.message ?? error);\r\n break;\r\n }\r\n\r\n unit = {\r\n key: `unit${passUnits.length}`,\r\n sha256: sha256Utf8(`${JSON.stringify(wgsl)}\\n`),\r\n wgslSetVersion: wgsl.formatVersion,\r\n shaders: wgsl.shaders,\r\n layouts: wgsl.layouts,\r\n ...(wgsl.resourceTransforms\r\n ? { resourceTransforms: wgsl.resourceTransforms }\r\n : {})\r\n };\r\n unitsBySignature.set(signature, unit);\r\n passUnits.push(unit);\r\n }\r\n\r\n bodyPasses.push(Object.freeze({ passKey: pass.passKey, unitKey: unit.key }));\r\n }\r\n\r\n bodies.push(Object.freeze(failure\r\n ? {\r\n bodyKey: graphBody.key,\r\n representativePermutationIndex: group.permutationIndex,\r\n status: \"unsupported\",\r\n error: failure,\r\n passCount: 0,\r\n passes: Object.freeze([])\r\n }\r\n : {\r\n bodyKey: graphBody.key,\r\n representativePermutationIndex: group.permutationIndex,\r\n status: \"translated\",\r\n error: null,\r\n passCount: bodyPasses.length,\r\n passes: Object.freeze(bodyPasses)\r\n }));\r\n }\r\n\r\n const translatedCount = bodies.filter((body) => body.status === \"translated\").length;\r\n\r\n if (!translatedCount)\r\n {\r\n throw new Error(\r\n \"Effect backend body set requires at least one translated body\"\r\n );\r\n }\r\n\r\n return Object.freeze({\r\n format: EFFECT_BACKEND_BODY_SET_FORMAT,\r\n formatVersion: EFFECT_BACKEND_BODY_SET_VERSION,\r\n coverage: Object.freeze({\r\n bodies: translatedCount === bodies.length ? \"all-unique\" : \"partial\",\r\n programs: \"complete-for-translated\"\r\n }),\r\n bodyCount: bodies.length,\r\n translatedBodyCount: translatedCount,\r\n passUnitCount: passUnits.length,\r\n passUnits: Object.freeze(passUnits.map((unit) => Object.freeze(unit))),\r\n bodies: Object.freeze(bodies)\r\n });\r\n}\r\n"],"names":["EFFECT_BACKEND_BODY_SET_CHUNK","EFFECT_BACKEND_BODY_SET_FORMAT","EFFECT_BACKEND_BODY_SET_VERSION","passUnitSignature","pass","JSON","stringify","passKey","stages","map","stage","stageName","bytecode","bytecodeDigest","semanticBindings","effectProfileProof","sha256Utf8","sort","left","right","compareUtf8","collectBodyStageBytecode","effectDescription","bytecodeByKey","Map","technique","techniques","passIndex","passes","length","stageInputs","stageType","m_exists","cjsShaderBytecode","value","bytes","undefined","key","name","normalizeBytecodeBytes","TypeError","set","techniqueName","resolveBody","effectRes","permutationIndex","source","shader","GetShaderByIndex","Error","GetEffectDescription","resolved","selection","bodyIndex","selectedOptions","bindingManifest","HlslEffectBindingManifest","fromEffectDescription","stageBytecodeByKey","analysis","buildEffectAnalysis","decodeBytecode","decodeInstructions","buildPassEntries","effectProfileContext","selectedStages","selectEffectStages","has","get","push","bytecodeKey","sha256Bytes","find","candidate","bindings","particleClearEffectProofFor","Array","from","values","translatePassUnit","programForKey","bindingPolicy","irEntries","ir","resourceTransformPlan","buildResourceTransformPlan","entry","layoutKey","proof","plan","buildWgslBindingPlan","buildWgslSet","buildWgsl","bindingPlan","buildEffectBackendBodySet","permutationGraph","options","groups","enumerateUniqueEffectBodies","bodies","unitsBySignature","graphBodiesByKey","body","passUnits","seenBodyKeys","Set","group","variant","variants","graphBody","bodyKey","add","resolvedBody","programsByKey","program","lowerDxbcToIr","isParticleClearEffectCandidate","preflightParticleClearEffectProfile","error","Object","freeze","representativePermutationIndex","status","String","message","passCount","bodyPasses","failure","signature","unit","wgsl","sha256","wgslSetVersion","formatVersion","shaders","layouts","resourceTransforms","unitKey","translatedCount","filter","format","coverage","programs","bodyCount","translatedBodyCount","passUnitCount"],"mappings":"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"}
1
+ {"version":3,"file":"effectBackendBodySet.js","sources":["../../../../../src/formats/webgpu/core/effectBackendBodySet.js"],"sourcesContent":["import { HlslEffectBindingManifest } from \"../../hlsl/core/tr2/shader/HlslEffectBindingManifest.js\";\nimport { enumerateUniqueEffectBodies } from \"../../../format/effect/effectBodyInventory.js\";\nimport { buildEffectAnalysis } from \"./helpers.js\";\nimport { normalizeBytecodeBytes } from \"./effectAnalysis.js\";\nimport { lowerDxbcToIr } from \"./ir/lowerDxbcToIr.js\";\nimport { buildWgslBindingPlan } from \"./wgsl/buildWgslBindingPlan.js\";\nimport { buildWgsl } from \"./wgsl/emitWgsl.js\";\nimport { buildWgslSet } from \"./wgsl/buildWgslSet.js\";\nimport { buildResourceTransformPlan } from \"./wgsl/buildResourceTransformPlan.js\";\nimport { sha256Bytes, sha256Utf8 } from \"../../../format/effect/sha256.js\";\nimport { selectEffectStages } from \"./packageEffectSelection.js\";\nimport { compareUtf8 } from \"../../../format/compareUtf8.js\";\nimport {\n isParticleClearEffectCandidate,\n particleClearEffectProofFor,\n preflightParticleClearEffectProfile\n} from \"./wgsl/lowerParticleClearComputePrograms.js\";\n\nexport const EFFECT_BACKEND_BODY_SET_CHUNK = \"WGSB\";\nexport const EFFECT_BACKEND_BODY_SET_FORMAT = \"CJS_WGSL_BODY_SET\";\nexport const EFFECT_BACKEND_BODY_SET_VERSION = 1;\n\n/**\n * One translation unit is exactly one pass of one body: the binding plan, the\n * resource-transform plan, and every stage's emitted WGSL are derived together.\n * Bodies that share an identical pass signature therefore share one unit.\n *\n * @param {object} pass Pass entry carrying its ordered stage records.\n * @returns {string} Stable signature for the pass translation unit.\n */\nfunction passUnitSignature(pass)\n{\n return JSON.stringify({\n passKey: pass.passKey,\n stages: pass.stages\n .map((stage) => ({\n stageName: stage.stageName,\n bytecode: stage.bytecodeDigest,\n semanticBindings: stage.semanticBindings,\n // An effect profile changes emission, so two otherwise identical\n // passes must not share one unit when their proofs differ.\n effectProfileProof: stage.effectProfileProof\n ? sha256Utf8(JSON.stringify(stage.effectProfileProof))\n : null\n }))\n .sort((left, right) => compareUtf8(left.stageName, right.stageName))\n });\n}\n\nfunction collectBodyStageBytecode(effectDescription)\n{\n const bytecodeByKey = new Map();\n\n for (const technique of effectDescription?.techniques ?? [])\n {\n for (let passIndex = 0; passIndex < technique.passes.length; passIndex++)\n {\n const stageInputs = technique.passes[passIndex].stageInputs;\n\n for (let stageType = 0; stageType < stageInputs.length; stageType++)\n {\n const stage = stageInputs[stageType];\n if (!stage?.m_exists) continue;\n\n const stageName = stage.cjsShaderBytecode?.stageName;\n const value = stage.cjsShaderBytecode?.bytes;\n if (!stageName || value === undefined || value === null) continue;\n\n const key = `${technique.name}.pass${passIndex}.${stageName}`;\n const bytes = normalizeBytecodeBytes(value, `${key} stage bytecode`);\n\n if (!bytes?.length)\n {\n throw new TypeError(`${key} stage bytecode must be a non-empty byte view`);\n }\n\n bytecodeByKey.set(key, {\n techniqueName: technique.name,\n passIndex,\n stageType,\n stageName,\n bytes\n });\n }\n }\n }\n\n return bytecodeByKey;\n}\n\nfunction resolveBody(effectRes, permutationIndex, source)\n{\n const shader = effectRes.GetShaderByIndex(permutationIndex);\n\n if (!shader)\n {\n throw new Error(\n `Effect body at permutation ${permutationIndex} could not be decoded`\n );\n }\n\n const effectDescription = shader.GetEffectDescription();\n\n if (!effectDescription)\n {\n throw new Error(\n `Effect body at permutation ${permutationIndex} has no effect description`\n );\n }\n\n const resolved = {\n effectRes,\n shader,\n selection: { bodyIndex: permutationIndex, selectedOptions: [] },\n effectDescription,\n bindingManifest: HlslEffectBindingManifest.fromEffectDescription(effectDescription),\n stageBytecodeByKey: collectBodyStageBytecode(effectDescription)\n };\n\n return {\n resolved,\n analysis: buildEffectAnalysis(resolved, {\n source,\n decodeBytecode: false,\n decodeInstructions: false\n })\n };\n}\n\nfunction buildPassEntries(analysis, resolved, selection, effectProfileContext)\n{\n const selectedStages = selectEffectStages(analysis.stages, selection);\n const passes = new Map();\n\n for (const stage of selectedStages)\n {\n const passKey = `${stage.techniqueName}.pass${stage.passIndex}`;\n\n if (!passes.has(passKey))\n {\n passes.set(passKey, { passKey, stages: [] });\n }\n\n const bytecode = resolved.stageBytecodeByKey.get(stage.key)?.bytes;\n\n if (!bytecode?.length)\n {\n throw new Error(`${stage.key} has no shader bytecode`);\n }\n\n passes.get(passKey).stages.push({\n key: stage.key,\n stageName: stage.stageName,\n bytecodeKey: stage.key,\n bytecodeDigest: sha256Bytes(bytecode),\n semanticBindings: analysis.stages.find((candidate) =>\n candidate.techniqueName === stage.techniqueName\n && candidate.passIndex === stage.passIndex\n && candidate.stageName === stage.stageName)?.bindings || [],\n effectProfileProof: particleClearEffectProofFor(\n effectProfileContext,\n stage.key\n )\n });\n }\n\n return Array.from(passes.values());\n}\n\nfunction translatePassUnit(pass, programForKey, source, bindingPolicy)\n{\n const irEntries = pass.stages.map((stage) => ({\n key: stage.key,\n ir: programForKey(stage.bytecodeKey),\n semanticBindings: stage.semanticBindings,\n effectProfileProof: stage.effectProfileProof\n }));\n const resourceTransformPlan = buildResourceTransformPlan(\n irEntries.map((entry) => ({\n ir: entry.ir,\n semanticBindings: entry.semanticBindings\n })),\n { layoutKey: pass.passKey }\n );\n const proof = irEntries.find((entry) => entry.effectProfileProof)\n ?.effectProfileProof ?? null;\n const plan = buildWgslBindingPlan(\n irEntries.map((entry) => entry.ir),\n {\n ...(bindingPolicy ?? {}),\n ...(proof ? { effectProfileProof: proof } : {}),\n ...(resourceTransformPlan ? { resourceTransformPlan } : {})\n }\n );\n\n return buildWgslSet(irEntries.map((entry) => ({\n key: entry.key,\n shader: buildWgsl(entry.ir, {\n bindingPlan: plan,\n ...(resourceTransformPlan ? { resourceTransformPlan } : {}),\n ...(entry.effectProfileProof\n ? { effectProfileProof: entry.effectProfileProof }\n : {})\n })\n })));\n}\n\n/**\n * Translate every unique source body into backend programs, layouts, and\n * resource transforms, sharing one translation unit between bodies whose pass\n * is byte-for-byte identical.\n *\n * A body that cannot be lowered is retained as an explicitly unsupported\n * in-memory record carrying its reason. Portable source reflection is built\n * separately from the same effect; this body-set document does not store it.\n *\n * @param {object} effectRes Loaded version-15 `Tr2EffectRes`.\n * @param {object} permutationGraph Validated `PGRF` document.\n * @param {object} [options] Source label, stage selection, and binding policy.\n * @returns {object} Frozen `CJS_WGSL_BODY_SET` document.\n */\nexport function buildEffectBackendBodySet(effectRes, permutationGraph, options = {})\n{\n const source = options.source || \"memory\";\n const selection = options.selection ?? null;\n const bindingPolicy = options.bindingPolicy ?? null;\n const groups = enumerateUniqueEffectBodies(effectRes);\n\n if (groups.length !== permutationGraph.bodies.length)\n {\n throw new Error(\n \"Effect backend body set requires one unique body per permutation-graph body\"\n );\n }\n\n const unitsBySignature = new Map();\n const graphBodiesByKey = new Map(permutationGraph.bodies.map((body) => [ body.key, body ]));\n const passUnits = [];\n const bodies = [];\n const seenBodyKeys = new Set();\n\n for (const group of groups)\n {\n const variant = permutationGraph.variants[group.permutationIndex];\n const graphBody = variant ? graphBodiesByKey.get(variant.bodyKey) : null;\n\n if (!graphBody)\n {\n throw new Error(\n `Effect backend body ${group.permutationIndex} does not reconcile with its permutation graph record`\n );\n }\n\n if (seenBodyKeys.has(graphBody.key))\n {\n throw new Error(\n `Effect backend body ${graphBody.key} was enumerated more than once`\n );\n }\n\n seenBodyKeys.add(graphBody.key);\n\n let resolvedBody = null;\n let passes = null;\n let programForKey = null;\n\n try\n {\n resolvedBody = resolveBody(effectRes, group.permutationIndex, source);\n\n // One IR cache per body, so a stage shared by two passes lowers once\n // and the effect-profile preflight can seed it exactly as the\n // selected-body path does.\n const programsByKey = new Map();\n programForKey = (key) =>\n {\n if (programsByKey.has(key)) return programsByKey.get(key);\n\n const bytecode = resolvedBody.resolved.stageBytecodeByKey.get(key)?.bytes;\n\n if (!bytecode?.length)\n {\n throw new Error(`${key} has no shader bytecode`);\n }\n\n const program = lowerDxbcToIr(bytecode, { source: `${source}#${key}` });\n programsByKey.set(key, program);\n return program;\n };\n\n let effectProfileContext = null;\n\n if (isParticleClearEffectCandidate(resolvedBody.resolved.effectDescription))\n {\n programForKey(\"Main.pass0.compute\");\n programForKey(\"Main.pass1.compute\");\n effectProfileContext = preflightParticleClearEffectProfile(\n resolvedBody.resolved.effectDescription,\n programsByKey\n );\n }\n\n passes = buildPassEntries(\n resolvedBody.analysis,\n resolvedBody.resolved,\n selection,\n effectProfileContext\n );\n }\n catch (error)\n {\n // Stage selection and profile preflight fail closed per body: an\n // unsupported stage kind in one body must not fail the package.\n bodies.push(Object.freeze({\n bodyKey: graphBody.key,\n representativePermutationIndex: group.permutationIndex,\n status: \"unsupported\",\n error: String(error?.message ?? error),\n passCount: 0,\n passes: Object.freeze([])\n }));\n continue;\n }\n\n const bodyPasses = [];\n let failure = null;\n\n for (const pass of passes)\n {\n const signature = passUnitSignature(pass);\n let unit = unitsBySignature.get(signature);\n\n if (!unit)\n {\n let wgsl = null;\n\n try\n {\n wgsl = translatePassUnit(\n pass,\n programForKey,\n source,\n bindingPolicy\n );\n }\n catch (error)\n {\n failure = String(error?.message ?? error);\n break;\n }\n\n unit = {\n key: `unit${passUnits.length}`,\n sha256: sha256Utf8(`${JSON.stringify(wgsl)}\\n`),\n wgslSetVersion: wgsl.formatVersion,\n shaders: wgsl.shaders,\n layouts: wgsl.layouts,\n ...(wgsl.resourceTransforms\n ? { resourceTransforms: wgsl.resourceTransforms }\n : {})\n };\n unitsBySignature.set(signature, unit);\n passUnits.push(unit);\n }\n\n bodyPasses.push(Object.freeze({ passKey: pass.passKey, unitKey: unit.key }));\n }\n\n bodies.push(Object.freeze(failure\n ? {\n bodyKey: graphBody.key,\n representativePermutationIndex: group.permutationIndex,\n status: \"unsupported\",\n error: failure,\n passCount: 0,\n passes: Object.freeze([])\n }\n : {\n bodyKey: graphBody.key,\n representativePermutationIndex: group.permutationIndex,\n status: \"translated\",\n error: null,\n passCount: bodyPasses.length,\n passes: Object.freeze(bodyPasses)\n }));\n }\n\n const translatedCount = bodies.filter((body) => body.status === \"translated\").length;\n\n if (!translatedCount)\n {\n throw new Error(\n \"Effect backend body set requires at least one translated body\"\n );\n }\n\n return Object.freeze({\n format: EFFECT_BACKEND_BODY_SET_FORMAT,\n formatVersion: EFFECT_BACKEND_BODY_SET_VERSION,\n coverage: Object.freeze({\n bodies: translatedCount === bodies.length ? \"all-unique\" : \"partial\",\n programs: \"complete-for-translated\"\n }),\n bodyCount: bodies.length,\n translatedBodyCount: translatedCount,\n passUnitCount: passUnits.length,\n passUnits: Object.freeze(passUnits.map((unit) => Object.freeze(unit))),\n bodies: Object.freeze(bodies)\n });\n}\n"],"names":["EFFECT_BACKEND_BODY_SET_CHUNK","EFFECT_BACKEND_BODY_SET_FORMAT","EFFECT_BACKEND_BODY_SET_VERSION","passUnitSignature","pass","JSON","stringify","passKey","stages","map","stage","stageName","bytecode","bytecodeDigest","semanticBindings","effectProfileProof","sha256Utf8","sort","left","right","compareUtf8","collectBodyStageBytecode","effectDescription","bytecodeByKey","Map","technique","techniques","passIndex","passes","length","stageInputs","stageType","m_exists","cjsShaderBytecode","value","bytes","undefined","key","name","normalizeBytecodeBytes","TypeError","set","techniqueName","resolveBody","effectRes","permutationIndex","source","shader","GetShaderByIndex","Error","GetEffectDescription","resolved","selection","bodyIndex","selectedOptions","bindingManifest","HlslEffectBindingManifest","fromEffectDescription","stageBytecodeByKey","analysis","buildEffectAnalysis","decodeBytecode","decodeInstructions","buildPassEntries","effectProfileContext","selectedStages","selectEffectStages","has","get","push","bytecodeKey","sha256Bytes","find","candidate","bindings","particleClearEffectProofFor","Array","from","values","translatePassUnit","programForKey","bindingPolicy","irEntries","ir","resourceTransformPlan","buildResourceTransformPlan","entry","layoutKey","proof","plan","buildWgslBindingPlan","buildWgslSet","buildWgsl","bindingPlan","buildEffectBackendBodySet","permutationGraph","options","groups","enumerateUniqueEffectBodies","bodies","unitsBySignature","graphBodiesByKey","body","passUnits","seenBodyKeys","Set","group","variant","variants","graphBody","bodyKey","add","resolvedBody","programsByKey","program","lowerDxbcToIr","isParticleClearEffectCandidate","preflightParticleClearEffectProfile","error","Object","freeze","representativePermutationIndex","status","String","message","passCount","bodyPasses","failure","signature","unit","wgsl","sha256","wgslSetVersion","formatVersion","shaders","layouts","resourceTransforms","unitKey","translatedCount","filter","format","coverage","programs","bodyCount","translatedBodyCount","passUnitCount"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Error raised when a CEWGPU package or WebGPU analysis pass cannot be
2
+ * Error raised when a Carbon WebGPU package or WebGPU analysis pass cannot be
3
3
  * completed safely.
4
4
  */
5
5
  class WebgpuReadError extends Error {
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sources":["../../../../../src/formats/webgpu/core/errors.js"],"sourcesContent":["/**\n * Error raised when a CEWGPU package or WebGPU analysis pass cannot be\n * completed safely.\n */\nexport class WebgpuReadError extends Error\n{\n /**\n * Creates a read/analysis error with structured location details.\n *\n * @param {string} message Human-readable failure reason.\n * @param {object} [details] Extra reader state such as source or offset.\n */\n constructor(message, details = {})\n {\n super(message);\n this.name = \"WebgpuReadError\";\n this.details = details;\n }\n}\n"],"names":["WebgpuReadError","Error","constructor","message","details","name"],"mappings":"AAAA;AACA;AACA;AACA;AACO,MAAMA,eAAe,SAASC,KAAK,CAC1C;AACI;AACJ;AACA;AACA;AACA;AACA;AACIC,EAAAA,WAAWA,CAACC,OAAO,EAAEC,OAAO,GAAG,EAAE,EACjC;IACI,KAAK,CAACD,OAAO,CAAC;IACd,IAAI,CAACE,IAAI,GAAG,iBAAiB;IAC7B,IAAI,CAACD,OAAO,GAAGA,OAAO;AAC1B,EAAA;AACJ;;;;"}
1
+ {"version":3,"file":"errors.js","sources":["../../../../../src/formats/webgpu/core/errors.js"],"sourcesContent":["/**\n * Error raised when a Carbon WebGPU package or WebGPU analysis pass cannot be\n * completed safely.\n */\nexport class WebgpuReadError extends Error\n{\n /**\n * Creates a read/analysis error with structured location details.\n *\n * @param {string} message Human-readable failure reason.\n * @param {object} [details] Extra reader state such as source or offset.\n */\n constructor(message, details = {})\n {\n super(message);\n this.name = \"WebgpuReadError\";\n this.details = details;\n }\n}\n"],"names":["WebgpuReadError","Error","constructor","message","details","name"],"mappings":"AAAA;AACA;AACA;AACA;AACO,MAAMA,eAAe,SAASC,KAAK,CAC1C;AACI;AACJ;AACA;AACA;AACA;AACA;AACIC,EAAAA,WAAWA,CAACC,OAAO,EAAEC,OAAO,GAAG,EAAE,EACjC;IACI,KAAK,CAACD,OAAO,CAAC;IACd,IAAI,CAACE,IAAI,GAAG,iBAAiB;IAC7B,IAAI,CAACD,OAAO,GAAGA,OAAO;AAC1B,EAAA;AACJ;;;;"}
@@ -1,17 +1,17 @@
1
1
  import { CjsDxbcFormat } from '../../dxbc/CjsDxbcFormat.js';
2
2
  import { readEffectAnalysis, normalizeBytecodeBytes } from './effectAnalysis.js';
3
- import { looksLikeCewgpuContainer, CewgpuContainer } from './cewgpu/CewgpuContainer.js';
4
- import { validateEffectContainer } from './cewgpu/validateContainer.js';
5
- import { resolvedPermutationIndex, deriveAnalysis, deriveWgsl, deriveBackendBodySet, deriveMetadata, deriveInfo } from './cewgpu/containerViews.js';
3
+ import { looksLikeCarbonWebgpuContainer, CarbonWebgpuContainer } from './carbonWebgpu/CarbonWebgpuContainer.js';
4
+ import { validateEffectContainer } from './carbonWebgpu/validateContainer.js';
5
+ import { resolvedPermutationIndex, deriveAnalysis, deriveWgsl, deriveBackendBodySet, deriveMetadata, deriveInfo } from './carbonWebgpu/containerViews.js';
6
6
  import { WebgpuReadError } from './errors.js';
7
7
  import { lowerDxbcToIr } from './ir/lowerDxbcToIr.js';
8
8
  import { normalizeEffectPermutation, validateResolvedPermutation } from './packageEffectSelection.js';
9
9
 
10
10
  const OUTPUT_JSON = "json";
11
11
  const OUTPUT_RAW = "raw";
12
- const CEWGPU_FORMAT = "CEWGPU";
13
- const CEWGPU_ANALYSIS_FORMAT = "CEWGPU_ANALYSIS";
14
- const CEWGPU_ANALYSIS_VERSION = 1;
12
+ const CARBON_WEBGPU_FORMAT = "CARBON_WEBGPU";
13
+ const CARBON_WEBGPU_ANALYSIS_FORMAT = "CARBON_WEBGPU_ANALYSIS";
14
+ const CARBON_WEBGPU_ANALYSIS_VERSION = 1;
15
15
  const DEFAULT_VALUES = Object.freeze({
16
16
  emit: OUTPUT_JSON,
17
17
  source: "memory",
@@ -127,7 +127,7 @@ function toBytes(input) {
127
127
  if (input instanceof Uint8Array) return input;
128
128
  if (typeof ArrayBuffer !== "undefined" && input instanceof ArrayBuffer) return new Uint8Array(input);
129
129
  if (ArrayBuffer.isView(input)) return new Uint8Array(input.buffer, input.byteOffset, input.byteLength);
130
- throw new TypeError("CjsWebgpuFormat: input must be CEWGPU package bytes (Uint8Array, Buffer, DataView or ArrayBuffer)");
130
+ throw new TypeError("CjsWebgpuFormat: input must be Carbon WebGPU package bytes (Uint8Array, Buffer, DataView or ArrayBuffer)");
131
131
  }
132
132
 
133
133
  /**
@@ -142,9 +142,9 @@ function toBytes(input) {
142
142
  * @param {Uint8Array|ArrayBuffer|Buffer|DataView} input Candidate payload.
143
143
  * @returns {boolean} True when the payload opens on Carbon's v15 version dword.
144
144
  */
145
- function isCewgpu(input) {
145
+ function isCarbonWebgpu(input) {
146
146
  try {
147
- return looksLikeCewgpuContainer(toBytes(input));
147
+ return looksLikeCarbonWebgpuContainer(toBytes(input));
148
148
  } catch {
149
149
  return false;
150
150
  }
@@ -153,18 +153,18 @@ function isCewgpu(input) {
153
153
  /**
154
154
  * The shared read path used by the instance Read/Inspect and static one-shots.
155
155
  *
156
- * @param {Uint8Array|ArrayBuffer|Buffer|DataView} input CEWGPU container payload.
156
+ * @param {Uint8Array|ArrayBuffer|Buffer|DataView} input Carbon WebGPU container payload.
157
157
  * @param {object} values Normalized format values.
158
- * @returns {CewgpuContainer} The loaded container.
158
+ * @returns {CarbonWebgpuContainer} The loaded container.
159
159
  */
160
160
  function readRaw(input, values) {
161
161
  const bytes = toBytes(input);
162
- const container = new CewgpuContainer();
162
+ const container = new CarbonWebgpuContainer();
163
163
  const ok = container.Read(bytes, {
164
164
  sourcePath: values.source
165
165
  });
166
166
  if (!ok) {
167
- throw new WebgpuReadError(container.readError ? container.readError.message : "Failed to read CEWGPU container", {
167
+ throw new WebgpuReadError(container.readError ? container.readError.message : "Failed to read Carbon WebGPU container", {
168
168
  source: values.source,
169
169
  cause: container.readError || null
170
170
  });
@@ -194,7 +194,7 @@ function readRaw(input, values) {
194
194
  * `chunks` is gone. It described a container that no longer exists, and a record
195
195
  * layout has no chunk table to translate it into.
196
196
  *
197
- * @param {CewgpuContainer} container Loaded container.
197
+ * @param {CarbonWebgpuContainer} container Loaded container.
198
198
  * @param {object} [options] View options.
199
199
  * @returns {object} Plain JSON data.
200
200
  */
@@ -209,7 +209,7 @@ function packageToJson(container, options = {}) {
209
209
  permutationIndex
210
210
  });
211
211
  return toJsonValue({
212
- format: CEWGPU_FORMAT,
212
+ format: CARBON_WEBGPU_FORMAT,
213
213
  version: container.carbon.version,
214
214
  sourcePath: source,
215
215
  info: deriveInfo(container, {
@@ -232,9 +232,9 @@ function packageToJson(container, options = {}) {
232
232
  /**
233
233
  * Shared read entry honouring the emit mode.
234
234
  *
235
- * @param {Uint8Array|ArrayBuffer|Buffer|DataView} input CEWGPU container payload.
235
+ * @param {Uint8Array|ArrayBuffer|Buffer|DataView} input Carbon WebGPU container payload.
236
236
  * @param {object} values Normalized format values.
237
- * @returns {CewgpuContainer|object} Raw container or plain JSON data.
237
+ * @returns {CarbonWebgpuContainer|object} Raw container or plain JSON data.
238
238
  */
239
239
  function readWithValues(input, values) {
240
240
  const container = readRaw(input, values);
@@ -247,7 +247,7 @@ function readWithValues(input, values) {
247
247
  * Compact inspection: Carbon version and compiler bytes, body counts, and the
248
248
  * resolved analysis/WGSL counts without building the full JSON package shape.
249
249
  *
250
- * @param {Uint8Array|ArrayBuffer|Buffer|DataView} input CEWGPU container payload.
250
+ * @param {Uint8Array|ArrayBuffer|Buffer|DataView} input Carbon WebGPU container payload.
251
251
  * @param {object} values Normalized format values.
252
252
  * @returns {object} Plain summary data.
253
253
  */
@@ -264,7 +264,7 @@ function inspectWithValues(input, values) {
264
264
  });
265
265
  return {
266
266
  source: values.source,
267
- isCewgpu: true,
267
+ isCarbonWebgpu: true,
268
268
  version: container.carbon.version,
269
269
  compilerVersion: [...container.carbon.compilerVersion],
270
270
  permutationCount: graph.variants.length,
@@ -377,8 +377,8 @@ function buildEffectAnalysis(resolved, options = {}) {
377
377
  });
378
378
  });
379
379
  return toJsonValue({
380
- format: CEWGPU_ANALYSIS_FORMAT,
381
- formatVersion: CEWGPU_ANALYSIS_VERSION,
380
+ format: CARBON_WEBGPU_ANALYSIS_FORMAT,
381
+ formatVersion: CARBON_WEBGPU_ANALYSIS_VERSION,
382
382
  source,
383
383
  effectVersion: resolved.effectDescription?.version ?? manifest?.version ?? resolved.effectRes?.m_version ?? null,
384
384
  compilerVersion: resolved.effectRes?.m_compilerVersion ?? null,
@@ -439,5 +439,5 @@ function toJsonValue(value) {
439
439
  return null;
440
440
  }
441
441
 
442
- export { CEWGPU_ANALYSIS_FORMAT, CEWGPU_ANALYSIS_VERSION, CEWGPU_FORMAT, DEFAULT_VALUES, OUTPUT_JSON, OUTPUT_RAW, WebgpuReadError, analyzeEffectWithValues, buildEffectAnalysis, inspectWithValues, isCewgpu, normalizeValues, packageToJson, readRaw, readWithValues, toBytes, toJsonValue, validateClass, validateClassKey };
442
+ export { CARBON_WEBGPU_ANALYSIS_FORMAT, CARBON_WEBGPU_ANALYSIS_VERSION, CARBON_WEBGPU_FORMAT, DEFAULT_VALUES, OUTPUT_JSON, OUTPUT_RAW, WebgpuReadError, analyzeEffectWithValues, buildEffectAnalysis, inspectWithValues, isCarbonWebgpu, normalizeValues, packageToJson, readRaw, readWithValues, toBytes, toJsonValue, validateClass, validateClassKey };
443
443
  //# sourceMappingURL=helpers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.js","sources":["../../../../../src/formats/webgpu/core/helpers.js"],"sourcesContent":["import CjsDxbcFormat from \"../../dxbc/index.js\";\nimport { normalizeBytecodeBytes, readEffectAnalysis } from \"./effectAnalysis.js\";\n\nimport { CewgpuContainer, looksLikeCewgpuContainer } from \"./cewgpu/CewgpuContainer.js\";\nimport { validateEffectContainer } from \"./cewgpu/validateContainer.js\";\nimport {\n deriveAnalysis,\n deriveBackendBodySet,\n deriveInfo,\n deriveMetadata,\n deriveWgsl,\n resolvedPermutationIndex\n} from \"./cewgpu/containerViews.js\";\nimport { WebgpuReadError } from \"./errors.js\";\nimport { lowerDxbcToIr } from \"./ir/lowerDxbcToIr.js\";\nimport {\n normalizeEffectPermutation,\n validateResolvedPermutation\n} from \"./packageEffectSelection.js\";\n\nexport const OUTPUT_JSON = \"json\";\nexport const OUTPUT_RAW = \"raw\";\nexport const CEWGPU_FORMAT = \"CEWGPU\";\nexport const CEWGPU_ANALYSIS_FORMAT = \"CEWGPU_ANALYSIS\";\nexport const CEWGPU_ANALYSIS_VERSION = 1;\n\nexport const DEFAULT_VALUES = Object.freeze({\n emit: OUTPUT_JSON,\n source: \"memory\",\n decodeInstructions: true,\n permutation: null,\n schema: null,\n classes: Object.freeze({})\n});\n\nconst OPTION_KEYS = new Set([ \"emit\", \"source\", \"decodeInstructions\", \"permutation\", \"schema\", \"classes\" ]);\nconst VALID_EMITS = new Set([ OUTPUT_JSON, OUTPUT_RAW ]);\n\nfunction hasOwn(value, key)\n{\n return Object.prototype.hasOwnProperty.call(value, key);\n}\n\nfunction normalizeEmit(emit, readerName)\n{\n if (emit === undefined || emit === OUTPUT_JSON) return OUTPUT_JSON;\n if (emit === OUTPUT_RAW) return OUTPUT_RAW;\n throw new TypeError(`${readerName}: emit must be \"${OUTPUT_JSON}\" or \"${OUTPUT_RAW}\", got ${JSON.stringify(emit)}`);\n}\n\nfunction assertKnownOptions(options, readerName)\n{\n for (const key of Object.keys(options))\n {\n if (!OPTION_KEYS.has(key))\n {\n throw new TypeError(`${readerName}: unknown option ${JSON.stringify(key)}`);\n }\n }\n}\n\nfunction classMap(values)\n{\n return values && values.classes ? values.classes : {};\n}\n\nfunction cloneValues(values)\n{\n return {\n emit: values.emit,\n source: values.source ?? DEFAULT_VALUES.source,\n decodeInstructions: values.decodeInstructions ?? DEFAULT_VALUES.decodeInstructions,\n permutation: values.permutation ?? null,\n schema: values.schema ?? null,\n classes: { ...classMap(values) }\n };\n}\n\n/**\n * Rejects class override keys outside a format reader's supported class set.\n *\n * @param {string[]} classKeys Supported class override keys.\n * @param {string} key Candidate override key.\n * @param {string} readerName Reader name used in diagnostics.\n */\nexport function validateClassKey(classKeys, key, readerName)\n{\n if (!classKeys.includes(key))\n {\n throw new Error(`${readerName} unknown class type \"${String(key)}\"`);\n }\n}\n\n/**\n * Validates one constructor supplied through a format reader class override.\n *\n * @param {string[]} classKeys Supported class override keys.\n * @param {string} type Candidate override key.\n * @param {Function} Class Candidate constructor.\n * @param {string} readerName Reader name used in diagnostics.\n */\nexport function validateClass(classKeys, type, Class, readerName)\n{\n validateClassKey(classKeys, type, readerName);\n if (typeof Class !== \"function\")\n {\n throw new TypeError(`${readerName} class \"${type}\" must be a constructor`);\n }\n}\n\nfunction mergeClasses(values, classes, classKeys, readerName)\n{\n if (!classes || typeof classes !== \"object\")\n {\n throw new TypeError(`${readerName} classes option must be an object`);\n }\n\n const next = { ...values.classes };\n for (const [ type, Class ] of Object.entries(classes))\n {\n validateClass(classKeys, type, Class, readerName);\n next[type] = Class;\n }\n values.classes = next;\n}\n\n/**\n * Merge format values over a base set and validate them.\n *\n * @param {object} base Current values.\n * @param {object} [options] Values to merge in.\n * @param {string[]} classKeys Valid class keys.\n * @param {string} readerName Reader name used in error messages.\n * @returns {object} A validated copy of the merged values.\n */\nexport function normalizeValues(base, options = {}, classKeys = [], readerName = \"CjsWebgpuFormat\")\n{\n if (!options || typeof options !== \"object\")\n {\n throw new TypeError(`${readerName} options must be an object`);\n }\n\n assertKnownOptions(options, readerName);\n\n const values = cloneValues(base);\n if (hasOwn(options, \"emit\")) values.emit = normalizeEmit(options.emit, readerName);\n if (hasOwn(options, \"source\")) values.source = typeof options.source === \"string\" && options.source ? options.source : DEFAULT_VALUES.source;\n if (hasOwn(options, \"decodeInstructions\")) values.decodeInstructions = !!options.decodeInstructions;\n if (hasOwn(options, \"permutation\")) values.permutation = options.permutation ?? null;\n if (hasOwn(options, \"schema\")) values.schema = options.schema ?? null;\n if (hasOwn(options, \"classes\")) mergeClasses(values, options.classes, classKeys, readerName);\n return values;\n}\n\n/**\n * Normalize caller input into a Uint8Array of package bytes.\n *\n * @param {Uint8Array|ArrayBuffer|Buffer|DataView} input Candidate payload.\n * @returns {Uint8Array} The payload bytes.\n */\nexport function toBytes(input)\n{\n if (input instanceof Uint8Array) return input;\n if (typeof ArrayBuffer !== \"undefined\" && input instanceof ArrayBuffer) return new Uint8Array(input);\n if (ArrayBuffer.isView(input)) return new Uint8Array(input.buffer, input.byteOffset, input.byteLength);\n throw new TypeError(\"CjsWebgpuFormat: input must be CEWGPU package bytes (Uint8Array, Buffer, DataView or ArrayBuffer)\");\n}\n\n/**\n * Reports whether a payload has the Carbon v15 container shape.\n *\n * This is a **shape** check, not an identity check. Our containers are stock\n * Carbon v15 files, so nothing in the bytes separates one from a shipped\n * `effect.dx11` file -- and nothing should. Identity comes from the resource\n * path the file was resolved through, exactly as it does for Carbon, whose own\n * three backend trees are byte-format-identical with no language field anywhere.\n *\n * @param {Uint8Array|ArrayBuffer|Buffer|DataView} input Candidate payload.\n * @returns {boolean} True when the payload opens on Carbon's v15 version dword.\n */\nexport function isCewgpu(input)\n{\n try\n {\n return looksLikeCewgpuContainer(toBytes(input));\n }\n catch\n {\n return false;\n }\n}\n\n/**\n * The shared read path used by the instance Read/Inspect and static one-shots.\n *\n * @param {Uint8Array|ArrayBuffer|Buffer|DataView} input CEWGPU container payload.\n * @param {object} values Normalized format values.\n * @returns {CewgpuContainer} The loaded container.\n */\nexport function readRaw(input, values)\n{\n const bytes = toBytes(input);\n const container = new CewgpuContainer();\n const ok = container.Read(bytes, { sourcePath: values.source });\n\n if (!ok)\n {\n throw new WebgpuReadError(\n container.readError ? container.readError.message : \"Failed to read CEWGPU container\",\n {\n source: values.source,\n cause: container.readError || null\n }\n );\n }\n\n try\n {\n validateEffectContainer(container, { source: values.source });\n }\n catch (error)\n {\n if (error instanceof WebgpuReadError) throw error;\n throw new WebgpuReadError(error.message, {\n source: values.source,\n cause: error\n });\n }\n\n return container;\n}\n\n/**\n * Converts a loaded container to the documented plain JSON shape.\n *\n * `analysis` and `wgsl` are **derived views**, not stored documents. The chunk\n * package kept them beside the reflection they were computed from and carried\n * digests to detect the two disagreeing; there is now one document, so there is\n * nothing left to disagree and no digest to carry.\n *\n * `chunks` is gone. It described a container that no longer exists, and a record\n * layout has no chunk table to translate it into.\n *\n * @param {CewgpuContainer} container Loaded container.\n * @param {object} [options] View options.\n * @returns {object} Plain JSON data.\n */\nexport function packageToJson(container, options = {})\n{\n const source = options.source || container.sourcePath || \"memory\";\n const permutationIndex = options.permutationIndex ?? resolvedPermutationIndex(container);\n const analysis = deriveAnalysis(container, { source, permutationIndex });\n const wgsl = deriveWgsl(container, { permutationIndex });\n\n return toJsonValue({\n format: CEWGPU_FORMAT,\n version: container.carbon.version,\n sourcePath: source,\n info: deriveInfo(container, { source }),\n metadata: deriveMetadata(container, { source, permutationIndex }),\n permutationGraph: container.permutationGraph,\n analysis,\n wgsl,\n backendBodySet: deriveBackendBodySet(container),\n stages: analysis.stages ?? [],\n shaders: wgsl.shaders ?? [],\n layouts: wgsl.layouts ?? []\n });\n}\n\n/**\n * Shared read entry honouring the emit mode.\n *\n * @param {Uint8Array|ArrayBuffer|Buffer|DataView} input CEWGPU container payload.\n * @param {object} values Normalized format values.\n * @returns {CewgpuContainer|object} Raw container or plain JSON data.\n */\nexport function readWithValues(input, values)\n{\n const container = readRaw(input, values);\n return values.emit === OUTPUT_RAW\n ? container\n : packageToJson(container, { source: values.source });\n}\n\n/**\n * Compact inspection: Carbon version and compiler bytes, body counts, and the\n * resolved analysis/WGSL counts without building the full JSON package shape.\n *\n * @param {Uint8Array|ArrayBuffer|Buffer|DataView} input CEWGPU container payload.\n * @param {object} values Normalized format values.\n * @returns {object} Plain summary data.\n */\nexport function inspectWithValues(input, values)\n{\n const container = readRaw(input, values);\n const graph = container.permutationGraph;\n const permutationIndex = resolvedPermutationIndex(container);\n const analysis = deriveAnalysis(container, { source: values.source, permutationIndex });\n const wgsl = deriveWgsl(container, { permutationIndex });\n\n return {\n source: values.source,\n isCewgpu: true,\n version: container.carbon.version,\n compilerVersion: [ ...container.carbon.compilerVersion ],\n permutationCount: graph.variants.length,\n uniqueBodyCount: graph.bodies.length,\n stageCount: analysis.stages.length,\n shaderCount: wgsl.shaders.length,\n layoutCount: wgsl.layouts.length\n };\n}\n\nfunction dxbcSource(source, key)\n{\n return source ? `${source}#${key}` : key;\n}\n\nfunction resolvedStageBytecode(stage, key, bytecodeByKey)\n{\n if (!Number.isInteger(stage.stageType)\n || !Number.isInteger(stage.passIndex)\n || typeof stage.techniqueName !== \"string\"\n || !stage.techniqueName\n || typeof stage.stageName !== \"string\"\n || !stage.stageName)\n {\n throw new Error(`${key} manifest stage identity is invalid`);\n }\n\n const innerStageType = stage.shaderBytecode?.stageType;\n if (innerStageType !== undefined && !Number.isInteger(innerStageType))\n {\n throw new Error(`${key} manifest stage bytecode type is invalid`);\n }\n\n let raw = bytecodeByKey?.get(key);\n if (!raw && bytecodeByKey instanceof Map)\n {\n raw = Array.from(bytecodeByKey.values()).find((entry) =>\n entry.techniqueName === stage.techniqueName\n && entry.passIndex === stage.passIndex\n && entry.stageType === stage.stageType\n );\n }\n if (!raw) return stage.shaderBytecode?.bytes;\n\n if (!Number.isInteger(raw.stageType)\n || stage.stageType !== raw.stageType\n || (innerStageType !== undefined && innerStageType !== raw.stageType)\n || stage.stageName !== raw.stageName\n || (stage.shaderBytecode?.stageName !== undefined\n && stage.shaderBytecode.stageName !== raw.stageName))\n {\n throw new Error(`${key} manifest and raw stage metadata disagree`);\n }\n\n if (stage.shaderBytecode?.bytes !== undefined)\n {\n const manifestBytes = normalizeBytecodeBytes(\n stage.shaderBytecode.bytes,\n `${key} manifest stage bytecode`\n );\n if (!manifestBytes\n || manifestBytes.length !== raw.bytes.length\n || manifestBytes.some((value, index) => value !== raw.bytes[index]))\n {\n throw new Error(`${key} manifest and raw stage bytecode disagree`);\n }\n }\n\n return raw.bytes;\n}\n\nfunction analyzeStage(stage, options)\n{\n const key = `${stage.techniqueName}.pass${stage.passIndex}.${stage.stageName}`;\n const shaderBytecode = stage.shaderBytecode && typeof stage.shaderBytecode === \"object\"\n ? { ...stage.shaderBytecode }\n : stage.shaderBytecode;\n if (shaderBytecode && typeof shaderBytecode === \"object\")\n {\n delete shaderBytecode.bytes;\n }\n const out = {\n ...stage,\n shaderBytecode,\n key,\n dxbc: null,\n dxbcError: null,\n ir: null,\n irError: null\n };\n\n if (options.decodeBytecode === false)\n {\n return out;\n }\n\n const bytecodeBytes = normalizeBytecodeBytes(\n options.bytecodeBytes ?? stage.shaderBytecode?.bytes,\n `${key} stage bytecode`\n );\n if (!bytecodeBytes?.length)\n {\n return out;\n }\n\n try\n {\n out.dxbc = CjsDxbcFormat.read(bytecodeBytes, {\n source: dxbcSource(options.source, key),\n decodeInstructions: options.decodeInstructions\n });\n if (options.decodeInstructions && Array.isArray(out.dxbc.instructions))\n {\n try\n {\n out.ir = lowerDxbcToIr(out.dxbc, { source: dxbcSource(options.source, key) });\n }\n catch (error)\n {\n out.irError = {\n name: error.name,\n message: error.message\n };\n }\n }\n }\n catch (error)\n {\n out.dxbcError = {\n name: error.name,\n message: error.message\n };\n }\n\n return out;\n}\n\n/**\n * Builds the normalized WebGPU analysis document from a resolved effect.\n *\n * @param {object} resolved Raw resolved-effect context from `readEffectAnalysis`.\n * @param {object} [options] Analysis options.\n * @param {string} [options.source] Source label for diagnostics.\n * @param {boolean} [options.decodeBytecode] Whether stage bytecode is inspected.\n * @param {boolean} [options.decodeInstructions] Whether DXBC instructions are decoded.\n * @returns {object} Plain JSON-compatible analysis data.\n */\nexport function buildEffectAnalysis(resolved, options = {})\n{\n const source = options.source || resolved.effectRes?.sourcePath || \"memory\";\n const decodeBytecode = options.decodeBytecode !== undefined ? !!options.decodeBytecode : true;\n const decodeInstructions = options.decodeInstructions !== undefined ? !!options.decodeInstructions : true;\n const manifest = resolved.bindingManifest?.toJSON?.() ?? null;\n const bytecodeByKey = resolved.stageBytecodeByKey instanceof Map\n ? resolved.stageBytecodeByKey\n : null;\n const stages = (manifest?.stages || []).map((stage) =>\n {\n const key = `${stage.techniqueName}.pass${stage.passIndex}.${stage.stageName}`;\n\n return analyzeStage(stage, {\n source,\n decodeBytecode,\n decodeInstructions,\n bytecodeBytes: resolvedStageBytecode(stage, key, bytecodeByKey)\n });\n });\n\n return toJsonValue({\n format: CEWGPU_ANALYSIS_FORMAT,\n formatVersion: CEWGPU_ANALYSIS_VERSION,\n source,\n effectVersion: resolved.effectDescription?.version ?? manifest?.version ?? resolved.effectRes?.m_version ?? null,\n compilerVersion: resolved.effectRes?.m_compilerVersion ?? null,\n effectName: manifest?.effectName || resolved.effectDescription?.effectName || null,\n bodyIndex: resolved.selection?.bodyIndex ?? 0,\n selectedOptions: resolved.selection?.selectedOptions ?? [],\n passes: manifest?.passes || [],\n stages\n });\n}\n\n/**\n * Analyzes one compiled effect payload into a normalized WebGPU-facing\n * document: selected permutation, Carbon binding manifest, and per-stage DXBC\n * decode.\n *\n * @param {Uint8Array|ArrayBuffer|Buffer|DataView} input Tr2 effect payload.\n * @param {object} values Normalized format values.\n * @returns {object} Plain JSON-compatible analysis data.\n */\nexport function analyzeEffectWithValues(input, values)\n{\n const permutation = normalizeEffectPermutation(values.permutation);\n const resolved = readEffectAnalysis(input, {\n source: values.source,\n permutation\n });\n validateResolvedPermutation(\n permutation,\n resolved.selection?.selectedOptions ?? []\n );\n\n return buildEffectAnalysis(resolved, {\n source: values.source,\n decodeInstructions: values.decodeInstructions\n });\n}\n\n/**\n * Deep-convert a value to plain JSON-compatible data.\n *\n * @param {any} value Value to convert.\n * @returns {any} Plain data.\n */\nexport function toJsonValue(value)\n{\n if (value === null || value === undefined) return value ?? null;\n if (typeof value === \"number\" || typeof value === \"string\" || typeof value === \"boolean\") return value;\n if (typeof value === \"bigint\") return value.toString();\n if (ArrayBuffer.isView(value)) return Array.from(value);\n if (Array.isArray(value)) return value.map(toJsonValue);\n if (value instanceof Map)\n {\n const out = {};\n for (const [ key, entry ] of value) out[key] = toJsonValue(entry);\n return out;\n }\n if (value instanceof Set) return Array.from(value, toJsonValue);\n if (typeof value === \"object\")\n {\n if (typeof value.toJSON === \"function\") return toJsonValue(value.toJSON());\n const out = {};\n for (const key of Object.keys(value)) out[key] = toJsonValue(value[key]);\n return out;\n }\n return null;\n}\n\nexport { WebgpuReadError };\n"],"names":["OUTPUT_JSON","OUTPUT_RAW","CEWGPU_FORMAT","CEWGPU_ANALYSIS_FORMAT","CEWGPU_ANALYSIS_VERSION","DEFAULT_VALUES","Object","freeze","emit","source","decodeInstructions","permutation","schema","classes","OPTION_KEYS","Set","hasOwn","value","key","prototype","hasOwnProperty","call","normalizeEmit","readerName","undefined","TypeError","JSON","stringify","assertKnownOptions","options","keys","has","classMap","values","cloneValues","validateClassKey","classKeys","includes","Error","String","validateClass","type","Class","mergeClasses","next","entries","normalizeValues","base","toBytes","input","Uint8Array","ArrayBuffer","isView","buffer","byteOffset","byteLength","isCewgpu","looksLikeCewgpuContainer","readRaw","bytes","container","CewgpuContainer","ok","Read","sourcePath","WebgpuReadError","readError","message","cause","validateEffectContainer","error","packageToJson","permutationIndex","resolvedPermutationIndex","analysis","deriveAnalysis","wgsl","deriveWgsl","toJsonValue","format","version","carbon","info","deriveInfo","metadata","deriveMetadata","permutationGraph","backendBodySet","deriveBackendBodySet","stages","shaders","layouts","readWithValues","inspectWithValues","graph","compilerVersion","permutationCount","variants","length","uniqueBodyCount","bodies","stageCount","shaderCount","layoutCount","dxbcSource","resolvedStageBytecode","stage","bytecodeByKey","Number","isInteger","stageType","passIndex","techniqueName","stageName","innerStageType","shaderBytecode","raw","get","Map","Array","from","find","entry","manifestBytes","normalizeBytecodeBytes","some","index","analyzeStage","out","dxbc","dxbcError","ir","irError","decodeBytecode","bytecodeBytes","CjsDxbcFormat","read","isArray","instructions","lowerDxbcToIr","name","buildEffectAnalysis","resolved","effectRes","manifest","bindingManifest","toJSON","stageBytecodeByKey","map","formatVersion","effectVersion","effectDescription","m_version","m_compilerVersion","effectName","bodyIndex","selection","selectedOptions","passes","analyzeEffectWithValues","normalizeEffectPermutation","readEffectAnalysis","validateResolvedPermutation","toString"],"mappings":"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"}
1
+ {"version":3,"file":"helpers.js","sources":["../../../../../src/formats/webgpu/core/helpers.js"],"sourcesContent":["import CjsDxbcFormat from \"../../dxbc/index.js\";\nimport { normalizeBytecodeBytes, readEffectAnalysis } from \"./effectAnalysis.js\";\n\nimport { CarbonWebgpuContainer, looksLikeCarbonWebgpuContainer } from \"./carbonWebgpu/CarbonWebgpuContainer.js\";\nimport { validateEffectContainer } from \"./carbonWebgpu/validateContainer.js\";\nimport {\n deriveAnalysis,\n deriveBackendBodySet,\n deriveInfo,\n deriveMetadata,\n deriveWgsl,\n resolvedPermutationIndex\n} from \"./carbonWebgpu/containerViews.js\";\nimport { WebgpuReadError } from \"./errors.js\";\nimport { lowerDxbcToIr } from \"./ir/lowerDxbcToIr.js\";\nimport {\n normalizeEffectPermutation,\n validateResolvedPermutation\n} from \"./packageEffectSelection.js\";\n\nexport const OUTPUT_JSON = \"json\";\nexport const OUTPUT_RAW = \"raw\";\nexport const CARBON_WEBGPU_FORMAT = \"CARBON_WEBGPU\";\nexport const CARBON_WEBGPU_ANALYSIS_FORMAT = \"CARBON_WEBGPU_ANALYSIS\";\nexport const CARBON_WEBGPU_ANALYSIS_VERSION = 1;\n\nexport const DEFAULT_VALUES = Object.freeze({\n emit: OUTPUT_JSON,\n source: \"memory\",\n decodeInstructions: true,\n permutation: null,\n schema: null,\n classes: Object.freeze({})\n});\n\nconst OPTION_KEYS = new Set([ \"emit\", \"source\", \"decodeInstructions\", \"permutation\", \"schema\", \"classes\" ]);\nconst VALID_EMITS = new Set([ OUTPUT_JSON, OUTPUT_RAW ]);\n\nfunction hasOwn(value, key)\n{\n return Object.prototype.hasOwnProperty.call(value, key);\n}\n\nfunction normalizeEmit(emit, readerName)\n{\n if (emit === undefined || emit === OUTPUT_JSON) return OUTPUT_JSON;\n if (emit === OUTPUT_RAW) return OUTPUT_RAW;\n throw new TypeError(`${readerName}: emit must be \"${OUTPUT_JSON}\" or \"${OUTPUT_RAW}\", got ${JSON.stringify(emit)}`);\n}\n\nfunction assertKnownOptions(options, readerName)\n{\n for (const key of Object.keys(options))\n {\n if (!OPTION_KEYS.has(key))\n {\n throw new TypeError(`${readerName}: unknown option ${JSON.stringify(key)}`);\n }\n }\n}\n\nfunction classMap(values)\n{\n return values && values.classes ? values.classes : {};\n}\n\nfunction cloneValues(values)\n{\n return {\n emit: values.emit,\n source: values.source ?? DEFAULT_VALUES.source,\n decodeInstructions: values.decodeInstructions ?? DEFAULT_VALUES.decodeInstructions,\n permutation: values.permutation ?? null,\n schema: values.schema ?? null,\n classes: { ...classMap(values) }\n };\n}\n\n/**\n * Rejects class override keys outside a format reader's supported class set.\n *\n * @param {string[]} classKeys Supported class override keys.\n * @param {string} key Candidate override key.\n * @param {string} readerName Reader name used in diagnostics.\n */\nexport function validateClassKey(classKeys, key, readerName)\n{\n if (!classKeys.includes(key))\n {\n throw new Error(`${readerName} unknown class type \"${String(key)}\"`);\n }\n}\n\n/**\n * Validates one constructor supplied through a format reader class override.\n *\n * @param {string[]} classKeys Supported class override keys.\n * @param {string} type Candidate override key.\n * @param {Function} Class Candidate constructor.\n * @param {string} readerName Reader name used in diagnostics.\n */\nexport function validateClass(classKeys, type, Class, readerName)\n{\n validateClassKey(classKeys, type, readerName);\n if (typeof Class !== \"function\")\n {\n throw new TypeError(`${readerName} class \"${type}\" must be a constructor`);\n }\n}\n\nfunction mergeClasses(values, classes, classKeys, readerName)\n{\n if (!classes || typeof classes !== \"object\")\n {\n throw new TypeError(`${readerName} classes option must be an object`);\n }\n\n const next = { ...values.classes };\n for (const [ type, Class ] of Object.entries(classes))\n {\n validateClass(classKeys, type, Class, readerName);\n next[type] = Class;\n }\n values.classes = next;\n}\n\n/**\n * Merge format values over a base set and validate them.\n *\n * @param {object} base Current values.\n * @param {object} [options] Values to merge in.\n * @param {string[]} classKeys Valid class keys.\n * @param {string} readerName Reader name used in error messages.\n * @returns {object} A validated copy of the merged values.\n */\nexport function normalizeValues(base, options = {}, classKeys = [], readerName = \"CjsWebgpuFormat\")\n{\n if (!options || typeof options !== \"object\")\n {\n throw new TypeError(`${readerName} options must be an object`);\n }\n\n assertKnownOptions(options, readerName);\n\n const values = cloneValues(base);\n if (hasOwn(options, \"emit\")) values.emit = normalizeEmit(options.emit, readerName);\n if (hasOwn(options, \"source\")) values.source = typeof options.source === \"string\" && options.source ? options.source : DEFAULT_VALUES.source;\n if (hasOwn(options, \"decodeInstructions\")) values.decodeInstructions = !!options.decodeInstructions;\n if (hasOwn(options, \"permutation\")) values.permutation = options.permutation ?? null;\n if (hasOwn(options, \"schema\")) values.schema = options.schema ?? null;\n if (hasOwn(options, \"classes\")) mergeClasses(values, options.classes, classKeys, readerName);\n return values;\n}\n\n/**\n * Normalize caller input into a Uint8Array of package bytes.\n *\n * @param {Uint8Array|ArrayBuffer|Buffer|DataView} input Candidate payload.\n * @returns {Uint8Array} The payload bytes.\n */\nexport function toBytes(input)\n{\n if (input instanceof Uint8Array) return input;\n if (typeof ArrayBuffer !== \"undefined\" && input instanceof ArrayBuffer) return new Uint8Array(input);\n if (ArrayBuffer.isView(input)) return new Uint8Array(input.buffer, input.byteOffset, input.byteLength);\n throw new TypeError(\"CjsWebgpuFormat: input must be Carbon WebGPU package bytes (Uint8Array, Buffer, DataView or ArrayBuffer)\");\n}\n\n/**\n * Reports whether a payload has the Carbon v15 container shape.\n *\n * This is a **shape** check, not an identity check. Our containers are stock\n * Carbon v15 files, so nothing in the bytes separates one from a shipped\n * `effect.dx11` file -- and nothing should. Identity comes from the resource\n * path the file was resolved through, exactly as it does for Carbon, whose own\n * three backend trees are byte-format-identical with no language field anywhere.\n *\n * @param {Uint8Array|ArrayBuffer|Buffer|DataView} input Candidate payload.\n * @returns {boolean} True when the payload opens on Carbon's v15 version dword.\n */\nexport function isCarbonWebgpu(input)\n{\n try\n {\n return looksLikeCarbonWebgpuContainer(toBytes(input));\n }\n catch\n {\n return false;\n }\n}\n\n/**\n * The shared read path used by the instance Read/Inspect and static one-shots.\n *\n * @param {Uint8Array|ArrayBuffer|Buffer|DataView} input Carbon WebGPU container payload.\n * @param {object} values Normalized format values.\n * @returns {CarbonWebgpuContainer} The loaded container.\n */\nexport function readRaw(input, values)\n{\n const bytes = toBytes(input);\n const container = new CarbonWebgpuContainer();\n const ok = container.Read(bytes, { sourcePath: values.source });\n\n if (!ok)\n {\n throw new WebgpuReadError(\n container.readError ? container.readError.message : \"Failed to read Carbon WebGPU container\",\n {\n source: values.source,\n cause: container.readError || null\n }\n );\n }\n\n try\n {\n validateEffectContainer(container, { source: values.source });\n }\n catch (error)\n {\n if (error instanceof WebgpuReadError) throw error;\n throw new WebgpuReadError(error.message, {\n source: values.source,\n cause: error\n });\n }\n\n return container;\n}\n\n/**\n * Converts a loaded container to the documented plain JSON shape.\n *\n * `analysis` and `wgsl` are **derived views**, not stored documents. The chunk\n * package kept them beside the reflection they were computed from and carried\n * digests to detect the two disagreeing; there is now one document, so there is\n * nothing left to disagree and no digest to carry.\n *\n * `chunks` is gone. It described a container that no longer exists, and a record\n * layout has no chunk table to translate it into.\n *\n * @param {CarbonWebgpuContainer} container Loaded container.\n * @param {object} [options] View options.\n * @returns {object} Plain JSON data.\n */\nexport function packageToJson(container, options = {})\n{\n const source = options.source || container.sourcePath || \"memory\";\n const permutationIndex = options.permutationIndex ?? resolvedPermutationIndex(container);\n const analysis = deriveAnalysis(container, { source, permutationIndex });\n const wgsl = deriveWgsl(container, { permutationIndex });\n\n return toJsonValue({\n format: CARBON_WEBGPU_FORMAT,\n version: container.carbon.version,\n sourcePath: source,\n info: deriveInfo(container, { source }),\n metadata: deriveMetadata(container, { source, permutationIndex }),\n permutationGraph: container.permutationGraph,\n analysis,\n wgsl,\n backendBodySet: deriveBackendBodySet(container),\n stages: analysis.stages ?? [],\n shaders: wgsl.shaders ?? [],\n layouts: wgsl.layouts ?? []\n });\n}\n\n/**\n * Shared read entry honouring the emit mode.\n *\n * @param {Uint8Array|ArrayBuffer|Buffer|DataView} input Carbon WebGPU container payload.\n * @param {object} values Normalized format values.\n * @returns {CarbonWebgpuContainer|object} Raw container or plain JSON data.\n */\nexport function readWithValues(input, values)\n{\n const container = readRaw(input, values);\n return values.emit === OUTPUT_RAW\n ? container\n : packageToJson(container, { source: values.source });\n}\n\n/**\n * Compact inspection: Carbon version and compiler bytes, body counts, and the\n * resolved analysis/WGSL counts without building the full JSON package shape.\n *\n * @param {Uint8Array|ArrayBuffer|Buffer|DataView} input Carbon WebGPU container payload.\n * @param {object} values Normalized format values.\n * @returns {object} Plain summary data.\n */\nexport function inspectWithValues(input, values)\n{\n const container = readRaw(input, values);\n const graph = container.permutationGraph;\n const permutationIndex = resolvedPermutationIndex(container);\n const analysis = deriveAnalysis(container, { source: values.source, permutationIndex });\n const wgsl = deriveWgsl(container, { permutationIndex });\n\n return {\n source: values.source,\n isCarbonWebgpu: true,\n version: container.carbon.version,\n compilerVersion: [ ...container.carbon.compilerVersion ],\n permutationCount: graph.variants.length,\n uniqueBodyCount: graph.bodies.length,\n stageCount: analysis.stages.length,\n shaderCount: wgsl.shaders.length,\n layoutCount: wgsl.layouts.length\n };\n}\n\nfunction dxbcSource(source, key)\n{\n return source ? `${source}#${key}` : key;\n}\n\nfunction resolvedStageBytecode(stage, key, bytecodeByKey)\n{\n if (!Number.isInteger(stage.stageType)\n || !Number.isInteger(stage.passIndex)\n || typeof stage.techniqueName !== \"string\"\n || !stage.techniqueName\n || typeof stage.stageName !== \"string\"\n || !stage.stageName)\n {\n throw new Error(`${key} manifest stage identity is invalid`);\n }\n\n const innerStageType = stage.shaderBytecode?.stageType;\n if (innerStageType !== undefined && !Number.isInteger(innerStageType))\n {\n throw new Error(`${key} manifest stage bytecode type is invalid`);\n }\n\n let raw = bytecodeByKey?.get(key);\n if (!raw && bytecodeByKey instanceof Map)\n {\n raw = Array.from(bytecodeByKey.values()).find((entry) =>\n entry.techniqueName === stage.techniqueName\n && entry.passIndex === stage.passIndex\n && entry.stageType === stage.stageType\n );\n }\n if (!raw) return stage.shaderBytecode?.bytes;\n\n if (!Number.isInteger(raw.stageType)\n || stage.stageType !== raw.stageType\n || (innerStageType !== undefined && innerStageType !== raw.stageType)\n || stage.stageName !== raw.stageName\n || (stage.shaderBytecode?.stageName !== undefined\n && stage.shaderBytecode.stageName !== raw.stageName))\n {\n throw new Error(`${key} manifest and raw stage metadata disagree`);\n }\n\n if (stage.shaderBytecode?.bytes !== undefined)\n {\n const manifestBytes = normalizeBytecodeBytes(\n stage.shaderBytecode.bytes,\n `${key} manifest stage bytecode`\n );\n if (!manifestBytes\n || manifestBytes.length !== raw.bytes.length\n || manifestBytes.some((value, index) => value !== raw.bytes[index]))\n {\n throw new Error(`${key} manifest and raw stage bytecode disagree`);\n }\n }\n\n return raw.bytes;\n}\n\nfunction analyzeStage(stage, options)\n{\n const key = `${stage.techniqueName}.pass${stage.passIndex}.${stage.stageName}`;\n const shaderBytecode = stage.shaderBytecode && typeof stage.shaderBytecode === \"object\"\n ? { ...stage.shaderBytecode }\n : stage.shaderBytecode;\n if (shaderBytecode && typeof shaderBytecode === \"object\")\n {\n delete shaderBytecode.bytes;\n }\n const out = {\n ...stage,\n shaderBytecode,\n key,\n dxbc: null,\n dxbcError: null,\n ir: null,\n irError: null\n };\n\n if (options.decodeBytecode === false)\n {\n return out;\n }\n\n const bytecodeBytes = normalizeBytecodeBytes(\n options.bytecodeBytes ?? stage.shaderBytecode?.bytes,\n `${key} stage bytecode`\n );\n if (!bytecodeBytes?.length)\n {\n return out;\n }\n\n try\n {\n out.dxbc = CjsDxbcFormat.read(bytecodeBytes, {\n source: dxbcSource(options.source, key),\n decodeInstructions: options.decodeInstructions\n });\n if (options.decodeInstructions && Array.isArray(out.dxbc.instructions))\n {\n try\n {\n out.ir = lowerDxbcToIr(out.dxbc, { source: dxbcSource(options.source, key) });\n }\n catch (error)\n {\n out.irError = {\n name: error.name,\n message: error.message\n };\n }\n }\n }\n catch (error)\n {\n out.dxbcError = {\n name: error.name,\n message: error.message\n };\n }\n\n return out;\n}\n\n/**\n * Builds the normalized WebGPU analysis document from a resolved effect.\n *\n * @param {object} resolved Raw resolved-effect context from `readEffectAnalysis`.\n * @param {object} [options] Analysis options.\n * @param {string} [options.source] Source label for diagnostics.\n * @param {boolean} [options.decodeBytecode] Whether stage bytecode is inspected.\n * @param {boolean} [options.decodeInstructions] Whether DXBC instructions are decoded.\n * @returns {object} Plain JSON-compatible analysis data.\n */\nexport function buildEffectAnalysis(resolved, options = {})\n{\n const source = options.source || resolved.effectRes?.sourcePath || \"memory\";\n const decodeBytecode = options.decodeBytecode !== undefined ? !!options.decodeBytecode : true;\n const decodeInstructions = options.decodeInstructions !== undefined ? !!options.decodeInstructions : true;\n const manifest = resolved.bindingManifest?.toJSON?.() ?? null;\n const bytecodeByKey = resolved.stageBytecodeByKey instanceof Map\n ? resolved.stageBytecodeByKey\n : null;\n const stages = (manifest?.stages || []).map((stage) =>\n {\n const key = `${stage.techniqueName}.pass${stage.passIndex}.${stage.stageName}`;\n\n return analyzeStage(stage, {\n source,\n decodeBytecode,\n decodeInstructions,\n bytecodeBytes: resolvedStageBytecode(stage, key, bytecodeByKey)\n });\n });\n\n return toJsonValue({\n format: CARBON_WEBGPU_ANALYSIS_FORMAT,\n formatVersion: CARBON_WEBGPU_ANALYSIS_VERSION,\n source,\n effectVersion: resolved.effectDescription?.version ?? manifest?.version ?? resolved.effectRes?.m_version ?? null,\n compilerVersion: resolved.effectRes?.m_compilerVersion ?? null,\n effectName: manifest?.effectName || resolved.effectDescription?.effectName || null,\n bodyIndex: resolved.selection?.bodyIndex ?? 0,\n selectedOptions: resolved.selection?.selectedOptions ?? [],\n passes: manifest?.passes || [],\n stages\n });\n}\n\n/**\n * Analyzes one compiled effect payload into a normalized WebGPU-facing\n * document: selected permutation, Carbon binding manifest, and per-stage DXBC\n * decode.\n *\n * @param {Uint8Array|ArrayBuffer|Buffer|DataView} input Tr2 effect payload.\n * @param {object} values Normalized format values.\n * @returns {object} Plain JSON-compatible analysis data.\n */\nexport function analyzeEffectWithValues(input, values)\n{\n const permutation = normalizeEffectPermutation(values.permutation);\n const resolved = readEffectAnalysis(input, {\n source: values.source,\n permutation\n });\n validateResolvedPermutation(\n permutation,\n resolved.selection?.selectedOptions ?? []\n );\n\n return buildEffectAnalysis(resolved, {\n source: values.source,\n decodeInstructions: values.decodeInstructions\n });\n}\n\n/**\n * Deep-convert a value to plain JSON-compatible data.\n *\n * @param {any} value Value to convert.\n * @returns {any} Plain data.\n */\nexport function toJsonValue(value)\n{\n if (value === null || value === undefined) return value ?? null;\n if (typeof value === \"number\" || typeof value === \"string\" || typeof value === \"boolean\") return value;\n if (typeof value === \"bigint\") return value.toString();\n if (ArrayBuffer.isView(value)) return Array.from(value);\n if (Array.isArray(value)) return value.map(toJsonValue);\n if (value instanceof Map)\n {\n const out = {};\n for (const [ key, entry ] of value) out[key] = toJsonValue(entry);\n return out;\n }\n if (value instanceof Set) return Array.from(value, toJsonValue);\n if (typeof value === \"object\")\n {\n if (typeof value.toJSON === \"function\") return toJsonValue(value.toJSON());\n const out = {};\n for (const key of Object.keys(value)) out[key] = toJsonValue(value[key]);\n return out;\n }\n return null;\n}\n\nexport { WebgpuReadError };\n"],"names":["OUTPUT_JSON","OUTPUT_RAW","CARBON_WEBGPU_FORMAT","CARBON_WEBGPU_ANALYSIS_FORMAT","CARBON_WEBGPU_ANALYSIS_VERSION","DEFAULT_VALUES","Object","freeze","emit","source","decodeInstructions","permutation","schema","classes","OPTION_KEYS","Set","hasOwn","value","key","prototype","hasOwnProperty","call","normalizeEmit","readerName","undefined","TypeError","JSON","stringify","assertKnownOptions","options","keys","has","classMap","values","cloneValues","validateClassKey","classKeys","includes","Error","String","validateClass","type","Class","mergeClasses","next","entries","normalizeValues","base","toBytes","input","Uint8Array","ArrayBuffer","isView","buffer","byteOffset","byteLength","isCarbonWebgpu","looksLikeCarbonWebgpuContainer","readRaw","bytes","container","CarbonWebgpuContainer","ok","Read","sourcePath","WebgpuReadError","readError","message","cause","validateEffectContainer","error","packageToJson","permutationIndex","resolvedPermutationIndex","analysis","deriveAnalysis","wgsl","deriveWgsl","toJsonValue","format","version","carbon","info","deriveInfo","metadata","deriveMetadata","permutationGraph","backendBodySet","deriveBackendBodySet","stages","shaders","layouts","readWithValues","inspectWithValues","graph","compilerVersion","permutationCount","variants","length","uniqueBodyCount","bodies","stageCount","shaderCount","layoutCount","dxbcSource","resolvedStageBytecode","stage","bytecodeByKey","Number","isInteger","stageType","passIndex","techniqueName","stageName","innerStageType","shaderBytecode","raw","get","Map","Array","from","find","entry","manifestBytes","normalizeBytecodeBytes","some","index","analyzeStage","out","dxbc","dxbcError","ir","irError","decodeBytecode","bytecodeBytes","CjsDxbcFormat","read","isArray","instructions","lowerDxbcToIr","name","buildEffectAnalysis","resolved","effectRes","manifest","bindingManifest","toJSON","stageBytecodeByKey","map","formatVersion","effectVersion","effectDescription","m_version","m_compilerVersion","effectName","bodyIndex","selection","selectedOptions","passes","analyzeEffectWithValues","normalizeEffectPermutation","readEffectAnalysis","validateResolvedPermutation","toString"],"mappings":"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"}
@@ -7,7 +7,6 @@ import { buildWgsl } from './wgsl/emitWgsl.js';
7
7
  import { buildWgslSet } from './wgsl/buildWgslSet.js';
8
8
  import { buildResourceTransformPlan } from './wgsl/buildResourceTransformPlan.js';
9
9
  import { buildEffectPermutationGraph, EFFECT_PERMUTATION_GRAPH_VERSION, EFFECT_PERMUTATION_GRAPH_FORMAT, EFFECT_PERMUTATION_GRAPH_CHUNK } from '../../../format/effect/effectPermutationGraph.js';
10
- import { buildCompleteEffectReflection } from '../../../format/effect/effectReflectionPackage.js';
11
10
  import { buildEffectBackendBodySet, EFFECT_BACKEND_BODY_SET_VERSION, EFFECT_BACKEND_BODY_SET_FORMAT, EFFECT_BACKEND_BODY_SET_CHUNK } from './effectBackendBodySet.js';
12
11
  import { DXBC_WGSL_TRANSLATOR_VERSION, DXBC_WGSL_TRANSLATOR_NAME, FORMAT_WEBGPU_PACKAGE_VERSION, FORMAT_WEBGPU_PACKAGE_NAME, WEBGPU_BACKEND_NAME, EFFECT_INFO_VERSION } from './packageMetadata.js';
13
12
  import { sha256Utf8, sha256Bytes } from '../../../format/effect/sha256.js';
@@ -15,7 +14,7 @@ import { isParticleClearEffectCandidate, preflightParticleClearEffectProfile, pa
15
14
  import { normalizeEffectPermutation, validateResolvedPermutation, selectEffectStages, buildWgslSelectionMetadata } from './packageEffectSelection.js';
16
15
 
17
16
  /**
18
- * Build one structurally valid CEWGPU package from compiled Tr2 effect bytes.
17
+ * Build one structurally valid Carbon WebGPU package from compiled Tr2 effect bytes.
19
18
  *
20
19
  * The version-15 build result retains every unique body's portable source
21
20
  * reflection as in-memory evidence while the emitted Carbon wire stores WGSL
@@ -118,12 +117,12 @@ function buildEffectPackage(input, options = {}) {
118
117
  const wgsl = buildWgslSet(shaderEntries);
119
118
  const wgslSelection = buildWgslSelectionMetadata(selection, selectedStages);
120
119
  const permutationGraph = buildEffectPermutationGraph(resolved.effectRes);
121
- const effectReflection = resolved.effectRes.m_version === 15 ? buildCompleteEffectReflection(resolved.effectRes, permutationGraph, {
122
- sourceIdentity,
123
- sourcePath: source
124
- }) : null;
125
- if (mode === "all" && !effectReflection) {
126
- throw new Error("Effect package mode all requires complete version-15 source reflection");
120
+ // The source is complete when it is a version-15 container. This used to be
121
+ // read off a built reflection document, which made the document look load
122
+ // bearing when it was only ever a consequence of the same version check.
123
+ const sourceComplete = resolved.effectRes.m_version === 15;
124
+ if (mode === "all" && !sourceComplete) {
125
+ throw new Error("Effect package mode all requires a complete version-15 source");
127
126
  }
128
127
  const backendBodySet = mode === "all" ? buildEffectBackendBodySet(resolved.effectRes, permutationGraph, {
129
128
  source,
@@ -132,12 +131,12 @@ function buildEffectPackage(input, options = {}) {
132
131
  }) : null;
133
132
  const completeness = Object.freeze({
134
133
  packageValid: true,
135
- sourceComplete: effectReflection !== null,
134
+ sourceComplete,
136
135
  backendComplete: false,
137
136
  runtimeComplete: false
138
137
  });
139
138
  const info = {
140
- format: "CEWGPU",
139
+ format: "CARBON_WEBGPU",
141
140
  formatVersion: EFFECT_INFO_VERSION,
142
141
  packageKind: "tr2-effect-webgpu",
143
142
  sourcePath: source,
@@ -156,8 +155,7 @@ function buildEffectPackage(input, options = {}) {
156
155
  permutationCount: permutationGraph.variants.length,
157
156
  uniqueBodyCount: permutationGraph.bodies.length
158
157
  }),
159
- ...(effectReflection ? {
160
- effectReflection: effectReflection.pointer,
158
+ ...(sourceComplete ? {
161
159
  sourceBodyCoverage: "all-unique",
162
160
  backendBodyCoverage: backendBodySet ? backendBodySet.coverage.bodies : "selected"
163
161
  } : {}),
@@ -210,7 +208,7 @@ function buildEffectPackage(input, options = {}) {
210
208
  const qualification = Object.freeze({
211
209
  ok: true,
212
210
  level: "structural",
213
- validator: "cewgpu-structural",
211
+ validator: "carbon-webgpu-structural",
214
212
  mode,
215
213
  ...completeness,
216
214
  selectedStageCount: selectedStages.length,
@@ -228,8 +226,6 @@ function buildEffectPackage(input, options = {}) {
228
226
  info: Object.freeze(info),
229
227
  metadata: Object.freeze(metadata),
230
228
  permutationGraph,
231
- reflection: effectReflection?.reflection ?? null,
232
- reflectionBlobs: effectReflection?.blobBytes ?? null,
233
229
  analysis,
234
230
  wgsl,
235
231
  backendBodySet,