@carbonenginejs/runtime-resource 0.12.2 → 0.13.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 (541) hide show
  1. package/LICENSE +21 -21
  2. package/NOTICE +32 -32
  3. package/README.md +129 -108
  4. package/dist/CjsMotherLode.js +1271 -1271
  5. package/dist/CjsResMan.js +3858 -3494
  6. package/dist/CjsResMan.js.map +1 -1
  7. package/dist/CjsResManFetchProvider.js +94 -94
  8. package/dist/CjsResManWorkQueue.js +301 -301
  9. package/dist/_virtual/_rollupPluginBabelHelpers.js +150 -150
  10. package/dist/format/CjsBlueReader.js +358 -358
  11. package/dist/format/CjsByteReader.js +310 -310
  12. package/dist/format/CjsByteWriter.js +242 -242
  13. package/dist/format/CjsFormat.js +223 -223
  14. package/dist/format/CjsFormatError.js +41 -41
  15. package/dist/format/CjsReader.js +22 -22
  16. package/dist/format/CjsResourceProbe.js +279 -279
  17. package/dist/format/CjsStringTable.js +268 -268
  18. package/dist/format/carbonEffect/CjsCarbonEffectReader.js +408 -361
  19. package/dist/format/carbonEffect/CjsCarbonEffectReader.js.map +1 -1
  20. package/dist/format/carbonEffect/CjsCarbonEffectWriter.js +373 -373
  21. package/dist/format/carbonEffect/buildCarbonEffectContainer.js +182 -0
  22. package/dist/format/carbonEffect/buildCarbonEffectContainer.js.map +1 -0
  23. package/dist/format/carbonEffect/carbonEffectBackendBlock.js +321 -427
  24. package/dist/format/carbonEffect/carbonEffectBackendBlock.js.map +1 -1
  25. package/dist/format/carbonEffect/carbonEffectRecords.js +1147 -955
  26. package/dist/format/carbonEffect/carbonEffectRecords.js.map +1 -1
  27. package/dist/format/carbonEffect/carbonEffectResourceTransform.js +197 -0
  28. package/dist/format/carbonEffect/carbonEffectResourceTransform.js.map +1 -0
  29. package/dist/format/compareUtf8.js +36 -36
  30. package/dist/format/effect/effectBodyInventory.js +146 -0
  31. package/dist/format/effect/effectBodyInventory.js.map +1 -0
  32. package/dist/format/effect/effectPermutationGraph.js +257 -257
  33. package/dist/format/effect/effectPermutationGraph.js.map +1 -1
  34. package/dist/format/effect/sha256.js +114 -114
  35. package/dist/format/index.js +11 -11
  36. package/dist/format/payloadContract.js +193 -193
  37. package/dist/formats/black/CjsBlackFormat.js +310 -292
  38. package/dist/formats/black/CjsBlackFormat.js.map +1 -1
  39. package/dist/formats/black/core/CjsBlackBinaryReader.js +260 -260
  40. package/dist/formats/black/core/CjsBlackPropertyReaders.js +448 -448
  41. package/dist/formats/black/core/CjsBlackReader.js +764 -764
  42. package/dist/formats/black/core/CjsBlackSchemaRegistry.js +540 -540
  43. package/dist/formats/black/core/black-schema-v1-2026-07-23.json.js +4 -4
  44. package/dist/formats/black/core/blackConstants.js +7 -7
  45. package/dist/formats/black/core/blackDefinitions.js +10 -10
  46. package/dist/formats/black/core/blackEnums.js +6 -6
  47. package/dist/formats/black/core/blackSchema.js +3 -3
  48. package/dist/formats/black/core/blackVersion.js +22 -22
  49. package/dist/formats/black/core/helpers.js +199 -199
  50. package/dist/formats/black/core/schema.js +4 -4
  51. package/dist/formats/black/index.js +2 -2
  52. package/dist/formats/bnk/CjsBnkFormat.js +175 -156
  53. package/dist/formats/bnk/CjsBnkFormat.js.map +1 -1
  54. package/dist/formats/bnk/core/busNodes.js +252 -0
  55. package/dist/formats/bnk/core/busNodes.js.map +1 -0
  56. package/dist/formats/bnk/core/effectNodes.js +147 -0
  57. package/dist/formats/bnk/core/effectNodes.js.map +1 -0
  58. package/dist/formats/bnk/core/eventAction.js +416 -305
  59. package/dist/formats/bnk/core/eventAction.js.map +1 -1
  60. package/dist/formats/bnk/core/globalSettings.js +215 -0
  61. package/dist/formats/bnk/core/globalSettings.js.map +1 -0
  62. package/dist/formats/bnk/core/graph.js +137 -137
  63. package/dist/formats/bnk/core/helpers.js +512 -480
  64. package/dist/formats/bnk/core/helpers.js.map +1 -1
  65. package/dist/formats/bnk/core/musicNodes.js +533 -509
  66. package/dist/formats/bnk/core/musicNodes.js.map +1 -1
  67. package/dist/formats/bnk/core/nodeBase.js +553 -532
  68. package/dist/formats/bnk/core/nodeBase.js.map +1 -1
  69. package/dist/formats/bnk/core/sfxNodes.js +632 -632
  70. package/dist/formats/bnk/core/soundbanksInfo.js +209 -209
  71. package/dist/formats/bnk/index.js +2 -2
  72. package/dist/formats/cmf/CjsCmfFormat.js +497 -497
  73. package/dist/formats/cmf/core/binary.js +194 -194
  74. package/dist/formats/cmf/core/buffers.js +237 -237
  75. package/dist/formats/cmf/core/constants.js +47 -47
  76. package/dist/formats/cmf/core/gr2Anim.js +453 -453
  77. package/dist/formats/cmf/core/helpers.js +318 -318
  78. package/dist/formats/cmf/core/pack.js +276 -276
  79. package/dist/formats/cmf/core/schema.js +374 -374
  80. package/dist/formats/cmf/core/shared.js +277 -277
  81. package/dist/formats/cmf/core/writer.js +571 -571
  82. package/dist/formats/cmf/index.js +2 -2
  83. package/dist/formats/dds/CjsDdsFormat.js +200 -200
  84. package/dist/formats/dds/core/bc6h.js +298 -298
  85. package/dist/formats/dds/core/bc7.js +272 -272
  86. package/dist/formats/dds/core/helpers.js +862 -862
  87. package/dist/formats/dds/index.js +2 -2
  88. package/dist/formats/dxbc/CjsDxbcFormat.js +142 -142
  89. package/dist/formats/dxbc/core/DxbcReader.js +266 -266
  90. package/dist/formats/dxbc/core/container.js +169 -169
  91. package/dist/formats/dxbc/core/decoder.js +789 -789
  92. package/dist/formats/dxbc/core/errors.js +19 -19
  93. package/dist/formats/dxbc/core/helpers.js +220 -220
  94. package/dist/formats/dxbc/core/opcodes.js +45 -45
  95. package/dist/formats/dxbc/core/program.js +91 -91
  96. package/dist/formats/dxbc/core/signature.js +172 -172
  97. package/dist/formats/dxbc/index.js +2 -2
  98. package/dist/formats/fbx/CjsFbxFormat.js +266 -266
  99. package/dist/formats/fbx/core/helpers.js +3932 -3932
  100. package/dist/formats/fbx/index.js +2 -2
  101. package/dist/formats/flac/CjsFlacFormat.js +142 -142
  102. package/dist/formats/flac/core/helpers.js +315 -315
  103. package/dist/formats/flac/index.js +2 -2
  104. package/dist/formats/gif/CjsGifFormat.js +141 -141
  105. package/dist/formats/gif/core/helpers.js +380 -380
  106. package/dist/formats/gif/index.js +2 -2
  107. package/dist/formats/gltf/CjsGltfFormat.js +290 -290
  108. package/dist/formats/gltf/core/helpers.js +307 -307
  109. package/dist/formats/gltf/core/json.js +79 -79
  110. package/dist/formats/gltf/core/parser.js +679 -679
  111. package/dist/formats/gltf/core/targets.js +173 -173
  112. package/dist/formats/gltf/index.js +2 -2
  113. package/dist/formats/gr2/CjsGr2Format.js +289 -289
  114. package/dist/formats/gr2/core/bitknit2.js +282 -282
  115. package/dist/formats/gr2/core/curves.js +1047 -1047
  116. package/dist/formats/gr2/core/gsf.js +72 -72
  117. package/dist/formats/gr2/core/helpers.js +352 -352
  118. package/dist/formats/gr2/core/json.js +622 -622
  119. package/dist/formats/gr2/core/oodle1.js +388 -388
  120. package/dist/formats/gr2/core/tangents.js +48 -48
  121. package/dist/formats/gr2/core/targets.js +361 -361
  122. package/dist/formats/gr2/index.js +2 -2
  123. package/dist/formats/hlsl/CjsHlslFormat.js +254 -254
  124. package/dist/formats/hlsl/core/HlslBinaryUtils.js +15 -15
  125. package/dist/formats/hlsl/core/HlslEffectReadError.js +19 -19
  126. package/dist/formats/hlsl/core/HlslEffectStateManager.js +130 -130
  127. package/dist/formats/hlsl/core/HlslRenderStateSetup.js +37 -37
  128. package/dist/formats/hlsl/core/HlslResourceSetDescription.js +94 -94
  129. package/dist/formats/hlsl/core/HlslShaderBytecode.js +44 -44
  130. package/dist/formats/hlsl/core/analysis.js +51 -51
  131. package/dist/formats/hlsl/core/carbonDescriptionToRuntime.js +850 -781
  132. package/dist/formats/hlsl/core/carbonDescriptionToRuntime.js.map +1 -1
  133. package/dist/formats/hlsl/core/detailMapFamily.js +128 -0
  134. package/dist/formats/hlsl/core/detailMapFamily.js.map +1 -0
  135. package/dist/formats/hlsl/core/helpers.js +270 -270
  136. package/dist/formats/hlsl/core/json.js +284 -284
  137. package/dist/formats/hlsl/core/localLightFamily.js +133 -0
  138. package/dist/formats/hlsl/core/localLightFamily.js.map +1 -0
  139. package/dist/formats/hlsl/core/metadata.js +327 -327
  140. package/dist/formats/hlsl/core/render-states.js +280 -280
  141. package/dist/formats/hlsl/core/tr2/HlslRenderContextEnum.js +43 -43
  142. package/dist/formats/hlsl/core/tr2/resources/HlslEffectRes.js +320 -314
  143. package/dist/formats/hlsl/core/tr2/resources/HlslEffectRes.js.map +1 -1
  144. package/dist/formats/hlsl/core/tr2/resources/HlslShaderPermutation.js +33 -33
  145. package/dist/formats/hlsl/core/tr2/shader/HlslEffectBindingManifest.js +416 -416
  146. package/dist/formats/hlsl/core/tr2/shader/HlslEffectConstant.js +40 -40
  147. package/dist/formats/hlsl/core/tr2/shader/HlslEffectDescription.js +62 -742
  148. package/dist/formats/hlsl/core/tr2/shader/HlslEffectDescription.js.map +1 -1
  149. package/dist/formats/hlsl/core/tr2/shader/HlslEffectLibrary.js +52 -52
  150. package/dist/formats/hlsl/core/tr2/shader/HlslEffectParameterAnnotation.js +38 -38
  151. package/dist/formats/hlsl/core/tr2/shader/HlslEffectResource.js +50 -50
  152. package/dist/formats/hlsl/core/tr2/shader/HlslEffectStageInput.js +86 -86
  153. package/dist/formats/hlsl/core/tr2/shader/HlslEffectTechnique.js +31 -31
  154. package/dist/formats/hlsl/core/tr2/shader/HlslPass.js +42 -42
  155. package/dist/formats/hlsl/core/tr2/shader/HlslSamplerDescription.js +55 -55
  156. package/dist/formats/hlsl/core/tr2/shader/HlslSamplerSetup.js +29 -29
  157. package/dist/formats/hlsl/core/tr2/shader/HlslShader.js +220 -220
  158. package/dist/formats/hlsl/core/tr2/shader/HlslShaderOption.js +30 -30
  159. package/dist/formats/hlsl/index.js +3 -3
  160. package/dist/formats/index.js +33 -31
  161. package/dist/formats/index.js.map +1 -1
  162. package/dist/formats/jpeg/CjsJpegFormat.js +212 -212
  163. package/dist/formats/jpeg/core/helpers.js +402 -402
  164. package/dist/formats/jpeg/core/jpeg.js +480 -480
  165. package/dist/formats/jpeg/index.js +2 -2
  166. package/dist/formats/mp3/CjsMp3Format.js +197 -197
  167. package/dist/formats/mp3/core/helpers.js +375 -375
  168. package/dist/formats/mp3/index.js +2 -2
  169. package/dist/formats/mp4/CjsMp4Format.js +197 -197
  170. package/dist/formats/mp4/core/helpers.js +484 -484
  171. package/dist/formats/mp4/index.js +2 -2
  172. package/dist/formats/obj/CjsObjFormat.js +253 -253
  173. package/dist/formats/obj/core/helpers.js +573 -573
  174. package/dist/formats/obj/core/json.js +64 -64
  175. package/dist/formats/obj/core/parser.js +321 -321
  176. package/dist/formats/obj/index.js +2 -2
  177. package/dist/formats/ogg/CjsOggFormat.js +143 -143
  178. package/dist/formats/ogg/core/helpers.js +410 -410
  179. package/dist/formats/ogg/core/imdct.js +178 -178
  180. package/dist/formats/ogg/core/vorbis.js +1017 -1017
  181. package/dist/formats/ogg/index.js +2 -2
  182. package/dist/formats/pickle/CjsPickleFormat.js +214 -0
  183. package/dist/formats/pickle/CjsPickleFormat.js.map +1 -0
  184. package/dist/formats/pickle/core/CjsPickleProtocol0Reader.js +551 -0
  185. package/dist/formats/pickle/core/CjsPickleProtocol0Reader.js.map +1 -0
  186. package/dist/formats/pickle/index.js +2 -0
  187. package/dist/formats/pickle/index.js.map +1 -0
  188. package/dist/formats/png/CjsPngFormat.js +201 -201
  189. package/dist/formats/png/core/helpers.js +635 -635
  190. package/dist/formats/png/index.js +2 -2
  191. package/dist/formats/red/CjsRedFormat.js +263 -263
  192. package/dist/formats/red/core/CjsRedReader.js +246 -246
  193. package/dist/formats/red/core/blackDefinitions.js +3 -3
  194. package/dist/formats/red/core/helpers.js +158 -158
  195. package/dist/formats/red/core/redGraph.js +71 -68
  196. package/dist/formats/red/core/redGraph.js.map +1 -1
  197. package/dist/formats/red/core/schema.js +4 -4
  198. package/dist/formats/red/index.js +2 -2
  199. package/dist/formats/stl/CjsStlFormat.js +365 -365
  200. package/dist/formats/stl/core/helpers.js +261 -261
  201. package/dist/formats/stl/core/json.js +51 -51
  202. package/dist/formats/stl/core/stl.js +642 -642
  203. package/dist/formats/stl/core/targets.js +173 -173
  204. package/dist/formats/stl/index.js +2 -2
  205. package/dist/formats/tga/CjsTgaFormat.js +197 -197
  206. package/dist/formats/tga/core/helpers.js +493 -493
  207. package/dist/formats/tga/index.js +2 -2
  208. package/dist/formats/wav/CjsWavFormat.js +198 -198
  209. package/dist/formats/wav/core/helpers.js +365 -365
  210. package/dist/formats/wav/index.js +2 -2
  211. package/dist/formats/webgl/CjsWebglFormat.js +199 -221
  212. package/dist/formats/webgl/CjsWebglFormat.js.map +1 -1
  213. package/dist/formats/webgl/core/buildGlslEffectContainer.js +70 -0
  214. package/dist/formats/webgl/core/buildGlslEffectContainer.js.map +1 -0
  215. package/dist/formats/webgl/core/effectPackage.js +900 -792
  216. package/dist/formats/webgl/core/effectPackage.js.map +1 -1
  217. package/dist/formats/webgl/core/errors.js +27 -27
  218. package/dist/formats/webgl/core/errors.js.map +1 -1
  219. package/dist/formats/webgl/core/glsl/DxbcGlslEmitter.js +2820 -2678
  220. package/dist/formats/webgl/core/glsl/DxbcGlslEmitter.js.map +1 -1
  221. package/dist/formats/webgl/core/glsl/DxbcGlslHelpers.js +89 -89
  222. package/dist/formats/webgl/core/glsl/DxbcGlslOperandFormatter.js +486 -428
  223. package/dist/formats/webgl/core/glsl/DxbcGlslOperandFormatter.js.map +1 -1
  224. package/dist/formats/webgl/core/glsl/packedLightFixups.js +98 -0
  225. package/dist/formats/webgl/core/glsl/packedLightFixups.js.map +1 -0
  226. package/dist/formats/webgl/core/glslBackendBlock.js +552 -0
  227. package/dist/formats/webgl/core/glslBackendBlock.js.map +1 -0
  228. package/dist/formats/webgl/core/glslBackendBodySet.js +243 -0
  229. package/dist/formats/webgl/core/glslBackendBodySet.js.map +1 -0
  230. package/dist/formats/webgl/core/{cewgCompleteness.js → glslEffectCompleteness.js} +85 -81
  231. package/dist/formats/webgl/core/glslEffectCompleteness.js.map +1 -0
  232. package/dist/formats/webgl/core/helpers.js +167 -306
  233. package/dist/formats/webgl/core/helpers.js.map +1 -1
  234. package/dist/formats/webgl/core/inspectGlslEffectContainer.js +122 -0
  235. package/dist/formats/webgl/core/inspectGlslEffectContainer.js.map +1 -0
  236. package/dist/formats/webgl/core/readGlslEffectContainer.js +303 -0
  237. package/dist/formats/webgl/core/readGlslEffectContainer.js.map +1 -0
  238. package/dist/formats/webgl/index.js +2 -2
  239. package/dist/formats/webgpu/CjsWebgpuFormat.js +357 -357
  240. package/dist/formats/webgpu/CjsWebgpuFormat.js.map +1 -1
  241. package/dist/formats/webgpu/core/buildCarbonEffectContainer.js +89 -197
  242. package/dist/formats/webgpu/core/buildCarbonEffectContainer.js.map +1 -1
  243. package/dist/formats/webgpu/core/{cewgpu/CewgpuContainer.js → carbonWebgpu/CarbonWebgpuContainer.js} +354 -368
  244. package/dist/formats/webgpu/core/carbonWebgpu/CarbonWebgpuContainer.js.map +1 -0
  245. package/dist/formats/webgpu/core/{cewgpu → carbonWebgpu}/containerViews.js +355 -355
  246. package/dist/formats/webgpu/core/carbonWebgpu/containerViews.js.map +1 -0
  247. package/dist/formats/webgpu/core/{cewgpu → carbonWebgpu}/validateContainer.js +90 -90
  248. package/dist/formats/webgpu/core/carbonWebgpu/validateContainer.js.map +1 -0
  249. package/dist/formats/webgpu/core/effectAnalysis.js +82 -82
  250. package/dist/formats/webgpu/core/effectBackendBodySet.js +289 -289
  251. package/dist/formats/webgpu/core/effectBackendBodySet.js.map +1 -1
  252. package/dist/formats/webgpu/core/errors.js +20 -20
  253. package/dist/formats/webgpu/core/errors.js.map +1 -1
  254. package/dist/formats/webgpu/core/helpers.js +443 -443
  255. package/dist/formats/webgpu/core/helpers.js.map +1 -1
  256. package/dist/formats/webgpu/core/ir/analyzeRegisterValues.js +212 -212
  257. package/dist/formats/webgpu/core/ir/buildControlFlow.js +220 -220
  258. package/dist/formats/webgpu/core/ir/indexableTemps.js +137 -137
  259. package/dist/formats/webgpu/core/ir/inferValueTypes.js +449 -449
  260. package/dist/formats/webgpu/core/ir/lowerDxbcToIr.js +494 -494
  261. package/dist/formats/webgpu/core/ir/resolveRegisterFlow.js +177 -177
  262. package/dist/formats/webgpu/core/ir/sourceLanes.js +61 -61
  263. package/dist/formats/webgpu/core/packageEffect.js +381 -385
  264. package/dist/formats/webgpu/core/packageEffect.js.map +1 -1
  265. package/dist/formats/webgpu/core/packageEffectSelection.js +164 -164
  266. package/dist/formats/webgpu/core/packageEffectSelection.js.map +1 -1
  267. package/dist/formats/webgpu/core/packageMetadata.js +17 -17
  268. package/dist/formats/webgpu/core/schema.js +4 -4
  269. package/dist/formats/webgpu/core/wgsl/buildResourceTransformPlan.js +263 -263
  270. package/dist/formats/webgpu/core/wgsl/buildResourceTransformPlan.js.map +1 -1
  271. package/dist/formats/webgpu/core/wgsl/buildWgslBindingPlan.js +172 -172
  272. package/dist/formats/webgpu/core/wgsl/buildWgslSet.js +320 -320
  273. package/dist/formats/webgpu/core/wgsl/buildWgslSet.js.map +1 -1
  274. package/dist/formats/webgpu/core/wgsl/emitWgsl.js +356 -356
  275. package/dist/formats/webgpu/core/wgsl/hoistEscapingValues.js +77 -77
  276. package/dist/formats/webgpu/core/wgsl/lowerBindingLayout.js +451 -451
  277. package/dist/formats/webgpu/core/wgsl/lowerComputeProgram.js +735 -735
  278. package/dist/formats/webgpu/core/wgsl/lowerCreateHistogramsComputeProgram.js +457 -457
  279. package/dist/formats/webgpu/core/wgsl/lowerFragmentProgram.js +1572 -1572
  280. package/dist/formats/webgpu/core/wgsl/lowerMergeHistogramsComputeProgram.js +659 -659
  281. package/dist/formats/webgpu/core/wgsl/lowerParticleClearComputePrograms.js +734 -734
  282. package/dist/formats/webgpu/core/wgsl/lowerParticleEmitComputeProgram.js +583 -583
  283. package/dist/formats/webgpu/core/wgsl/lowerSkinVerticesComputeProgram.js +621 -621
  284. package/dist/formats/webgpu/core/wgsl/lowerSortComputeProgram.js +824 -824
  285. package/dist/formats/webgpu/core/wgsl/lowerSortInnerComputeProgram.js +697 -697
  286. package/dist/formats/webgpu/core/wgsl/lowerSortStepComputeProgram.js +559 -559
  287. package/dist/formats/webgpu/core/wgsl/lowerVertexProgram.js +1328 -1328
  288. package/dist/formats/webgpu/core/wgsl/particleEmitSemanticDigest.js +110 -110
  289. package/dist/formats/webgpu/core/wgsl/precisionControls.js +55 -55
  290. package/dist/formats/webgpu/core/wgsl/selectionPlans.js +717 -717
  291. package/dist/formats/webgpu/core/wgsl/uniformity.js +78 -78
  292. package/dist/formats/webgpu/core/wgsl/validateExactComputeIr.js +196 -196
  293. package/dist/formats/webgpu/core/wgsl/validateHandleOperand.js +37 -37
  294. package/dist/formats/webgpu/index.js +2 -2
  295. package/dist/formats/webm/CjsWebmFormat.js +197 -197
  296. package/dist/formats/webm/core/helpers.js +572 -572
  297. package/dist/formats/webm/index.js +2 -2
  298. package/dist/formats/webp/CjsWebpFormat.js +140 -140
  299. package/dist/formats/webp/core/helpers.js +237 -237
  300. package/dist/formats/webp/index.js +2 -2
  301. package/dist/formats/wem/CjsWemFormat.js +250 -250
  302. package/dist/formats/wem/core/bitStream.js +261 -261
  303. package/dist/formats/wem/core/codebookLibrary.js +164 -164
  304. package/dist/formats/wem/core/helpers.js +437 -437
  305. package/dist/formats/wem/core/packedCodebooksAotuv603.js +30 -30
  306. package/dist/formats/wem/core/ptadpcm.js +77 -77
  307. package/dist/formats/wem/core/resolve.js +121 -121
  308. package/dist/formats/wem/core/wemToOgg.js +485 -485
  309. package/dist/formats/wem/index.js +2 -2
  310. package/dist/formats/yaml/CjsYamlFormat.js +134 -134
  311. package/dist/formats/yaml/CjsYamlFormat.js.map +1 -1
  312. package/dist/formats/yaml/core/CjsYamlReader.js +400 -402
  313. package/dist/formats/yaml/core/CjsYamlReader.js.map +1 -1
  314. package/dist/formats/yaml/core/helpers.js +196 -170
  315. package/dist/formats/yaml/core/helpers.js.map +1 -1
  316. package/dist/formats/yaml/index.js +2 -2
  317. package/dist/index.js +64 -62
  318. package/dist/index.js.map +1 -1
  319. package/dist/resource/CjsLoadingObject.js +19 -0
  320. package/dist/resource/CjsLoadingObject.js.map +1 -0
  321. package/dist/resource/CjsResource.js +801 -797
  322. package/dist/resource/CjsResource.js.map +1 -1
  323. package/dist/resource/ResourceHandlerMode.js +14 -0
  324. package/dist/resource/ResourceHandlerMode.js.map +1 -0
  325. package/dist/resource/Tr2LightProfileRes.js +32 -32
  326. package/dist/resource/audio/AudioGeometryResData.js +47 -47
  327. package/dist/resource/audio/CjsAudioBufferRes.js +86 -86
  328. package/dist/resource/audio/CjsAudioRes.js +213 -213
  329. package/dist/resource/audio/index.js +4 -4
  330. package/dist/resource/geometry/MeshDecalData.js +37 -37
  331. package/dist/resource/geometry/MeshDecalLodData.js +34 -34
  332. package/dist/resource/geometry/TriGeometryRes.js +675 -675
  333. package/dist/resource/geometry/TriGeometryResAreaData.js +59 -59
  334. package/dist/resource/geometry/TriGeometryResJointData.js +38 -38
  335. package/dist/resource/geometry/TriGeometryResLodData.js +88 -88
  336. package/dist/resource/geometry/TriGeometryResMeshData.js +63 -63
  337. package/dist/resource/geometry/TriGeometryResSkeletonData.js +34 -34
  338. package/dist/resource/geometry/TriJointBinding.js +38 -38
  339. package/dist/resource/geometry/TriMorphTargetGeometryConstants.js +46 -46
  340. package/dist/resource/geometry/TriRtGeometryConstants.js +88 -88
  341. package/dist/resource/geometry/granny/GStateBindingCallbackData.js +31 -31
  342. package/dist/resource/geometry/granny/Tr2GrannyIntersectionResult.js +60 -60
  343. package/dist/resource/geometry/granny/Tr2GrannyStateRes.js +36 -36
  344. package/dist/resource/geometry/granny/TriGrannyRes.js +35 -35
  345. package/dist/resource/geometry/granny/enums.js +10 -10
  346. package/dist/resource/geometry/granny/index.js +6 -6
  347. package/dist/resource/geometry/index.js +17 -17
  348. package/dist/resource/index.js +54 -52
  349. package/dist/resource/index.js.map +1 -1
  350. package/dist/resource/resourceBoundary.js +64 -64
  351. package/dist/resource/shader/Tr2EffectRes.js +336 -431
  352. package/dist/resource/shader/Tr2EffectRes.js.map +1 -1
  353. package/dist/resource/shader/Tr2MaterialArea.js +31 -31
  354. package/dist/resource/shader/Tr2MaterialMesh.js +27 -27
  355. package/dist/resource/shader/Tr2MaterialRes.js +31 -31
  356. package/dist/resource/shader/Tr2Shader.js +283 -261
  357. package/dist/resource/shader/Tr2Shader.js.map +1 -1
  358. package/dist/resource/shader/Tr2ShaderPermutation.js +43 -43
  359. package/dist/resource/shader/index.js +17 -17
  360. package/dist/resource/shader/reflection/Tr2EffectConstant.js +143 -135
  361. package/dist/resource/shader/reflection/Tr2EffectConstant.js.map +1 -1
  362. package/dist/resource/shader/reflection/Tr2EffectDefine.js +30 -30
  363. package/dist/resource/shader/reflection/Tr2EffectDescription.js +114 -109
  364. package/dist/resource/shader/reflection/Tr2EffectDescription.js.map +1 -1
  365. package/dist/resource/shader/reflection/Tr2EffectLibrary.js +168 -147
  366. package/dist/resource/shader/reflection/Tr2EffectLibrary.js.map +1 -1
  367. package/dist/resource/shader/reflection/Tr2EffectParameterAnnotation.js +125 -105
  368. package/dist/resource/shader/reflection/Tr2EffectParameterAnnotation.js.map +1 -1
  369. package/dist/resource/shader/reflection/Tr2EffectResource.js +120 -86
  370. package/dist/resource/shader/reflection/Tr2EffectResource.js.map +1 -1
  371. package/dist/resource/shader/reflection/Tr2EffectStageInput.js +372 -241
  372. package/dist/resource/shader/reflection/Tr2EffectStageInput.js.map +1 -1
  373. package/dist/resource/shader/reflection/Tr2EffectTechnique.js +78 -68
  374. package/dist/resource/shader/reflection/Tr2EffectTechnique.js.map +1 -1
  375. package/dist/resource/shader/reflection/Tr2Pass.js +168 -111
  376. package/dist/resource/shader/reflection/Tr2Pass.js.map +1 -1
  377. package/dist/resource/shader/reflection/carbonRecordFields.js +159 -0
  378. package/dist/resource/shader/reflection/carbonRecordFields.js.map +1 -0
  379. package/dist/resource/shader/reflection/shaderStage.js +22 -0
  380. package/dist/resource/shader/reflection/shaderStage.js.map +1 -0
  381. package/dist/resource/shader/sampler/Tr2SamplerSetup.js +135 -77
  382. package/dist/resource/shader/sampler/Tr2SamplerSetup.js.map +1 -1
  383. package/dist/resource/texture/CjsTextureArrayRes.js +472 -472
  384. package/dist/resource/texture/CjsTextureArrayResParameterProxy.js +179 -179
  385. package/dist/resource/texture/Tr2ImageRes.js +120 -120
  386. package/dist/resource/texture/Tr2TextureLodManager.js +82 -82
  387. package/dist/resource/texture/Tr2TextureLodUpdateRequest.js +37 -37
  388. package/dist/resource/texture/Tr2TexturePackChannel.js +37 -37
  389. package/dist/resource/texture/Tr2TexturePipeline.js +54 -54
  390. package/dist/resource/texture/Tr2TexturePipelineParams.js +34 -34
  391. package/dist/resource/texture/Tr2TexturePipelineStepCompress.js +40 -40
  392. package/dist/resource/texture/Tr2TexturePipelineStepGenerateMips.js +22 -22
  393. package/dist/resource/texture/Tr2TexturePipelineStepLimitSize.js +34 -34
  394. package/dist/resource/texture/Tr2TexturePipelineStepLoad.js +31 -31
  395. package/dist/resource/texture/Tr2TexturePipelineStepPack.js +43 -43
  396. package/dist/resource/texture/TriTextureRes.js +359 -359
  397. package/dist/resource/texture/index.js +15 -15
  398. package/dist/resource/texture/texturePipelineBehavior.js +308 -308
  399. package/dist/worker/CjsResManMainThreadLoader.js +89 -87
  400. package/dist/worker/CjsResManMainThreadLoader.js.map +1 -1
  401. package/dist/worker/CjsResManWorker.js +218 -217
  402. package/dist/worker/CjsResManWorker.js.map +1 -1
  403. package/dist/worker/CjsResManWorkerLoader.js +437 -434
  404. package/dist/worker/CjsResManWorkerLoader.js.map +1 -1
  405. package/dist/worker/protocol.js +12 -12
  406. package/docs/README.md +98 -98
  407. package/docs/architecture.md +118 -109
  408. package/docs/concepts/resource-lifecycle.md +226 -225
  409. package/docs/concepts/shader-resource-model.md +111 -114
  410. package/docs/concepts/writing-an-engine-adapter.md +115 -115
  411. package/docs/formats/README.md +138 -136
  412. package/docs/formats/carbon-effect-container.md +553 -452
  413. package/docs/formats/dxbc/README.md +68 -68
  414. package/docs/formats/dxbc/architecture.md +80 -80
  415. package/docs/formats/dxbc/reference/api.md +77 -77
  416. package/docs/formats/dxbc/reference/classes/README.md +9 -9
  417. package/docs/formats/dxbc/reference/decoded-output.md +122 -122
  418. package/docs/formats/gr2.md +160 -160
  419. package/docs/formats/hlsl/README.md +54 -54
  420. package/docs/formats/hlsl/architecture.md +65 -67
  421. package/docs/formats/hlsl/guides/hydrating-json-output.md +60 -62
  422. package/docs/formats/hlsl/guides/reading-effects.md +64 -64
  423. package/docs/formats/hlsl/reference/advanced-analysis.md +61 -66
  424. package/docs/formats/hlsl/reference/api.md +92 -98
  425. package/docs/formats/hlsl/reference/classes/README.md +11 -11
  426. package/docs/formats/hlsl/reference/json-graph.md +97 -100
  427. package/docs/formats/pickle.md +82 -0
  428. package/docs/formats/provenance.md +196 -196
  429. package/docs/formats/stl.md +37 -37
  430. package/docs/formats/webgl/README.md +115 -57
  431. package/docs/formats/webgl/architecture.md +69 -70
  432. package/docs/formats/webgl/carbon-constant-layouts.md +326 -326
  433. package/docs/formats/webgl/decl-io.md +1234 -1234
  434. package/docs/formats/webgl/memory-structured.md +890 -871
  435. package/docs/formats/webgl/reference/classes/README.md +9 -9
  436. package/docs/formats/webgl/texture-sample.md +964 -964
  437. package/docs/formats/webgpu/README.md +84 -84
  438. package/docs/formats/webgpu/architecture.md +95 -96
  439. package/docs/formats/webgpu/formats/{cewgpu.md → carbon-webgpu.md} +215 -216
  440. package/docs/formats/webgpu/guides/effect-packaging.md +189 -191
  441. package/docs/formats/webgpu/reference/api.md +196 -197
  442. package/docs/formats/webgpu/reference/classes/README.md +9 -9
  443. package/docs/formats/webgpu/reference/wgsl-compatibility.md +1546 -1543
  444. package/docs/formats/wwise.md +146 -85
  445. package/docs/reference/classes/README.md +35 -35
  446. package/docs/reference/classes/audio.md +30 -30
  447. package/docs/reference/classes/core.md +216 -206
  448. package/docs/reference/classes/dropped.md +46 -46
  449. package/docs/reference/classes/formats.md +944 -952
  450. package/docs/reference/classes/resources.md +456 -456
  451. package/docs/reference/classes/texture.md +26 -26
  452. package/docs/reference/events.md +117 -117
  453. package/docs/reference/motherlode-cache.md +275 -275
  454. package/docs/reference/queues.md +194 -110
  455. package/docs/reference/reload.md +107 -107
  456. package/docs/reference/texture-arrays.md +113 -113
  457. package/docs/reference/texture-pipeline.md +53 -53
  458. package/docs/reference/workers.md +142 -135
  459. package/docs/roadmap.md +150 -150
  460. package/format-notices/black/LICENSE +21 -21
  461. package/format-notices/black/NOTICE +47 -47
  462. package/format-notices/bnk/LICENSE +21 -21
  463. package/format-notices/bnk/NOTICE +21 -21
  464. package/format-notices/cmf/LICENSE +21 -21
  465. package/format-notices/cmf/NOTICE +36 -36
  466. package/format-notices/dds/LICENSE +21 -21
  467. package/format-notices/dds/NOTICE +14 -14
  468. package/format-notices/dxbc/LICENSE +21 -21
  469. package/format-notices/dxbc/NOTICE +20 -20
  470. package/format-notices/fbx/LICENSE +21 -21
  471. package/format-notices/fbx/NOTICE +14 -14
  472. package/format-notices/flac/LICENSE +21 -21
  473. package/format-notices/flac/NOTICE +14 -14
  474. package/format-notices/gif/LICENSE +21 -21
  475. package/format-notices/gif/NOTICE +14 -14
  476. package/format-notices/gltf/LICENSE +21 -21
  477. package/format-notices/gltf/NOTICE +27 -27
  478. package/format-notices/gr2/LICENSE +21 -21
  479. package/format-notices/gr2/NOTICE +60 -60
  480. package/format-notices/gr2/THIRD-PARTY-NOTICES.md +93 -93
  481. package/format-notices/hlsl/LICENSE +21 -21
  482. package/format-notices/hlsl/NOTICE +25 -25
  483. package/format-notices/jpeg/LICENSE +21 -21
  484. package/format-notices/jpeg/NOTICE +14 -14
  485. package/format-notices/mp3/LICENSE +21 -21
  486. package/format-notices/mp3/NOTICE +14 -14
  487. package/format-notices/mp4/LICENSE +21 -21
  488. package/format-notices/mp4/NOTICE +14 -14
  489. package/format-notices/obj/LICENSE +21 -21
  490. package/format-notices/obj/NOTICE +26 -26
  491. package/format-notices/ogg/LICENSE +21 -21
  492. package/format-notices/ogg/NOTICE +28 -28
  493. package/format-notices/png/LICENSE +21 -21
  494. package/format-notices/png/NOTICE +14 -14
  495. package/format-notices/red/LICENSE +21 -21
  496. package/format-notices/red/NOTICE +31 -31
  497. package/format-notices/stl/LICENSE +21 -21
  498. package/format-notices/stl/NOTICE +21 -21
  499. package/format-notices/tga/LICENSE +21 -21
  500. package/format-notices/tga/NOTICE +14 -14
  501. package/format-notices/wav/LICENSE +21 -21
  502. package/format-notices/wav/NOTICE +14 -14
  503. package/format-notices/webgl/LICENSE +21 -21
  504. package/format-notices/webgl/NOTICE +35 -35
  505. package/format-notices/webgpu/LICENSE +21 -21
  506. package/format-notices/webgpu/NOTICE +31 -31
  507. package/format-notices/webm/LICENSE +21 -21
  508. package/format-notices/webm/NOTICE +14 -14
  509. package/format-notices/webp/LICENSE +21 -21
  510. package/format-notices/webp/NOTICE +14 -14
  511. package/format-notices/wem/LICENSE +57 -57
  512. package/format-notices/wem/NOTICE +33 -33
  513. package/format-notices/yaml/LICENSE +21 -21
  514. package/format-notices/yaml/NOTICE +44 -44
  515. package/package.json +63 -63
  516. package/dist/format/carbonEffect/carbonDescriptionFromPortable.js +0 -372
  517. package/dist/format/carbonEffect/carbonDescriptionFromPortable.js.map +0 -1
  518. package/dist/format/effect/effectReflectionPackage.js +0 -636
  519. package/dist/format/effect/effectReflectionPackage.js.map +0 -1
  520. package/dist/formats/hlsl/core/HlslReader.js +0 -16
  521. package/dist/formats/hlsl/core/HlslReader.js.map +0 -1
  522. package/dist/formats/hlsl/core/portableReflection.js +0 -848
  523. package/dist/formats/hlsl/core/portableReflection.js.map +0 -1
  524. package/dist/formats/hlsl/portable.js +0 -2
  525. package/dist/formats/hlsl/portable.js.map +0 -1
  526. package/dist/formats/webgl/core/cewg/CewgPackage.js +0 -340
  527. package/dist/formats/webgl/core/cewg/CewgPackage.js.map +0 -1
  528. package/dist/formats/webgl/core/cewg/CewgPackageBuilder.js +0 -104
  529. package/dist/formats/webgl/core/cewg/CewgPackageBuilder.js.map +0 -1
  530. package/dist/formats/webgl/core/cewg/binary.js +0 -19
  531. package/dist/formats/webgl/core/cewg/binary.js.map +0 -1
  532. package/dist/formats/webgl/core/cewgCompleteness.js.map +0 -1
  533. package/dist/formats/webgl/core/effectPackageValidation.js +0 -331
  534. package/dist/formats/webgl/core/effectPackageValidation.js.map +0 -1
  535. package/dist/formats/webgpu/core/cewgpu/CewgpuContainer.js.map +0 -1
  536. package/dist/formats/webgpu/core/cewgpu/containerViews.js.map +0 -1
  537. package/dist/formats/webgpu/core/cewgpu/validateContainer.js.map +0 -1
  538. package/dist/resource/shader/portable.js +0 -33
  539. package/dist/resource/shader/portable.js.map +0 -1
  540. package/docs/formats/hlsl/reference/portable-reflection.md +0 -141
  541. package/docs/formats/webgl/effect-reflection.md +0 -127
@@ -1 +0,0 @@
1
- {"version":3,"file":"effectPackageValidation.js","sources":["../../../../../src/formats/webgl/core/effectPackageValidation.js"],"sourcesContent":["import {\n EFFECT_PERMUTATION_GRAPH_CHUNK,\n EFFECT_PERMUTATION_GRAPH_FORMAT,\n EFFECT_PERMUTATION_GRAPH_VERSION,\n validateEffectPermutationGraph\n} from \"../../../format/effect/effectPermutationGraph.js\";\nimport {\n EFFECT_REFLECTION_BLOB_CHUNK,\n EFFECT_REFLECTION_CHUNK,\n effectReflectionForPermutation,\n validateEffectReflectionPointer\n} from \"../../../format/effect/effectReflectionPackage.js\";\nimport { inspectCewgRasterCompleteness } from \"./cewgCompleteness.js\";\nimport { markEffectReflectionValidated } from \"./cewg/CewgPackage.js\";\nimport { sha256Bytes } from \"../../../format/effect/sha256.js\";\n\nexport const EFFECT_INFO_VERSION = 3;\n\nconst EFFECT_PACKAGE_KINDS = new Set([\n \"tr2-effect-webgl\",\n \"tr2-effect-webgl-permutations\"\n]);\nconst REQUIRED_EFFECT_CHUNKS = Object.freeze([ \"INFO\", \"META\", \"GLSL\" ]);\nconst SEMANTIC_VERSION = /^[0-9]+\\.[0-9]+\\.[0-9]+(?:-[0-9A-Za-z.-]+)?(?:\\+[0-9A-Za-z.-]+)?$/u;\nconst SHA256 = /^[0-9a-f]{64}$/u;\n\n/**\n * Validates the canonical CEWG effect envelope after the binary container has\n * been decoded. Generic CEWG containers without a recognized package kind\n * remain readable.\n *\n * @param {object} pkg Loaded CEWG package.\n * @returns {boolean} True when the package is generic, legacy, or valid.\n */\nexport function validateEffectPackageEnvelope(pkg)\n{\n if (!pkg.GetChunk(\"INFO\")) return true;\n\n const info = requireRecord(pkg.GetJson(\"INFO\"), \"CEWG INFO\");\n if (!EFFECT_PACKAGE_KINDS.has(info.packageKind)) return true;\n\n for (const tag of REQUIRED_EFFECT_CHUNKS)\n {\n if (!pkg.GetChunk(tag))\n {\n throw new Error(`CEWG effect package requires ${tag}`);\n }\n }\n if (info.format !== \"CEWG\")\n {\n throw new Error(\"CEWG INFO format is malformed\");\n }\n if (info.formatVersion === 1)\n {\n return true;\n }\n if (info.formatVersion !== EFFECT_INFO_VERSION)\n {\n throw new Error(`CEWG INFO schema must be version ${EFFECT_INFO_VERSION}`);\n }\n if (info.targetBackend !== \"webgl\"\n || info.backendPackage !== \"@carbonenginejs/runtime-resource/formats/webgl\"\n || !SEMANTIC_VERSION.test(info.backendPackageVersion)\n || info.translator !== \"dxbc-js-emitter\"\n || !SEMANTIC_VERSION.test(info.translatorVersion))\n {\n throw new Error(\"CEWG INFO producer provenance is malformed\");\n }\n\n const sourceIdentity = validateSourceIdentity(info.sourceIdentity);\n if (info.sourceByteLength !== sourceIdentity.byteLength\n || info.sourceSha256 !== sourceIdentity.sha256)\n {\n throw new Error(\"CEWG INFO source identity fields disagree\");\n }\n requireString(info.sourcePath, \"CEWG INFO.sourcePath\");\n requireUint(info.defaultPermutationIndex, \"CEWG INFO.defaultPermutationIndex\");\n requireUint(info.sourceEffectVersion, \"CEWG INFO.sourceEffectVersion\");\n const expectedMode = info.packageKind === \"tr2-effect-webgl-permutations\"\n ? \"all\"\n : \"selected\";\n if (info.permutationMode !== expectedMode)\n {\n throw new Error(\"CEWG INFO package kind and permutation mode disagree\");\n }\n\n const graphPointer = requireRecord(\n info.permutationGraph,\n \"CEWG INFO.permutationGraph\"\n );\n if (graphPointer.chunk !== EFFECT_PERMUTATION_GRAPH_CHUNK\n || graphPointer.format !== EFFECT_PERMUTATION_GRAPH_FORMAT\n || graphPointer.formatVersion !== EFFECT_PERMUTATION_GRAPH_VERSION\n || !SHA256.test(graphPointer.sha256))\n {\n throw new Error(\"CEWG INFO.permutationGraph is malformed\");\n }\n const graphChunk = pkg.GetChunk(EFFECT_PERMUTATION_GRAPH_CHUNK);\n if (!graphChunk)\n {\n throw new Error(`CEWG INFO.permutationGraph requires ${EFFECT_PERMUTATION_GRAPH_CHUNK}`);\n }\n if (sha256Bytes(graphChunk.bytes) !== graphPointer.sha256)\n {\n throw new Error(\"CEWG INFO permutation-graph digest disagrees with PGRF\");\n }\n const graph = requireRecord(pkg.GetJson(EFFECT_PERMUTATION_GRAPH_CHUNK), \"CEWG PGRF\");\n const graphCounts = validateEffectPermutationGraph(graph, {\n sourceByteLength: sourceIdentity.byteLength\n });\n if (requireUint(\n graphPointer.permutationCount,\n \"CEWG INFO.permutationGraph.permutationCount\"\n ) !== graphCounts.permutationCount\n || requireUint(\n graphPointer.uniqueBodyCount,\n \"CEWG INFO.permutationGraph.uniqueBodyCount\"\n ) !== graphCounts.uniqueBodyCount\n || info.sourcePermutationCount !== graphCounts.permutationCount\n || info.sourceUniqueBodyCount !== graphCounts.uniqueBodyCount)\n {\n throw new Error(\"CEWG INFO permutation-graph counts disagree with PGRF\");\n }\n if (info.defaultPermutationIndex >= graphCounts.permutationCount)\n {\n throw new Error(\"CEWG default permutation index is absent from PGRF\");\n }\n\n const metadata = requireRecord(pkg.GetJson(\"META\"), \"CEWG META\");\n const glsl = requireRecord(pkg.GetJson(\"GLSL\"), \"CEWG GLSL\");\n validateBackendGraph(\n info,\n metadata,\n glsl,\n graph\n );\n if (metadata.sourcePath !== info.sourcePath)\n {\n throw new Error(\"CEWG META source path disagrees with INFO\");\n }\n validateCompleteness(info);\n\n if (info.formatVersion === 2)\n {\n if (info.sourceEffectVersion < 8 || info.sourceEffectVersion > 14)\n {\n throw new Error(\"CEWG INFO v2 source effect version must be 8-14\");\n }\n if (Object.prototype.hasOwnProperty.call(info, \"effectReflection\")\n || pkg.GetChunk(EFFECT_REFLECTION_CHUNK)\n || pkg.GetChunk(EFFECT_REFLECTION_BLOB_CHUNK))\n {\n throw new Error(\"CEWG INFO v2 cannot contain complete effect reflection\");\n }\n return true;\n }\n\n const reflectionChunk = pkg.GetChunk(EFFECT_REFLECTION_CHUNK);\n const blobChunk = pkg.GetChunk(EFFECT_REFLECTION_BLOB_CHUNK);\n if (!reflectionChunk || !blobChunk)\n {\n throw new Error(\"CEWG INFO v3 requires RFLX and RBLB\");\n }\n const reflection = requireRecord(\n pkg.GetJson(EFFECT_REFLECTION_CHUNK),\n \"CEWG RFLX\"\n );\n if (info.sourceEffectVersion !== 15\n || reflection.source?.effectVersion !== info.sourceEffectVersion)\n {\n throw new Error(\"CEWG INFO v3 source effect version disagrees with RFLX\");\n }\n validateEffectReflectionPointer(\n requireRecord(info.effectReflection, \"CEWG INFO.effectReflection\"),\n reflection,\n blobChunk.bytes,\n {\n permutationGraph: graph,\n sourceIdentity,\n sourcePath: info.sourcePath,\n reflectionBytes: reflectionChunk.bytes\n }\n );\n validateReflectionBackendGraph(\n reflection,\n graph,\n metadata,\n glsl\n );\n markEffectReflectionValidated(pkg);\n return true;\n}\n\nfunction validateReflectionBackendGraph(reflection, graph, metadata, glsl)\n{\n const metadataBodies = new Map(metadata.bodies.map((body) => [\n body.key,\n body\n ]));\n const checkedBodies = new Set();\n for (const variant of metadata.variants)\n {\n if (checkedBodies.has(variant.bodyKey)) continue;\n checkedBodies.add(variant.bodyKey);\n const metadataBody = metadataBodies.get(variant.bodyKey);\n const reflected = effectReflectionForPermutation(\n reflection,\n graph,\n variant.permutationIndex\n );\n const manifest = requireRecord(\n metadataBody?.manifest,\n `CEWG META body ${variant.bodyKey} manifest`\n );\n const reflectedPasses = [];\n const reflectedStages = [];\n for (const technique of requireArray(\n reflected.techniques,\n `CEWG RFLX body ${variant.bodyKey} techniques`\n ))\n {\n for (const [ passIndex, pass ] of requireArray(\n technique.passes,\n `CEWG RFLX technique ${technique.name} passes`\n ).entries())\n {\n reflectedPasses.push({\n techniqueName: technique.name,\n passIndex,\n states: pass.renderStates\n });\n for (const stage of requireArray(\n pass.stages,\n `CEWG RFLX ${technique.name}.pass${passIndex} stages`\n ))\n {\n reflectedStages.push({\n techniqueName: technique.name,\n passIndex,\n stage\n });\n }\n }\n }\n const manifestPasses = requireArray(\n manifest.passes,\n `CEWG META body ${variant.bodyKey} passes`\n );\n const manifestStages = requireArray(\n manifest.stages,\n `CEWG META body ${variant.bodyKey} stages`\n );\n if (manifestPasses.length !== reflectedPasses.length\n || manifestStages.length !== reflectedStages.length)\n {\n throw new Error(\n `CEWG META body ${variant.bodyKey} disagrees with RFLX pass/stage counts`\n );\n }\n for (const reflectedPass of reflectedPasses)\n {\n const manifestPass = manifestPasses.find((entry) =>\n entry.techniqueName === reflectedPass.techniqueName\n && entry.passIndex === reflectedPass.passIndex);\n if (!manifestPass\n || !jsonEqual(manifestPass.states, reflectedPass.states))\n {\n throw new Error(\n `CEWG META pass ${reflectedPass.techniqueName}.pass${reflectedPass.passIndex} disagrees with RFLX`\n );\n }\n }\n for (const reflectedStage of reflectedStages)\n {\n const stage = reflectedStage.stage;\n const sourceProgram = stage.sourceProgram;\n const signature = stage.input?.signature;\n const manifestStage = manifestStages.find((entry) =>\n entry.techniqueName === reflectedStage.techniqueName\n && entry.passIndex === reflectedStage.passIndex\n && entry.stageType === stage.stageType\n && entry.stageName === stage.stageName);\n if (!manifestStage\n || sourceProgram?.kind !== \"stage\"\n || sourceProgram.stageType !== manifestStage.stageType\n || sourceProgram.stageName !== manifestStage.stageName\n || sourceProgram.shaderSize\n !== manifestStage.shaderBytecode?.shaderSize\n || sourceProgram.stringTableOffset\n !== manifestStage.shaderBytecode?.stringTableOffset\n || !samePipelineInputs(\n signature?.pipelineInputs,\n manifestStage.pipelineInputs\n )\n || !jsonEqual(\n signature?.threadGroupSize,\n manifestStage.threadGroupSize\n ))\n {\n throw new Error(\n `CEWG META stage ${reflectedStage.techniqueName}.pass${reflectedStage.passIndex}.${stage.stageName} disagrees with RFLX`\n );\n }\n }\n }\n if (checkedBodies.size !== metadataBodies.size\n || requireArray(glsl.bodies, \"CEWG GLSL.bodies\").some((body) =>\n !checkedBodies.has(body.key)))\n {\n throw new Error(\"CEWG backend body inventory disagrees with RFLX\");\n }\n}\n\nfunction validateSourceIdentity(value)\n{\n const identity = requireRecord(value, \"CEWG INFO.sourceIdentity\");\n requireString(identity.logicalPath, \"CEWG INFO.sourceIdentity.logicalPath\");\n requireUint(identity.byteLength, \"CEWG INFO.sourceIdentity.byteLength\");\n if (!SHA256.test(identity.sha256))\n {\n throw new Error(\"CEWG INFO.sourceIdentity.sha256 is malformed\");\n }\n return identity;\n}\n\nfunction validateCompleteness(info)\n{\n const completeness = requireRecord(\n info.completeness,\n \"CEWG INFO.completeness\"\n );\n for (const key of [\n \"packageValid\",\n \"sourceComplete\",\n \"backendComplete\",\n \"runtimeComplete\"\n ])\n {\n if (typeof completeness[key] !== \"boolean\")\n {\n throw new Error(`CEWG INFO.completeness.${key} must be boolean`);\n }\n }\n if (!completeness.packageValid || completeness.runtimeComplete)\n {\n throw new Error(\"CEWG INFO completeness overstates runtime coverage\");\n }\n if (info.formatVersion === 3)\n {\n if (info.sourceBodyCoverage !== \"all-unique\"\n || !completeness.sourceComplete\n || info.backendProgramCoverage !== (\n selectionCoversWholeEffect(info.selection)\n ? \"all-stages\"\n : \"filtered\"\n ))\n {\n throw new Error(\"CEWG INFO v3 source coverage is inconsistent\");\n }\n }\n else if (Object.prototype.hasOwnProperty.call(info, \"sourceBodyCoverage\")\n || Object.prototype.hasOwnProperty.call(info, \"backendBodyCoverage\")\n || Object.prototype.hasOwnProperty.call(info, \"backendProgramCoverage\")\n || completeness.sourceComplete)\n {\n throw new Error(\"CEWG INFO v2 source coverage is inconsistent\");\n }\n const expectedBackendCoverage = info.permutationMode === \"all\"\n ? \"all\"\n : \"selected\";\n if ((info.formatVersion === 3\n && info.backendBodyCoverage !== expectedBackendCoverage)\n || completeness.backendComplete)\n {\n throw new Error(\"CEWG INFO backend coverage is inconsistent\");\n }\n}\n\nfunction selectionCoversWholeEffect(value)\n{\n const selection = requireRecord(value, \"CEWG INFO.selection\");\n return selection.technique === null\n && selection.pass === null\n && selection.stage === null;\n}\n\nfunction validateBackendGraph(info, metadata, glsl, graph)\n{\n if (glsl.format !== \"CEWG_GLSL_SET\" || glsl.formatVersion !== 1\n || glsl.permutationMode !== info.permutationMode\n || !jsonEqual(glsl.selection, info.selection))\n {\n throw new Error(\"CEWG GLSL envelope disagrees with INFO\");\n }\n const metadataVariants = requireArray(metadata.variants, \"CEWG META.variants\");\n const glslVariants = requireArray(glsl.variants, \"CEWG GLSL.variants\");\n const metadataBodies = requireArray(metadata.bodies, \"CEWG META.bodies\");\n const glslBodies = requireArray(glsl.bodies, \"CEWG GLSL.bodies\");\n const stages = requireArray(glsl.stages, \"CEWG GLSL.stages\");\n const shaders = requireArray(glsl.shaders, \"CEWG GLSL.shaders\");\n if (metadataVariants.length !== info.permutationCount\n || glslVariants.length !== info.permutationCount)\n {\n throw new Error(\"CEWG backend variant counts disagree with INFO\");\n }\n const expectedIndices = info.permutationMode === \"all\"\n ? graph.variants.map((variant) => variant.permutationIndex)\n : [ info.defaultPermutationIndex ];\n if (expectedIndices.length !== metadataVariants.length)\n {\n throw new Error(\"CEWG backend permutation coverage disagrees with INFO\");\n }\n for (let index = 0; index < expectedIndices.length; index++)\n {\n const expected = expectedIndices[index];\n const metadataVariant = requireRecord(\n metadataVariants[index],\n `CEWG META variant ${index}`\n );\n const glslVariant = requireRecord(\n glslVariants[index],\n `CEWG GLSL variant ${index}`\n );\n if (metadataVariant.permutationIndex !== expected\n || glslVariant.permutationIndex !== expected\n || metadataVariant.key !== glslVariant.key\n || metadataVariant.bodyKey !== glslVariant.bodyKey)\n {\n throw new Error(`CEWG backend variant ${index} is inconsistent`);\n }\n const sourceVariant = graph.variants[expected];\n if (metadataVariant.bodyOffset !== sourceVariant.sourceRecord.offset\n || metadataVariant.bodySize !== sourceVariant.sourceRecord.byteLength)\n {\n throw new Error(`CEWG backend variant ${index} disagrees with PGRF`);\n }\n }\n if (metadataBodies.length !== info.uniqueBodyCount\n || glslBodies.length !== info.uniqueBodyCount\n || stages.length !== info.bodyStageCount\n || shaders.length !== info.uniqueShaderCount)\n {\n throw new Error(\"CEWG backend graph counts disagree with INFO\");\n }\n\n const metadataBodyMap = keyedRecordMap(metadataBodies, \"CEWG META body\");\n const glslBodyMap = keyedRecordMap(glslBodies, \"CEWG GLSL body\");\n const stageMap = keyedRecordMap(stages, \"CEWG GLSL stage\");\n const shaderMap = keyedRecordMap(shaders, \"CEWG GLSL shader\");\n const variantKeys = new Set();\n const referencedBodies = new Set();\n for (const [ index, variant ] of glslVariants.entries())\n {\n if (typeof variant.key !== \"string\" || !variant.key\n || variantKeys.has(variant.key)\n || !glslBodyMap.has(variant.bodyKey)\n || !metadataBodyMap.has(metadataVariants[index].bodyKey))\n {\n throw new Error(`CEWG backend variant ${index} references an invalid body`);\n }\n variantKeys.add(variant.key);\n referencedBodies.add(variant.bodyKey);\n }\n\n const referencedStages = new Set();\n for (const body of glslBodies)\n {\n const metadataBody = metadataBodyMap.get(body.key);\n const bodyStages = requireArray(\n body.stages,\n `CEWG GLSL body ${body.key}.stages`\n );\n if (!metadataBody\n || referencedBodies.has(body.key) === false\n || bodyStages.length !== new Set(bodyStages).size)\n {\n throw new Error(`CEWG backend body ${body.key} is inconsistent`);\n }\n for (const stageKey of bodyStages)\n {\n const stage = stageMap.get(stageKey);\n if (!stage || stage.bodyKey !== body.key)\n {\n throw new Error(\n `CEWG backend body ${body.key} references an invalid stage`\n );\n }\n referencedStages.add(stageKey);\n }\n }\n\n const referencedShaders = new Set();\n for (const stage of stages)\n {\n if (!referencedStages.has(stage.key)\n || !glslBodyMap.has(stage.bodyKey)\n || !shaderMap.has(stage.shaderKey))\n {\n throw new Error(`CEWG backend stage ${stage.key} is inconsistent`);\n }\n referencedShaders.add(stage.shaderKey);\n }\n if (referencedStages.size !== stageMap.size\n || referencedShaders.size !== shaderMap.size)\n {\n throw new Error(\"CEWG backend graph contains orphan stages or shaders\");\n }\n\n const excludedShaderCount = shaders.filter((shader) =>\n shader.excluded).length;\n const failedShaderCount = shaders.filter((shader) =>\n !shader.hlsl2webgl?.ok && !shader.excluded).length;\n const failedBodyCount = glslBodies.filter((body) => body.error).length;\n const availableShaderCount = shaders.filter((shader) =>\n shader.hlsl2webgl?.ok && shader.source).length;\n const raster = inspectCewgRasterCompleteness(stages, shaders);\n const counts = {\n translatedShaderCount:\n shaders.length - failedShaderCount - excludedShaderCount,\n excludedShaderCount,\n failedShaderCount,\n failedBodyCount,\n availableShaderCount,\n expectedRasterPassCount: raster.expectedPassCount,\n completeRasterPassCount: raster.completePassCount,\n incompleteRasterPassCount: raster.incompletePasses.length\n };\n for (const [ field, actual ] of Object.entries(counts))\n {\n if (info[field] !== actual)\n {\n throw new Error(`CEWG INFO.${field} disagrees with the backend graph`);\n }\n }\n}\n\nfunction keyedRecordMap(records, context)\n{\n const map = new Map();\n for (const [ index, value ] of records.entries())\n {\n const record = requireRecord(value, `${context} ${index}`);\n if (typeof record.key !== \"string\" || !record.key\n || map.has(record.key))\n {\n throw new Error(`${context} ${index} has a missing or duplicate key`);\n }\n map.set(record.key, record);\n }\n return map;\n}\n\nfunction samePipelineInputs(reflected, manifest)\n{\n const fields = [\n \"usage\",\n \"registerIndex\",\n \"usageIndex\",\n \"usedMask\",\n \"type\",\n \"dimension\"\n ];\n return Array.isArray(reflected)\n && Array.isArray(manifest)\n && reflected.length === manifest.length\n && reflected.every((entry, index) =>\n fields.every((field) => entry[field] === manifest[index]?.[field]));\n}\n\nfunction requireRecord(value, context)\n{\n if (!value || typeof value !== \"object\" || Array.isArray(value))\n {\n throw new Error(`${context} must be an object`);\n }\n return value;\n}\n\nfunction requireArray(value, context)\n{\n if (!Array.isArray(value))\n {\n throw new Error(`${context} must be an array`);\n }\n return value;\n}\n\nfunction requireString(value, context)\n{\n if (typeof value !== \"string\" || !value)\n {\n throw new Error(`${context} must be a non-empty string`);\n }\n return value;\n}\n\nfunction requireUint(value, context)\n{\n if (!Number.isSafeInteger(value) || value < 0)\n {\n throw new Error(`${context} must be a non-negative safe integer`);\n }\n return value;\n}\n\nfunction jsonEqual(left, right)\n{\n return JSON.stringify(left) === JSON.stringify(right);\n}\n"],"names":["EFFECT_INFO_VERSION","EFFECT_PACKAGE_KINDS","Set","REQUIRED_EFFECT_CHUNKS","Object","freeze","SEMANTIC_VERSION","SHA256","validateEffectPackageEnvelope","pkg","GetChunk","info","requireRecord","GetJson","has","packageKind","tag","Error","format","formatVersion","targetBackend","backendPackage","test","backendPackageVersion","translator","translatorVersion","sourceIdentity","validateSourceIdentity","sourceByteLength","byteLength","sourceSha256","sha256","requireString","sourcePath","requireUint","defaultPermutationIndex","sourceEffectVersion","expectedMode","permutationMode","graphPointer","permutationGraph","chunk","EFFECT_PERMUTATION_GRAPH_CHUNK","EFFECT_PERMUTATION_GRAPH_FORMAT","EFFECT_PERMUTATION_GRAPH_VERSION","graphChunk","sha256Bytes","bytes","graph","graphCounts","validateEffectPermutationGraph","permutationCount","uniqueBodyCount","sourcePermutationCount","sourceUniqueBodyCount","metadata","glsl","validateBackendGraph","validateCompleteness","prototype","hasOwnProperty","call","EFFECT_REFLECTION_CHUNK","EFFECT_REFLECTION_BLOB_CHUNK","reflectionChunk","blobChunk","reflection","source","effectVersion","validateEffectReflectionPointer","effectReflection","reflectionBytes","validateReflectionBackendGraph","markEffectReflectionValidated","metadataBodies","Map","bodies","map","body","key","checkedBodies","variant","variants","bodyKey","add","metadataBody","get","reflected","effectReflectionForPermutation","permutationIndex","manifest","reflectedPasses","reflectedStages","technique","requireArray","techniques","passIndex","pass","passes","name","entries","push","techniqueName","states","renderStates","stage","stages","manifestPasses","manifestStages","length","reflectedPass","manifestPass","find","entry","jsonEqual","reflectedStage","sourceProgram","signature","input","manifestStage","stageType","stageName","kind","shaderSize","shaderBytecode","stringTableOffset","samePipelineInputs","pipelineInputs","threadGroupSize","size","some","value","identity","logicalPath","completeness","packageValid","runtimeComplete","sourceBodyCoverage","sourceComplete","backendProgramCoverage","selectionCoversWholeEffect","selection","expectedBackendCoverage","backendBodyCoverage","backendComplete","metadataVariants","glslVariants","glslBodies","shaders","expectedIndices","index","expected","metadataVariant","glslVariant","sourceVariant","bodyOffset","sourceRecord","offset","bodySize","bodyStageCount","uniqueShaderCount","metadataBodyMap","keyedRecordMap","glslBodyMap","stageMap","shaderMap","variantKeys","referencedBodies","referencedStages","bodyStages","stageKey","referencedShaders","shaderKey","excludedShaderCount","filter","shader","excluded","failedShaderCount","hlsl2webgl","ok","failedBodyCount","error","availableShaderCount","raster","inspectCewgRasterCompleteness","counts","translatedShaderCount","expectedRasterPassCount","expectedPassCount","completeRasterPassCount","completePassCount","incompleteRasterPassCount","incompletePasses","field","actual","records","context","record","set","fields","Array","isArray","every","Number","isSafeInteger","left","right","JSON","stringify"],"mappings":";;;;;;AAgBO,MAAMA,mBAAmB,GAAG;AAEnC,MAAMC,oBAAoB,GAAG,IAAIC,GAAG,CAAC,CACjC,kBAAkB,EAClB,+BAA+B,CAClC,CAAC;AACF,MAAMC,sBAAsB,GAAGC,MAAM,CAACC,MAAM,CAAC,CAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAE,CAAC;AACxE,MAAMC,gBAAgB,GAAG,oEAAoE;AAC7F,MAAMC,MAAM,GAAG,iBAAiB;;AAEhC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,6BAA6BA,CAACC,GAAG,EACjD;EACI,IAAI,CAACA,GAAG,CAACC,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,IAAI;AAEtC,EAAA,MAAMC,IAAI,GAAGC,aAAa,CAACH,GAAG,CAACI,OAAO,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;EAC5D,IAAI,CAACZ,oBAAoB,CAACa,GAAG,CAACH,IAAI,CAACI,WAAW,CAAC,EAAE,OAAO,IAAI;AAE5D,EAAA,KAAK,MAAMC,GAAG,IAAIb,sBAAsB,EACxC;AACI,IAAA,IAAI,CAACM,GAAG,CAACC,QAAQ,CAACM,GAAG,CAAC,EACtB;AACI,MAAA,MAAM,IAAIC,KAAK,CAAC,CAAA,6BAAA,EAAgCD,GAAG,EAAE,CAAC;AAC1D,IAAA;AACJ,EAAA;AACA,EAAA,IAAIL,IAAI,CAACO,MAAM,KAAK,MAAM,EAC1B;AACI,IAAA,MAAM,IAAID,KAAK,CAAC,+BAA+B,CAAC;AACpD,EAAA;AACA,EAAA,IAAIN,IAAI,CAACQ,aAAa,KAAK,CAAC,EAC5B;AACI,IAAA,OAAO,IAAI;AACf,EAAA;AACA,EAAA,IAAIR,IAAI,CAACQ,aAAa,KAAKnB,mBAAmB,EAC9C;AACI,IAAA,MAAM,IAAIiB,KAAK,CAAC,CAAA,iCAAA,EAAoCjB,mBAAmB,EAAE,CAAC;AAC9E,EAAA;AACA,EAAA,IAAIW,IAAI,CAACS,aAAa,KAAK,OAAO,IAC3BT,IAAI,CAACU,cAAc,KAAK,gDAAgD,IACxE,CAACf,gBAAgB,CAACgB,IAAI,CAACX,IAAI,CAACY,qBAAqB,CAAC,IAClDZ,IAAI,CAACa,UAAU,KAAK,iBAAiB,IACrC,CAAClB,gBAAgB,CAACgB,IAAI,CAACX,IAAI,CAACc,iBAAiB,CAAC,EACrD;AACI,IAAA,MAAM,IAAIR,KAAK,CAAC,4CAA4C,CAAC;AACjE,EAAA;AAEA,EAAA,MAAMS,cAAc,GAAGC,sBAAsB,CAAChB,IAAI,CAACe,cAAc,CAAC;AAClE,EAAA,IAAIf,IAAI,CAACiB,gBAAgB,KAAKF,cAAc,CAACG,UAAU,IAChDlB,IAAI,CAACmB,YAAY,KAAKJ,cAAc,CAACK,MAAM,EAClD;AACI,IAAA,MAAM,IAAId,KAAK,CAAC,2CAA2C,CAAC;AAChE,EAAA;AACAe,EAAAA,aAAa,CAACrB,IAAI,CAACsB,UAAU,EAAE,sBAAsB,CAAC;AACtDC,EAAAA,WAAW,CAACvB,IAAI,CAACwB,uBAAuB,EAAE,mCAAmC,CAAC;AAC9ED,EAAAA,WAAW,CAACvB,IAAI,CAACyB,mBAAmB,EAAE,+BAA+B,CAAC;EACtE,MAAMC,YAAY,GAAG1B,IAAI,CAACI,WAAW,KAAK,+BAA+B,GACnE,KAAK,GACL,UAAU;AAChB,EAAA,IAAIJ,IAAI,CAAC2B,eAAe,KAAKD,YAAY,EACzC;AACI,IAAA,MAAM,IAAIpB,KAAK,CAAC,sDAAsD,CAAC;AAC3E,EAAA;EAEA,MAAMsB,YAAY,GAAG3B,aAAa,CAC9BD,IAAI,CAAC6B,gBAAgB,EACrB,4BACJ,CAAC;EACD,IAAID,YAAY,CAACE,KAAK,KAAKC,8BAA8B,IAClDH,YAAY,CAACrB,MAAM,KAAKyB,+BAA+B,IACvDJ,YAAY,CAACpB,aAAa,KAAKyB,gCAAgC,IAC/D,CAACrC,MAAM,CAACe,IAAI,CAACiB,YAAY,CAACR,MAAM,CAAC,EACxC;AACI,IAAA,MAAM,IAAId,KAAK,CAAC,yCAAyC,CAAC;AAC9D,EAAA;AACA,EAAA,MAAM4B,UAAU,GAAGpC,GAAG,CAACC,QAAQ,CAACgC,8BAA8B,CAAC;EAC/D,IAAI,CAACG,UAAU,EACf;AACI,IAAA,MAAM,IAAI5B,KAAK,CAAC,CAAA,oCAAA,EAAuCyB,8BAA8B,EAAE,CAAC;AAC5F,EAAA;EACA,IAAII,WAAW,CAACD,UAAU,CAACE,KAAK,CAAC,KAAKR,YAAY,CAACR,MAAM,EACzD;AACI,IAAA,MAAM,IAAId,KAAK,CAAC,wDAAwD,CAAC;AAC7E,EAAA;AACA,EAAA,MAAM+B,KAAK,GAAGpC,aAAa,CAACH,GAAG,CAACI,OAAO,CAAC6B,8BAA8B,CAAC,EAAE,WAAW,CAAC;AACrF,EAAA,MAAMO,WAAW,GAAGC,8BAA8B,CAACF,KAAK,EAAE;IACtDpB,gBAAgB,EAAEF,cAAc,CAACG;AACrC,GAAC,CAAC;AACF,EAAA,IAAIK,WAAW,CACXK,YAAY,CAACY,gBAAgB,EAC7B,6CACJ,CAAC,KAAKF,WAAW,CAACE,gBAAgB,IAC3BjB,WAAW,CACVK,YAAY,CAACa,eAAe,EAC5B,4CACJ,CAAC,KAAKH,WAAW,CAACG,eAAe,IAC9BzC,IAAI,CAAC0C,sBAAsB,KAAKJ,WAAW,CAACE,gBAAgB,IAC5DxC,IAAI,CAAC2C,qBAAqB,KAAKL,WAAW,CAACG,eAAe,EACjE;AACI,IAAA,MAAM,IAAInC,KAAK,CAAC,uDAAuD,CAAC;AAC5E,EAAA;AACA,EAAA,IAAIN,IAAI,CAACwB,uBAAuB,IAAIc,WAAW,CAACE,gBAAgB,EAChE;AACI,IAAA,MAAM,IAAIlC,KAAK,CAAC,oDAAoD,CAAC;AACzE,EAAA;AAEA,EAAA,MAAMsC,QAAQ,GAAG3C,aAAa,CAACH,GAAG,CAACI,OAAO,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;AAChE,EAAA,MAAM2C,IAAI,GAAG5C,aAAa,CAACH,GAAG,CAACI,OAAO,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;EAC5D4C,oBAAoB,CAChB9C,IAAI,EACJ4C,QAAQ,EACRC,IAAI,EACJR,KACJ,CAAC;AACD,EAAA,IAAIO,QAAQ,CAACtB,UAAU,KAAKtB,IAAI,CAACsB,UAAU,EAC3C;AACI,IAAA,MAAM,IAAIhB,KAAK,CAAC,2CAA2C,CAAC;AAChE,EAAA;EACAyC,oBAAoB,CAAC/C,IAAI,CAAC;AAE1B,EAAA,IAAIA,IAAI,CAACQ,aAAa,KAAK,CAAC,EAC5B;IACI,IAAIR,IAAI,CAACyB,mBAAmB,GAAG,CAAC,IAAIzB,IAAI,CAACyB,mBAAmB,GAAG,EAAE,EACjE;AACI,MAAA,MAAM,IAAInB,KAAK,CAAC,iDAAiD,CAAC;AACtE,IAAA;IACA,IAAIb,MAAM,CAACuD,SAAS,CAACC,cAAc,CAACC,IAAI,CAAClD,IAAI,EAAE,kBAAkB,CAAC,IAC3DF,GAAG,CAACC,QAAQ,CAACoD,uBAAuB,CAAC,IACrCrD,GAAG,CAACC,QAAQ,CAACqD,4BAA4B,CAAC,EACjD;AACI,MAAA,MAAM,IAAI9C,KAAK,CAAC,wDAAwD,CAAC;AAC7E,IAAA;AACA,IAAA,OAAO,IAAI;AACf,EAAA;AAEA,EAAA,MAAM+C,eAAe,GAAGvD,GAAG,CAACC,QAAQ,CAACoD,uBAAuB,CAAC;AAC7D,EAAA,MAAMG,SAAS,GAAGxD,GAAG,CAACC,QAAQ,CAACqD,4BAA4B,CAAC;AAC5D,EAAA,IAAI,CAACC,eAAe,IAAI,CAACC,SAAS,EAClC;AACI,IAAA,MAAM,IAAIhD,KAAK,CAAC,qCAAqC,CAAC;AAC1D,EAAA;AACA,EAAA,MAAMiD,UAAU,GAAGtD,aAAa,CAC5BH,GAAG,CAACI,OAAO,CAACiD,uBAAuB,CAAC,EACpC,WACJ,CAAC;AACD,EAAA,IAAInD,IAAI,CAACyB,mBAAmB,KAAK,EAAE,IAC5B8B,UAAU,CAACC,MAAM,EAAEC,aAAa,KAAKzD,IAAI,CAACyB,mBAAmB,EACpE;AACI,IAAA,MAAM,IAAInB,KAAK,CAAC,wDAAwD,CAAC;AAC7E,EAAA;AACAoD,EAAAA,+BAA+B,CAC3BzD,aAAa,CAACD,IAAI,CAAC2D,gBAAgB,EAAE,4BAA4B,CAAC,EAClEJ,UAAU,EACVD,SAAS,CAAClB,KAAK,EACf;AACIP,IAAAA,gBAAgB,EAAEQ,KAAK;IACvBtB,cAAc;IACdO,UAAU,EAAEtB,IAAI,CAACsB,UAAU;IAC3BsC,eAAe,EAAEP,eAAe,CAACjB;AACrC,GACJ,CAAC;EACDyB,8BAA8B,CAC1BN,UAAU,EACVlB,KAAK,EACLO,QAAQ,EACRC,IACJ,CAAC;EACDiB,6BAA6B,CAAChE,GAAG,CAAC;AAClC,EAAA,OAAO,IAAI;AACf;AAEA,SAAS+D,8BAA8BA,CAACN,UAAU,EAAElB,KAAK,EAAEO,QAAQ,EAAEC,IAAI,EACzE;EACI,MAAMkB,cAAc,GAAG,IAAIC,GAAG,CAACpB,QAAQ,CAACqB,MAAM,CAACC,GAAG,CAAEC,IAAI,IAAK,CACzDA,IAAI,CAACC,GAAG,EACRD,IAAI,CACP,CAAC,CAAC;AACH,EAAA,MAAME,aAAa,GAAG,IAAI9E,GAAG,EAAE;AAC/B,EAAA,KAAK,MAAM+E,OAAO,IAAI1B,QAAQ,CAAC2B,QAAQ,EACvC;IACI,IAAIF,aAAa,CAAClE,GAAG,CAACmE,OAAO,CAACE,OAAO,CAAC,EAAE;AACxCH,IAAAA,aAAa,CAACI,GAAG,CAACH,OAAO,CAACE,OAAO,CAAC;IAClC,MAAME,YAAY,GAAGX,cAAc,CAACY,GAAG,CAACL,OAAO,CAACE,OAAO,CAAC;IACxD,MAAMI,SAAS,GAAGC,8BAA8B,CAC5CtB,UAAU,EACVlB,KAAK,EACLiC,OAAO,CAACQ,gBACZ,CAAC;AACD,IAAA,MAAMC,QAAQ,GAAG9E,aAAa,CAC1ByE,YAAY,EAAEK,QAAQ,EACtB,CAAA,eAAA,EAAkBT,OAAO,CAACE,OAAO,WACrC,CAAC;IACD,MAAMQ,eAAe,GAAG,EAAE;IAC1B,MAAMC,eAAe,GAAG,EAAE;AAC1B,IAAA,KAAK,MAAMC,SAAS,IAAIC,YAAY,CAChCP,SAAS,CAACQ,UAAU,EACpB,kBAAkBd,OAAO,CAACE,OAAO,CAAA,WAAA,CACrC,CAAC,EACD;MACI,KAAK,MAAM,CAAEa,SAAS,EAAEC,IAAI,CAAE,IAAIH,YAAY,CAC1CD,SAAS,CAACK,MAAM,EAChB,CAAA,oBAAA,EAAuBL,SAAS,CAACM,IAAI,CAAA,OAAA,CACzC,CAAC,CAACC,OAAO,EAAE,EACX;QACIT,eAAe,CAACU,IAAI,CAAC;UACjBC,aAAa,EAAET,SAAS,CAACM,IAAI;UAC7BH,SAAS;UACTO,MAAM,EAAEN,IAAI,CAACO;AACjB,SAAC,CAAC;AACF,QAAA,KAAK,MAAMC,KAAK,IAAIX,YAAY,CAC5BG,IAAI,CAACS,MAAM,EACX,CAAA,UAAA,EAAab,SAAS,CAACM,IAAI,QAAQH,SAAS,CAAA,OAAA,CAChD,CAAC,EACD;UACIJ,eAAe,CAACS,IAAI,CAAC;YACjBC,aAAa,EAAET,SAAS,CAACM,IAAI;YAC7BH,SAAS;AACTS,YAAAA;AACJ,WAAC,CAAC;AACN,QAAA;AACJ,MAAA;AACJ,IAAA;AACA,IAAA,MAAME,cAAc,GAAGb,YAAY,CAC/BJ,QAAQ,CAACQ,MAAM,EACf,CAAA,eAAA,EAAkBjB,OAAO,CAACE,OAAO,SACrC,CAAC;AACD,IAAA,MAAMyB,cAAc,GAAGd,YAAY,CAC/BJ,QAAQ,CAACgB,MAAM,EACf,CAAA,eAAA,EAAkBzB,OAAO,CAACE,OAAO,SACrC,CAAC;AACD,IAAA,IAAIwB,cAAc,CAACE,MAAM,KAAKlB,eAAe,CAACkB,MAAM,IAC7CD,cAAc,CAACC,MAAM,KAAKjB,eAAe,CAACiB,MAAM,EACvD;MACI,MAAM,IAAI5F,KAAK,CACX,CAAA,eAAA,EAAkBgE,OAAO,CAACE,OAAO,wCACrC,CAAC;AACL,IAAA;AACA,IAAA,KAAK,MAAM2B,aAAa,IAAInB,eAAe,EAC3C;MACI,MAAMoB,YAAY,GAAGJ,cAAc,CAACK,IAAI,CAAEC,KAAK,IAC3CA,KAAK,CAACX,aAAa,KAAKQ,aAAa,CAACR,aAAa,IAChDW,KAAK,CAACjB,SAAS,KAAKc,aAAa,CAACd,SAAS,CAAC;AACnD,MAAA,IAAI,CAACe,YAAY,IACV,CAACG,SAAS,CAACH,YAAY,CAACR,MAAM,EAAEO,aAAa,CAACP,MAAM,CAAC,EAC5D;AACI,QAAA,MAAM,IAAItF,KAAK,CACX,CAAA,eAAA,EAAkB6F,aAAa,CAACR,aAAa,CAAA,KAAA,EAAQQ,aAAa,CAACd,SAAS,CAAA,oBAAA,CAChF,CAAC;AACL,MAAA;AACJ,IAAA;AACA,IAAA,KAAK,MAAMmB,cAAc,IAAIvB,eAAe,EAC5C;AACI,MAAA,MAAMa,KAAK,GAAGU,cAAc,CAACV,KAAK;AAClC,MAAA,MAAMW,aAAa,GAAGX,KAAK,CAACW,aAAa;AACzC,MAAA,MAAMC,SAAS,GAAGZ,KAAK,CAACa,KAAK,EAAED,SAAS;AACxC,MAAA,MAAME,aAAa,GAAGX,cAAc,CAACI,IAAI,CAAEC,KAAK,IAC5CA,KAAK,CAACX,aAAa,KAAKa,cAAc,CAACb,aAAa,IACjDW,KAAK,CAACjB,SAAS,KAAKmB,cAAc,CAACnB,SAAS,IAC5CiB,KAAK,CAACO,SAAS,KAAKf,KAAK,CAACe,SAAS,IACnCP,KAAK,CAACQ,SAAS,KAAKhB,KAAK,CAACgB,SAAS,CAAC;AAC3C,MAAA,IAAI,CAACF,aAAa,IACXH,aAAa,EAAEM,IAAI,KAAK,OAAO,IAC/BN,aAAa,CAACI,SAAS,KAAKD,aAAa,CAACC,SAAS,IACnDJ,aAAa,CAACK,SAAS,KAAKF,aAAa,CAACE,SAAS,IACnDL,aAAa,CAACO,UAAU,KACnBJ,aAAa,CAACK,cAAc,EAAED,UAAU,IAC7CP,aAAa,CAACS,iBAAiB,KAC1BN,aAAa,CAACK,cAAc,EAAEC,iBAAiB,IACpD,CAACC,kBAAkB,CAClBT,SAAS,EAAEU,cAAc,EACzBR,aAAa,CAACQ,cAClB,CAAC,IACE,CAACb,SAAS,CACTG,SAAS,EAAEW,eAAe,EAC1BT,aAAa,CAACS,eAClB,CAAC,EACL;AACI,QAAA,MAAM,IAAI/G,KAAK,CACX,CAAA,gBAAA,EAAmBkG,cAAc,CAACb,aAAa,CAAA,KAAA,EAAQa,cAAc,CAACnB,SAAS,CAAA,CAAA,EAAIS,KAAK,CAACgB,SAAS,sBACtG,CAAC;AACL,MAAA;AACJ,IAAA;AACJ,EAAA;AACA,EAAA,IAAIzC,aAAa,CAACiD,IAAI,KAAKvD,cAAc,CAACuD,IAAI,IACvCnC,YAAY,CAACtC,IAAI,CAACoB,MAAM,EAAE,kBAAkB,CAAC,CAACsD,IAAI,CAAEpD,IAAI,IACvD,CAACE,aAAa,CAAClE,GAAG,CAACgE,IAAI,CAACC,GAAG,CAAC,CAAC,EACrC;AACI,IAAA,MAAM,IAAI9D,KAAK,CAAC,iDAAiD,CAAC;AACtE,EAAA;AACJ;AAEA,SAASU,sBAAsBA,CAACwG,KAAK,EACrC;AACI,EAAA,MAAMC,QAAQ,GAAGxH,aAAa,CAACuH,KAAK,EAAE,0BAA0B,CAAC;AACjEnG,EAAAA,aAAa,CAACoG,QAAQ,CAACC,WAAW,EAAE,sCAAsC,CAAC;AAC3EnG,EAAAA,WAAW,CAACkG,QAAQ,CAACvG,UAAU,EAAE,qCAAqC,CAAC;EACvE,IAAI,CAACtB,MAAM,CAACe,IAAI,CAAC8G,QAAQ,CAACrG,MAAM,CAAC,EACjC;AACI,IAAA,MAAM,IAAId,KAAK,CAAC,8CAA8C,CAAC;AACnE,EAAA;AACA,EAAA,OAAOmH,QAAQ;AACnB;AAEA,SAAS1E,oBAAoBA,CAAC/C,IAAI,EAClC;EACI,MAAM2H,YAAY,GAAG1H,aAAa,CAC9BD,IAAI,CAAC2H,YAAY,EACjB,wBACJ,CAAC;AACD,EAAA,KAAK,MAAMvD,GAAG,IAAI,CACd,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,CACpB,EACD;AACI,IAAA,IAAI,OAAOuD,YAAY,CAACvD,GAAG,CAAC,KAAK,SAAS,EAC1C;AACI,MAAA,MAAM,IAAI9D,KAAK,CAAC,CAAA,uBAAA,EAA0B8D,GAAG,kBAAkB,CAAC;AACpE,IAAA;AACJ,EAAA;EACA,IAAI,CAACuD,YAAY,CAACC,YAAY,IAAID,YAAY,CAACE,eAAe,EAC9D;AACI,IAAA,MAAM,IAAIvH,KAAK,CAAC,oDAAoD,CAAC;AACzE,EAAA;AACA,EAAA,IAAIN,IAAI,CAACQ,aAAa,KAAK,CAAC,EAC5B;IACI,IAAIR,IAAI,CAAC8H,kBAAkB,KAAK,YAAY,IACrC,CAACH,YAAY,CAACI,cAAc,IAC5B/H,IAAI,CAACgI,sBAAsB,MAC1BC,0BAA0B,CAACjI,IAAI,CAACkI,SAAS,CAAC,GACpC,YAAY,GACZ,UAAU,CACnB,EACL;AACI,MAAA,MAAM,IAAI5H,KAAK,CAAC,8CAA8C,CAAC;AACnE,IAAA;EACJ,CAAC,MACI,IAAIb,MAAM,CAACuD,SAAS,CAACC,cAAc,CAACC,IAAI,CAAClD,IAAI,EAAE,oBAAoB,CAAC,IAClEP,MAAM,CAACuD,SAAS,CAACC,cAAc,CAACC,IAAI,CAAClD,IAAI,EAAE,qBAAqB,CAAC,IACjEP,MAAM,CAACuD,SAAS,CAACC,cAAc,CAACC,IAAI,CAAClD,IAAI,EAAE,wBAAwB,CAAC,IACpE2H,YAAY,CAACI,cAAc,EAClC;AACI,IAAA,MAAM,IAAIzH,KAAK,CAAC,8CAA8C,CAAC;AACnE,EAAA;EACA,MAAM6H,uBAAuB,GAAGnI,IAAI,CAAC2B,eAAe,KAAK,KAAK,GACxD,KAAK,GACL,UAAU;AAChB,EAAA,IAAK3B,IAAI,CAACQ,aAAa,KAAK,CAAC,IACtBR,IAAI,CAACoI,mBAAmB,KAAKD,uBAAuB,IACpDR,YAAY,CAACU,eAAe,EACnC;AACI,IAAA,MAAM,IAAI/H,KAAK,CAAC,4CAA4C,CAAC;AACjE,EAAA;AACJ;AAEA,SAAS2H,0BAA0BA,CAACT,KAAK,EACzC;AACI,EAAA,MAAMU,SAAS,GAAGjI,aAAa,CAACuH,KAAK,EAAE,qBAAqB,CAAC;AAC7D,EAAA,OAAOU,SAAS,CAAChD,SAAS,KAAK,IAAI,IAC5BgD,SAAS,CAAC5C,IAAI,KAAK,IAAI,IACvB4C,SAAS,CAACpC,KAAK,KAAK,IAAI;AACnC;AAEA,SAAShD,oBAAoBA,CAAC9C,IAAI,EAAE4C,QAAQ,EAAEC,IAAI,EAAER,KAAK,EACzD;AACI,EAAA,IAAIQ,IAAI,CAACtC,MAAM,KAAK,eAAe,IAAIsC,IAAI,CAACrC,aAAa,KAAK,CAAC,IACxDqC,IAAI,CAAClB,eAAe,KAAK3B,IAAI,CAAC2B,eAAe,IAC7C,CAAC4E,SAAS,CAAC1D,IAAI,CAACqF,SAAS,EAAElI,IAAI,CAACkI,SAAS,CAAC,EACjD;AACI,IAAA,MAAM,IAAI5H,KAAK,CAAC,wCAAwC,CAAC;AAC7D,EAAA;EACA,MAAMgI,gBAAgB,GAAGnD,YAAY,CAACvC,QAAQ,CAAC2B,QAAQ,EAAE,oBAAoB,CAAC;EAC9E,MAAMgE,YAAY,GAAGpD,YAAY,CAACtC,IAAI,CAAC0B,QAAQ,EAAE,oBAAoB,CAAC;EACtE,MAAMR,cAAc,GAAGoB,YAAY,CAACvC,QAAQ,CAACqB,MAAM,EAAE,kBAAkB,CAAC;EACxE,MAAMuE,UAAU,GAAGrD,YAAY,CAACtC,IAAI,CAACoB,MAAM,EAAE,kBAAkB,CAAC;EAChE,MAAM8B,MAAM,GAAGZ,YAAY,CAACtC,IAAI,CAACkD,MAAM,EAAE,kBAAkB,CAAC;EAC5D,MAAM0C,OAAO,GAAGtD,YAAY,CAACtC,IAAI,CAAC4F,OAAO,EAAE,mBAAmB,CAAC;AAC/D,EAAA,IAAIH,gBAAgB,CAACpC,MAAM,KAAKlG,IAAI,CAACwC,gBAAgB,IAC9C+F,YAAY,CAACrC,MAAM,KAAKlG,IAAI,CAACwC,gBAAgB,EACpD;AACI,IAAA,MAAM,IAAIlC,KAAK,CAAC,gDAAgD,CAAC;AACrE,EAAA;EACA,MAAMoI,eAAe,GAAG1I,IAAI,CAAC2B,eAAe,KAAK,KAAK,GAChDU,KAAK,CAACkC,QAAQ,CAACL,GAAG,CAAEI,OAAO,IAAKA,OAAO,CAACQ,gBAAgB,CAAC,GACzD,CAAE9E,IAAI,CAACwB,uBAAuB,CAAE;AACtC,EAAA,IAAIkH,eAAe,CAACxC,MAAM,KAAKoC,gBAAgB,CAACpC,MAAM,EACtD;AACI,IAAA,MAAM,IAAI5F,KAAK,CAAC,uDAAuD,CAAC;AAC5E,EAAA;AACA,EAAA,KAAK,IAAIqI,KAAK,GAAG,CAAC,EAAEA,KAAK,GAAGD,eAAe,CAACxC,MAAM,EAAEyC,KAAK,EAAE,EAC3D;AACI,IAAA,MAAMC,QAAQ,GAAGF,eAAe,CAACC,KAAK,CAAC;AACvC,IAAA,MAAME,eAAe,GAAG5I,aAAa,CACjCqI,gBAAgB,CAACK,KAAK,CAAC,EACvB,CAAA,kBAAA,EAAqBA,KAAK,CAAA,CAC9B,CAAC;AACD,IAAA,MAAMG,WAAW,GAAG7I,aAAa,CAC7BsI,YAAY,CAACI,KAAK,CAAC,EACnB,CAAA,kBAAA,EAAqBA,KAAK,CAAA,CAC9B,CAAC;IACD,IAAIE,eAAe,CAAC/D,gBAAgB,KAAK8D,QAAQ,IAC1CE,WAAW,CAAChE,gBAAgB,KAAK8D,QAAQ,IACzCC,eAAe,CAACzE,GAAG,KAAK0E,WAAW,CAAC1E,GAAG,IACvCyE,eAAe,CAACrE,OAAO,KAAKsE,WAAW,CAACtE,OAAO,EACtD;AACI,MAAA,MAAM,IAAIlE,KAAK,CAAC,CAAA,qBAAA,EAAwBqI,KAAK,kBAAkB,CAAC;AACpE,IAAA;AACA,IAAA,MAAMI,aAAa,GAAG1G,KAAK,CAACkC,QAAQ,CAACqE,QAAQ,CAAC;AAC9C,IAAA,IAAIC,eAAe,CAACG,UAAU,KAAKD,aAAa,CAACE,YAAY,CAACC,MAAM,IAC7DL,eAAe,CAACM,QAAQ,KAAKJ,aAAa,CAACE,YAAY,CAAC/H,UAAU,EACzE;AACI,MAAA,MAAM,IAAIZ,KAAK,CAAC,CAAA,qBAAA,EAAwBqI,KAAK,sBAAsB,CAAC;AACxE,IAAA;AACJ,EAAA;AACA,EAAA,IAAI5E,cAAc,CAACmC,MAAM,KAAKlG,IAAI,CAACyC,eAAe,IAC3C+F,UAAU,CAACtC,MAAM,KAAKlG,IAAI,CAACyC,eAAe,IAC1CsD,MAAM,CAACG,MAAM,KAAKlG,IAAI,CAACoJ,cAAc,IACrCX,OAAO,CAACvC,MAAM,KAAKlG,IAAI,CAACqJ,iBAAiB,EAChD;AACI,IAAA,MAAM,IAAI/I,KAAK,CAAC,8CAA8C,CAAC;AACnE,EAAA;AAEA,EAAA,MAAMgJ,eAAe,GAAGC,cAAc,CAACxF,cAAc,EAAE,gBAAgB,CAAC;AACxE,EAAA,MAAMyF,WAAW,GAAGD,cAAc,CAACf,UAAU,EAAE,gBAAgB,CAAC;AAChE,EAAA,MAAMiB,QAAQ,GAAGF,cAAc,CAACxD,MAAM,EAAE,iBAAiB,CAAC;AAC1D,EAAA,MAAM2D,SAAS,GAAGH,cAAc,CAACd,OAAO,EAAE,kBAAkB,CAAC;AAC7D,EAAA,MAAMkB,WAAW,GAAG,IAAIpK,GAAG,EAAE;AAC7B,EAAA,MAAMqK,gBAAgB,GAAG,IAAIrK,GAAG,EAAE;AAClC,EAAA,KAAK,MAAM,CAAEoJ,KAAK,EAAErE,OAAO,CAAE,IAAIiE,YAAY,CAAC9C,OAAO,EAAE,EACvD;AACI,IAAA,IAAI,OAAOnB,OAAO,CAACF,GAAG,KAAK,QAAQ,IAAI,CAACE,OAAO,CAACF,GAAG,IAC5CuF,WAAW,CAACxJ,GAAG,CAACmE,OAAO,CAACF,GAAG,CAAC,IAC5B,CAACoF,WAAW,CAACrJ,GAAG,CAACmE,OAAO,CAACE,OAAO,CAAC,IACjC,CAAC8E,eAAe,CAACnJ,GAAG,CAACmI,gBAAgB,CAACK,KAAK,CAAC,CAACnE,OAAO,CAAC,EAC5D;AACI,MAAA,MAAM,IAAIlE,KAAK,CAAC,CAAA,qBAAA,EAAwBqI,KAAK,6BAA6B,CAAC;AAC/E,IAAA;AACAgB,IAAAA,WAAW,CAAClF,GAAG,CAACH,OAAO,CAACF,GAAG,CAAC;AAC5BwF,IAAAA,gBAAgB,CAACnF,GAAG,CAACH,OAAO,CAACE,OAAO,CAAC;AACzC,EAAA;AAEA,EAAA,MAAMqF,gBAAgB,GAAG,IAAItK,GAAG,EAAE;AAClC,EAAA,KAAK,MAAM4E,IAAI,IAAIqE,UAAU,EAC7B;IACI,MAAM9D,YAAY,GAAG4E,eAAe,CAAC3E,GAAG,CAACR,IAAI,CAACC,GAAG,CAAC;AAClD,IAAA,MAAM0F,UAAU,GAAG3E,YAAY,CAC3BhB,IAAI,CAAC4B,MAAM,EACX,CAAA,eAAA,EAAkB5B,IAAI,CAACC,GAAG,SAC9B,CAAC;IACD,IAAI,CAACM,YAAY,IACVkF,gBAAgB,CAACzJ,GAAG,CAACgE,IAAI,CAACC,GAAG,CAAC,KAAK,KAAK,IACxC0F,UAAU,CAAC5D,MAAM,KAAK,IAAI3G,GAAG,CAACuK,UAAU,CAAC,CAACxC,IAAI,EACrD;MACI,MAAM,IAAIhH,KAAK,CAAC,CAAA,kBAAA,EAAqB6D,IAAI,CAACC,GAAG,kBAAkB,CAAC;AACpE,IAAA;AACA,IAAA,KAAK,MAAM2F,QAAQ,IAAID,UAAU,EACjC;AACI,MAAA,MAAMhE,KAAK,GAAG2D,QAAQ,CAAC9E,GAAG,CAACoF,QAAQ,CAAC;MACpC,IAAI,CAACjE,KAAK,IAAIA,KAAK,CAACtB,OAAO,KAAKL,IAAI,CAACC,GAAG,EACxC;QACI,MAAM,IAAI9D,KAAK,CACX,CAAA,kBAAA,EAAqB6D,IAAI,CAACC,GAAG,8BACjC,CAAC;AACL,MAAA;AACAyF,MAAAA,gBAAgB,CAACpF,GAAG,CAACsF,QAAQ,CAAC;AAClC,IAAA;AACJ,EAAA;AAEA,EAAA,MAAMC,iBAAiB,GAAG,IAAIzK,GAAG,EAAE;AACnC,EAAA,KAAK,MAAMuG,KAAK,IAAIC,MAAM,EAC1B;AACI,IAAA,IAAI,CAAC8D,gBAAgB,CAAC1J,GAAG,CAAC2F,KAAK,CAAC1B,GAAG,CAAC,IAC7B,CAACoF,WAAW,CAACrJ,GAAG,CAAC2F,KAAK,CAACtB,OAAO,CAAC,IAC/B,CAACkF,SAAS,CAACvJ,GAAG,CAAC2F,KAAK,CAACmE,SAAS,CAAC,EACtC;MACI,MAAM,IAAI3J,KAAK,CAAC,CAAA,mBAAA,EAAsBwF,KAAK,CAAC1B,GAAG,kBAAkB,CAAC;AACtE,IAAA;AACA4F,IAAAA,iBAAiB,CAACvF,GAAG,CAACqB,KAAK,CAACmE,SAAS,CAAC;AAC1C,EAAA;AACA,EAAA,IAAIJ,gBAAgB,CAACvC,IAAI,KAAKmC,QAAQ,CAACnC,IAAI,IACpC0C,iBAAiB,CAAC1C,IAAI,KAAKoC,SAAS,CAACpC,IAAI,EAChD;AACI,IAAA,MAAM,IAAIhH,KAAK,CAAC,sDAAsD,CAAC;AAC3E,EAAA;AAEA,EAAA,MAAM4J,mBAAmB,GAAGzB,OAAO,CAAC0B,MAAM,CAAEC,MAAM,IAC9CA,MAAM,CAACC,QAAQ,CAAC,CAACnE,MAAM;EAC3B,MAAMoE,iBAAiB,GAAG7B,OAAO,CAAC0B,MAAM,CAAEC,MAAM,IAC5C,CAACA,MAAM,CAACG,UAAU,EAAEC,EAAE,IAAI,CAACJ,MAAM,CAACC,QAAQ,CAAC,CAACnE,MAAM;AACtD,EAAA,MAAMuE,eAAe,GAAGjC,UAAU,CAAC2B,MAAM,CAAEhG,IAAI,IAAKA,IAAI,CAACuG,KAAK,CAAC,CAACxE,MAAM;AACtE,EAAA,MAAMyE,oBAAoB,GAAGlC,OAAO,CAAC0B,MAAM,CAAEC,MAAM,IAC/CA,MAAM,CAACG,UAAU,EAAEC,EAAE,IAAIJ,MAAM,CAAC5G,MAAM,CAAC,CAAC0C,MAAM;AAClD,EAAA,MAAM0E,MAAM,GAAGC,6BAA6B,CAAC9E,MAAM,EAAE0C,OAAO,CAAC;AAC7D,EAAA,MAAMqC,MAAM,GAAG;AACXC,IAAAA,qBAAqB,EACjBtC,OAAO,CAACvC,MAAM,GAAGoE,iBAAiB,GAAGJ,mBAAmB;IAC5DA,mBAAmB;IACnBI,iBAAiB;IACjBG,eAAe;IACfE,oBAAoB;IACpBK,uBAAuB,EAAEJ,MAAM,CAACK,iBAAiB;IACjDC,uBAAuB,EAAEN,MAAM,CAACO,iBAAiB;AACjDC,IAAAA,yBAAyB,EAAER,MAAM,CAACS,gBAAgB,CAACnF;GACtD;AACD,EAAA,KAAK,MAAM,CAAEoF,KAAK,EAAEC,MAAM,CAAE,IAAI9L,MAAM,CAACgG,OAAO,CAACqF,MAAM,CAAC,EACtD;AACI,IAAA,IAAI9K,IAAI,CAACsL,KAAK,CAAC,KAAKC,MAAM,EAC1B;AACI,MAAA,MAAM,IAAIjL,KAAK,CAAC,CAAA,UAAA,EAAagL,KAAK,mCAAmC,CAAC;AAC1E,IAAA;AACJ,EAAA;AACJ;AAEA,SAAS/B,cAAcA,CAACiC,OAAO,EAAEC,OAAO,EACxC;AACI,EAAA,MAAMvH,GAAG,GAAG,IAAIF,GAAG,EAAE;AACrB,EAAA,KAAK,MAAM,CAAE2E,KAAK,EAAEnB,KAAK,CAAE,IAAIgE,OAAO,CAAC/F,OAAO,EAAE,EAChD;IACI,MAAMiG,MAAM,GAAGzL,aAAa,CAACuH,KAAK,EAAE,CAAA,EAAGiE,OAAO,CAAA,CAAA,EAAI9C,KAAK,CAAA,CAAE,CAAC;IAC1D,IAAI,OAAO+C,MAAM,CAACtH,GAAG,KAAK,QAAQ,IAAI,CAACsH,MAAM,CAACtH,GAAG,IAC1CF,GAAG,CAAC/D,GAAG,CAACuL,MAAM,CAACtH,GAAG,CAAC,EAC1B;MACI,MAAM,IAAI9D,KAAK,CAAC,CAAA,EAAGmL,OAAO,CAAA,CAAA,EAAI9C,KAAK,iCAAiC,CAAC;AACzE,IAAA;IACAzE,GAAG,CAACyH,GAAG,CAACD,MAAM,CAACtH,GAAG,EAAEsH,MAAM,CAAC;AAC/B,EAAA;AACA,EAAA,OAAOxH,GAAG;AACd;AAEA,SAASiD,kBAAkBA,CAACvC,SAAS,EAAEG,QAAQ,EAC/C;AACI,EAAA,MAAM6G,MAAM,GAAG,CACX,OAAO,EACP,eAAe,EACf,YAAY,EACZ,UAAU,EACV,MAAM,EACN,WAAW,CACd;EACD,OAAOC,KAAK,CAACC,OAAO,CAAClH,SAAS,CAAC,IACxBiH,KAAK,CAACC,OAAO,CAAC/G,QAAQ,CAAC,IACvBH,SAAS,CAACsB,MAAM,KAAKnB,QAAQ,CAACmB,MAAM,IACpCtB,SAAS,CAACmH,KAAK,CAAC,CAACzF,KAAK,EAAEqC,KAAK,KAC5BiD,MAAM,CAACG,KAAK,CAAET,KAAK,IAAKhF,KAAK,CAACgF,KAAK,CAAC,KAAKvG,QAAQ,CAAC4D,KAAK,CAAC,GAAG2C,KAAK,CAAC,CAAC,CAAC;AAC/E;AAEA,SAASrL,aAAaA,CAACuH,KAAK,EAAEiE,OAAO,EACrC;AACI,EAAA,IAAI,CAACjE,KAAK,IAAI,OAAOA,KAAK,KAAK,QAAQ,IAAIqE,KAAK,CAACC,OAAO,CAACtE,KAAK,CAAC,EAC/D;AACI,IAAA,MAAM,IAAIlH,KAAK,CAAC,CAAA,EAAGmL,OAAO,oBAAoB,CAAC;AACnD,EAAA;AACA,EAAA,OAAOjE,KAAK;AAChB;AAEA,SAASrC,YAAYA,CAACqC,KAAK,EAAEiE,OAAO,EACpC;AACI,EAAA,IAAI,CAACI,KAAK,CAACC,OAAO,CAACtE,KAAK,CAAC,EACzB;AACI,IAAA,MAAM,IAAIlH,KAAK,CAAC,CAAA,EAAGmL,OAAO,mBAAmB,CAAC;AAClD,EAAA;AACA,EAAA,OAAOjE,KAAK;AAChB;AAEA,SAASnG,aAAaA,CAACmG,KAAK,EAAEiE,OAAO,EACrC;AACI,EAAA,IAAI,OAAOjE,KAAK,KAAK,QAAQ,IAAI,CAACA,KAAK,EACvC;AACI,IAAA,MAAM,IAAIlH,KAAK,CAAC,CAAA,EAAGmL,OAAO,6BAA6B,CAAC;AAC5D,EAAA;AACA,EAAA,OAAOjE,KAAK;AAChB;AAEA,SAASjG,WAAWA,CAACiG,KAAK,EAAEiE,OAAO,EACnC;EACI,IAAI,CAACO,MAAM,CAACC,aAAa,CAACzE,KAAK,CAAC,IAAIA,KAAK,GAAG,CAAC,EAC7C;AACI,IAAA,MAAM,IAAIlH,KAAK,CAAC,CAAA,EAAGmL,OAAO,sCAAsC,CAAC;AACrE,EAAA;AACA,EAAA,OAAOjE,KAAK;AAChB;AAEA,SAASjB,SAASA,CAAC2F,IAAI,EAAEC,KAAK,EAC9B;AACI,EAAA,OAAOC,IAAI,CAACC,SAAS,CAACH,IAAI,CAAC,KAAKE,IAAI,CAACC,SAAS,CAACF,KAAK,CAAC;AACzD;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"CewgpuContainer.js","sources":["../../../../../../src/formats/webgpu/core/cewgpu/CewgpuContainer.js"],"sourcesContent":["import {\n CjsCarbonEffectReader,\n readBackendBlock\n} from \"../../../../format/carbonEffect/index.js\";\nimport { WGSL_ENTRY_POINT } from \"../buildCarbonEffectContainer.js\";\nimport { sha256Bytes } from \"../../../../format/effect/sha256.js\";\nimport { deriveBackendBodySet } from \"./containerViews.js\";\n\n/**\n * Reader for the WebGPU effect container.\n *\n * The chunk package stored the permutation graph, the source reflection, the\n * translated body set and the emitted WGSL as four documents that had to be kept\n * consistent with each other, and carried digests to detect when they were not.\n * Under the record layout there is one document. The permutation graph is the\n * header's own permutation records and offset table, the reflection is the\n * description tree, and a translated pass is that tree's `shaderData` plus its\n * trailing block. So the accessors below are **views**, not stored copies, and\n * the class of bug the digests guarded against cannot occur: there is nothing\n * left to disagree.\n *\n * Keys the chunk format stored explicitly are derived here instead:\n *\n * - a body key is its position among distinct offset-table entries, which is\n * exactly what Carbon's alias dedupe produces;\n * - a pass's technique name, pass index and stage name come from its position in\n * the record tree, which is why cross-technique passes share on the wire;\n * - the WGSL entry point is a constant of the emitter, asserted on write.\n */\n\nconst textDecoder = new TextDecoder(\"utf-8\", { fatal: false });\n\n/** WGSL stage names by Carbon stage type, for the stage types WebGPU supports. */\nconst WEBGPU_STAGE_NAME = Object.freeze({ 0: \"vertex\", 1: \"pixel\", 2: \"compute\" });\n\n/** WebGPU pipeline stage for a WGSL stage name. */\nconst WEBGPU_STAGE = Object.freeze({ vertex: \"vertex\", pixel: \"fragment\", compute: \"compute\" });\n\n/**\n * Reports whether bytes look like a Carbon v15 effect container.\n *\n * This is a **shape** check, not an identity check, and the distinction is the\n * point: our containers are stock Carbon v15 files, so nothing in the bytes\n * separates ours from a shipped `effect.dx11` file. Identity comes from where\n * the file was resolved — `effect.webgpu/` versus `effect.dx11/` — exactly as it\n * does for Carbon, whose three backend trees are also byte-format-identical.\n *\n * Use this to reject something that is not a v15 container at all. Do not use it\n * to decide what a payload is.\n *\n * @param {Uint8Array} bytes Candidate bytes.\n * @returns {boolean} True when the first dword is Carbon's v15 version.\n */\nexport function looksLikeCewgpuContainer(bytes)\n{\n if (!bytes || bytes.length < 4) return false;\n return bytes[0] === 15 && bytes[1] === 0 && bytes[2] === 0 && bytes[3] === 0;\n}\n\n/**\n * Decomposes a permutation index into per-axis option indices.\n *\n * The inverse of Carbon's own selection arithmetic: it accumulates\n * `value * multiplier` over the axes in declaration order, multiplying the\n * running radix by each axis's option count.\n *\n * @param {object[]} axes Permutation axis records.\n * @param {number} permutationIndex Permutation index.\n * @returns {number[]} Option index per axis.\n */\nfunction optionIndicesFor(axes, permutationIndex)\n{\n let remaining = permutationIndex;\n return axes.map((axis) =>\n {\n const radix = axis.options.length || 1;\n const value = remaining % radix;\n remaining = Math.floor(remaining / radix);\n return value;\n });\n}\n\n/**\n * Reader over one WebGPU effect container.\n */\nexport class CewgpuContainer\n{\n /**\n * Creates an empty container reader.\n */\n constructor()\n {\n this.readError = null;\n this.sourcePath = \"\";\n this.containerVersion = 0;\n this.bytes = null;\n this.carbon = null;\n this._descriptions = new Map();\n this._bodyKeyByOffset = null;\n }\n\n /**\n * Reads a container from bytes.\n *\n * @param {ArrayBuffer|ArrayBufferView|Uint8Array} source Container bytes.\n * @param {object} [options] Read options.\n * @param {string} [options.sourcePath] Source path for diagnostics.\n * @returns {boolean} True when the container was decoded.\n */\n Read(source, options = {})\n {\n this.readError = null;\n this.sourcePath = options.sourcePath || \"\";\n this._descriptions = new Map();\n this._bodyKeyByOffset = null;\n\n try\n {\n const bytes = source instanceof Uint8Array\n ? source\n : (source instanceof ArrayBuffer\n ? new Uint8Array(source)\n : new Uint8Array(source.buffer, source.byteOffset, source.byteLength));\n\n this.bytes = bytes;\n this.carbon = new CjsCarbonEffectReader(bytes, {\n source: this.sourcePath || \"CEWGPU\"\n });\n this.containerVersion = this.carbon.version;\n return true;\n }\n catch (error)\n {\n this.readError = error;\n this.carbon = null;\n return false;\n }\n }\n\n /**\n * Reports whether the container decoded.\n *\n * @returns {boolean} True when readable.\n */\n IsGood()\n {\n return this.carbon !== null;\n }\n\n /**\n * Reads one permutation's description, memoised by stored body.\n *\n * Aliased permutations share one stored blob, so they share one parse.\n *\n * @param {number} permutationIndex Permutation index.\n * @returns {object} Description record tree.\n */\n GetDescription(permutationIndex)\n {\n const record = this.carbon.records[permutationIndex];\n if (!record)\n {\n throw new Error(`CEWGPU container has no body at permutation ${permutationIndex}`);\n }\n if (!this._descriptions.has(record.offset))\n {\n this._descriptions.set(\n record.offset,\n this.carbon.readDescription(permutationIndex, { backend: true })\n );\n }\n return this._descriptions.get(record.offset);\n }\n\n /**\n * Maps each distinct stored body to a stable key, in offset-table order.\n *\n * @returns {Map<number, string>} Body key by stored offset.\n */\n get bodyKeyByOffset()\n {\n if (!this._bodyKeyByOffset)\n {\n const keys = new Map();\n for (const record of this.carbon.records)\n {\n if (!keys.has(record.offset)) keys.set(record.offset, `body${keys.size}`);\n }\n this._bodyKeyByOffset = keys;\n }\n return this._bodyKeyByOffset;\n }\n\n /**\n * Derives the permutation graph the chunk package used to store.\n *\n * @returns {object} Permutation graph view.\n */\n get permutationGraph()\n {\n const bodyKeys = this.bodyKeyByOffset;\n const bodies = [];\n\n for (const [ offset, key ] of bodyKeys)\n {\n const record = this.carbon.records.find((entry) => entry.offset === offset);\n bodies.push(Object.freeze({\n key,\n offset,\n byteLength: record.size,\n // Hashed from the stored description blob. The chunk graph\n // carried a digest per body; here it is a function of the bytes\n // it identifies, so it cannot disagree with them. It is also what\n // Tr2EffectRes uses to prove bodies are distinct -- aliased rows\n // share one blob and therefore one digest, which is exactly the\n // identity the offset table already expresses.\n sha256: sha256Bytes(this.bytes.subarray(offset, offset + record.size)),\n permutationCount: this.carbon.records\n .filter((entry) => entry.offset === offset).length\n }));\n }\n\n return Object.freeze({\n // The envelope the chunk `PGRF` document carried. Not provenance:\n // `Tr2EffectRes.SetPayload` validates it before accepting a payload\n // at all, so a graph without it is refused outright.\n format: \"CJS_EFFECT_PERMUTATION_GRAPH\",\n formatVersion: 1,\n // Fixed by construction rather than recorded. A container always\n // carries every permutation, the offset table gives body identity\n // only, and source reflection is not a separate document.\n coverage: Object.freeze({\n permutations: \"complete\",\n bodies: \"identity-only\",\n reflection: \"absent\"\n }),\n axes: Object.freeze(this.carbon.permutations.map((axis, index) => Object.freeze({\n index,\n name: axis.name.value,\n defaultOption: axis.defaultOption,\n description: axis.description.value,\n type: axis.type,\n options: Object.freeze(axis.options.map((option) => option.value))\n }))),\n variants: Object.freeze(this.carbon.records.map((record, permutationIndex) =>\n Object.freeze({\n permutationIndex,\n bodyKey: bodyKeys.get(record.offset),\n // Mixed-radix decomposition of the index over the axes, which\n // is the inverse of the sum Carbon's GetShader() builds when\n // it walks options in declaration order.\n optionIndices: Object.freeze(\n optionIndicesFor(this.carbon.permutations, permutationIndex)\n ),\n // The offset-table row itself. Aliased permutations share a\n // stored record, so the consumer can prove that two\n // permutations resolve to the same emitted bytes.\n sourceRecord: Object.freeze({\n offset: record.offset,\n byteLength: record.size\n })\n }))),\n bodies: Object.freeze(bodies)\n });\n }\n\n /**\n * Resolves the translated backend passes for one permutation.\n *\n * A body whose stages carry no program is reported unsupported, which is\n * what a zero-length `shaderData` means: the reflection is known, the\n * program is not.\n *\n * @param {number} [permutationIndex] Permutation index.\n * @returns {object|null} Resolved backend body.\n */\n GetBackendBodyPrograms(permutationIndex = 0)\n {\n if (!this.IsGood()) return null;\n\n const record = this.carbon.records[permutationIndex];\n if (!record) return null;\n\n const description = this.GetDescription(permutationIndex);\n const bodyKey = this.bodyKeyByOffset.get(record.offset);\n const passes = [];\n let translated = false;\n\n for (const technique of description.techniques)\n {\n for (const [ passIndex, pass ] of technique.passes.entries())\n {\n const passKey = `${technique.name.value}.pass${passIndex}`;\n const shaders = [];\n\n for (const stage of pass.stages)\n {\n const stageName = WEBGPU_STAGE_NAME[stage.type];\n if (!stageName || stage.shaderData.size === 0) continue;\n translated = true;\n shaders.push(Object.freeze({\n key: `${passKey}.${stageName}`,\n techniqueName: technique.name.value,\n passIndex,\n stageName,\n stage: WEBGPU_STAGE[stageName],\n stageType: stage.type,\n entryPoint: WGSL_ENTRY_POINT,\n code: textDecoder.decode(stage.shaderData.bytes),\n ...(stageName === \"compute\"\n ? { threadGroupSize: [ ...stage.threadGroupSize ] }\n : {})\n }));\n }\n\n if (!shaders.length) continue;\n\n const block = pass.backendBlock && pass.backendBlock.size !== 0\n ? readBackendBlock(pass.backendBlock.bytes, {\n layoutKey: passKey,\n source: this.sourcePath || \"CEWGPU\"\n })\n : null;\n\n passes.push(Object.freeze({\n passKey,\n shaders: Object.freeze(shaders),\n layouts: Object.freeze(block\n ? [ Object.freeze({\n key: passKey,\n techniqueName: technique.name.value,\n passIndex,\n bindGroups: block.bindGroups\n }) ]\n : []),\n ...(block?.transforms?.length\n ? { resourceTransforms: Object.freeze(block.transforms) }\n : {})\n }));\n }\n }\n\n return Object.freeze({\n permutationIndex,\n bodyKey,\n status: translated ? \"translated\" : \"unsupported\",\n error: translated ? null : \"body carries no translated programs\",\n passes: Object.freeze(passes)\n });\n }\n\n /**\n * Derives the body-set view, for consumers holding the raw container.\n *\n * `packageToJson` exposes the same document. A consumer taking the raw emit\n * reads it here instead, which is why this is a getter on the container\n * rather than only a field in the JSON projection.\n *\n * @returns {object} Body-set document.\n */\n get backendBodySet()\n {\n return deriveBackendBodySet(this);\n }\n\n /**\n * Returns the Carbon description currently exposed through the legacy\n * portable-reflection accessor.\n *\n * This is not a `CJS_EFFECT_BODY_REFLECTION` envelope. Direct\n * `Tr2EffectRes` hydration requires an adapter and remains an open\n * integration boundary.\n *\n * @param {number} [permutationIndex] Permutation index.\n * @returns {object|null} Raw Carbon description record tree.\n */\n GetPortableEffectReflection(permutationIndex = 0)\n {\n if (!this.IsGood()) return null;\n return this.GetDescription(permutationIndex);\n }\n\n /**\n * Summarises the container without materialising every body.\n *\n * @returns {object} Container summary.\n */\n get info()\n {\n const bodyKeys = this.bodyKeyByOffset;\n return Object.freeze({\n format: \"CEWGPU\",\n // Carbon's own version dword, always 15. There is no container\n // version of ours: see buildCarbonEffectContainer for why nothing\n // announces the payload, and why identity comes from the path.\n containerVersion: this.containerVersion,\n sourcePath: this.sourcePath,\n compilerVersion: Object.freeze([ ...this.carbon.compilerVersion ]),\n sourceHash: textDecoder.decode(this.carbon.sourceHash),\n permutationCount: this.carbon.records.length,\n uniqueBodyCount: bodyKeys.size,\n axisCount: this.carbon.permutations.length\n });\n }\n}\n\nexport default CewgpuContainer;\n"],"names":["textDecoder","TextDecoder","fatal","WEBGPU_STAGE_NAME","Object","freeze","WEBGPU_STAGE","vertex","pixel","compute","looksLikeCewgpuContainer","bytes","length","optionIndicesFor","axes","permutationIndex","remaining","map","axis","radix","options","value","Math","floor","CewgpuContainer","constructor","readError","sourcePath","containerVersion","carbon","_descriptions","Map","_bodyKeyByOffset","Read","source","Uint8Array","ArrayBuffer","buffer","byteOffset","byteLength","CjsCarbonEffectReader","version","error","IsGood","GetDescription","record","records","Error","has","offset","set","readDescription","backend","get","bodyKeyByOffset","keys","size","permutationGraph","bodyKeys","bodies","key","find","entry","push","sha256","sha256Bytes","subarray","permutationCount","filter","format","formatVersion","coverage","permutations","reflection","index","name","defaultOption","description","type","option","variants","bodyKey","optionIndices","sourceRecord","GetBackendBodyPrograms","passes","translated","technique","techniques","passIndex","pass","entries","passKey","shaders","stage","stages","stageName","shaderData","techniqueName","stageType","entryPoint","WGSL_ENTRY_POINT","code","decode","threadGroupSize","block","backendBlock","readBackendBlock","layoutKey","layouts","bindGroups","transforms","resourceTransforms","status","backendBodySet","deriveBackendBodySet","GetPortableEffectReflection","info","compilerVersion","sourceHash","uniqueBodyCount","axisCount"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"containerViews.js","sources":["../../../../../../src/formats/webgpu/core/cewgpu/containerViews.js"],"sourcesContent":["import { HlslEffectBindingManifest } from \"../../../hlsl/core/tr2/shader/HlslEffectBindingManifest.js\";\nimport { HlslShaderBytecode } from \"../../../hlsl/core/HlslShaderBytecode.js\";\nimport { hlslShaderStageName } from \"../../../hlsl/core/tr2/HlslRenderContextEnum.js\";\nimport { runtimeDescriptionFromCarbon } from \"../../../hlsl/core/carbonDescriptionToRuntime.js\";\nimport { buildEffectAnalysis } from \"../helpers.js\";\nimport { WGSL_SET_VERSION } from \"../wgsl/buildWgslSet.js\";\nimport { sha256Utf8 } from \"../../../../format/effect/sha256.js\";\n\n/**\n * Derived compatibility views over a container.\n *\n * The chunk package stored `ANLS` and `WGSL` as documents beside the reflection\n * they were computed from, and carried digests to detect the two disagreeing.\n * The container stores one document, so these are **views**: functions of the\n * records, computed on read. The class of bug the digests guarded cannot occur,\n * because there is no second copy to drift.\n *\n * The analysis view is deliberately not a reimplementation. It runs\n * `buildEffectAnalysis` — the same function the packager runs on source — over a\n * description rebuilt by `runtimeDescriptionFromCarbon`. That is what keeps the\n * view honest: if it were rewritten to emit the fields consumers read today, it\n * would be free to drift from the real analysis, and nothing would notice.\n * `carbon-analysis-adapter-corpus.test.mjs` diffs the two over every shipped\n * permutation and finds zero differences.\n *\n * These views exist for `engine-webgpu`, which reads format-package JSON for\n * Carbon reflection instead of reading `Tr2Shader`. That is a recorded layering\n * defect and is not this port's to fix; the views keep it working unchanged\n * while the wire format moves underneath it. They go away with that cleanup.\n */\n\n/**\n * Resolves the permutation Carbon's own `GetShader()` would select with no\n * option overrides.\n *\n * Carbon multiplies each axis's default option by the running product of the\n * preceding axes' option counts. The chunk package stored a single selected\n * body and its index; the container carries every permutation, so the view has\n * to name a default rather than inherit one, and Carbon's own default is the\n * only defensible choice.\n *\n * @param {object} container Loaded container.\n * @returns {number} Permutation index.\n */\nexport function defaultPermutationIndex(container)\n{\n let multiplier = 1;\n let index = 0;\n for (const axis of container.carbon.permutations)\n {\n index += axis.defaultOption * multiplier;\n multiplier *= axis.options.length || 1;\n }\n return index < container.carbon.records.length ? index : 0;\n}\n\n/**\n * Rebuilds the runtime effect description for one permutation.\n *\n * @param {object} container Loaded container.\n * @param {number} permutationIndex Permutation index.\n * @param {string} source Source label.\n * @returns {object} Runtime-shaped effect description.\n */\nfunction describeRuntime(container, permutationIndex, source)\n{\n return runtimeDescriptionFromCarbon(container.GetDescription(permutationIndex), {\n effectName: source,\n version: container.carbon.version,\n bytecodeFor: (stage, stageType) => new HlslShaderBytecode({\n stageType,\n // Carbon's six stage names, not WebGPU's three. A three-entry table\n // reports a geometry stage as null, which the corpus caught.\n stageName: hlslShaderStageName(stageType),\n bytes: stage.shaderData.bytes,\n shaderSize: stage.shaderData.size,\n stringTableOffset: stage.shaderData.offset,\n effectName: source\n })\n });\n}\n\n/**\n * Derives the analysis document for one permutation.\n *\n * One field is honestly different from the stored `ANLS` it replaces:\n * `stages[].shaderBytecode` describes the **WGSL** program the container\n * carries, where the stored document described the source DXBC. The container\n * does not carry DXBC, so reproducing the old numbers would mean inventing\n * them. Nothing in the engine's read surface uses this field; it is a\n * diagnostic.\n *\n * @param {object} container Loaded container.\n * @param {object} [options] View options.\n * @param {string} [options.source] Source label.\n * @param {number} [options.permutationIndex] Permutation to describe.\n * @returns {object} Analysis document.\n */\nexport function deriveAnalysis(container, options = {})\n{\n const source = options.source || container.sourcePath || \"memory\";\n const permutationIndex = options.permutationIndex ?? defaultPermutationIndex(container);\n const effectDescription = describeRuntime(container, permutationIndex, source);\n\n return buildEffectAnalysis({\n effectDescription,\n bindingManifest: HlslEffectBindingManifest.fromEffectDescription(effectDescription, {\n effectName: source\n }),\n effectRes: {\n sourcePath: source,\n m_compilerVersion: null\n },\n selection: {\n bodyIndex: permutationIndex,\n selectedOptions: container.carbon.permutations.map((axis) => ({\n name: axis.name.value,\n value: axis.options[axis.defaultOption]?.value ?? null\n }))\n }\n }, { source, decodeBytecode: false, decodeInstructions: false });\n}\n\n/**\n * Derives the WGSL set document for one permutation.\n *\n * `sourceMap` is absent rather than empty, and that is not an oversight: its\n * offsets index DXBC bytes the container does not carry, so it is a translator\n * diagnostic and was dropped on write. It was separately measured to suppress\n * no sharing, so keeping it would have bought nothing either.\n *\n * @param {object} container Loaded container.\n * @param {object} [options] View options.\n * @param {number} [options.permutationIndex] Permutation to describe.\n * @returns {object} WGSL set document.\n */\nexport function deriveWgsl(container, options = {})\n{\n const permutationIndex = options.permutationIndex ?? defaultPermutationIndex(container);\n const body = container.GetBackendBodyPrograms(permutationIndex);\n const shaders = [];\n const layouts = [];\n const resourceTransforms = [];\n\n for (const pass of body?.passes ?? [])\n {\n for (const shader of pass.shaders)\n {\n shaders.push({\n key: shader.key,\n techniqueName: shader.techniqueName,\n passIndex: shader.passIndex,\n stageName: shader.stageName,\n stage: shader.stage,\n stageType: shader.stageType,\n entryPoint: shader.entryPoint,\n code: shader.code,\n ...(shader.threadGroupSize ? { threadGroupSize: [ ...shader.threadGroupSize ] } : {})\n });\n }\n for (const layout of pass.layouts) layouts.push(layout);\n for (const transform of pass.resourceTransforms ?? []) resourceTransforms.push(transform);\n }\n\n return {\n format: \"CJS_WGSL_SET\",\n formatVersion: WGSL_SET_VERSION,\n shaders,\n layouts,\n ...(resourceTransforms.length ? { resourceTransforms } : {})\n };\n}\n\n/**\n * Derives the `WGSB` body-set view the chunk package used to store.\n *\n * `engine-webgpu` resolves a permutation's translated programs through this,\n * which is part of the recorded layering defect -- it should read the shader,\n * not a package document. The view keeps that path working unchanged while the\n * wire format moves underneath it, and goes away with the cleanup.\n *\n * Nothing here is stored. A body's status is whether its stages carry programs,\n * its passes are the record tree's passes, and a pass unit is that pass's\n * shaders and layouts. Bodies are keyed by distinct stored offset, which is\n * exactly what Carbon's alias dedupe produces.\n *\n * @param {object} container Loaded container.\n * @returns {object} Body-set document.\n */\nexport function deriveBackendBodySet(container)\n{\n const bodyKeys = container.bodyKeyByOffset;\n const passUnits = [];\n const bodies = [];\n const seen = new Set();\n\n for (let index = 0; index < container.carbon.records.length; index += 1)\n {\n const offset = container.carbon.records[index].offset;\n if (seen.has(offset)) continue;\n seen.add(offset);\n\n const bodyKey = bodyKeys.get(offset);\n const body = container.GetBackendBodyPrograms(index);\n\n if (!body || body.status !== \"translated\")\n {\n bodies.push({\n bodyKey,\n representativePermutationIndex: index,\n status: \"unsupported\",\n error: body?.error ?? \"body carries no translated programs\",\n passCount: 0,\n passes: []\n });\n continue;\n }\n\n const passes = [];\n for (const pass of body.passes)\n {\n const unit = {\n key: `unit${passUnits.length}`,\n // Hashed from the unit's own content. The chunk body set stored\n // this digest to detect a unit drifting from what referenced it;\n // derived from the content it identifies, it cannot.\n sha256: sha256Utf8(`${JSON.stringify({\n shaders: pass.shaders,\n layouts: pass.layouts,\n resourceTransforms: pass.resourceTransforms ?? []\n })}\n`),\n wgslSetVersion: WGSL_SET_VERSION,\n shaders: pass.shaders,\n layouts: pass.layouts,\n ...(pass.resourceTransforms?.length\n ? { resourceTransforms: pass.resourceTransforms }\n : {})\n };\n passUnits.push(unit);\n passes.push({ passKey: pass.passKey, unitKey: unit.key });\n }\n\n bodies.push({\n bodyKey,\n representativePermutationIndex: index,\n status: \"translated\",\n error: null,\n passCount: passes.length,\n passes\n });\n }\n\n return {\n format: \"CJS_WGSL_BODY_SET\",\n formatVersion: 1,\n bodyCount: bodies.length,\n translatedBodyCount: bodies.filter((body) => body.status === \"translated\").length,\n passUnitCount: passUnits.length,\n passUnits,\n bodies\n };\n}\n\n/**\n * Finds the permutation a package resolves to.\n *\n * A \"selected\" package is not a different format -- the container always carries\n * every permutation. What makes it selected is that exactly one body was\n * translated, so the resolved permutation is the first one whose body carries\n * programs. When every body is translated, there is nothing to single out and\n * Carbon's own default applies.\n *\n * @param {object} container Loaded container.\n * @returns {number} Permutation index.\n */\nexport function resolvedPermutationIndex(container)\n{\n const translated = [];\n const seen = new Set();\n\n for (let index = 0; index < container.carbon.records.length; index += 1)\n {\n const offset = container.carbon.records[index].offset;\n if (seen.has(offset)) continue;\n seen.add(offset);\n\n const body = container.GetBackendBodyPrograms(index);\n if (body?.status === \"translated\") translated.push(index);\n if (translated.length > 1) return defaultPermutationIndex(container);\n }\n\n return translated.length === 1 ? translated[0] : defaultPermutationIndex(container);\n}\n\n/**\n * Derives the `META`-shaped view the chunk package used to store.\n *\n * Every field here is recovered from the records rather than carried:\n * `selectedOptions` from the resolved permutation's option indices, and\n * `wgslSelection` from which passes and stages actually hold programs. Build-time\n * *policy* -- `bodyMode`, `sourceIdentity`, `completeness` -- is deliberately not\n * here: it describes how the artifact was produced, not what it is, and Carbon\n * stores none of it.\n *\n * @param {object} container Loaded container.\n * @param {object} [options] View options.\n * @param {string} [options.source] Source label.\n * @param {number} [options.permutationIndex] Permutation to describe.\n * @returns {object} Metadata document.\n */\nexport function deriveMetadata(container, options = {})\n{\n const source = options.source || container.sourcePath || \"memory\";\n const permutationIndex = options.permutationIndex ?? resolvedPermutationIndex(container);\n const variant = container.permutationGraph.variants[permutationIndex];\n const axes = container.carbon.permutations;\n\n const selectedOptions = axes.map((axis, axisIndex) => ({\n name: axis.name.value,\n value: axis.options[variant?.optionIndices?.[axisIndex] ?? axis.defaultOption]?.value ?? null\n }));\n\n const body = container.GetBackendBodyPrograms(permutationIndex);\n const selectedStageKeys = (body?.passes ?? [])\n .flatMap((pass) => pass.shaders.map((shader) => shader.key));\n const passKeys = (body?.passes ?? []).map((pass) => pass.passKey);\n\n return {\n effectName: source,\n sourcePath: source,\n bodyIndex: permutationIndex,\n selectedOptions,\n ...(passKeys.length === 1\n ? {\n wgslSelection: {\n mode: \"explicit\",\n completePasses: true,\n techniqueName: passKeys[0].slice(0, passKeys[0].lastIndexOf(\".pass\")),\n passIndex: Number(/\\.pass([0-9]+)$/u.exec(passKeys[0])?.[1] ?? 0),\n requestedStageNames: Array.from(new Set(\n (body?.passes ?? []).flatMap((pass) => pass.shaders.map((shader) => shader.stageName))\n )),\n selectedStageKeys\n }\n }\n : {})\n };\n}\n\n/**\n * Derives the `INFO`-shaped summary the chunk package used to store.\n *\n * Everything here is counted from the records rather than trusted from a stored\n * field, which is why no digest accompanies it: a count derived from the thing\n * it counts cannot disagree with it.\n *\n * @param {object} container Loaded container.\n * @param {object} [options] View options.\n * @param {string} [options.source] Source label.\n * @returns {object} Info document.\n */\nexport function deriveInfo(container, options = {})\n{\n const source = options.source || container.sourcePath || \"memory\";\n const graph = container.permutationGraph;\n return {\n format: \"CEWGPU\",\n packageKind: \"tr2-effect-webgpu\",\n sourcePath: source,\n effectVersion: container.carbon.version,\n compilerVersion: [ ...container.carbon.compilerVersion ],\n permutationCount: graph.variants.length,\n uniqueBodyCount: graph.bodies.length\n };\n}\n\nexport default deriveAnalysis;\n"],"names":["defaultPermutationIndex","container","multiplier","index","axis","carbon","permutations","defaultOption","options","length","records","describeRuntime","permutationIndex","source","runtimeDescriptionFromCarbon","GetDescription","effectName","version","bytecodeFor","stage","stageType","HlslShaderBytecode","stageName","hlslShaderStageName","bytes","shaderData","shaderSize","size","stringTableOffset","offset","deriveAnalysis","sourcePath","effectDescription","buildEffectAnalysis","bindingManifest","HlslEffectBindingManifest","fromEffectDescription","effectRes","m_compilerVersion","selection","bodyIndex","selectedOptions","map","name","value","decodeBytecode","decodeInstructions","deriveWgsl","body","GetBackendBodyPrograms","shaders","layouts","resourceTransforms","pass","passes","shader","push","key","techniqueName","passIndex","entryPoint","code","threadGroupSize","layout","transform","format","formatVersion","WGSL_SET_VERSION","deriveBackendBodySet","bodyKeys","bodyKeyByOffset","passUnits","bodies","seen","Set","has","add","bodyKey","get","status","representativePermutationIndex","error","passCount","unit","sha256","sha256Utf8","JSON","stringify","wgslSetVersion","passKey","unitKey","bodyCount","translatedBodyCount","filter","passUnitCount","resolvedPermutationIndex","translated","deriveMetadata","variant","permutationGraph","variants","axes","axisIndex","optionIndices","selectedStageKeys","flatMap","passKeys","wgslSelection","mode","completePasses","slice","lastIndexOf","Number","exec","requestedStageNames","Array","from","deriveInfo","graph","packageKind","effectVersion","compilerVersion","permutationCount","uniqueBodyCount"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"validateContainer.js","sources":["../../../../../../src/formats/webgpu/core/cewgpu/validateContainer.js"],"sourcesContent":["import { WebgpuReadError } from \"../errors.js\";\n\n/**\n * Structural validation for a loaded WebGPU effect container.\n *\n * This replaces `validateEffectPackageEnvelope`, which was 1762 lines. Most of\n * that is **deleted rather than translated**, and the reason matters: those\n * checks were not format invariants. The chunk container shattered one logical\n * tree into flat string-keyed arrays across `INFO`, `META`, `ANLS`, `WGSL`,\n * `PGRF` and `WGSB`, each holding a projection of the same effect, and roughly\n * 600 lines asserted that the projections still agreed with each other. A record\n * layout makes that question unaskable: containment replaces reference, position\n * replaces key, and the count word before an array replaces `Array.isArray`.\n *\n * What is deliberately **not** re-checked here, because phase 1 already enforces\n * it and checking twice means two places to keep correct:\n *\n * - count caps, arena containment, offset-table density and positional indexing,\n * and the version range — `CjsCarbonEffectReader`;\n * - every sized record parsing to exactly its declared end — Rule 1, in the\n * record codec and the block codec;\n * - duplicate stage type within a pass, and stage-type range — the shape adapter\n * fails closed on both, which is where a runtime description is built.\n *\n * What remains is the one thing that is genuinely this layer's: the container\n * admits all six of Carbon's stage types by design, and WebGPU can express three.\n * That restriction belongs to the backend, not to the container — the Carbon\n * region is backend-invariant, and a container that admitted only three would not\n * be Carbon's container.\n */\n\n/** Stage types WebGPU can express, by Carbon's `InputStageType` numbering. */\nconst WEBGPU_STAGE_TYPES = new Set([ 0, 1, 2 ]);\n\n/**\n * Validates a loaded container for WebGPU consumption.\n *\n * @param {object} container Loaded `CewgpuContainer`.\n * @param {object} [options] Validation options.\n * @param {string} [options.source] Source label for diagnostics.\n * @throws {WebgpuReadError} When the container cannot serve WebGPU.\n */\nexport function validateEffectContainer(container, options = {})\n{\n const source = options.source || container.sourcePath || \"memory\";\n\n if (!container?.IsGood())\n {\n throw new WebgpuReadError(\"CEWGPU container is not readable\", {\n source,\n cause: container?.readError ?? null\n });\n }\n\n if (!container.carbon.records.length)\n {\n throw new WebgpuReadError(\"CEWGPU container declares no permutation bodies\", { source });\n }\n\n // One check per distinct stored body. Aliased rows share a blob, so checking\n // per permutation would re-check identical bytes up to twenty times over on\n // the effects that alias hardest.\n const checked = new Set();\n\n for (let index = 0; index < container.carbon.records.length; index += 1)\n {\n const offset = container.carbon.records[index].offset;\n if (checked.has(offset)) continue;\n checked.add(offset);\n\n const description = container.GetDescription(index);\n\n for (const technique of description.techniques)\n {\n for (const [ passIndex, pass ] of technique.passes.entries())\n {\n for (const stage of pass.stages)\n {\n // A stage carrying no program is reflection-only: the body\n // is known, the translation is not, and the emitter says so\n // with a zero-length payload. Those are legitimate — 107\n // shipped body-passes carry a geometry stage — so the rule\n // is about stages with a program, not about stages.\n if (stage.shaderData.size === 0) continue;\n\n if (!WEBGPU_STAGE_TYPES.has(stage.type))\n {\n throw new WebgpuReadError(\n `CEWGPU container carries a program for stage type ${stage.type}, `\n + \"which WebGPU cannot express\",\n {\n source,\n permutationIndex: index,\n pass: `${technique.name.value}.pass${passIndex}`,\n stageType: stage.type\n }\n );\n }\n }\n }\n }\n }\n}\n\nexport default validateEffectContainer;\n"],"names":["WEBGPU_STAGE_TYPES","Set","validateEffectContainer","container","options","source","sourcePath","IsGood","WebgpuReadError","cause","readError","carbon","records","length","checked","index","offset","has","add","description","GetDescription","technique","techniques","passIndex","pass","passes","entries","stage","stages","shaderData","size","type","permutationIndex","name","value","stageType"],"mappings":";;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAMA,kBAAkB,GAAG,IAAIC,GAAG,CAAC,CAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAE,CAAC;;AAE/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,uBAAuBA,CAACC,SAAS,EAAEC,OAAO,GAAG,EAAE,EAC/D;EACI,MAAMC,MAAM,GAAGD,OAAO,CAACC,MAAM,IAAIF,SAAS,CAACG,UAAU,IAAI,QAAQ;AAEjE,EAAA,IAAI,CAACH,SAAS,EAAEI,MAAM,EAAE,EACxB;AACI,IAAA,MAAM,IAAIC,eAAe,CAAC,kCAAkC,EAAE;MAC1DH,MAAM;AACNI,MAAAA,KAAK,EAAEN,SAAS,EAAEO,SAAS,IAAI;AACnC,KAAC,CAAC;AACN,EAAA;EAEA,IAAI,CAACP,SAAS,CAACQ,MAAM,CAACC,OAAO,CAACC,MAAM,EACpC;AACI,IAAA,MAAM,IAAIL,eAAe,CAAC,iDAAiD,EAAE;AAAEH,MAAAA;AAAO,KAAC,CAAC;AAC5F,EAAA;;AAEA;AACA;AACA;AACA,EAAA,MAAMS,OAAO,GAAG,IAAIb,GAAG,EAAE;AAEzB,EAAA,KAAK,IAAIc,KAAK,GAAG,CAAC,EAAEA,KAAK,GAAGZ,SAAS,CAACQ,MAAM,CAACC,OAAO,CAACC,MAAM,EAAEE,KAAK,IAAI,CAAC,EACvE;IACI,MAAMC,MAAM,GAAGb,SAAS,CAACQ,MAAM,CAACC,OAAO,CAACG,KAAK,CAAC,CAACC,MAAM;AACrD,IAAA,IAAIF,OAAO,CAACG,GAAG,CAACD,MAAM,CAAC,EAAE;AACzBF,IAAAA,OAAO,CAACI,GAAG,CAACF,MAAM,CAAC;AAEnB,IAAA,MAAMG,WAAW,GAAGhB,SAAS,CAACiB,cAAc,CAACL,KAAK,CAAC;AAEnD,IAAA,KAAK,MAAMM,SAAS,IAAIF,WAAW,CAACG,UAAU,EAC9C;AACI,MAAA,KAAK,MAAM,CAAEC,SAAS,EAAEC,IAAI,CAAE,IAAIH,SAAS,CAACI,MAAM,CAACC,OAAO,EAAE,EAC5D;AACI,QAAA,KAAK,MAAMC,KAAK,IAAIH,IAAI,CAACI,MAAM,EAC/B;AACI;AACA;AACA;AACA;AACA;AACA,UAAA,IAAID,KAAK,CAACE,UAAU,CAACC,IAAI,KAAK,CAAC,EAAE;UAEjC,IAAI,CAAC9B,kBAAkB,CAACiB,GAAG,CAACU,KAAK,CAACI,IAAI,CAAC,EACvC;YACI,MAAM,IAAIvB,eAAe,CACrB,CAAA,kDAAA,EAAqDmB,KAAK,CAACI,IAAI,CAAA,EAAA,CAAI,GACjE,6BAA6B,EAC/B;cACI1B,MAAM;AACN2B,cAAAA,gBAAgB,EAAEjB,KAAK;cACvBS,IAAI,EAAE,GAAGH,SAAS,CAACY,IAAI,CAACC,KAAK,CAAA,KAAA,EAAQX,SAAS,CAAA,CAAE;cAChDY,SAAS,EAAER,KAAK,CAACI;AACrB,aACJ,CAAC;AACL,UAAA;AACJ,QAAA;AACJ,MAAA;AACJ,IAAA;AACJ,EAAA;AACJ;;;;"}
@@ -1,33 +0,0 @@
1
- import { copyBytes } from '@carbonenginejs/runtime-utils/bytes';
2
- import { isUint32, isPlainObject } from '@carbonenginejs/runtime-utils/is';
3
- import { cloneCarbonValue } from '@carbonenginejs/runtime-utils/types';
4
-
5
- /** Require one of Carbon's six authored shader-stage indices. */
6
- function requirePortableStageType(value) {
7
- if (!isUint32(value)) {
8
- throw new RangeError("Portable shader stage type must fit uint32");
9
- }
10
- if (value >= 6) {
11
- throw new RangeError("Portable shader stage type must be in [0, 5]");
12
- }
13
- return value;
14
- }
15
-
16
- /** Clone and validate one owned source-program payload. */
17
- function clonePortableSourceProgram(value, expectedKind) {
18
- if (!isPlainObject(value)) {
19
- throw new TypeError(`Portable ${expectedKind} source program must be an object`);
20
- }
21
- if (value.kind !== expectedKind) {
22
- throw new Error(`Portable source program kind "${value.kind}" is not "${expectedKind}"`);
23
- }
24
- if (!(value.bytes instanceof Uint8Array)) {
25
- throw new TypeError(`Portable ${expectedKind} source program must be Uint8Array bytes`);
26
- }
27
- const result = cloneCarbonValue(value);
28
- result.bytes = copyBytes(value.bytes);
29
- return result;
30
- }
31
-
32
- export { clonePortableSourceProgram, requirePortableStageType };
33
- //# sourceMappingURL=portable.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"portable.js","sources":["../../../../src/resource/shader/portable.js"],"sourcesContent":["import { copyBytes } from \"@carbonenginejs/runtime-utils/bytes\";\nimport {\n isPlainObject,\n isUint32\n} from \"@carbonenginejs/runtime-utils/is\";\nimport { cloneCarbonValue } from \"@carbonenginejs/runtime-utils/types\";\n\n/** Require one of Carbon's six authored shader-stage indices. */\nexport function requirePortableStageType(value)\n{\n if (!isUint32(value))\n {\n throw new RangeError(\"Portable shader stage type must fit uint32\");\n }\n if (value >= 6)\n {\n throw new RangeError(\"Portable shader stage type must be in [0, 5]\");\n }\n return value;\n}\n\n/** Clone and validate one owned source-program payload. */\nexport function clonePortableSourceProgram(value, expectedKind)\n{\n if (!isPlainObject(value))\n {\n throw new TypeError(\n `Portable ${expectedKind} source program must be an object`\n );\n }\n if (value.kind !== expectedKind)\n {\n throw new Error(\n `Portable source program kind \"${value.kind}\" is not \"${expectedKind}\"`\n );\n }\n if (!(value.bytes instanceof Uint8Array))\n {\n throw new TypeError(\n `Portable ${expectedKind} source program must be Uint8Array bytes`\n );\n }\n\n const result = cloneCarbonValue(value);\n result.bytes = copyBytes(value.bytes);\n return result;\n}\n"],"names":["requirePortableStageType","value","isUint32","RangeError","clonePortableSourceProgram","expectedKind","isPlainObject","TypeError","kind","Error","bytes","Uint8Array","result","cloneCarbonValue","copyBytes"],"mappings":";;;;AAOA;AACO,SAASA,wBAAwBA,CAACC,KAAK,EAC9C;AACE,EAAA,IAAI,CAACC,QAAQ,CAACD,KAAK,CAAC,EACpB;AACE,IAAA,MAAM,IAAIE,UAAU,CAAC,4CAA4C,CAAC;AACpE,EAAA;EACA,IAAIF,KAAK,IAAI,CAAC,EACd;AACE,IAAA,MAAM,IAAIE,UAAU,CAAC,8CAA8C,CAAC;AACtE,EAAA;AACA,EAAA,OAAOF,KAAK;AACd;;AAEA;AACO,SAASG,0BAA0BA,CAACH,KAAK,EAAEI,YAAY,EAC9D;AACE,EAAA,IAAI,CAACC,aAAa,CAACL,KAAK,CAAC,EACzB;AACE,IAAA,MAAM,IAAIM,SAAS,CACjB,CAAA,SAAA,EAAYF,YAAY,mCAC1B,CAAC;AACH,EAAA;AACA,EAAA,IAAIJ,KAAK,CAACO,IAAI,KAAKH,YAAY,EAC/B;IACE,MAAM,IAAII,KAAK,CACb,CAAA,8BAAA,EAAiCR,KAAK,CAACO,IAAI,CAAA,UAAA,EAAaH,YAAY,CAAA,CAAA,CACtE,CAAC;AACH,EAAA;AACA,EAAA,IAAI,EAAEJ,KAAK,CAACS,KAAK,YAAYC,UAAU,CAAC,EACxC;AACE,IAAA,MAAM,IAAIJ,SAAS,CACjB,CAAA,SAAA,EAAYF,YAAY,0CAC1B,CAAC;AACH,EAAA;AAEA,EAAA,MAAMO,MAAM,GAAGC,gBAAgB,CAACZ,KAAK,CAAC;EACtCW,MAAM,CAACF,KAAK,GAAGI,SAAS,CAACb,KAAK,CAACS,KAAK,CAAC;AACrC,EAAA,OAAOE,MAAM;AACf;;;;"}
@@ -1,141 +0,0 @@
1
- # Portable body reflection
2
-
3
- Status: Evolving
4
- Scope: `@carbonenginejs/runtime-resource/formats/hlsl/portable`
5
- Audience: Backend effect-packager authors
6
- Summary: Defines exact, handle-free reflection for one compiled effect body.
7
-
8
- ## Purpose
9
-
10
- The ordinary JSON and metadata modes describe one option-selected effect for
11
- inspection. Backend package builders need a stronger boundary: exact
12
- permutation-table selection, authored constant defaults, source programs, and
13
- all reflection fields without renderer handles.
14
-
15
- The portable subpath supplies that boundary:
16
-
17
- ```js
18
- import {
19
- buildEffectBodyReflection,
20
- enumerateUniqueEffectBodies,
21
- readEffectBodyReflection,
22
- validateEffectBodyReflection
23
- } from "@carbonenginejs/runtime-resource/formats/hlsl/portable";
24
-
25
- const document = readEffectBodyReflection(bytes, {
26
- source: "effect.sm_depth",
27
- permutationIndex: 4
28
- });
29
-
30
- validateEffectBodyReflection(document);
31
-
32
- const groups = enumerateUniqueEffectBodies(effectRes);
33
- const uniqueReflections = groups.map((group) =>
34
- buildEffectBodyReflection(effectRes, group.permutationIndex));
35
- ```
36
-
37
- `buildEffectBodyReflection(effectRes, permutationIndex)` accepts an already
38
- loaded raw `Tr2EffectRes`. This avoids reparsing when a backend builder already
39
- uses `readEffectAnalysis`.
40
-
41
- `enumerateUniqueEffectBodies(effectRes)` inspects version-15 source records and
42
- bytes without decoding. It returns first-occurrence-ordered groups containing
43
- one canonical `permutationIndex`/`sourceRecord` plus every byte-identical
44
- variant alias. Exact range aliases are a fast path; distinct ranges are
45
- fingerprinted and then compared byte-for-byte. The inventory caps the
46
- Cartesian body table at 65,536 records, rejects partial overlaps, and leaves
47
- the effect cache and state-manager registries unchanged.
48
-
49
- ## Contract
50
-
51
- Version 1 accepts compiled effect version 15 only. Earlier container versions
52
- synthesize or normalize several signature fields while reading; rejecting them
53
- keeps every portable field source-exact.
54
-
55
- The root identifies `CJS_EFFECT_BODY_REFLECTION` version 1,
56
- `mode: "single-body"`, `keyScope: "body-local"`,
57
- `coverage.bodies: "single"`, the diagnostic source label and
58
- compiled-effect version/compiler/shared-table/source envelope in `source`, the exact
59
- `permutationIndex`, and its
60
- `sourceRecord.offset` / `sourceRecord.byteLength` span. Its effect graph
61
- preserves:
62
-
63
- - ordered parameter annotation groups;
64
- - ordered techniques, passes, raw render-state pairs, and libraries;
65
- - every present vertex, pixel, compute, geometry, hull, or domain stage;
66
- - constant, resource, UAV, dynamic sampler, and stage-annotation metadata;
67
- - complete pipeline-input, register, static-sampler, and thread-group
68
- signatures;
69
- - exact authored constant-default bytes and declared length; and
70
- - owned copies of every stage and library source-program payload.
71
-
72
- Every source-program record retains its exact shared-table offset. The
73
- validator requires its complete byte range to remain within
74
- `source.stringTableByteLength`.
75
- Stage programs are explicitly `kind: "stage"` and carry their authored stage
76
- identity. DXR library programs are `kind: "library"` and deliberately carry no
77
- synthetic compute-stage identity.
78
-
79
- Numeric BOOL, INT, and FLOAT annotations retain their exact serialized
80
- `rawValue`. Sampler floats retain raw IEEE-754 bits. Static sampler border
81
- colors remain their source enum byte; dynamic sampler border colors remain
82
- four float bit patterns.
83
-
84
- `source.nativeHash` is the compiler-provided v15 hash field, not a package
85
- content digest. The backend package must independently hash its whole source
86
- and body payloads.
87
-
88
- Version-15 resource and signature counts retain Carbon's authored zero value.
89
- For heap-view/bindless SRV, UAV, and sampler bindings, `arrayElements: 0` and
90
- the matching signature `arrayCount: 0` / `registerCount: 0` represent an
91
- unbounded descriptor range; they are valid source reflection, not an empty or
92
- malformed binding. Every resource and UAV map entry must reconcile with
93
- exactly one signature register; signature-only records remain valid.
94
-
95
- The compiled body has no authored effect-name field. The caller-supplied
96
- diagnostic name or path is retained only as `source.label`.
97
-
98
- The serializer rejects defaults or constant extents beyond Carbon's 4,096-byte
99
- stage constant-buffer limit.
100
-
101
- ## Source truth and realization
102
-
103
- The portable document excludes shader, program, render-state, sampler, and
104
- library handles. It also excludes resource-set descriptions, heap-view arrays,
105
- backend layouts, masks, sort values, and caches. `runtime-resource` consumes
106
- the document to hydrate the canonical device-free shader/reflection graph,
107
- select permutations, and cache shaders. Engines own handles, layouts,
108
- resource sets, programs, pipelines, and other GPU realization.
109
-
110
- Register dynamic classification is not persisted. It depends on per-frame
111
- reader/engine policy and is not an authored binary field.
112
-
113
- Authored constant defaults are separate from the raw model's mutable
114
- `constantValues`. Carbon-compatible sampler-heap realization may zero-extend
115
- the latter; it cannot change the portable source prefix.
116
-
117
- ## Selection and completeness
118
-
119
- The parser-internal `GetShaderByIndex(index)` and the portable serializer
120
- bypass global and local option selection. This is distinct from
121
- `runtime-resource` `Tr2EffectRes.GetShaderByIndex`, which hydrates and caches a
122
- canonical shader. The portable serializer performs a fresh non-caching decode
123
- with a temporary state manager, so mutation of a previously cached raw shader
124
- cannot change reflection rebuilt from the same owned source bytes.
125
- This makes a body-table index stable even when an application has global
126
- effect options.
127
-
128
- Version 1 describes one complete listed body. Body-local technique, pass,
129
- stage, and library keys must be namespaced by a backend package before they are
130
- flattened across bodies. This document does not claim that a backend package
131
- contains every permutation body or a program for every body. A backend
132
- container must reconcile all three of `permutationIndex`,
133
- `sourceRecord.offset`, and `sourceRecord.byteLength` with its own body identity
134
- and permutation graph, then reconcile the source byte length and native hash
135
- before claiming completeness.
136
-
137
- ## Related documentation
138
-
139
- - [JSON and metadata graphs](json-graph.md)
140
- - [Advanced analysis exports](advanced-analysis.md)
141
- - [Architecture](../architecture.md)
@@ -1,127 +0,0 @@
1
- # CEWG effect reflection contract
2
-
3
- Status: Evolving
4
- Scope: `@carbonenginejs/runtime-resource/formats/webgl` effect packages and portable reflection
5
- Audience: Package users, runtime integrators, and GPU-engine maintainers
6
- Summary: Defines CEWG reflection, validation, ownership, and completeness.
7
-
8
- `@carbonenginejs/runtime-resource/formats/webgl` packages immutable compiled-effect data. It
9
- does not create runtime shader classes or WebGL objects.
10
-
11
- ## Ownership
12
-
13
- - `format-hlsl` owns the portable, GPU-free reflection schema and source
14
- parser.
15
- - `format-webgl` owns CEWG serialization, GLSL backend records, integrity
16
- validation, and reconstruction of one portable body by permutation index.
17
- - `runtime-resource` owns loaded effect-package bytes, option selection,
18
- per-index caching, canonical `Tr2Shader`, and its device-free reflection and
19
- sampler records.
20
- - `runtime-trinity` owns the mutable `Tr2Effect`/`Tr2Material` facade,
21
- parameters, authored shader options, and sampler overrides. `Tw2*` is legacy
22
- ccpwgl comparison terminology, not a maintained runtime class surface.
23
- - The WebGL engine owns handles, locations, layouts, buffer packing, texture
24
- binding, and draw-time validation.
25
-
26
- The current runtime connection is one-way: runtime-resource consumes the
27
- package's immutable portable data and hydrates a fresh canonical shader graph;
28
- runtime-trinity depends on and consumes that graph. runtime-resource does not
29
- import runtime-trinity. Engines add only backend realization.
30
-
31
- ## Container and schemas
32
-
33
- The binary CEWG container remains version 1. Effect packages use one of these
34
- INFO schemas:
35
-
36
- | INFO | Source input | Required chunks | Source reflection |
37
- | --- | --- | --- | --- |
38
- | v1 | legacy | `INFO META GLSL` | unspecified |
39
- | v2 | effect v8-v14 | `INFO META PGRF GLSL` | permutation topology only |
40
- | v3 | effect v15 | `INFO META PGRF RFLX RBLB GLSL` | complete for every unique body |
41
-
42
- `PGRF` v1 records every Cartesian permutation, its option indices, its exact
43
- source record, and a content-deduplicated body identity.
44
-
45
- `RFLX` v2 records complete portable reflection once per unique source body:
46
- techniques, passes, stages, source programs, exact constant-default bytes,
47
- constants, resources, UAVs, samplers, signatures, static samplers,
48
- annotations, render states, and libraries. Binary fields use verified
49
- references into the shared `RBLB` byte arena.
50
-
51
- `META` and `GLSL` retain the WebGL backend graph: permutation-to-body
52
- mappings, Carbon manifests, stage and shader identities, translated source,
53
- bindings, vertex inputs/outputs, and backend-specific transform contracts.
54
- Backend body keys deliberately retain the historical
55
- `body_<offset>_<size>` form; PGRF/RFLX content identities are separate.
56
-
57
- All cross-document references, counts, SHA-256 digests, source identity,
58
- package mode, body/stage/shader graph edges, reflection blobs, and reflected
59
- pass/stage identities are validated while reading a canonical package.
60
- Generic CEWG containers remain readable, but they cannot use the portable
61
- reflection accessor.
62
-
63
- ## Runtime accessor
64
-
65
- Read with `emit: "raw"` and call:
66
-
67
- ```js
68
- const pkg = CjsWebglFormat.read(bytes, {
69
- emit: CjsWebglFormat.OUTPUT_RAW
70
- });
71
- const portable = pkg.GetPortableEffectReflection(permutationIndex);
72
- ```
73
-
74
- Omitting the index selects `INFO.defaultPermutationIndex`. The method returns
75
- `null` for legacy, partial, generic, or unvalidated packages. Every returned
76
- binary field is a fresh owned `Uint8Array`; callers may mutate it without
77
- changing subsequent reads. This method is the supported stable exception on
78
- the otherwise internal `CewgPackage` object.
79
-
80
- The default JSON read exposes packed PGRF/RFLX documents for inspection, but
81
- does not inline RBLB. Runtime hydration must retain the package bytes and use
82
- the accessor.
83
-
84
- ## Completeness
85
-
86
- - `sourceComplete` is true only for v15 packages with PGRF v1 plus
87
- all-unique RFLX v2/RBLB.
88
- - `backendComplete` remains false. Successful translation does not yet prove
89
- the engine's physical binding/layout and transform contract.
90
- - `runtimeComplete` remains false. Live shader objects and GPU handles are
91
- outside the format package.
92
- - `qualification.ok` separately reports whether the selected WebGL programs
93
- translated and formed the required raster/compute families.
94
-
95
- Selected-only or technique/pass/stage-filtered packages still carry complete
96
- v15 source reflection, but only their selected backend programs.
97
-
98
- ## Tier and permutation policy
99
-
100
- For EVE shader work:
101
-
102
- - High is `.sm_depth`.
103
- - Medium is `.sm_hi`.
104
- - Low is `.sm_lo`.
105
- - Unpacked Quad V5 evidence must explicitly select `SOPPT_ENABLED`; the
106
- default permutation is commonly PPT-off and is not representative.
107
-
108
- Always resolve an option tuple against the current source axes. Do not persist
109
- a permutation index across builds.
110
-
111
- ## Validation evidence
112
-
113
- The 2026-07-28 build-3444265 gate covered 1,074 High/Medium CEWG packages:
114
-
115
- - all 1,074 baseline/candidate statuses matched;
116
- - 1,016 remained qualified and 58 remained diagnostic;
117
- - all 17,444 permutations reconstructed byte-exact portable reflection;
118
- - all 7,134 unique reflected bodies matched fresh `format-hlsl` output;
119
- - the oracle covered 49,308 source programs, 2,563,024 exact default bytes,
120
- 148,972 constants, 88,970 resources, 808 UAVs, 25,564 samplers, and 202,147
121
- annotations; and
122
- - GLSL source remained unchanged. Vertex-stage metadata was corrected so the
123
- Carbon `BITANGENT` alias names the actual emitted `in_BITANGENT#`
124
- declaration instead of stale `in_BINORMAL#` metadata.
125
-
126
- The real unpacked Quad V5 PPT-on High and Medium bodies compile and link all
127
- Main, Depth, Picking, Shadow, and DynamicLightShadow programs in WebGL2.