@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,324 @@
1
+ import { normalizeResourceTransformPlan } from './buildResourceTransformPlan.js';
2
+
3
+ const WGSL_SET_VERSION = 3;
4
+ const KEY_PATTERN = /^(.*)\.pass([0-9]+)\.(vertex|pixel|compute)$/;
5
+ const KEY_STAGE = Object.freeze({
6
+ vertex: "vertex",
7
+ pixel: "fragment",
8
+ compute: "compute"
9
+ });
10
+ const STAGE_TYPES = Object.freeze({
11
+ vertex: 0,
12
+ pixel: 1,
13
+ compute: 2
14
+ });
15
+ const STAGE_NAME_ORDER = Object.freeze(["vertex", "pixel", "compute"]);
16
+ const VISIBILITY_ORDER = Object.freeze(["vertex", "fragment", "compute"]);
17
+ function clonePlain(value) {
18
+ if (Array.isArray(value)) return value.map(clonePlain);
19
+ if (value && typeof value === "object") {
20
+ return Object.fromEntries(Object.entries(value).map(([key, entry]) => [key, clonePlain(entry)]));
21
+ }
22
+ return value;
23
+ }
24
+ function deepFreeze(value) {
25
+ if (!value || typeof value !== "object" || Object.isFrozen(value)) return value;
26
+ for (const entry of Object.values(value)) deepFreeze(entry);
27
+ return Object.freeze(value);
28
+ }
29
+ function normalizeEntry(entry, index) {
30
+ const shader = entry?.shader;
31
+ if (shader?.format !== "CJS_WGSL_SHADER" || shader.formatVersion !== 1 || typeof shader.code !== "string" || !shader.code || typeof shader.entryPoint !== "string" || !shader.entryPoint || !Array.isArray(shader.sourceMap) || shader.program?.format !== "CJS_TYPED_SHADER") {
32
+ throw new TypeError(`WGSL set entry ${index} requires a CJS_WGSL_SHADER descriptor`);
33
+ }
34
+ const key = typeof entry.key === "string" ? entry.key : "";
35
+ const match = KEY_PATTERN.exec(key);
36
+ if (!match || !match[1]) throw new Error(`WGSL set entry ${index} has malformed key ${key || "<empty>"}`);
37
+ const techniqueName = match[1];
38
+ const passIndex = Number(match[2]);
39
+ const stageName = match[3];
40
+ if (shader.stage !== KEY_STAGE[stageName]) {
41
+ throw new Error(`WGSL set key ${key} does not match shader stage ${shader.stage}`);
42
+ }
43
+ let threadGroupSize = null;
44
+ if (stageName === "compute") {
45
+ threadGroupSize = shader.threadGroupSize;
46
+ if (!Array.isArray(threadGroupSize) || threadGroupSize.length !== 3 || threadGroupSize.some(value => !Number.isSafeInteger(value) || value < 1)) {
47
+ throw new Error(`WGSL compute shader ${key} requires a positive three-dimensional threadGroupSize`);
48
+ }
49
+ } else if (shader.threadGroupSize !== undefined && shader.threadGroupSize !== null) {
50
+ throw new Error(`WGSL render shader ${key} cannot declare threadGroupSize`);
51
+ }
52
+ return {
53
+ shader,
54
+ stage: shader.stage,
55
+ techniqueName,
56
+ passIndex,
57
+ stageName,
58
+ stageType: STAGE_TYPES[stageName],
59
+ ...(threadGroupSize ? {
60
+ threadGroupSize: clonePlain(threadGroupSize)
61
+ } : {}),
62
+ key
63
+ };
64
+ }
65
+ function portableBinding(binding, visibility) {
66
+ if (!Number.isInteger(binding.group) || binding.group < 0 || !Number.isInteger(binding.binding) || binding.binding < 0 || !Number.isInteger(binding.registerSpace) || binding.registerSpace < 0 || !Number.isInteger(binding.registerIndex) || binding.registerIndex < 0 || typeof binding.resourceKind !== "string" || !binding.resourceKind || typeof binding.generatedSymbol !== "string" || !binding.generatedSymbol || typeof binding.type !== "string" || !binding.type) {
67
+ throw new Error(`WGSL binding ${binding.id || binding.generatedSymbol || "unknown"} has an invalid portable identity`);
68
+ }
69
+ const identity = `${binding.resourceKind}:${binding.registerSpace}:${binding.registerIndex}`;
70
+ if (binding.scopeIdentity !== undefined && (typeof binding.scopeIdentity !== "string" || !binding.scopeIdentity)) {
71
+ throw new Error(`WGSL binding ${binding.generatedSymbol} has invalid scope identity ${binding.scopeIdentity || "<empty>"}`);
72
+ }
73
+ const scopeIdentity = binding.scopeIdentity === undefined ? `${identity}@${visibility}` : binding.scopeIdentity;
74
+ if (binding.identity !== undefined && binding.identity !== identity) {
75
+ throw new Error(`WGSL binding ${binding.generatedSymbol} has inconsistent D3D identity ${binding.identity}`);
76
+ }
77
+ const hasTransform = binding.transformId !== undefined || binding.arrayLayerCount !== undefined;
78
+ if (hasTransform && (binding.resourceKind !== "sampled-resource" || typeof binding.transformId !== "string" || !binding.transformId || !Number.isInteger(binding.arrayLayerCount) || binding.arrayLayerCount < 2 || binding.type !== "texture_2d_array<f32>" || binding.texture?.viewDimension !== "2d-array")) {
79
+ throw new Error(`WGSL binding ${binding.generatedSymbol} has invalid resource transform metadata`);
80
+ }
81
+ if (scopeIdentity !== identity && scopeIdentity !== `${identity}@${visibility}`) {
82
+ throw new Error(`WGSL binding ${binding.generatedSymbol} has invalid scope identity ${scopeIdentity}`);
83
+ }
84
+ const descriptorKeys = ["buffer", "texture", "sampler"].filter(key => binding[key]);
85
+ const expectedDescriptors = {
86
+ "uniform-buffer": ["buffer"],
87
+ "sampled-resource": ["buffer", "texture"],
88
+ "storage-resource": ["buffer"],
89
+ sampler: ["sampler"]
90
+ }[binding.resourceKind];
91
+ if (!expectedDescriptors || descriptorKeys.length !== 1 || !expectedDescriptors.includes(descriptorKeys[0])) {
92
+ throw new Error(`WGSL binding ${binding.generatedSymbol} has an invalid ${binding.resourceKind} layout descriptor`);
93
+ }
94
+ return {
95
+ identity,
96
+ scopeIdentity,
97
+ resourceKind: binding.resourceKind,
98
+ generatedSymbol: binding.generatedSymbol,
99
+ registerSpace: binding.registerSpace,
100
+ registerIndex: binding.registerIndex,
101
+ group: binding.group,
102
+ binding: binding.binding,
103
+ visibility: [visibility],
104
+ type: binding.type,
105
+ ...(hasTransform ? {
106
+ transformId: binding.transformId,
107
+ arrayLayerCount: binding.arrayLayerCount
108
+ } : {}),
109
+ ...(Number.isInteger(binding.structureStride) ? {
110
+ structureStride: binding.structureStride
111
+ } : {}),
112
+ ...(binding.buffer ? {
113
+ buffer: clonePlain(binding.buffer)
114
+ } : {}),
115
+ ...(binding.texture ? {
116
+ texture: clonePlain(binding.texture)
117
+ } : {}),
118
+ ...(binding.sampler ? {
119
+ sampler: clonePlain(binding.sampler)
120
+ } : {})
121
+ };
122
+ }
123
+ function bindingIdentity(binding) {
124
+ return binding.scopeIdentity || `${binding.resourceKind}:${binding.registerSpace}:${binding.registerIndex}`;
125
+ }
126
+ function bindingFingerprint(binding) {
127
+ return JSON.stringify({
128
+ resourceKind: binding.resourceKind,
129
+ identity: binding.identity,
130
+ scopeIdentity: binding.scopeIdentity,
131
+ generatedSymbol: binding.generatedSymbol,
132
+ registerSpace: binding.registerSpace,
133
+ registerIndex: binding.registerIndex,
134
+ group: binding.group,
135
+ binding: binding.binding,
136
+ type: binding.type,
137
+ transformId: binding.transformId ?? null,
138
+ arrayLayerCount: binding.arrayLayerCount ?? null,
139
+ structureStride: binding.structureStride ?? null,
140
+ buffer: binding.buffer || null,
141
+ texture: binding.texture || null,
142
+ sampler: binding.sampler || null
143
+ });
144
+ }
145
+ function buildLayouts(entries) {
146
+ const passes = new Map();
147
+ for (const entry of entries) {
148
+ const passKey = `${entry.techniqueName}.pass${entry.passIndex}`;
149
+ if (!passes.has(passKey)) {
150
+ passes.set(passKey, {
151
+ identities: new Map(),
152
+ baseScopes: new Map(),
153
+ slots: new Map()
154
+ });
155
+ }
156
+ const pass = passes.get(passKey);
157
+ const symbols = new Map();
158
+ const d3dIdentities = new Set();
159
+ for (const source of entry.shader.program.bindings || []) {
160
+ const binding = portableBinding(source, entry.stage);
161
+ const identity = bindingIdentity(binding);
162
+ if (d3dIdentities.has(binding.identity)) {
163
+ throw new Error(`WGSL shader ${entry.key} contains duplicate D3D identity ${binding.identity}`);
164
+ }
165
+ d3dIdentities.add(binding.identity);
166
+ if (!pass.baseScopes.has(binding.identity)) pass.baseScopes.set(binding.identity, new Set());
167
+ const baseScopes = pass.baseScopes.get(binding.identity);
168
+ if (identity === binding.identity && Array.from(baseScopes).some(scope => scope !== binding.identity) || identity !== binding.identity && baseScopes.has(binding.identity)) {
169
+ throw new Error(`WGSL set ${passKey} mixes shared and stage-scoped forms for ${binding.identity}`);
170
+ }
171
+ baseScopes.add(identity);
172
+ if (symbols.has(binding.generatedSymbol)) {
173
+ throw new Error(`WGSL shader ${entry.key} contains duplicate generated symbol ${binding.generatedSymbol}`);
174
+ }
175
+ symbols.set(binding.generatedSymbol, identity);
176
+ const slot = `${binding.group}:${binding.binding}`;
177
+ const existingSlot = pass.slots.get(slot);
178
+ if (existingSlot && existingSlot !== identity) {
179
+ throw new Error(`WGSL set ${passKey} assigns ${slot} to both ${existingSlot} and ${identity}`);
180
+ }
181
+ pass.slots.set(slot, identity);
182
+ const existing = pass.identities.get(identity);
183
+ if (!existing) {
184
+ pass.identities.set(identity, binding);
185
+ continue;
186
+ }
187
+ if (bindingFingerprint(existing) !== bindingFingerprint(binding)) {
188
+ throw new Error(`WGSL set ${passKey} has conflicting layouts for ${identity}`);
189
+ }
190
+ existing.visibility = Array.from(new Set([...existing.visibility, ...binding.visibility])).sort((left, right) => VISIBILITY_ORDER.indexOf(left) - VISIBILITY_ORDER.indexOf(right));
191
+ }
192
+ }
193
+ return Array.from(passes, ([key, pass]) => {
194
+ for (const [identity, scopes] of pass.baseScopes) {
195
+ if (scopes.has(identity) && pass.identities.get(identity)?.visibility.length < 2) {
196
+ throw new Error(`WGSL set ${key} shared identity ${identity} does not cover multiple stages`);
197
+ }
198
+ }
199
+ const groups = new Map();
200
+ for (const binding of pass.identities.values()) {
201
+ if (!groups.has(binding.group)) groups.set(binding.group, []);
202
+ groups.get(binding.group).push(binding);
203
+ }
204
+ return {
205
+ key,
206
+ techniqueName: key.slice(0, key.lastIndexOf(".pass")),
207
+ passIndex: Number(/\.pass([0-9]+)$/.exec(key)?.[1]),
208
+ bindGroups: Array.from(groups, ([group, bindings]) => ({
209
+ group,
210
+ bindings: bindings.sort((left, right) => left.binding - right.binding)
211
+ })).sort((left, right) => left.group - right.group)
212
+ };
213
+ }).sort((left, right) => left.techniqueName.localeCompare(right.techniqueName) || left.passIndex - right.passIndex);
214
+ }
215
+ function validatePassTopologies(entries) {
216
+ const stagesByPass = new Map();
217
+ for (const entry of entries) {
218
+ const passKey = `${entry.techniqueName}.pass${entry.passIndex}`;
219
+ if (!stagesByPass.has(passKey)) stagesByPass.set(passKey, []);
220
+ stagesByPass.get(passKey).push(entry.stageName);
221
+ }
222
+ for (const [passKey, stages] of stagesByPass) {
223
+ if (stages.includes("compute") && (stages.length !== 1 || stages[0] !== "compute")) {
224
+ throw new Error(`WGSL set ${passKey} cannot mix compute and render shader stages`);
225
+ }
226
+ }
227
+ }
228
+ function buildResourceTransforms(entries, layouts) {
229
+ const raw = entries.flatMap(entry => entry.shader.program.resourceTransforms || []);
230
+ const transformedBindings = layouts.flatMap(layout => layout.bindGroups.flatMap(group => group.bindings.filter(binding => binding.transformId).map(binding => ({
231
+ layoutKey: layout.key,
232
+ binding
233
+ }))));
234
+ if (!raw.length) {
235
+ if (transformedBindings.length) {
236
+ throw new Error("WGSL set has transformed bindings without resource recipes");
237
+ }
238
+ return [];
239
+ }
240
+ const plan = normalizeResourceTransformPlan({
241
+ format: "CJS_WGSL_RESOURCE_TRANSFORM_PLAN",
242
+ formatVersion: 1,
243
+ resourceTransforms: raw
244
+ });
245
+ const ids = new Set(plan.resourceTransforms.map(transform => transform.id));
246
+ for (const {
247
+ binding
248
+ } of transformedBindings) {
249
+ if (!ids.has(binding.transformId)) {
250
+ throw new Error(`WGSL binding ${binding.generatedSymbol} references missing transform ${binding.transformId}`);
251
+ }
252
+ }
253
+ for (const transform of plan.resourceTransforms) {
254
+ const stageKey = `${transform.layoutKey}.pixel`;
255
+ if (!entries.some(entry => entry.key === stageKey)) {
256
+ throw new Error(`WGSL resource transform ${transform.id} has no fragment shader ${stageKey}`);
257
+ }
258
+ const links = transformedBindings.filter(({
259
+ layoutKey,
260
+ binding
261
+ }) => layoutKey === transform.layoutKey && binding.transformId === transform.id);
262
+ if (links.length !== 1) {
263
+ throw new Error(`WGSL resource transform ${transform.id} must link exactly one physical binding`);
264
+ }
265
+ const binding = links[0].binding;
266
+ if (binding.identity !== transform.output.identity || binding.scopeIdentity !== transform.output.scopeIdentity || binding.texture?.viewDimension !== transform.output.viewDimension || binding.arrayLayerCount !== transform.output.layerCount) {
267
+ throw new Error(`WGSL resource transform ${transform.id} does not match its physical binding`);
268
+ }
269
+ const transformLayout = layouts.find(layout => layout.key === transform.layoutKey);
270
+ const physicalScopes = new Set((transformLayout?.bindGroups || []).flatMap(group => group.bindings.map(entry => entry.scopeIdentity)));
271
+ for (const input of transform.inputs.slice(1)) {
272
+ if (physicalScopes.has(input.scopeIdentity)) {
273
+ throw new Error(`WGSL resource transform ${transform.id} retains removed input ${input.scopeIdentity}`);
274
+ }
275
+ }
276
+ }
277
+ return plan.resourceTransforms;
278
+ }
279
+
280
+ /**
281
+ * Builds the portable JSON document stored in a CEWGPU `WGSL` chunk.
282
+ * Existing numeric bindings are validated and never reassigned.
283
+ *
284
+ * @param {Array<object>} input Wrapped emitted shader descriptors.
285
+ * @returns {object} Frozen CJS_WGSL_SET document.
286
+ */
287
+ function buildWgslSet(input) {
288
+ if (!Array.isArray(input) || !input.length) throw new TypeError("BuildWgslSet expects a non-empty shader entry array");
289
+ const entries = input.map(normalizeEntry);
290
+ const keys = new Set();
291
+ const shaders = entries.map(entry => {
292
+ if (keys.has(entry.key)) throw new Error(`WGSL set contains duplicate shader key ${entry.key}`);
293
+ keys.add(entry.key);
294
+ return {
295
+ key: entry.key,
296
+ techniqueName: entry.techniqueName,
297
+ passIndex: entry.passIndex,
298
+ stageName: entry.stageName,
299
+ stage: entry.stage,
300
+ stageType: entry.stageType,
301
+ entryPoint: entry.shader.entryPoint,
302
+ code: entry.shader.code,
303
+ sourceMap: clonePlain(entry.shader.sourceMap || []),
304
+ ...(entry.threadGroupSize ? {
305
+ threadGroupSize: clonePlain(entry.threadGroupSize)
306
+ } : {})
307
+ };
308
+ }).sort((left, right) => left.techniqueName.localeCompare(right.techniqueName) || left.passIndex - right.passIndex || STAGE_NAME_ORDER.indexOf(left.stageName) - STAGE_NAME_ORDER.indexOf(right.stageName));
309
+ validatePassTopologies(entries);
310
+ const layouts = buildLayouts(entries);
311
+ const resourceTransforms = buildResourceTransforms(entries, layouts);
312
+ return deepFreeze({
313
+ format: "CJS_WGSL_SET",
314
+ formatVersion: WGSL_SET_VERSION,
315
+ shaders,
316
+ layouts,
317
+ ...(resourceTransforms.length ? {
318
+ resourceTransforms
319
+ } : {})
320
+ });
321
+ }
322
+
323
+ export { WGSL_SET_VERSION, buildWgslSet };
324
+ //# sourceMappingURL=buildWgslSet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buildWgslSet.js","sources":["../../../../../../src/formats/webgpu/core/wgsl/buildWgslSet.js"],"sourcesContent":["import { normalizeResourceTransformPlan } from \"./buildResourceTransformPlan.js\";\n\nexport const WGSL_SET_VERSION = 3;\n\nconst KEY_PATTERN = /^(.*)\\.pass([0-9]+)\\.(vertex|pixel|compute)$/;\nconst KEY_STAGE = Object.freeze({ vertex: \"vertex\", pixel: \"fragment\", compute: \"compute\" });\nconst STAGE_TYPES = Object.freeze({ vertex: 0, pixel: 1, compute: 2 });\nconst STAGE_NAME_ORDER = Object.freeze([ \"vertex\", \"pixel\", \"compute\" ]);\n\nconst VISIBILITY_ORDER = Object.freeze([ \"vertex\", \"fragment\", \"compute\" ]);\n\nfunction clonePlain(value)\n{\n if (Array.isArray(value)) return value.map(clonePlain);\n if (value && typeof value === \"object\")\n {\n return Object.fromEntries(Object.entries(value).map(([ key, entry ]) => [ key, clonePlain(entry) ]));\n }\n return value;\n}\n\nfunction deepFreeze(value)\n{\n if (!value || typeof value !== \"object\" || Object.isFrozen(value)) return value;\n for (const entry of Object.values(value)) deepFreeze(entry);\n return Object.freeze(value);\n}\n\nfunction normalizeEntry(entry, index)\n{\n const shader = entry?.shader;\n if (shader?.format !== \"CJS_WGSL_SHADER\" || shader.formatVersion !== 1\n || typeof shader.code !== \"string\" || !shader.code\n || typeof shader.entryPoint !== \"string\" || !shader.entryPoint\n || !Array.isArray(shader.sourceMap)\n || shader.program?.format !== \"CJS_TYPED_SHADER\")\n {\n throw new TypeError(`WGSL set entry ${index} requires a CJS_WGSL_SHADER descriptor`);\n }\n const key = typeof entry.key === \"string\" ? entry.key : \"\";\n const match = KEY_PATTERN.exec(key);\n if (!match || !match[1]) throw new Error(`WGSL set entry ${index} has malformed key ${key || \"<empty>\"}`);\n const techniqueName = match[1];\n const passIndex = Number(match[2]);\n const stageName = match[3];\n if (shader.stage !== KEY_STAGE[stageName])\n {\n throw new Error(`WGSL set key ${key} does not match shader stage ${shader.stage}`);\n }\n let threadGroupSize = null;\n if (stageName === \"compute\")\n {\n threadGroupSize = shader.threadGroupSize;\n if (!Array.isArray(threadGroupSize) || threadGroupSize.length !== 3\n || threadGroupSize.some((value) => !Number.isSafeInteger(value) || value < 1))\n {\n throw new Error(`WGSL compute shader ${key} requires a positive three-dimensional threadGroupSize`);\n }\n }\n else if (shader.threadGroupSize !== undefined && shader.threadGroupSize !== null)\n {\n throw new Error(`WGSL render shader ${key} cannot declare threadGroupSize`);\n }\n return {\n shader,\n stage: shader.stage,\n techniqueName,\n passIndex,\n stageName,\n stageType: STAGE_TYPES[stageName],\n ...(threadGroupSize ? { threadGroupSize: clonePlain(threadGroupSize) } : {}),\n key\n };\n}\n\nfunction portableBinding(binding, visibility)\n{\n if (!Number.isInteger(binding.group) || binding.group < 0\n || !Number.isInteger(binding.binding) || binding.binding < 0\n || !Number.isInteger(binding.registerSpace) || binding.registerSpace < 0\n || !Number.isInteger(binding.registerIndex) || binding.registerIndex < 0\n || typeof binding.resourceKind !== \"string\" || !binding.resourceKind\n || typeof binding.generatedSymbol !== \"string\" || !binding.generatedSymbol\n || typeof binding.type !== \"string\" || !binding.type)\n {\n throw new Error(`WGSL binding ${binding.id || binding.generatedSymbol || \"unknown\"} has an invalid portable identity`);\n }\n const identity = `${binding.resourceKind}:${binding.registerSpace}:${binding.registerIndex}`;\n if (binding.scopeIdentity !== undefined\n && (typeof binding.scopeIdentity !== \"string\" || !binding.scopeIdentity))\n {\n throw new Error(`WGSL binding ${binding.generatedSymbol} has invalid scope identity ${binding.scopeIdentity || \"<empty>\"}`);\n }\n const scopeIdentity = binding.scopeIdentity === undefined\n ? `${identity}@${visibility}`\n : binding.scopeIdentity;\n if (binding.identity !== undefined && binding.identity !== identity)\n {\n throw new Error(`WGSL binding ${binding.generatedSymbol} has inconsistent D3D identity ${binding.identity}`);\n }\n const hasTransform = binding.transformId !== undefined\n || binding.arrayLayerCount !== undefined;\n if (hasTransform\n && (binding.resourceKind !== \"sampled-resource\"\n || typeof binding.transformId !== \"string\" || !binding.transformId\n || !Number.isInteger(binding.arrayLayerCount) || binding.arrayLayerCount < 2\n || binding.type !== \"texture_2d_array<f32>\"\n || binding.texture?.viewDimension !== \"2d-array\"))\n {\n throw new Error(`WGSL binding ${binding.generatedSymbol} has invalid resource transform metadata`);\n }\n if (scopeIdentity !== identity && scopeIdentity !== `${identity}@${visibility}`)\n {\n throw new Error(`WGSL binding ${binding.generatedSymbol} has invalid scope identity ${scopeIdentity}`);\n }\n const descriptorKeys = [ \"buffer\", \"texture\", \"sampler\" ].filter((key) => binding[key]);\n const expectedDescriptors = {\n \"uniform-buffer\": [ \"buffer\" ],\n \"sampled-resource\": [ \"buffer\", \"texture\" ],\n \"storage-resource\": [ \"buffer\" ],\n sampler: [ \"sampler\" ]\n }[binding.resourceKind];\n if (!expectedDescriptors || descriptorKeys.length !== 1 || !expectedDescriptors.includes(descriptorKeys[0]))\n {\n throw new Error(`WGSL binding ${binding.generatedSymbol} has an invalid ${binding.resourceKind} layout descriptor`);\n }\n return {\n identity,\n scopeIdentity,\n resourceKind: binding.resourceKind,\n generatedSymbol: binding.generatedSymbol,\n registerSpace: binding.registerSpace,\n registerIndex: binding.registerIndex,\n group: binding.group,\n binding: binding.binding,\n visibility: [ visibility ],\n type: binding.type,\n ...(hasTransform\n ? {\n transformId: binding.transformId,\n arrayLayerCount: binding.arrayLayerCount\n }\n : {}),\n ...(Number.isInteger(binding.structureStride) ? { structureStride: binding.structureStride } : {}),\n ...(binding.buffer ? { buffer: clonePlain(binding.buffer) } : {}),\n ...(binding.texture ? { texture: clonePlain(binding.texture) } : {}),\n ...(binding.sampler ? { sampler: clonePlain(binding.sampler) } : {})\n };\n}\n\nfunction bindingIdentity(binding)\n{\n return binding.scopeIdentity || `${binding.resourceKind}:${binding.registerSpace}:${binding.registerIndex}`;\n}\n\nfunction bindingFingerprint(binding)\n{\n return JSON.stringify({\n resourceKind: binding.resourceKind,\n identity: binding.identity,\n scopeIdentity: binding.scopeIdentity,\n generatedSymbol: binding.generatedSymbol,\n registerSpace: binding.registerSpace,\n registerIndex: binding.registerIndex,\n group: binding.group,\n binding: binding.binding,\n type: binding.type,\n transformId: binding.transformId ?? null,\n arrayLayerCount: binding.arrayLayerCount ?? null,\n structureStride: binding.structureStride ?? null,\n buffer: binding.buffer || null,\n texture: binding.texture || null,\n sampler: binding.sampler || null\n });\n}\n\nfunction buildLayouts(entries)\n{\n const passes = new Map();\n for (const entry of entries)\n {\n const passKey = `${entry.techniqueName}.pass${entry.passIndex}`;\n if (!passes.has(passKey))\n {\n passes.set(passKey, { identities: new Map(), baseScopes: new Map(), slots: new Map() });\n }\n const pass = passes.get(passKey);\n const symbols = new Map();\n const d3dIdentities = new Set();\n for (const source of entry.shader.program.bindings || [])\n {\n const binding = portableBinding(source, entry.stage);\n const identity = bindingIdentity(binding);\n if (d3dIdentities.has(binding.identity))\n {\n throw new Error(`WGSL shader ${entry.key} contains duplicate D3D identity ${binding.identity}`);\n }\n d3dIdentities.add(binding.identity);\n if (!pass.baseScopes.has(binding.identity)) pass.baseScopes.set(binding.identity, new Set());\n const baseScopes = pass.baseScopes.get(binding.identity);\n if ((identity === binding.identity && Array.from(baseScopes).some((scope) => scope !== binding.identity))\n || (identity !== binding.identity && baseScopes.has(binding.identity)))\n {\n throw new Error(`WGSL set ${passKey} mixes shared and stage-scoped forms for ${binding.identity}`);\n }\n baseScopes.add(identity);\n if (symbols.has(binding.generatedSymbol))\n {\n throw new Error(`WGSL shader ${entry.key} contains duplicate generated symbol ${binding.generatedSymbol}`);\n }\n symbols.set(binding.generatedSymbol, identity);\n const slot = `${binding.group}:${binding.binding}`;\n const existingSlot = pass.slots.get(slot);\n if (existingSlot && existingSlot !== identity)\n {\n throw new Error(`WGSL set ${passKey} assigns ${slot} to both ${existingSlot} and ${identity}`);\n }\n pass.slots.set(slot, identity);\n const existing = pass.identities.get(identity);\n if (!existing)\n {\n pass.identities.set(identity, binding);\n continue;\n }\n if (bindingFingerprint(existing) !== bindingFingerprint(binding))\n {\n throw new Error(`WGSL set ${passKey} has conflicting layouts for ${identity}`);\n }\n existing.visibility = Array.from(new Set([ ...existing.visibility, ...binding.visibility ]))\n .sort((left, right) => VISIBILITY_ORDER.indexOf(left) - VISIBILITY_ORDER.indexOf(right));\n }\n }\n return Array.from(passes, ([ key, pass ]) =>\n {\n for (const [ identity, scopes ] of pass.baseScopes)\n {\n if (scopes.has(identity) && pass.identities.get(identity)?.visibility.length < 2)\n {\n throw new Error(`WGSL set ${key} shared identity ${identity} does not cover multiple stages`);\n }\n }\n const groups = new Map();\n for (const binding of pass.identities.values())\n {\n if (!groups.has(binding.group)) groups.set(binding.group, []);\n groups.get(binding.group).push(binding);\n }\n return {\n key,\n techniqueName: key.slice(0, key.lastIndexOf(\".pass\")),\n passIndex: Number(/\\.pass([0-9]+)$/.exec(key)?.[1]),\n bindGroups: Array.from(groups, ([ group, bindings ]) => ({\n group,\n bindings: bindings.sort((left, right) => left.binding - right.binding)\n })).sort((left, right) => left.group - right.group)\n };\n }).sort((left, right) =>\n left.techniqueName.localeCompare(right.techniqueName)\n || left.passIndex - right.passIndex);\n}\n\nfunction validatePassTopologies(entries)\n{\n const stagesByPass = new Map();\n for (const entry of entries)\n {\n const passKey = `${entry.techniqueName}.pass${entry.passIndex}`;\n if (!stagesByPass.has(passKey)) stagesByPass.set(passKey, []);\n stagesByPass.get(passKey).push(entry.stageName);\n }\n for (const [ passKey, stages ] of stagesByPass)\n {\n if (stages.includes(\"compute\") && (stages.length !== 1 || stages[0] !== \"compute\"))\n {\n throw new Error(`WGSL set ${passKey} cannot mix compute and render shader stages`);\n }\n }\n}\n\nfunction buildResourceTransforms(entries, layouts)\n{\n const raw = entries.flatMap((entry) => entry.shader.program.resourceTransforms || []);\n const transformedBindings = layouts.flatMap((layout) =>\n layout.bindGroups.flatMap((group) =>\n group.bindings.filter((binding) => binding.transformId)\n .map((binding) => ({ layoutKey: layout.key, binding }))));\n if (!raw.length)\n {\n if (transformedBindings.length)\n {\n throw new Error(\"WGSL set has transformed bindings without resource recipes\");\n }\n return [];\n }\n const plan = normalizeResourceTransformPlan({\n format: \"CJS_WGSL_RESOURCE_TRANSFORM_PLAN\",\n formatVersion: 1,\n resourceTransforms: raw\n });\n const ids = new Set(plan.resourceTransforms.map((transform) => transform.id));\n for (const { binding } of transformedBindings)\n {\n if (!ids.has(binding.transformId))\n {\n throw new Error(`WGSL binding ${binding.generatedSymbol} references missing transform ${binding.transformId}`);\n }\n }\n for (const transform of plan.resourceTransforms)\n {\n const stageKey = `${transform.layoutKey}.pixel`;\n if (!entries.some((entry) => entry.key === stageKey))\n {\n throw new Error(`WGSL resource transform ${transform.id} has no fragment shader ${stageKey}`);\n }\n const links = transformedBindings.filter(({ layoutKey, binding }) =>\n layoutKey === transform.layoutKey\n && binding.transformId === transform.id);\n if (links.length !== 1)\n {\n throw new Error(`WGSL resource transform ${transform.id} must link exactly one physical binding`);\n }\n const binding = links[0].binding;\n if (binding.identity !== transform.output.identity\n || binding.scopeIdentity !== transform.output.scopeIdentity\n || binding.texture?.viewDimension !== transform.output.viewDimension\n || binding.arrayLayerCount !== transform.output.layerCount)\n {\n throw new Error(`WGSL resource transform ${transform.id} does not match its physical binding`);\n }\n const transformLayout = layouts.find((layout) =>\n layout.key === transform.layoutKey);\n const physicalScopes = new Set((transformLayout?.bindGroups || []).flatMap((group) =>\n group.bindings.map((entry) => entry.scopeIdentity)));\n for (const input of transform.inputs.slice(1))\n {\n if (physicalScopes.has(input.scopeIdentity))\n {\n throw new Error(`WGSL resource transform ${transform.id} retains removed input ${input.scopeIdentity}`);\n }\n }\n }\n return plan.resourceTransforms;\n}\n\n/**\n * Builds the portable JSON document stored in a CEWGPU `WGSL` chunk.\n * Existing numeric bindings are validated and never reassigned.\n *\n * @param {Array<object>} input Wrapped emitted shader descriptors.\n * @returns {object} Frozen CJS_WGSL_SET document.\n */\nexport function buildWgslSet(input)\n{\n if (!Array.isArray(input) || !input.length) throw new TypeError(\"BuildWgslSet expects a non-empty shader entry array\");\n const entries = input.map(normalizeEntry);\n const keys = new Set();\n const shaders = entries.map((entry) =>\n {\n if (keys.has(entry.key)) throw new Error(`WGSL set contains duplicate shader key ${entry.key}`);\n keys.add(entry.key);\n return {\n key: entry.key,\n techniqueName: entry.techniqueName,\n passIndex: entry.passIndex,\n stageName: entry.stageName,\n stage: entry.stage,\n stageType: entry.stageType,\n entryPoint: entry.shader.entryPoint,\n code: entry.shader.code,\n sourceMap: clonePlain(entry.shader.sourceMap || []),\n ...(entry.threadGroupSize ? { threadGroupSize: clonePlain(entry.threadGroupSize) } : {})\n };\n }).sort((left, right) =>\n left.techniqueName.localeCompare(right.techniqueName)\n || left.passIndex - right.passIndex\n || STAGE_NAME_ORDER.indexOf(left.stageName) - STAGE_NAME_ORDER.indexOf(right.stageName));\n validatePassTopologies(entries);\n const layouts = buildLayouts(entries);\n const resourceTransforms = buildResourceTransforms(entries, layouts);\n return deepFreeze({\n format: \"CJS_WGSL_SET\",\n formatVersion: WGSL_SET_VERSION,\n shaders,\n layouts,\n ...(resourceTransforms.length ? { resourceTransforms } : {})\n });\n}\n"],"names":["WGSL_SET_VERSION","KEY_PATTERN","KEY_STAGE","Object","freeze","vertex","pixel","compute","STAGE_TYPES","STAGE_NAME_ORDER","VISIBILITY_ORDER","clonePlain","value","Array","isArray","map","fromEntries","entries","key","entry","deepFreeze","isFrozen","values","normalizeEntry","index","shader","format","formatVersion","code","entryPoint","sourceMap","program","TypeError","match","exec","Error","techniqueName","passIndex","Number","stageName","stage","threadGroupSize","length","some","isSafeInteger","undefined","stageType","portableBinding","binding","visibility","isInteger","group","registerSpace","registerIndex","resourceKind","generatedSymbol","type","id","identity","scopeIdentity","hasTransform","transformId","arrayLayerCount","texture","viewDimension","descriptorKeys","filter","expectedDescriptors","sampler","includes","structureStride","buffer","bindingIdentity","bindingFingerprint","JSON","stringify","buildLayouts","passes","Map","passKey","has","set","identities","baseScopes","slots","pass","get","symbols","d3dIdentities","Set","source","bindings","add","from","scope","slot","existingSlot","existing","sort","left","right","indexOf","scopes","groups","push","slice","lastIndexOf","bindGroups","localeCompare","validatePassTopologies","stagesByPass","stages","buildResourceTransforms","layouts","raw","flatMap","resourceTransforms","transformedBindings","layout","layoutKey","plan","normalizeResourceTransformPlan","ids","transform","stageKey","links","output","layerCount","transformLayout","find","physicalScopes","input","inputs","buildWgslSet","keys","shaders"],"mappings":"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"}