@carbonenginejs/runtime-resource 0.9.2 → 0.11.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 (544) hide show
  1. package/NOTICE +3 -2
  2. package/README.md +47 -6
  3. package/dist/CjsMotherLode.js +88 -88
  4. package/dist/CjsMotherLode.js.map +1 -1
  5. package/dist/CjsResMan.js +717 -228
  6. package/dist/CjsResMan.js.map +1 -1
  7. package/dist/CjsResManFetchProvider.js +94 -0
  8. package/dist/CjsResManFetchProvider.js.map +1 -0
  9. package/dist/{CjsResManQueue.js → CjsResManWorkQueue.js} +112 -25
  10. package/dist/CjsResManWorkQueue.js.map +1 -0
  11. package/dist/format/CjsBlueReader.js +89 -0
  12. package/dist/format/CjsBlueReader.js.map +1 -1
  13. package/dist/format/CjsFormat.js +42 -16
  14. package/dist/format/CjsFormat.js.map +1 -1
  15. package/dist/format/CjsReader.js +4 -0
  16. package/dist/format/CjsReader.js.map +1 -1
  17. package/dist/format/CjsResourceProbe.js +2 -0
  18. package/dist/format/CjsResourceProbe.js.map +1 -1
  19. package/dist/format/effect/effectPermutationGraph.js +257 -0
  20. package/dist/format/effect/effectPermutationGraph.js.map +1 -0
  21. package/dist/format/effect/effectReflectionPackage.js +636 -0
  22. package/dist/format/effect/effectReflectionPackage.js.map +1 -0
  23. package/dist/format/effect/sha256.js +114 -0
  24. package/dist/format/effect/sha256.js.map +1 -0
  25. package/dist/format/payloadContract.js +20 -0
  26. package/dist/format/payloadContract.js.map +1 -1
  27. package/dist/formats/black/CjsBlackFormat.js +15 -1
  28. package/dist/formats/black/CjsBlackFormat.js.map +1 -1
  29. package/dist/formats/black/core/CjsBlackBinaryReader.js +103 -0
  30. package/dist/formats/black/core/CjsBlackBinaryReader.js.map +1 -1
  31. package/dist/formats/black/core/CjsBlackPropertyReaders.js +61 -0
  32. package/dist/formats/black/core/CjsBlackPropertyReaders.js.map +1 -1
  33. package/dist/formats/black/core/CjsBlackReader.js +125 -0
  34. package/dist/formats/black/core/CjsBlackReader.js.map +1 -1
  35. package/dist/formats/black/core/CjsBlackSchemaRegistry.js +103 -0
  36. package/dist/formats/black/core/CjsBlackSchemaRegistry.js.map +1 -1
  37. package/dist/formats/black/core/helpers.js +17 -0
  38. package/dist/formats/black/core/helpers.js.map +1 -1
  39. package/dist/formats/bnk/CjsBnkFormat.js +8 -0
  40. package/dist/formats/bnk/CjsBnkFormat.js.map +1 -1
  41. package/dist/formats/bnk/core/helpers.js +20 -0
  42. package/dist/formats/bnk/core/helpers.js.map +1 -1
  43. package/dist/formats/bnk/core/musicNodes.js +40 -3
  44. package/dist/formats/bnk/core/musicNodes.js.map +1 -1
  45. package/dist/formats/bnk/core/soundbanksInfo.js +2 -0
  46. package/dist/formats/bnk/core/soundbanksInfo.js.map +1 -1
  47. package/dist/formats/cmf/core/binary.js +71 -0
  48. package/dist/formats/cmf/core/binary.js.map +1 -1
  49. package/dist/formats/cmf/core/buffers.js +4 -0
  50. package/dist/formats/cmf/core/buffers.js.map +1 -1
  51. package/dist/formats/cmf/core/helpers.js +31 -0
  52. package/dist/formats/cmf/core/helpers.js.map +1 -1
  53. package/dist/formats/cmf/core/schema.js +10 -0
  54. package/dist/formats/cmf/core/schema.js.map +1 -1
  55. package/dist/formats/cmf/core/shared.js +9 -0
  56. package/dist/formats/cmf/core/shared.js.map +1 -1
  57. package/dist/formats/cmf/core/writer.js +54 -0
  58. package/dist/formats/cmf/core/writer.js.map +1 -1
  59. package/dist/formats/dds/core/bc6h.js +10 -0
  60. package/dist/formats/dds/core/bc6h.js.map +1 -1
  61. package/dist/formats/dds/core/bc7.js +16 -0
  62. package/dist/formats/dds/core/bc7.js.map +1 -1
  63. package/dist/formats/dds/core/helpers.js +47 -0
  64. package/dist/formats/dds/core/helpers.js.map +1 -1
  65. package/dist/formats/dxbc/CjsDxbcFormat.js +142 -0
  66. package/dist/formats/dxbc/CjsDxbcFormat.js.map +1 -0
  67. package/dist/formats/dxbc/core/DxbcReader.js +266 -0
  68. package/dist/formats/dxbc/core/DxbcReader.js.map +1 -0
  69. package/dist/formats/dxbc/core/container.js +169 -0
  70. package/dist/formats/dxbc/core/container.js.map +1 -0
  71. package/dist/formats/dxbc/core/decoder.js +789 -0
  72. package/dist/formats/dxbc/core/decoder.js.map +1 -0
  73. package/dist/formats/dxbc/core/errors.js +19 -0
  74. package/dist/formats/dxbc/core/errors.js.map +1 -0
  75. package/dist/formats/dxbc/core/helpers.js +220 -0
  76. package/dist/formats/dxbc/core/helpers.js.map +1 -0
  77. package/dist/formats/dxbc/core/opcodes.js +45 -0
  78. package/dist/formats/dxbc/core/opcodes.js.map +1 -0
  79. package/dist/formats/dxbc/core/program.js +91 -0
  80. package/dist/formats/dxbc/core/program.js.map +1 -0
  81. package/dist/formats/dxbc/core/signature.js +172 -0
  82. package/dist/formats/dxbc/core/signature.js.map +1 -0
  83. package/dist/formats/dxbc/index.js +2 -0
  84. package/dist/formats/dxbc/index.js.map +1 -0
  85. package/dist/formats/fbx/core/helpers.js +21 -0
  86. package/dist/formats/fbx/core/helpers.js.map +1 -1
  87. package/dist/formats/flac/CjsFlacFormat.js +49 -0
  88. package/dist/formats/flac/CjsFlacFormat.js.map +1 -1
  89. package/dist/formats/flac/core/helpers.js +20 -0
  90. package/dist/formats/flac/core/helpers.js.map +1 -1
  91. package/dist/formats/gif/CjsGifFormat.js +49 -0
  92. package/dist/formats/gif/CjsGifFormat.js.map +1 -1
  93. package/dist/formats/gif/core/helpers.js +20 -0
  94. package/dist/formats/gif/core/helpers.js.map +1 -1
  95. package/dist/formats/gltf/core/helpers.js +15 -0
  96. package/dist/formats/gltf/core/helpers.js.map +1 -1
  97. package/dist/formats/gltf/core/parser.js +13 -0
  98. package/dist/formats/gltf/core/parser.js.map +1 -1
  99. package/dist/formats/gltf/core/targets.js +10 -0
  100. package/dist/formats/gltf/core/targets.js.map +1 -1
  101. package/dist/formats/gr2/core/bitknit2.js +2 -0
  102. package/dist/formats/gr2/core/bitknit2.js.map +1 -1
  103. package/dist/formats/gr2/core/helpers.js +20 -0
  104. package/dist/formats/gr2/core/helpers.js.map +1 -1
  105. package/dist/formats/gr2/core/targets.js +10 -0
  106. package/dist/formats/gr2/core/targets.js.map +1 -1
  107. package/dist/formats/hlsl/CjsHlslFormat.js +254 -0
  108. package/dist/formats/hlsl/CjsHlslFormat.js.map +1 -0
  109. package/dist/formats/hlsl/core/HlslBinaryUtils.js +15 -0
  110. package/dist/formats/hlsl/core/HlslBinaryUtils.js.map +1 -0
  111. package/dist/formats/hlsl/core/HlslEffectReadError.js +19 -0
  112. package/dist/formats/hlsl/core/HlslEffectReadError.js.map +1 -0
  113. package/dist/formats/hlsl/core/HlslEffectStateManager.js +130 -0
  114. package/dist/formats/hlsl/core/HlslEffectStateManager.js.map +1 -0
  115. package/dist/formats/hlsl/core/HlslReader.js +266 -0
  116. package/dist/formats/hlsl/core/HlslReader.js.map +1 -0
  117. package/dist/formats/hlsl/core/HlslRenderStateSetup.js +37 -0
  118. package/dist/formats/hlsl/core/HlslRenderStateSetup.js.map +1 -0
  119. package/dist/formats/hlsl/core/HlslResourceSetDescription.js +94 -0
  120. package/dist/formats/hlsl/core/HlslResourceSetDescription.js.map +1 -0
  121. package/dist/formats/hlsl/core/HlslShaderBytecode.js +44 -0
  122. package/dist/formats/hlsl/core/HlslShaderBytecode.js.map +1 -0
  123. package/dist/formats/hlsl/core/analysis.js +51 -0
  124. package/dist/formats/hlsl/core/analysis.js.map +1 -0
  125. package/dist/formats/hlsl/core/helpers.js +270 -0
  126. package/dist/formats/hlsl/core/helpers.js.map +1 -0
  127. package/dist/formats/hlsl/core/json.js +284 -0
  128. package/dist/formats/hlsl/core/json.js.map +1 -0
  129. package/dist/formats/hlsl/core/metadata.js +327 -0
  130. package/dist/formats/hlsl/core/metadata.js.map +1 -0
  131. package/dist/formats/hlsl/core/portableReflection.js +848 -0
  132. package/dist/formats/hlsl/core/portableReflection.js.map +1 -0
  133. package/dist/formats/hlsl/core/render-states.js +280 -0
  134. package/dist/formats/hlsl/core/render-states.js.map +1 -0
  135. package/dist/formats/hlsl/core/tr2/HlslRenderContextEnum.js +43 -0
  136. package/dist/formats/hlsl/core/tr2/HlslRenderContextEnum.js.map +1 -0
  137. package/dist/formats/hlsl/core/tr2/resources/HlslEffectRes.js +294 -0
  138. package/dist/formats/hlsl/core/tr2/resources/HlslEffectRes.js.map +1 -0
  139. package/dist/formats/hlsl/core/tr2/resources/HlslShaderPermutation.js +33 -0
  140. package/dist/formats/hlsl/core/tr2/resources/HlslShaderPermutation.js.map +1 -0
  141. package/dist/formats/hlsl/core/tr2/shader/HlslEffectBindingManifest.js +416 -0
  142. package/dist/formats/hlsl/core/tr2/shader/HlslEffectBindingManifest.js.map +1 -0
  143. package/dist/formats/hlsl/core/tr2/shader/HlslEffectConstant.js +40 -0
  144. package/dist/formats/hlsl/core/tr2/shader/HlslEffectConstant.js.map +1 -0
  145. package/dist/formats/hlsl/core/tr2/shader/HlslEffectDescription.js +742 -0
  146. package/dist/formats/hlsl/core/tr2/shader/HlslEffectDescription.js.map +1 -0
  147. package/dist/formats/hlsl/core/tr2/shader/HlslEffectLibrary.js +52 -0
  148. package/dist/formats/hlsl/core/tr2/shader/HlslEffectLibrary.js.map +1 -0
  149. package/dist/formats/hlsl/core/tr2/shader/HlslEffectParameterAnnotation.js +38 -0
  150. package/dist/formats/hlsl/core/tr2/shader/HlslEffectParameterAnnotation.js.map +1 -0
  151. package/dist/formats/hlsl/core/tr2/shader/HlslEffectResource.js +50 -0
  152. package/dist/formats/hlsl/core/tr2/shader/HlslEffectResource.js.map +1 -0
  153. package/dist/formats/hlsl/core/tr2/shader/HlslEffectStageInput.js +86 -0
  154. package/dist/formats/hlsl/core/tr2/shader/HlslEffectStageInput.js.map +1 -0
  155. package/dist/formats/hlsl/core/tr2/shader/HlslEffectTechnique.js +31 -0
  156. package/dist/formats/hlsl/core/tr2/shader/HlslEffectTechnique.js.map +1 -0
  157. package/dist/formats/hlsl/core/tr2/shader/HlslPass.js +42 -0
  158. package/dist/formats/hlsl/core/tr2/shader/HlslPass.js.map +1 -0
  159. package/dist/formats/hlsl/core/tr2/shader/HlslSamplerDescription.js +55 -0
  160. package/dist/formats/hlsl/core/tr2/shader/HlslSamplerDescription.js.map +1 -0
  161. package/dist/formats/hlsl/core/tr2/shader/HlslSamplerSetup.js +29 -0
  162. package/dist/formats/hlsl/core/tr2/shader/HlslSamplerSetup.js.map +1 -0
  163. package/dist/formats/hlsl/core/tr2/shader/HlslShader.js +220 -0
  164. package/dist/formats/hlsl/core/tr2/shader/HlslShader.js.map +1 -0
  165. package/dist/formats/hlsl/core/tr2/shader/HlslShaderOption.js +30 -0
  166. package/dist/formats/hlsl/core/tr2/shader/HlslShaderOption.js.map +1 -0
  167. package/dist/formats/hlsl/index.js +2 -0
  168. package/dist/formats/hlsl/index.js.map +1 -0
  169. package/dist/formats/hlsl/portable.js +2 -0
  170. package/dist/formats/hlsl/portable.js.map +1 -0
  171. package/dist/formats/index.js +4 -0
  172. package/dist/formats/index.js.map +1 -1
  173. package/dist/formats/jpeg/core/helpers.js +52 -0
  174. package/dist/formats/jpeg/core/helpers.js.map +1 -1
  175. package/dist/formats/jpeg/core/jpeg.js +93 -0
  176. package/dist/formats/jpeg/core/jpeg.js.map +1 -1
  177. package/dist/formats/mp3/core/helpers.js +37 -0
  178. package/dist/formats/mp3/core/helpers.js.map +1 -1
  179. package/dist/formats/mp4/core/helpers.js +35 -0
  180. package/dist/formats/mp4/core/helpers.js.map +1 -1
  181. package/dist/formats/ogg/CjsOggFormat.js +49 -0
  182. package/dist/formats/ogg/CjsOggFormat.js.map +1 -1
  183. package/dist/formats/ogg/core/helpers.js +23 -0
  184. package/dist/formats/ogg/core/helpers.js.map +1 -1
  185. package/dist/formats/ogg/core/vorbis.js +13 -0
  186. package/dist/formats/ogg/core/vorbis.js.map +1 -1
  187. package/dist/formats/png/core/helpers.js +52 -0
  188. package/dist/formats/png/core/helpers.js.map +1 -1
  189. package/dist/formats/red/CjsRedFormat.js +2 -0
  190. package/dist/formats/red/CjsRedFormat.js.map +1 -1
  191. package/dist/formats/red/core/CjsRedReader.js +52 -0
  192. package/dist/formats/red/core/CjsRedReader.js.map +1 -1
  193. package/dist/formats/red/core/helpers.js +19 -0
  194. package/dist/formats/red/core/helpers.js.map +1 -1
  195. package/dist/formats/stl/core/stl.js +8 -0
  196. package/dist/formats/stl/core/stl.js.map +1 -1
  197. package/dist/formats/stl/core/targets.js +10 -0
  198. package/dist/formats/stl/core/targets.js.map +1 -1
  199. package/dist/formats/tga/core/helpers.js +47 -0
  200. package/dist/formats/tga/core/helpers.js.map +1 -1
  201. package/dist/formats/wav/core/helpers.js +37 -0
  202. package/dist/formats/wav/core/helpers.js.map +1 -1
  203. package/dist/formats/webgl/CjsWebglFormat.js +221 -0
  204. package/dist/formats/webgl/CjsWebglFormat.js.map +1 -0
  205. package/dist/formats/webgl/core/cewg/CewgPackage.js +339 -0
  206. package/dist/formats/webgl/core/cewg/CewgPackage.js.map +1 -0
  207. package/dist/formats/webgl/core/cewg/CewgPackageBuilder.js +104 -0
  208. package/dist/formats/webgl/core/cewg/CewgPackageBuilder.js.map +1 -0
  209. package/dist/formats/webgl/core/cewg/binary.js +101 -0
  210. package/dist/formats/webgl/core/cewg/binary.js.map +1 -0
  211. package/dist/formats/webgl/core/cewgCompleteness.js +81 -0
  212. package/dist/formats/webgl/core/cewgCompleteness.js.map +1 -0
  213. package/dist/formats/webgl/core/effectPackage.js +789 -0
  214. package/dist/formats/webgl/core/effectPackage.js.map +1 -0
  215. package/dist/formats/webgl/core/effectPackageValidation.js +331 -0
  216. package/dist/formats/webgl/core/effectPackageValidation.js.map +1 -0
  217. package/dist/formats/webgl/core/errors.js +27 -0
  218. package/dist/formats/webgl/core/errors.js.map +1 -0
  219. package/dist/formats/webgl/core/glsl/DxbcGlslEmitter.js +2678 -0
  220. package/dist/formats/webgl/core/glsl/DxbcGlslEmitter.js.map +1 -0
  221. package/dist/formats/webgl/core/glsl/DxbcGlslHelpers.js +89 -0
  222. package/dist/formats/webgl/core/glsl/DxbcGlslHelpers.js.map +1 -0
  223. package/dist/formats/webgl/core/glsl/DxbcGlslOperandFormatter.js +428 -0
  224. package/dist/formats/webgl/core/glsl/DxbcGlslOperandFormatter.js.map +1 -0
  225. package/dist/formats/webgl/core/helpers.js +306 -0
  226. package/dist/formats/webgl/core/helpers.js.map +1 -0
  227. package/dist/formats/webgl/index.js +2 -0
  228. package/dist/formats/webgl/index.js.map +1 -0
  229. package/dist/formats/webgpu/CjsWebgpuFormat.js +376 -0
  230. package/dist/formats/webgpu/CjsWebgpuFormat.js.map +1 -0
  231. package/dist/formats/webgpu/core/cewgpu/CewgpuPackage.js +415 -0
  232. package/dist/formats/webgpu/core/cewgpu/CewgpuPackage.js.map +1 -0
  233. package/dist/formats/webgpu/core/cewgpu/CewgpuPackageBuilder.js +100 -0
  234. package/dist/formats/webgpu/core/cewgpu/CewgpuPackageBuilder.js.map +1 -0
  235. package/dist/formats/webgpu/core/cewgpu/binary.js +93 -0
  236. package/dist/formats/webgpu/core/cewgpu/binary.js.map +1 -0
  237. package/dist/formats/webgpu/core/cewgpu/tags.js +17 -0
  238. package/dist/formats/webgpu/core/cewgpu/tags.js.map +1 -0
  239. package/dist/formats/webgpu/core/effectAnalysis.js +82 -0
  240. package/dist/formats/webgpu/core/effectAnalysis.js.map +1 -0
  241. package/dist/formats/webgpu/core/effectBackendBodySet.js +305 -0
  242. package/dist/formats/webgpu/core/effectBackendBodySet.js.map +1 -0
  243. package/dist/formats/webgpu/core/effectPackageValidation.js +1078 -0
  244. package/dist/formats/webgpu/core/effectPackageValidation.js.map +1 -0
  245. package/dist/formats/webgpu/core/errors.js +20 -0
  246. package/dist/formats/webgpu/core/errors.js.map +1 -0
  247. package/dist/formats/webgpu/core/helpers.js +448 -0
  248. package/dist/formats/webgpu/core/helpers.js.map +1 -0
  249. package/dist/formats/webgpu/core/ir/analyzeRegisterValues.js +223 -0
  250. package/dist/formats/webgpu/core/ir/analyzeRegisterValues.js.map +1 -0
  251. package/dist/formats/webgpu/core/ir/buildControlFlow.js +220 -0
  252. package/dist/formats/webgpu/core/ir/buildControlFlow.js.map +1 -0
  253. package/dist/formats/webgpu/core/ir/indexableTemps.js +137 -0
  254. package/dist/formats/webgpu/core/ir/indexableTemps.js.map +1 -0
  255. package/dist/formats/webgpu/core/ir/inferValueTypes.js +454 -0
  256. package/dist/formats/webgpu/core/ir/inferValueTypes.js.map +1 -0
  257. package/dist/formats/webgpu/core/ir/lowerDxbcToIr.js +494 -0
  258. package/dist/formats/webgpu/core/ir/lowerDxbcToIr.js.map +1 -0
  259. package/dist/formats/webgpu/core/ir/resolveRegisterFlow.js +177 -0
  260. package/dist/formats/webgpu/core/ir/resolveRegisterFlow.js.map +1 -0
  261. package/dist/formats/webgpu/core/ir/sourceLanes.js +61 -0
  262. package/dist/formats/webgpu/core/ir/sourceLanes.js.map +1 -0
  263. package/dist/formats/webgpu/core/packageEffect.js +300 -0
  264. package/dist/formats/webgpu/core/packageEffect.js.map +1 -0
  265. package/dist/formats/webgpu/core/packageEffectSelection.js +164 -0
  266. package/dist/formats/webgpu/core/packageEffectSelection.js.map +1 -0
  267. package/dist/formats/webgpu/core/packageMetadata.js +8 -0
  268. package/dist/formats/webgpu/core/packageMetadata.js.map +1 -0
  269. package/dist/formats/webgpu/core/schema.js +4 -0
  270. package/dist/formats/webgpu/core/schema.js.map +1 -0
  271. package/dist/formats/webgpu/core/wgsl/buildResourceTransformPlan.js +275 -0
  272. package/dist/formats/webgpu/core/wgsl/buildResourceTransformPlan.js.map +1 -0
  273. package/dist/formats/webgpu/core/wgsl/buildWgslBindingPlan.js +182 -0
  274. package/dist/formats/webgpu/core/wgsl/buildWgslBindingPlan.js.map +1 -0
  275. package/dist/formats/webgpu/core/wgsl/buildWgslSet.js +324 -0
  276. package/dist/formats/webgpu/core/wgsl/buildWgslSet.js.map +1 -0
  277. package/dist/formats/webgpu/core/wgsl/emitWgsl.js +356 -0
  278. package/dist/formats/webgpu/core/wgsl/emitWgsl.js.map +1 -0
  279. package/dist/formats/webgpu/core/wgsl/hoistEscapingValues.js +77 -0
  280. package/dist/formats/webgpu/core/wgsl/hoistEscapingValues.js.map +1 -0
  281. package/dist/formats/webgpu/core/wgsl/lowerBindingLayout.js +451 -0
  282. package/dist/formats/webgpu/core/wgsl/lowerBindingLayout.js.map +1 -0
  283. package/dist/formats/webgpu/core/wgsl/lowerComputeProgram.js +754 -0
  284. package/dist/formats/webgpu/core/wgsl/lowerComputeProgram.js.map +1 -0
  285. package/dist/formats/webgpu/core/wgsl/lowerCreateHistogramsComputeProgram.js +457 -0
  286. package/dist/formats/webgpu/core/wgsl/lowerCreateHistogramsComputeProgram.js.map +1 -0
  287. package/dist/formats/webgpu/core/wgsl/lowerFragmentProgram.js +1572 -0
  288. package/dist/formats/webgpu/core/wgsl/lowerFragmentProgram.js.map +1 -0
  289. package/dist/formats/webgpu/core/wgsl/lowerMergeHistogramsComputeProgram.js +659 -0
  290. package/dist/formats/webgpu/core/wgsl/lowerMergeHistogramsComputeProgram.js.map +1 -0
  291. package/dist/formats/webgpu/core/wgsl/lowerParticleClearComputePrograms.js +734 -0
  292. package/dist/formats/webgpu/core/wgsl/lowerParticleClearComputePrograms.js.map +1 -0
  293. package/dist/formats/webgpu/core/wgsl/lowerParticleEmitComputeProgram.js +583 -0
  294. package/dist/formats/webgpu/core/wgsl/lowerParticleEmitComputeProgram.js.map +1 -0
  295. package/dist/formats/webgpu/core/wgsl/lowerSkinVerticesComputeProgram.js +621 -0
  296. package/dist/formats/webgpu/core/wgsl/lowerSkinVerticesComputeProgram.js.map +1 -0
  297. package/dist/formats/webgpu/core/wgsl/lowerSortComputeProgram.js +824 -0
  298. package/dist/formats/webgpu/core/wgsl/lowerSortComputeProgram.js.map +1 -0
  299. package/dist/formats/webgpu/core/wgsl/lowerSortInnerComputeProgram.js +697 -0
  300. package/dist/formats/webgpu/core/wgsl/lowerSortInnerComputeProgram.js.map +1 -0
  301. package/dist/formats/webgpu/core/wgsl/lowerSortStepComputeProgram.js +559 -0
  302. package/dist/formats/webgpu/core/wgsl/lowerSortStepComputeProgram.js.map +1 -0
  303. package/dist/formats/webgpu/core/wgsl/lowerVertexProgram.js +1328 -0
  304. package/dist/formats/webgpu/core/wgsl/lowerVertexProgram.js.map +1 -0
  305. package/dist/formats/webgpu/core/wgsl/particleEmitSemanticDigest.js +110 -0
  306. package/dist/formats/webgpu/core/wgsl/particleEmitSemanticDigest.js.map +1 -0
  307. package/dist/formats/webgpu/core/wgsl/precisionControls.js +55 -0
  308. package/dist/formats/webgpu/core/wgsl/precisionControls.js.map +1 -0
  309. package/dist/formats/webgpu/core/wgsl/selectionPlans.js +758 -0
  310. package/dist/formats/webgpu/core/wgsl/selectionPlans.js.map +1 -0
  311. package/dist/formats/webgpu/core/wgsl/uniformity.js +78 -0
  312. package/dist/formats/webgpu/core/wgsl/uniformity.js.map +1 -0
  313. package/dist/formats/webgpu/core/wgsl/validateExactComputeIr.js +196 -0
  314. package/dist/formats/webgpu/core/wgsl/validateExactComputeIr.js.map +1 -0
  315. package/dist/formats/webgpu/core/wgsl/validateHandleOperand.js +37 -0
  316. package/dist/formats/webgpu/core/wgsl/validateHandleOperand.js.map +1 -0
  317. package/dist/formats/webgpu/index.js +2 -0
  318. package/dist/formats/webgpu/index.js.map +1 -0
  319. package/dist/formats/webm/core/helpers.js +35 -0
  320. package/dist/formats/webm/core/helpers.js.map +1 -1
  321. package/dist/formats/webp/CjsWebpFormat.js +49 -0
  322. package/dist/formats/webp/CjsWebpFormat.js.map +1 -1
  323. package/dist/formats/webp/core/helpers.js +23 -0
  324. package/dist/formats/webp/core/helpers.js.map +1 -1
  325. package/dist/formats/wem/CjsWemFormat.js +8 -0
  326. package/dist/formats/wem/CjsWemFormat.js.map +1 -1
  327. package/dist/formats/wem/core/bitStream.js +2 -0
  328. package/dist/formats/wem/core/bitStream.js.map +1 -1
  329. package/dist/formats/wem/core/helpers.js +20 -0
  330. package/dist/formats/wem/core/helpers.js.map +1 -1
  331. package/dist/formats/yaml/CjsYamlFormat.js +45 -0
  332. package/dist/formats/yaml/CjsYamlFormat.js.map +1 -1
  333. package/dist/formats/yaml/core/CjsYamlReader.js +91 -0
  334. package/dist/formats/yaml/core/CjsYamlReader.js.map +1 -1
  335. package/dist/formats/yaml/core/helpers.js +10 -0
  336. package/dist/formats/yaml/core/helpers.js.map +1 -1
  337. package/dist/index.js +56 -43
  338. package/dist/index.js.map +1 -1
  339. package/dist/{CjsResource.js → resource/CjsResource.js} +232 -17
  340. package/dist/resource/CjsResource.js.map +1 -0
  341. package/dist/{resources → resource}/Tr2LightProfileRes.js +4 -3
  342. package/dist/resource/Tr2LightProfileRes.js.map +1 -0
  343. package/dist/{resources → resource/audio}/AudioGeometryResData.js +1 -1
  344. package/dist/resource/audio/AudioGeometryResData.js.map +1 -0
  345. package/dist/resource/audio/CjsAudioBufferRes.js +86 -0
  346. package/dist/resource/audio/CjsAudioBufferRes.js.map +1 -0
  347. package/dist/resource/audio/CjsAudioRes.js +213 -0
  348. package/dist/resource/audio/CjsAudioRes.js.map +1 -0
  349. package/dist/resource/audio/index.js +4 -0
  350. package/dist/resource/audio/index.js.map +1 -0
  351. package/dist/{resources → resource/geometry}/MeshDecalData.js +1 -1
  352. package/dist/resource/geometry/MeshDecalData.js.map +1 -0
  353. package/dist/{resources → resource/geometry}/MeshDecalLodData.js +1 -1
  354. package/dist/resource/geometry/MeshDecalLodData.js.map +1 -0
  355. package/dist/resource/geometry/TriGeometryRes.js +656 -0
  356. package/dist/resource/geometry/TriGeometryRes.js.map +1 -0
  357. package/dist/{resources → resource/geometry}/TriGeometryResAreaData.js +1 -1
  358. package/dist/resource/geometry/TriGeometryResAreaData.js.map +1 -0
  359. package/dist/{resources → resource/geometry}/TriGeometryResJointData.js +1 -1
  360. package/dist/resource/geometry/TriGeometryResJointData.js.map +1 -0
  361. package/dist/{resources → resource/geometry}/TriGeometryResLodData.js +1 -1
  362. package/dist/resource/geometry/TriGeometryResLodData.js.map +1 -0
  363. package/dist/{resources → resource/geometry}/TriGeometryResMeshData.js +1 -1
  364. package/dist/resource/geometry/TriGeometryResMeshData.js.map +1 -0
  365. package/dist/{resources → resource/geometry}/TriGeometryResSkeletonData.js +1 -1
  366. package/dist/resource/geometry/TriGeometryResSkeletonData.js.map +1 -0
  367. package/dist/{resources → resource/geometry}/TriJointBinding.js +1 -1
  368. package/dist/resource/geometry/TriJointBinding.js.map +1 -0
  369. package/dist/{resources → resource/geometry}/TriMorphTargetGeometryConstants.js +1 -1
  370. package/dist/resource/geometry/TriMorphTargetGeometryConstants.js.map +1 -0
  371. package/dist/{resources → resource/geometry}/TriRtGeometryConstants.js +1 -1
  372. package/dist/resource/geometry/TriRtGeometryConstants.js.map +1 -0
  373. package/dist/{resources → resource/geometry/granny}/GStateBindingCallbackData.js +1 -1
  374. package/dist/resource/geometry/granny/GStateBindingCallbackData.js.map +1 -0
  375. package/dist/{resources → resource/geometry/granny}/Tr2GrannyIntersectionResult.js +1 -1
  376. package/dist/resource/geometry/granny/Tr2GrannyIntersectionResult.js.map +1 -0
  377. package/dist/{resources → resource/geometry/granny}/Tr2GrannyStateRes.js +6 -5
  378. package/dist/resource/geometry/granny/Tr2GrannyStateRes.js.map +1 -0
  379. package/dist/{resources → resource/geometry/granny}/TriGrannyRes.js +6 -5
  380. package/dist/resource/geometry/granny/TriGrannyRes.js.map +1 -0
  381. package/dist/{resources → resource/geometry/granny}/enums.js +1 -9
  382. package/dist/resource/geometry/granny/enums.js.map +1 -0
  383. package/dist/resource/geometry/granny/index.js +6 -0
  384. package/dist/resource/geometry/granny/index.js.map +1 -0
  385. package/dist/resource/geometry/index.js +17 -0
  386. package/dist/resource/geometry/index.js.map +1 -0
  387. package/dist/resource/index.js +52 -0
  388. package/dist/resource/index.js.map +1 -0
  389. package/dist/resource/resourceBoundary.js +64 -0
  390. package/dist/resource/resourceBoundary.js.map +1 -0
  391. package/dist/resource/shader/Tr2EffectRes.js +429 -0
  392. package/dist/resource/shader/Tr2EffectRes.js.map +1 -0
  393. package/dist/resource/shader/Tr2MaterialArea.js +34 -0
  394. package/dist/resource/shader/Tr2MaterialArea.js.map +1 -0
  395. package/dist/resource/shader/Tr2MaterialMesh.js +30 -0
  396. package/dist/resource/shader/Tr2MaterialMesh.js.map +1 -0
  397. package/dist/resource/shader/Tr2MaterialRes.js +35 -0
  398. package/dist/resource/shader/Tr2MaterialRes.js.map +1 -0
  399. package/dist/resource/shader/Tr2Shader.js +256 -0
  400. package/dist/resource/shader/Tr2Shader.js.map +1 -0
  401. package/dist/resource/shader/Tr2ShaderPermutation.js +47 -0
  402. package/dist/resource/shader/Tr2ShaderPermutation.js.map +1 -0
  403. package/dist/resource/shader/index.js +17 -0
  404. package/dist/resource/shader/index.js.map +1 -0
  405. package/dist/resource/shader/portable.js +33 -0
  406. package/dist/resource/shader/portable.js.map +1 -0
  407. package/dist/resource/shader/reflection/Tr2EffectConstant.js +135 -0
  408. package/dist/resource/shader/reflection/Tr2EffectConstant.js.map +1 -0
  409. package/dist/resource/shader/reflection/Tr2EffectDefine.js +28 -0
  410. package/dist/resource/shader/reflection/Tr2EffectDefine.js.map +1 -0
  411. package/dist/resource/shader/reflection/Tr2EffectDescription.js +107 -0
  412. package/dist/resource/shader/reflection/Tr2EffectDescription.js.map +1 -0
  413. package/dist/resource/shader/reflection/Tr2EffectLibrary.js +145 -0
  414. package/dist/resource/shader/reflection/Tr2EffectLibrary.js.map +1 -0
  415. package/dist/resource/shader/reflection/Tr2EffectParameterAnnotation.js +103 -0
  416. package/dist/resource/shader/reflection/Tr2EffectParameterAnnotation.js.map +1 -0
  417. package/dist/resource/shader/reflection/Tr2EffectResource.js +84 -0
  418. package/dist/resource/shader/reflection/Tr2EffectResource.js.map +1 -0
  419. package/dist/resource/shader/reflection/Tr2EffectStageInput.js +239 -0
  420. package/dist/resource/shader/reflection/Tr2EffectStageInput.js.map +1 -0
  421. package/dist/resource/shader/reflection/Tr2EffectTechnique.js +66 -0
  422. package/dist/resource/shader/reflection/Tr2EffectTechnique.js.map +1 -0
  423. package/dist/resource/shader/reflection/Tr2Pass.js +109 -0
  424. package/dist/resource/shader/reflection/Tr2Pass.js.map +1 -0
  425. package/dist/resource/shader/sampler/Tr2SamplerSetup.js +75 -0
  426. package/dist/resource/shader/sampler/Tr2SamplerSetup.js.map +1 -0
  427. package/dist/{texture → resource/texture}/CjsTextureArrayRes.js +83 -6
  428. package/dist/resource/texture/CjsTextureArrayRes.js.map +1 -0
  429. package/dist/{texture/CjsTextureParameterProxy.js → resource/texture/CjsTextureArrayResParameterProxy.js} +56 -10
  430. package/dist/resource/texture/CjsTextureArrayResParameterProxy.js.map +1 -0
  431. package/dist/{resources → resource/texture}/Tr2ImageRes.js +6 -4
  432. package/dist/resource/texture/Tr2ImageRes.js.map +1 -0
  433. package/dist/{resources → resource/texture}/Tr2TextureLodManager.js +3 -1
  434. package/dist/resource/texture/Tr2TextureLodManager.js.map +1 -0
  435. package/dist/{resources → resource/texture}/Tr2TextureLodUpdateRequest.js +1 -1
  436. package/dist/resource/texture/Tr2TextureLodUpdateRequest.js.map +1 -0
  437. package/dist/{resources → resource/texture}/Tr2TexturePackChannel.js +1 -1
  438. package/dist/resource/texture/Tr2TexturePackChannel.js.map +1 -0
  439. package/dist/{resources → resource/texture}/Tr2TexturePipeline.js +6 -4
  440. package/dist/resource/texture/Tr2TexturePipeline.js.map +1 -0
  441. package/dist/{resources → resource/texture}/Tr2TexturePipelineParams.js +1 -1
  442. package/dist/resource/texture/Tr2TexturePipelineParams.js.map +1 -0
  443. package/dist/{resources → resource/texture}/Tr2TexturePipelineStepCompress.js +1 -1
  444. package/dist/resource/texture/Tr2TexturePipelineStepCompress.js.map +1 -0
  445. package/dist/{resources → resource/texture}/Tr2TexturePipelineStepGenerateMips.js +1 -1
  446. package/dist/resource/texture/Tr2TexturePipelineStepGenerateMips.js.map +1 -0
  447. package/dist/{resources → resource/texture}/Tr2TexturePipelineStepLimitSize.js +1 -1
  448. package/dist/resource/texture/Tr2TexturePipelineStepLimitSize.js.map +1 -0
  449. package/dist/{resources → resource/texture}/Tr2TexturePipelineStepLoad.js +1 -1
  450. package/dist/resource/texture/Tr2TexturePipelineStepLoad.js.map +1 -0
  451. package/dist/{resources → resource/texture}/Tr2TexturePipelineStepPack.js +1 -1
  452. package/dist/resource/texture/Tr2TexturePipelineStepPack.js.map +1 -0
  453. package/dist/{resources → resource/texture}/TriTextureRes.js +42 -26
  454. package/dist/resource/texture/TriTextureRes.js.map +1 -0
  455. package/dist/resource/texture/index.js +15 -0
  456. package/dist/resource/texture/index.js.map +1 -0
  457. package/dist/{resources → resource/texture}/texturePipelineBehavior.js +59 -59
  458. package/dist/resource/texture/texturePipelineBehavior.js.map +1 -0
  459. package/dist/worker/CjsResManMainThreadLoader.js +87 -0
  460. package/dist/worker/CjsResManMainThreadLoader.js.map +1 -0
  461. package/dist/worker/CjsResManWorker.js +217 -0
  462. package/dist/worker/CjsResManWorker.js.map +1 -0
  463. package/dist/worker/CjsResManWorkerLoader.js +434 -0
  464. package/dist/worker/CjsResManWorkerLoader.js.map +1 -0
  465. package/dist/worker/protocol.js +12 -0
  466. package/dist/worker/protocol.js.map +1 -0
  467. package/docs/README.md +16 -3
  468. package/docs/architecture.md +39 -16
  469. package/docs/concepts/resource-lifecycle.md +2 -1
  470. package/docs/formats/README.md +8 -0
  471. package/docs/formats/provenance.md +11 -3
  472. package/docs/reference/classes/README.md +6 -4
  473. package/docs/reference/classes/audio.md +30 -0
  474. package/docs/reference/classes/core.md +31 -11
  475. package/docs/reference/classes/formats.md +440 -0
  476. package/docs/reference/classes/resources.md +151 -41
  477. package/docs/reference/classes/texture.md +7 -7
  478. package/docs/reference/motherlode-cache.md +17 -0
  479. package/docs/reference/queues.md +9 -1
  480. package/docs/reference/workers.md +135 -0
  481. package/docs/roadmap.md +27 -1
  482. package/format-notices/dxbc/LICENSE +21 -0
  483. package/format-notices/dxbc/NOTICE +20 -0
  484. package/format-notices/hlsl/LICENSE +21 -0
  485. package/format-notices/hlsl/NOTICE +25 -0
  486. package/format-notices/webgl/LICENSE +21 -0
  487. package/format-notices/webgl/NOTICE +35 -0
  488. package/format-notices/webgpu/LICENSE +21 -0
  489. package/format-notices/webgpu/NOTICE +31 -0
  490. package/package.json +13 -1
  491. package/dist/CjsResManQueue.js.map +0 -1
  492. package/dist/CjsResource.js.map +0 -1
  493. package/dist/CjsResourceSource.js +0 -68
  494. package/dist/CjsResourceSource.js.map +0 -1
  495. package/dist/resourcePath.js +0 -18
  496. package/dist/resourcePath.js.map +0 -1
  497. package/dist/resourceStates.js +0 -9
  498. package/dist/resourceStates.js.map +0 -1
  499. package/dist/resources/AudioGeometryResData.js.map +0 -1
  500. package/dist/resources/GStateBindingCallbackData.js.map +0 -1
  501. package/dist/resources/MeshDecalData.js.map +0 -1
  502. package/dist/resources/MeshDecalLodData.js.map +0 -1
  503. package/dist/resources/Tr2EffectRes.js +0 -71
  504. package/dist/resources/Tr2EffectRes.js.map +0 -1
  505. package/dist/resources/Tr2GrannyIntersectionResult.js.map +0 -1
  506. package/dist/resources/Tr2GrannyStateRes.js.map +0 -1
  507. package/dist/resources/Tr2ImageRes.js.map +0 -1
  508. package/dist/resources/Tr2LightProfileRes.js.map +0 -1
  509. package/dist/resources/Tr2MaterialArea.js +0 -34
  510. package/dist/resources/Tr2MaterialArea.js.map +0 -1
  511. package/dist/resources/Tr2MaterialMesh.js +0 -31
  512. package/dist/resources/Tr2MaterialMesh.js.map +0 -1
  513. package/dist/resources/Tr2MaterialRes.js +0 -34
  514. package/dist/resources/Tr2MaterialRes.js.map +0 -1
  515. package/dist/resources/Tr2ShaderPermutation.js +0 -43
  516. package/dist/resources/Tr2ShaderPermutation.js.map +0 -1
  517. package/dist/resources/Tr2TextureLodManager.js.map +0 -1
  518. package/dist/resources/Tr2TextureLodUpdateRequest.js.map +0 -1
  519. package/dist/resources/Tr2TexturePackChannel.js.map +0 -1
  520. package/dist/resources/Tr2TexturePipeline.js.map +0 -1
  521. package/dist/resources/Tr2TexturePipelineParams.js.map +0 -1
  522. package/dist/resources/Tr2TexturePipelineStepCompress.js.map +0 -1
  523. package/dist/resources/Tr2TexturePipelineStepGenerateMips.js.map +0 -1
  524. package/dist/resources/Tr2TexturePipelineStepLimitSize.js.map +0 -1
  525. package/dist/resources/Tr2TexturePipelineStepLoad.js.map +0 -1
  526. package/dist/resources/Tr2TexturePipelineStepPack.js.map +0 -1
  527. package/dist/resources/TriGeometryRes.js +0 -239
  528. package/dist/resources/TriGeometryRes.js.map +0 -1
  529. package/dist/resources/TriGeometryResAreaData.js.map +0 -1
  530. package/dist/resources/TriGeometryResJointData.js.map +0 -1
  531. package/dist/resources/TriGeometryResLodData.js.map +0 -1
  532. package/dist/resources/TriGeometryResMeshData.js.map +0 -1
  533. package/dist/resources/TriGeometryResSkeletonData.js.map +0 -1
  534. package/dist/resources/TriGrannyRes.js.map +0 -1
  535. package/dist/resources/TriJointBinding.js.map +0 -1
  536. package/dist/resources/TriMorphTargetGeometryConstants.js.map +0 -1
  537. package/dist/resources/TriRtGeometryConstants.js.map +0 -1
  538. package/dist/resources/TriTextureRes.js.map +0 -1
  539. package/dist/resources/enums.js.map +0 -1
  540. package/dist/resources/resourceBoundary.js +0 -47
  541. package/dist/resources/resourceBoundary.js.map +0 -1
  542. package/dist/resources/texturePipelineBehavior.js.map +0 -1
  543. package/dist/texture/CjsTextureArrayRes.js.map +0 -1
  544. package/dist/texture/CjsTextureParameterProxy.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"binary.js","sources":["../../../../../../src/formats/webgpu/core/cewgpu/binary.js"],"sourcesContent":["import { WebgpuReadError } from \"../errors.js\";\n\n/**\n * Returns a byte view for supported binary inputs without copying when\n * possible.\n *\n * @param {ArrayBuffer|ArrayBufferView|Uint8Array} value Binary payload.\n * @returns {Uint8Array} Normalized byte view.\n */\nexport function asUint8Array(value)\n{\n if (value instanceof Uint8Array) return value;\n if (value instanceof ArrayBuffer) return new Uint8Array(value);\n if (ArrayBuffer.isView(value))\n {\n return new Uint8Array(value.buffer, value.byteOffset, value.byteLength);\n }\n throw new TypeError(\"Expected an ArrayBuffer or Uint8Array\");\n}\n\n/**\n * Minimal little-endian binary reader for the flat CEWGPU chunk container.\n */\nexport class WebgpuReader\n{\n /**\n * Creates a reader over a byte payload.\n *\n * @param {ArrayBuffer|ArrayBufferView|Uint8Array} bytes Source payload.\n * @param {object} [options] Reader bounds and metadata.\n * @param {number} [options.offset] Initial byte offset.\n * @param {number} [options.end] Exclusive end offset.\n * @param {string} [options.source] Source name used in error details.\n */\n constructor(bytes, options = {})\n {\n this.bytes = asUint8Array(bytes);\n this.view = new DataView(this.bytes.buffer, this.bytes.byteOffset, this.bytes.byteLength);\n this.offset = Number(options.offset) || 0;\n this.end = Number.isInteger(options.end) ? options.end : this.bytes.length;\n this.source = options.source || \"memory\";\n }\n\n /**\n * Returns the unread byte count inside the configured reader bounds.\n *\n * @returns {number} Remaining bytes.\n */\n get remaining()\n {\n return this.end - this.offset;\n }\n\n /**\n * Reads a byte range from the payload.\n *\n * @param {number} size Byte count to read.\n * @returns {Uint8Array} View over the read bytes.\n */\n readRaw(size)\n {\n this._require(size);\n const start = this.offset;\n this.offset += size;\n return this.bytes.subarray(start, start + size);\n }\n\n /**\n * Reads a little-endian unsigned 32-bit integer.\n *\n * @returns {number} Integer value.\n */\n readUint32()\n {\n this._require(4);\n const value = this.view.getUint32(this.offset, true);\n this.offset += 4;\n return value;\n }\n\n /**\n * Ensures the requested read fits inside the configured payload bounds.\n *\n * @param {number} size Requested byte count.\n * @private\n */\n _require(size)\n {\n if (!Number.isInteger(size) || size < 0 || this.offset + size > this.end)\n {\n throw new WebgpuReadError(\"Unexpected end of CEWGPU package data\", {\n source: this.source,\n offset: this.offset,\n requested: size,\n end: this.end\n });\n }\n }\n}\n"],"names":["asUint8Array","value","Uint8Array","ArrayBuffer","isView","buffer","byteOffset","byteLength","TypeError","WebgpuReader","constructor","bytes","options","view","DataView","offset","Number","end","isInteger","length","source","remaining","readRaw","size","_require","start","subarray","readUint32","getUint32","WebgpuReadError","requested"],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ const PRINTABLE_ASCII_TAG = /^[\x20-\x7e]{4}$/u;
2
+
3
+ /**
4
+ * Validate one four-byte printable ASCII CEWGPU chunk tag.
5
+ *
6
+ * @param {string} tag Candidate chunk tag.
7
+ * @returns {string} The validated tag.
8
+ */
9
+ function validateCewgpuChunkTag(tag) {
10
+ if (typeof tag !== "string" || !PRINTABLE_ASCII_TAG.test(tag)) {
11
+ throw new Error(`CEWGPU chunk tag must be four printable ASCII characters: ${tag}`);
12
+ }
13
+ return tag;
14
+ }
15
+
16
+ export { validateCewgpuChunkTag };
17
+ //# sourceMappingURL=tags.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tags.js","sources":["../../../../../../src/formats/webgpu/core/cewgpu/tags.js"],"sourcesContent":["const PRINTABLE_ASCII_TAG = /^[\\x20-\\x7e]{4}$/u;\n\n/**\n * Validate one four-byte printable ASCII CEWGPU chunk tag.\n *\n * @param {string} tag Candidate chunk tag.\n * @returns {string} The validated tag.\n */\nexport function validateCewgpuChunkTag(tag)\n{\n if (typeof tag !== \"string\" || !PRINTABLE_ASCII_TAG.test(tag))\n {\n throw new Error(`CEWGPU chunk tag must be four printable ASCII characters: ${tag}`);\n }\n\n return tag;\n}\n"],"names":["PRINTABLE_ASCII_TAG","validateCewgpuChunkTag","tag","test","Error"],"mappings":"AAAA,MAAMA,mBAAmB,GAAG,mBAAmB;;AAE/C;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,sBAAsBA,CAACC,GAAG,EAC1C;AACI,EAAA,IAAI,OAAOA,GAAG,KAAK,QAAQ,IAAI,CAACF,mBAAmB,CAACG,IAAI,CAACD,GAAG,CAAC,EAC7D;AACI,IAAA,MAAM,IAAIE,KAAK,CAAC,CAAA,0DAAA,EAA6DF,GAAG,EAAE,CAAC;AACvF,EAAA;AAEA,EAAA,OAAOA,GAAG;AACd;;;;"}
@@ -0,0 +1,82 @@
1
+ import { readEffectAnalysis as readEffectAnalysis$1 } from '../../hlsl/core/analysis.js';
2
+
3
+ /**
4
+ * Copy supported byte containers into an independent active byte view.
5
+ *
6
+ * @param {Array|ArrayBuffer|ArrayBufferView|null|undefined} value Byte source.
7
+ * @param {string} context Error context.
8
+ * @returns {Uint8Array|null} Copied bytes, or null when absent.
9
+ */
10
+ function normalizeBytecodeBytes(value, context) {
11
+ if (value === undefined || value === null) return null;
12
+ if (Array.isArray(value)) {
13
+ for (let index = 0; index < value.length; index++) {
14
+ if (!Object.prototype.hasOwnProperty.call(value, index) || !Number.isInteger(value[index]) || value[index] < 0 || value[index] > 255) {
15
+ throw new TypeError(`${context} must contain only byte values`);
16
+ }
17
+ }
18
+ return Uint8Array.from(value);
19
+ }
20
+ if (value instanceof Uint8Array) return Uint8Array.from(value);
21
+ if (value instanceof ArrayBuffer) return new Uint8Array(value.slice(0));
22
+ if (ArrayBuffer.isView(value)) {
23
+ return Uint8Array.from(new Uint8Array(value.buffer, value.byteOffset, value.byteLength));
24
+ }
25
+ throw new TypeError(`${context} must be an array or byte view`);
26
+ }
27
+ function collectStageBytecodeByKey(effectDescription) {
28
+ const bytecodeByKey = new Map();
29
+ for (const technique of effectDescription?.techniques ?? []) {
30
+ for (let passIndex = 0; passIndex < technique.passes.length; passIndex++) {
31
+ const stageInputs = technique.passes[passIndex].stageInputs;
32
+ for (let stageType = 0; stageType < stageInputs.length; stageType++) {
33
+ const stage = stageInputs[stageType];
34
+ if (!stage?.m_exists) continue;
35
+ const stageName = stage.cjsShaderBytecode?.stageName;
36
+ const bytecodeStageType = stage.cjsShaderBytecode?.stageType;
37
+ const value = stage.cjsShaderBytecode?.bytes;
38
+ if (!stageName || value === undefined || value === null) continue;
39
+ if (!Number.isInteger(bytecodeStageType) || bytecodeStageType !== stageType) {
40
+ throw new Error(`${technique.name}.pass${passIndex}.${stageName} stage type metadata is inconsistent`);
41
+ }
42
+ const key = `${technique.name}.pass${passIndex}.${stageName}`;
43
+ if (bytecodeByKey.has(key)) {
44
+ throw new Error(`Resolved effect contains duplicate stage bytecode ${key}`);
45
+ }
46
+ const bytes = normalizeBytecodeBytes(value, `${key} stage bytecode`);
47
+ if (!bytes?.length) {
48
+ throw new TypeError(`${key} stage bytecode must be a non-empty byte view`);
49
+ }
50
+ bytecodeByKey.set(key, {
51
+ techniqueName: technique.name,
52
+ passIndex,
53
+ stageType,
54
+ stageName,
55
+ bytes
56
+ });
57
+ }
58
+ }
59
+ }
60
+ return bytecodeByKey;
61
+ }
62
+
63
+ /**
64
+ * Resolve one compiled-effect permutation for WebGPU packaging.
65
+ *
66
+ * format-hlsl owns source parsing, selected-permutation resolution, and the
67
+ * binding manifest. This adapter adds only a validated transient byte index.
68
+ *
69
+ * @param {Uint8Array|ArrayBuffer|Buffer|DataView} input Tr2 effect bytes.
70
+ * @param {object} [options] Source and permutation options.
71
+ * @returns {object} Resolved raw effect, selection, reflection, and transient stage bytes.
72
+ */
73
+ function readEffectAnalysis(input, options = {}) {
74
+ const resolved = readEffectAnalysis$1(input, options);
75
+ return {
76
+ ...resolved,
77
+ stageBytecodeByKey: collectStageBytecodeByKey(resolved.effectDescription)
78
+ };
79
+ }
80
+
81
+ export { normalizeBytecodeBytes, readEffectAnalysis };
82
+ //# sourceMappingURL=effectAnalysis.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"effectAnalysis.js","sources":["../../../../../src/formats/webgpu/core/effectAnalysis.js"],"sourcesContent":["import { readEffectAnalysis as readHlslEffectAnalysis } from \"../../hlsl/core/analysis.js\";\n\n/**\n * Copy supported byte containers into an independent active byte view.\n *\n * @param {Array|ArrayBuffer|ArrayBufferView|null|undefined} value Byte source.\n * @param {string} context Error context.\n * @returns {Uint8Array|null} Copied bytes, or null when absent.\n */\nexport function normalizeBytecodeBytes(value, context)\n{\n if (value === undefined || value === null) return null;\n\n if (Array.isArray(value))\n {\n for (let index = 0; index < value.length; index++)\n {\n if (!Object.prototype.hasOwnProperty.call(value, index)\n || !Number.isInteger(value[index])\n || value[index] < 0\n || value[index] > 255)\n {\n throw new TypeError(`${context} must contain only byte values`);\n }\n }\n\n return Uint8Array.from(value);\n }\n\n if (value instanceof Uint8Array) return Uint8Array.from(value);\n if (value instanceof ArrayBuffer) return new Uint8Array(value.slice(0));\n if (ArrayBuffer.isView(value))\n {\n return Uint8Array.from(new Uint8Array(\n value.buffer,\n value.byteOffset,\n value.byteLength\n ));\n }\n\n throw new TypeError(`${context} must be an array or byte view`);\n}\n\nfunction collectStageBytecodeByKey(effectDescription)\n{\n const bytecodeByKey = new Map();\n\n for (const technique of effectDescription?.techniques ?? [])\n {\n for (let passIndex = 0; passIndex < technique.passes.length; passIndex++)\n {\n const stageInputs = technique.passes[passIndex].stageInputs;\n for (let stageType = 0; stageType < stageInputs.length; stageType++)\n {\n const stage = stageInputs[stageType];\n if (!stage?.m_exists) continue;\n\n const stageName = stage.cjsShaderBytecode?.stageName;\n const bytecodeStageType = stage.cjsShaderBytecode?.stageType;\n const value = stage.cjsShaderBytecode?.bytes;\n\n if (!stageName || value === undefined || value === null) continue;\n if (!Number.isInteger(bytecodeStageType) || bytecodeStageType !== stageType)\n {\n throw new Error(\n `${technique.name}.pass${passIndex}.${stageName} stage type metadata is inconsistent`\n );\n }\n\n const key = `${technique.name}.pass${passIndex}.${stageName}`;\n if (bytecodeByKey.has(key))\n {\n throw new Error(`Resolved effect contains duplicate stage bytecode ${key}`);\n }\n\n const bytes = normalizeBytecodeBytes(value, `${key} stage bytecode`);\n if (!bytes?.length)\n {\n throw new TypeError(`${key} stage bytecode must be a non-empty byte view`);\n }\n\n bytecodeByKey.set(key, {\n techniqueName: technique.name,\n passIndex,\n stageType,\n stageName,\n bytes\n });\n }\n }\n }\n\n return bytecodeByKey;\n}\n\n/**\n * Resolve one compiled-effect permutation for WebGPU packaging.\n *\n * format-hlsl owns source parsing, selected-permutation resolution, and the\n * binding manifest. This adapter adds only a validated transient byte index.\n *\n * @param {Uint8Array|ArrayBuffer|Buffer|DataView} input Tr2 effect bytes.\n * @param {object} [options] Source and permutation options.\n * @returns {object} Resolved raw effect, selection, reflection, and transient stage bytes.\n */\nexport function readEffectAnalysis(input, options = {})\n{\n const resolved = readHlslEffectAnalysis(input, options);\n\n return {\n ...resolved,\n stageBytecodeByKey: collectStageBytecodeByKey(resolved.effectDescription)\n };\n}\n"],"names":["normalizeBytecodeBytes","value","context","undefined","Array","isArray","index","length","Object","prototype","hasOwnProperty","call","Number","isInteger","TypeError","Uint8Array","from","ArrayBuffer","slice","isView","buffer","byteOffset","byteLength","collectStageBytecodeByKey","effectDescription","bytecodeByKey","Map","technique","techniques","passIndex","passes","stageInputs","stageType","stage","m_exists","stageName","cjsShaderBytecode","bytecodeStageType","bytes","Error","name","key","has","set","techniqueName","readEffectAnalysis","input","options","resolved","readHlslEffectAnalysis","stageBytecodeByKey"],"mappings":"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"}
@@ -0,0 +1,305 @@
1
+ import { HlslEffectBindingManifest } from '../../hlsl/core/tr2/shader/HlslEffectBindingManifest.js';
2
+ import { enumerateUniqueEffectBodies } from '../../hlsl/core/portableReflection.js';
3
+ import { buildEffectAnalysis } from './helpers.js';
4
+ import { normalizeBytecodeBytes } from './effectAnalysis.js';
5
+ import { lowerDxbcToIr } from './ir/lowerDxbcToIr.js';
6
+ import { buildWgslBindingPlan } from './wgsl/buildWgslBindingPlan.js';
7
+ import { buildWgsl } from './wgsl/emitWgsl.js';
8
+ import { buildWgslSet } from './wgsl/buildWgslSet.js';
9
+ import { buildResourceTransformPlan } from './wgsl/buildResourceTransformPlan.js';
10
+ import { sha256Utf8, sha256Bytes } from '../../../format/effect/sha256.js';
11
+ import { selectEffectStages } from './packageEffectSelection.js';
12
+ import { isParticleClearEffectCandidate, preflightParticleClearEffectProfile, particleClearEffectProofFor } from './wgsl/lowerParticleClearComputePrograms.js';
13
+
14
+ const EFFECT_BACKEND_BODY_SET_CHUNK = "WGSB";
15
+ const EFFECT_BACKEND_BODY_SET_FORMAT = "CJS_WGSL_BODY_SET";
16
+ const EFFECT_BACKEND_BODY_SET_VERSION = 1;
17
+
18
+ /**
19
+ * One translation unit is exactly one pass of one body: the binding plan, the
20
+ * resource-transform plan, and every stage's emitted WGSL are derived together.
21
+ * Bodies that share an identical pass signature therefore share one unit.
22
+ *
23
+ * @param {object} pass Pass entry carrying its ordered stage records.
24
+ * @returns {string} Stable signature for the pass translation unit.
25
+ */
26
+ function passUnitSignature(pass) {
27
+ return JSON.stringify({
28
+ passKey: pass.passKey,
29
+ stages: pass.stages.map(stage => ({
30
+ stageName: stage.stageName,
31
+ bytecode: stage.bytecodeDigest,
32
+ semanticBindings: stage.semanticBindings,
33
+ // An effect profile changes emission, so two otherwise identical
34
+ // passes must not share one unit when their proofs differ.
35
+ effectProfileProof: stage.effectProfileProof ? sha256Utf8(JSON.stringify(stage.effectProfileProof)) : null
36
+ })).sort((left, right) => left.stageName.localeCompare(right.stageName))
37
+ });
38
+ }
39
+ function collectBodyStageBytecode(effectDescription) {
40
+ const bytecodeByKey = new Map();
41
+ for (const technique of effectDescription?.techniques ?? []) {
42
+ for (let passIndex = 0; passIndex < technique.passes.length; passIndex++) {
43
+ const stageInputs = technique.passes[passIndex].stageInputs;
44
+ for (let stageType = 0; stageType < stageInputs.length; stageType++) {
45
+ const stage = stageInputs[stageType];
46
+ if (!stage?.m_exists) continue;
47
+ const stageName = stage.cjsShaderBytecode?.stageName;
48
+ const value = stage.cjsShaderBytecode?.bytes;
49
+ if (!stageName || value === undefined || value === null) continue;
50
+ const key = `${technique.name}.pass${passIndex}.${stageName}`;
51
+ const bytes = normalizeBytecodeBytes(value, `${key} stage bytecode`);
52
+ if (!bytes?.length) {
53
+ throw new TypeError(`${key} stage bytecode must be a non-empty byte view`);
54
+ }
55
+ bytecodeByKey.set(key, {
56
+ techniqueName: technique.name,
57
+ passIndex,
58
+ stageType,
59
+ stageName,
60
+ bytes
61
+ });
62
+ }
63
+ }
64
+ }
65
+ return bytecodeByKey;
66
+ }
67
+ function resolveBody(effectRes, permutationIndex, source) {
68
+ const shader = effectRes.GetShaderByIndex(permutationIndex);
69
+ if (!shader) {
70
+ throw new Error(`Effect body at permutation ${permutationIndex} could not be decoded`);
71
+ }
72
+ const effectDescription = shader.GetEffectDescription();
73
+ if (!effectDescription) {
74
+ throw new Error(`Effect body at permutation ${permutationIndex} has no effect description`);
75
+ }
76
+ const resolved = {
77
+ effectRes,
78
+ shader,
79
+ selection: {
80
+ bodyIndex: permutationIndex,
81
+ selectedOptions: []
82
+ },
83
+ effectDescription,
84
+ bindingManifest: HlslEffectBindingManifest.fromEffectDescription(effectDescription),
85
+ stageBytecodeByKey: collectBodyStageBytecode(effectDescription)
86
+ };
87
+ return {
88
+ resolved,
89
+ analysis: buildEffectAnalysis(resolved, {
90
+ source,
91
+ decodeBytecode: false,
92
+ decodeInstructions: false
93
+ })
94
+ };
95
+ }
96
+ function buildPassEntries(analysis, resolved, selection, effectProfileContext) {
97
+ const selectedStages = selectEffectStages(analysis.stages, selection);
98
+ const passes = new Map();
99
+ for (const stage of selectedStages) {
100
+ const passKey = `${stage.techniqueName}.pass${stage.passIndex}`;
101
+ if (!passes.has(passKey)) {
102
+ passes.set(passKey, {
103
+ passKey,
104
+ stages: []
105
+ });
106
+ }
107
+ const bytecode = resolved.stageBytecodeByKey.get(stage.key)?.bytes;
108
+ if (!bytecode?.length) {
109
+ throw new Error(`${stage.key} has no shader bytecode`);
110
+ }
111
+ passes.get(passKey).stages.push({
112
+ key: stage.key,
113
+ stageName: stage.stageName,
114
+ bytecodeKey: stage.key,
115
+ bytecodeDigest: sha256Bytes(bytecode),
116
+ semanticBindings: analysis.stages.find(candidate => candidate.techniqueName === stage.techniqueName && candidate.passIndex === stage.passIndex && candidate.stageName === stage.stageName)?.bindings || [],
117
+ effectProfileProof: particleClearEffectProofFor(effectProfileContext, stage.key)
118
+ });
119
+ }
120
+ return Array.from(passes.values());
121
+ }
122
+ function translatePassUnit(pass, programForKey, source, bindingPolicy) {
123
+ const irEntries = pass.stages.map(stage => ({
124
+ key: stage.key,
125
+ ir: programForKey(stage.bytecodeKey),
126
+ semanticBindings: stage.semanticBindings,
127
+ effectProfileProof: stage.effectProfileProof
128
+ }));
129
+ const resourceTransformPlan = buildResourceTransformPlan(irEntries.map(entry => ({
130
+ ir: entry.ir,
131
+ semanticBindings: entry.semanticBindings
132
+ })), {
133
+ layoutKey: pass.passKey
134
+ });
135
+ const proof = irEntries.find(entry => entry.effectProfileProof)?.effectProfileProof ?? null;
136
+ const plan = buildWgslBindingPlan(irEntries.map(entry => entry.ir), {
137
+ ...(bindingPolicy ?? {}),
138
+ ...(proof ? {
139
+ effectProfileProof: proof
140
+ } : {}),
141
+ ...(resourceTransformPlan ? {
142
+ resourceTransformPlan
143
+ } : {})
144
+ });
145
+ return buildWgslSet(irEntries.map(entry => ({
146
+ key: entry.key,
147
+ shader: buildWgsl(entry.ir, {
148
+ bindingPlan: plan,
149
+ ...(resourceTransformPlan ? {
150
+ resourceTransformPlan
151
+ } : {}),
152
+ ...(entry.effectProfileProof ? {
153
+ effectProfileProof: entry.effectProfileProof
154
+ } : {})
155
+ })
156
+ })));
157
+ }
158
+
159
+ /**
160
+ * Translate every unique source body into backend programs, layouts, and
161
+ * resource transforms, sharing one translation unit between bodies whose pass
162
+ * is byte-for-byte identical.
163
+ *
164
+ * A body that cannot be lowered is retained as an explicitly unsupported
165
+ * record. Its complete source reflection stays in `RFLX`, so a partial backend
166
+ * never removes source truth.
167
+ *
168
+ * @param {object} effectRes Loaded version-15 `Tr2EffectRes`.
169
+ * @param {object} permutationGraph Validated `PGRF` document.
170
+ * @param {object} [options] Source label, stage selection, and binding policy.
171
+ * @returns {object} Frozen `CJS_WGSL_BODY_SET` document.
172
+ */
173
+ function buildEffectBackendBodySet(effectRes, permutationGraph, options = {}) {
174
+ const source = options.source || "memory";
175
+ const selection = options.selection ?? null;
176
+ const bindingPolicy = options.bindingPolicy ?? null;
177
+ const groups = enumerateUniqueEffectBodies(effectRes);
178
+ if (groups.length !== permutationGraph.bodies.length) {
179
+ throw new Error("Effect backend body set requires one unique body per permutation-graph body");
180
+ }
181
+ const unitsBySignature = new Map();
182
+ const graphBodiesByKey = new Map(permutationGraph.bodies.map(body => [body.key, body]));
183
+ const passUnits = [];
184
+ const bodies = [];
185
+ const seenBodyKeys = new Set();
186
+ for (const group of groups) {
187
+ const variant = permutationGraph.variants[group.permutationIndex];
188
+ const graphBody = variant ? graphBodiesByKey.get(variant.bodyKey) : null;
189
+ if (!graphBody) {
190
+ throw new Error(`Effect backend body ${group.permutationIndex} does not reconcile with its permutation graph record`);
191
+ }
192
+ if (seenBodyKeys.has(graphBody.key)) {
193
+ throw new Error(`Effect backend body ${graphBody.key} was enumerated more than once`);
194
+ }
195
+ seenBodyKeys.add(graphBody.key);
196
+ let resolvedBody = null;
197
+ let passes = null;
198
+ let programForKey = null;
199
+ try {
200
+ resolvedBody = resolveBody(effectRes, group.permutationIndex, source);
201
+
202
+ // One IR cache per body, so a stage shared by two passes lowers once
203
+ // and the effect-profile preflight can seed it exactly as the
204
+ // selected-body path does.
205
+ const programsByKey = new Map();
206
+ programForKey = key => {
207
+ if (programsByKey.has(key)) return programsByKey.get(key);
208
+ const bytecode = resolvedBody.resolved.stageBytecodeByKey.get(key)?.bytes;
209
+ if (!bytecode?.length) {
210
+ throw new Error(`${key} has no shader bytecode`);
211
+ }
212
+ const program = lowerDxbcToIr(bytecode, {
213
+ source: `${source}#${key}`
214
+ });
215
+ programsByKey.set(key, program);
216
+ return program;
217
+ };
218
+ let effectProfileContext = null;
219
+ if (isParticleClearEffectCandidate(resolvedBody.resolved.effectDescription)) {
220
+ programForKey("Main.pass0.compute");
221
+ programForKey("Main.pass1.compute");
222
+ effectProfileContext = preflightParticleClearEffectProfile(resolvedBody.resolved.effectDescription, programsByKey);
223
+ }
224
+ passes = buildPassEntries(resolvedBody.analysis, resolvedBody.resolved, selection, effectProfileContext);
225
+ } catch (error) {
226
+ // Stage selection and profile preflight fail closed per body: an
227
+ // unsupported stage kind in one body must not fail the package.
228
+ bodies.push(Object.freeze({
229
+ bodyKey: graphBody.key,
230
+ representativePermutationIndex: group.permutationIndex,
231
+ status: "unsupported",
232
+ error: String(error?.message ?? error),
233
+ passCount: 0,
234
+ passes: Object.freeze([])
235
+ }));
236
+ continue;
237
+ }
238
+ const bodyPasses = [];
239
+ let failure = null;
240
+ for (const pass of passes) {
241
+ const signature = passUnitSignature(pass);
242
+ let unit = unitsBySignature.get(signature);
243
+ if (!unit) {
244
+ let wgsl = null;
245
+ try {
246
+ wgsl = translatePassUnit(pass, programForKey, source, bindingPolicy);
247
+ } catch (error) {
248
+ failure = String(error?.message ?? error);
249
+ break;
250
+ }
251
+ unit = {
252
+ key: `unit${passUnits.length}`,
253
+ sha256: sha256Utf8(`${JSON.stringify(wgsl)}\n`),
254
+ wgslSetVersion: wgsl.formatVersion,
255
+ shaders: wgsl.shaders,
256
+ layouts: wgsl.layouts,
257
+ ...(wgsl.resourceTransforms ? {
258
+ resourceTransforms: wgsl.resourceTransforms
259
+ } : {})
260
+ };
261
+ unitsBySignature.set(signature, unit);
262
+ passUnits.push(unit);
263
+ }
264
+ bodyPasses.push(Object.freeze({
265
+ passKey: pass.passKey,
266
+ unitKey: unit.key
267
+ }));
268
+ }
269
+ bodies.push(Object.freeze(failure ? {
270
+ bodyKey: graphBody.key,
271
+ representativePermutationIndex: group.permutationIndex,
272
+ status: "unsupported",
273
+ error: failure,
274
+ passCount: 0,
275
+ passes: Object.freeze([])
276
+ } : {
277
+ bodyKey: graphBody.key,
278
+ representativePermutationIndex: group.permutationIndex,
279
+ status: "translated",
280
+ error: null,
281
+ passCount: bodyPasses.length,
282
+ passes: Object.freeze(bodyPasses)
283
+ }));
284
+ }
285
+ const translatedCount = bodies.filter(body => body.status === "translated").length;
286
+ if (!translatedCount) {
287
+ throw new Error("Effect backend body set requires at least one translated body");
288
+ }
289
+ return Object.freeze({
290
+ format: EFFECT_BACKEND_BODY_SET_FORMAT,
291
+ formatVersion: EFFECT_BACKEND_BODY_SET_VERSION,
292
+ coverage: Object.freeze({
293
+ bodies: translatedCount === bodies.length ? "all-unique" : "partial",
294
+ programs: "complete-for-translated"
295
+ }),
296
+ bodyCount: bodies.length,
297
+ translatedBodyCount: translatedCount,
298
+ passUnitCount: passUnits.length,
299
+ passUnits: Object.freeze(passUnits.map(unit => Object.freeze(unit))),
300
+ bodies: Object.freeze(bodies)
301
+ });
302
+ }
303
+
304
+ export { EFFECT_BACKEND_BODY_SET_CHUNK, EFFECT_BACKEND_BODY_SET_FORMAT, EFFECT_BACKEND_BODY_SET_VERSION, buildEffectBackendBodySet };
305
+ //# sourceMappingURL=effectBackendBodySet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"effectBackendBodySet.js","sources":["../../../../../src/formats/webgpu/core/effectBackendBodySet.js"],"sourcesContent":["import { HlslEffectBindingManifest } from \"../../hlsl/core/tr2/shader/HlslEffectBindingManifest.js\";\nimport { enumerateUniqueEffectBodies } from \"../../hlsl/portable.js\";\nimport { buildEffectAnalysis } from \"./helpers.js\";\nimport { normalizeBytecodeBytes } from \"./effectAnalysis.js\";\nimport { lowerDxbcToIr } from \"./ir/lowerDxbcToIr.js\";\nimport { buildWgslBindingPlan } from \"./wgsl/buildWgslBindingPlan.js\";\nimport { buildWgsl } from \"./wgsl/emitWgsl.js\";\nimport { buildWgslSet } from \"./wgsl/buildWgslSet.js\";\nimport { buildResourceTransformPlan } from \"./wgsl/buildResourceTransformPlan.js\";\nimport { sha256Bytes, sha256Utf8 } from \"../../../format/effect/sha256.js\";\nimport { selectEffectStages } from \"./packageEffectSelection.js\";\nimport {\n isParticleClearEffectCandidate,\n particleClearEffectProofFor,\n preflightParticleClearEffectProfile\n} from \"./wgsl/lowerParticleClearComputePrograms.js\";\n\nexport const EFFECT_BACKEND_BODY_SET_CHUNK = \"WGSB\";\nexport const EFFECT_BACKEND_BODY_SET_FORMAT = \"CJS_WGSL_BODY_SET\";\nexport const EFFECT_BACKEND_BODY_SET_VERSION = 1;\n\n/**\n * One translation unit is exactly one pass of one body: the binding plan, the\n * resource-transform plan, and every stage's emitted WGSL are derived together.\n * Bodies that share an identical pass signature therefore share one unit.\n *\n * @param {object} pass Pass entry carrying its ordered stage records.\n * @returns {string} Stable signature for the pass translation unit.\n */\nfunction passUnitSignature(pass)\n{\n return JSON.stringify({\n passKey: pass.passKey,\n stages: pass.stages\n .map((stage) => ({\n stageName: stage.stageName,\n bytecode: stage.bytecodeDigest,\n semanticBindings: stage.semanticBindings,\n // An effect profile changes emission, so two otherwise identical\n // passes must not share one unit when their proofs differ.\n effectProfileProof: stage.effectProfileProof\n ? sha256Utf8(JSON.stringify(stage.effectProfileProof))\n : null\n }))\n .sort((left, right) => left.stageName.localeCompare(right.stageName))\n });\n}\n\nfunction collectBodyStageBytecode(effectDescription)\n{\n const bytecodeByKey = new Map();\n\n for (const technique of effectDescription?.techniques ?? [])\n {\n for (let passIndex = 0; passIndex < technique.passes.length; passIndex++)\n {\n const stageInputs = technique.passes[passIndex].stageInputs;\n\n for (let stageType = 0; stageType < stageInputs.length; stageType++)\n {\n const stage = stageInputs[stageType];\n if (!stage?.m_exists) continue;\n\n const stageName = stage.cjsShaderBytecode?.stageName;\n const value = stage.cjsShaderBytecode?.bytes;\n if (!stageName || value === undefined || value === null) continue;\n\n const key = `${technique.name}.pass${passIndex}.${stageName}`;\n const bytes = normalizeBytecodeBytes(value, `${key} stage bytecode`);\n\n if (!bytes?.length)\n {\n throw new TypeError(`${key} stage bytecode must be a non-empty byte view`);\n }\n\n bytecodeByKey.set(key, {\n techniqueName: technique.name,\n passIndex,\n stageType,\n stageName,\n bytes\n });\n }\n }\n }\n\n return bytecodeByKey;\n}\n\nfunction resolveBody(effectRes, permutationIndex, source)\n{\n const shader = effectRes.GetShaderByIndex(permutationIndex);\n\n if (!shader)\n {\n throw new Error(\n `Effect body at permutation ${permutationIndex} could not be decoded`\n );\n }\n\n const effectDescription = shader.GetEffectDescription();\n\n if (!effectDescription)\n {\n throw new Error(\n `Effect body at permutation ${permutationIndex} has no effect description`\n );\n }\n\n const resolved = {\n effectRes,\n shader,\n selection: { bodyIndex: permutationIndex, selectedOptions: [] },\n effectDescription,\n bindingManifest: HlslEffectBindingManifest.fromEffectDescription(effectDescription),\n stageBytecodeByKey: collectBodyStageBytecode(effectDescription)\n };\n\n return {\n resolved,\n analysis: buildEffectAnalysis(resolved, {\n source,\n decodeBytecode: false,\n decodeInstructions: false\n })\n };\n}\n\nfunction buildPassEntries(analysis, resolved, selection, effectProfileContext)\n{\n const selectedStages = selectEffectStages(analysis.stages, selection);\n const passes = new Map();\n\n for (const stage of selectedStages)\n {\n const passKey = `${stage.techniqueName}.pass${stage.passIndex}`;\n\n if (!passes.has(passKey))\n {\n passes.set(passKey, { passKey, stages: [] });\n }\n\n const bytecode = resolved.stageBytecodeByKey.get(stage.key)?.bytes;\n\n if (!bytecode?.length)\n {\n throw new Error(`${stage.key} has no shader bytecode`);\n }\n\n passes.get(passKey).stages.push({\n key: stage.key,\n stageName: stage.stageName,\n bytecodeKey: stage.key,\n bytecodeDigest: sha256Bytes(bytecode),\n semanticBindings: analysis.stages.find((candidate) =>\n candidate.techniqueName === stage.techniqueName\n && candidate.passIndex === stage.passIndex\n && candidate.stageName === stage.stageName)?.bindings || [],\n effectProfileProof: particleClearEffectProofFor(\n effectProfileContext,\n stage.key\n )\n });\n }\n\n return Array.from(passes.values());\n}\n\nfunction translatePassUnit(pass, programForKey, source, bindingPolicy)\n{\n const irEntries = pass.stages.map((stage) => ({\n key: stage.key,\n ir: programForKey(stage.bytecodeKey),\n semanticBindings: stage.semanticBindings,\n effectProfileProof: stage.effectProfileProof\n }));\n const resourceTransformPlan = buildResourceTransformPlan(\n irEntries.map((entry) => ({\n ir: entry.ir,\n semanticBindings: entry.semanticBindings\n })),\n { layoutKey: pass.passKey }\n );\n const proof = irEntries.find((entry) => entry.effectProfileProof)\n ?.effectProfileProof ?? null;\n const plan = buildWgslBindingPlan(\n irEntries.map((entry) => entry.ir),\n {\n ...(bindingPolicy ?? {}),\n ...(proof ? { effectProfileProof: proof } : {}),\n ...(resourceTransformPlan ? { resourceTransformPlan } : {})\n }\n );\n\n return buildWgslSet(irEntries.map((entry) => ({\n key: entry.key,\n shader: buildWgsl(entry.ir, {\n bindingPlan: plan,\n ...(resourceTransformPlan ? { resourceTransformPlan } : {}),\n ...(entry.effectProfileProof\n ? { effectProfileProof: entry.effectProfileProof }\n : {})\n })\n })));\n}\n\n/**\n * Translate every unique source body into backend programs, layouts, and\n * resource transforms, sharing one translation unit between bodies whose pass\n * is byte-for-byte identical.\n *\n * A body that cannot be lowered is retained as an explicitly unsupported\n * record. Its complete source reflection stays in `RFLX`, so a partial backend\n * never removes source truth.\n *\n * @param {object} effectRes Loaded version-15 `Tr2EffectRes`.\n * @param {object} permutationGraph Validated `PGRF` document.\n * @param {object} [options] Source label, stage selection, and binding policy.\n * @returns {object} Frozen `CJS_WGSL_BODY_SET` document.\n */\nexport function buildEffectBackendBodySet(effectRes, permutationGraph, options = {})\n{\n const source = options.source || \"memory\";\n const selection = options.selection ?? null;\n const bindingPolicy = options.bindingPolicy ?? null;\n const groups = enumerateUniqueEffectBodies(effectRes);\n\n if (groups.length !== permutationGraph.bodies.length)\n {\n throw new Error(\n \"Effect backend body set requires one unique body per permutation-graph body\"\n );\n }\n\n const unitsBySignature = new Map();\n const graphBodiesByKey = new Map(permutationGraph.bodies.map((body) => [ body.key, body ]));\n const passUnits = [];\n const bodies = [];\n const seenBodyKeys = new Set();\n\n for (const group of groups)\n {\n const variant = permutationGraph.variants[group.permutationIndex];\n const graphBody = variant ? graphBodiesByKey.get(variant.bodyKey) : null;\n\n if (!graphBody)\n {\n throw new Error(\n `Effect backend body ${group.permutationIndex} does not reconcile with its permutation graph record`\n );\n }\n\n if (seenBodyKeys.has(graphBody.key))\n {\n throw new Error(\n `Effect backend body ${graphBody.key} was enumerated more than once`\n );\n }\n\n seenBodyKeys.add(graphBody.key);\n\n let resolvedBody = null;\n let passes = null;\n let programForKey = null;\n\n try\n {\n resolvedBody = resolveBody(effectRes, group.permutationIndex, source);\n\n // One IR cache per body, so a stage shared by two passes lowers once\n // and the effect-profile preflight can seed it exactly as the\n // selected-body path does.\n const programsByKey = new Map();\n programForKey = (key) =>\n {\n if (programsByKey.has(key)) return programsByKey.get(key);\n\n const bytecode = resolvedBody.resolved.stageBytecodeByKey.get(key)?.bytes;\n\n if (!bytecode?.length)\n {\n throw new Error(`${key} has no shader bytecode`);\n }\n\n const program = lowerDxbcToIr(bytecode, { source: `${source}#${key}` });\n programsByKey.set(key, program);\n return program;\n };\n\n let effectProfileContext = null;\n\n if (isParticleClearEffectCandidate(resolvedBody.resolved.effectDescription))\n {\n programForKey(\"Main.pass0.compute\");\n programForKey(\"Main.pass1.compute\");\n effectProfileContext = preflightParticleClearEffectProfile(\n resolvedBody.resolved.effectDescription,\n programsByKey\n );\n }\n\n passes = buildPassEntries(\n resolvedBody.analysis,\n resolvedBody.resolved,\n selection,\n effectProfileContext\n );\n }\n catch (error)\n {\n // Stage selection and profile preflight fail closed per body: an\n // unsupported stage kind in one body must not fail the package.\n bodies.push(Object.freeze({\n bodyKey: graphBody.key,\n representativePermutationIndex: group.permutationIndex,\n status: \"unsupported\",\n error: String(error?.message ?? error),\n passCount: 0,\n passes: Object.freeze([])\n }));\n continue;\n }\n\n const bodyPasses = [];\n let failure = null;\n\n for (const pass of passes)\n {\n const signature = passUnitSignature(pass);\n let unit = unitsBySignature.get(signature);\n\n if (!unit)\n {\n let wgsl = null;\n\n try\n {\n wgsl = translatePassUnit(\n pass,\n programForKey,\n source,\n bindingPolicy\n );\n }\n catch (error)\n {\n failure = String(error?.message ?? error);\n break;\n }\n\n unit = {\n key: `unit${passUnits.length}`,\n sha256: sha256Utf8(`${JSON.stringify(wgsl)}\\n`),\n wgslSetVersion: wgsl.formatVersion,\n shaders: wgsl.shaders,\n layouts: wgsl.layouts,\n ...(wgsl.resourceTransforms\n ? { resourceTransforms: wgsl.resourceTransforms }\n : {})\n };\n unitsBySignature.set(signature, unit);\n passUnits.push(unit);\n }\n\n bodyPasses.push(Object.freeze({ passKey: pass.passKey, unitKey: unit.key }));\n }\n\n bodies.push(Object.freeze(failure\n ? {\n bodyKey: graphBody.key,\n representativePermutationIndex: group.permutationIndex,\n status: \"unsupported\",\n error: failure,\n passCount: 0,\n passes: Object.freeze([])\n }\n : {\n bodyKey: graphBody.key,\n representativePermutationIndex: group.permutationIndex,\n status: \"translated\",\n error: null,\n passCount: bodyPasses.length,\n passes: Object.freeze(bodyPasses)\n }));\n }\n\n const translatedCount = bodies.filter((body) => body.status === \"translated\").length;\n\n if (!translatedCount)\n {\n throw new Error(\n \"Effect backend body set requires at least one translated body\"\n );\n }\n\n return Object.freeze({\n format: EFFECT_BACKEND_BODY_SET_FORMAT,\n formatVersion: EFFECT_BACKEND_BODY_SET_VERSION,\n coverage: Object.freeze({\n bodies: translatedCount === bodies.length ? \"all-unique\" : \"partial\",\n programs: \"complete-for-translated\"\n }),\n bodyCount: bodies.length,\n translatedBodyCount: translatedCount,\n passUnitCount: passUnits.length,\n passUnits: Object.freeze(passUnits.map((unit) => Object.freeze(unit))),\n bodies: Object.freeze(bodies)\n });\n}\n"],"names":["EFFECT_BACKEND_BODY_SET_CHUNK","EFFECT_BACKEND_BODY_SET_FORMAT","EFFECT_BACKEND_BODY_SET_VERSION","passUnitSignature","pass","JSON","stringify","passKey","stages","map","stage","stageName","bytecode","bytecodeDigest","semanticBindings","effectProfileProof","sha256Utf8","sort","left","right","localeCompare","collectBodyStageBytecode","effectDescription","bytecodeByKey","Map","technique","techniques","passIndex","passes","length","stageInputs","stageType","m_exists","cjsShaderBytecode","value","bytes","undefined","key","name","normalizeBytecodeBytes","TypeError","set","techniqueName","resolveBody","effectRes","permutationIndex","source","shader","GetShaderByIndex","Error","GetEffectDescription","resolved","selection","bodyIndex","selectedOptions","bindingManifest","HlslEffectBindingManifest","fromEffectDescription","stageBytecodeByKey","analysis","buildEffectAnalysis","decodeBytecode","decodeInstructions","buildPassEntries","effectProfileContext","selectedStages","selectEffectStages","has","get","push","bytecodeKey","sha256Bytes","find","candidate","bindings","particleClearEffectProofFor","Array","from","values","translatePassUnit","programForKey","bindingPolicy","irEntries","ir","resourceTransformPlan","buildResourceTransformPlan","entry","layoutKey","proof","plan","buildWgslBindingPlan","buildWgslSet","buildWgsl","bindingPlan","buildEffectBackendBodySet","permutationGraph","options","groups","enumerateUniqueEffectBodies","bodies","unitsBySignature","graphBodiesByKey","body","passUnits","seenBodyKeys","Set","group","variant","variants","graphBody","bodyKey","add","resolvedBody","programsByKey","program","lowerDxbcToIr","isParticleClearEffectCandidate","preflightParticleClearEffectProfile","error","Object","freeze","representativePermutationIndex","status","String","message","passCount","bodyPasses","failure","signature","unit","wgsl","sha256","wgslSetVersion","formatVersion","shaders","layouts","resourceTransforms","unitKey","translatedCount","filter","format","coverage","programs","bodyCount","translatedBodyCount","passUnitCount"],"mappings":"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"}