@carbonenginejs/runtime-resource 0.12.1 → 0.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (541) hide show
  1. package/LICENSE +21 -21
  2. package/NOTICE +32 -32
  3. package/README.md +129 -108
  4. package/dist/CjsMotherLode.js +1271 -1271
  5. package/dist/CjsResMan.js +3858 -3494
  6. package/dist/CjsResMan.js.map +1 -1
  7. package/dist/CjsResManFetchProvider.js +94 -94
  8. package/dist/CjsResManWorkQueue.js +301 -301
  9. package/dist/_virtual/_rollupPluginBabelHelpers.js +150 -150
  10. package/dist/format/CjsBlueReader.js +358 -358
  11. package/dist/format/CjsByteReader.js +310 -310
  12. package/dist/format/CjsByteWriter.js +242 -242
  13. package/dist/format/CjsFormat.js +223 -223
  14. package/dist/format/CjsFormatError.js +41 -41
  15. package/dist/format/CjsReader.js +22 -22
  16. package/dist/format/CjsResourceProbe.js +279 -279
  17. package/dist/format/CjsStringTable.js +268 -268
  18. package/dist/format/carbonEffect/CjsCarbonEffectReader.js +408 -361
  19. package/dist/format/carbonEffect/CjsCarbonEffectReader.js.map +1 -1
  20. package/dist/format/carbonEffect/CjsCarbonEffectWriter.js +373 -373
  21. package/dist/format/carbonEffect/buildCarbonEffectContainer.js +182 -0
  22. package/dist/format/carbonEffect/buildCarbonEffectContainer.js.map +1 -0
  23. package/dist/format/carbonEffect/carbonEffectBackendBlock.js +321 -427
  24. package/dist/format/carbonEffect/carbonEffectBackendBlock.js.map +1 -1
  25. package/dist/format/carbonEffect/carbonEffectRecords.js +1147 -955
  26. package/dist/format/carbonEffect/carbonEffectRecords.js.map +1 -1
  27. package/dist/format/carbonEffect/carbonEffectResourceTransform.js +197 -0
  28. package/dist/format/carbonEffect/carbonEffectResourceTransform.js.map +1 -0
  29. package/dist/format/compareUtf8.js +36 -36
  30. package/dist/format/effect/effectBodyInventory.js +146 -0
  31. package/dist/format/effect/effectBodyInventory.js.map +1 -0
  32. package/dist/format/effect/effectPermutationGraph.js +257 -257
  33. package/dist/format/effect/effectPermutationGraph.js.map +1 -1
  34. package/dist/format/effect/sha256.js +114 -114
  35. package/dist/format/index.js +11 -11
  36. package/dist/format/payloadContract.js +193 -193
  37. package/dist/formats/black/CjsBlackFormat.js +310 -292
  38. package/dist/formats/black/CjsBlackFormat.js.map +1 -1
  39. package/dist/formats/black/core/CjsBlackBinaryReader.js +260 -260
  40. package/dist/formats/black/core/CjsBlackPropertyReaders.js +448 -448
  41. package/dist/formats/black/core/CjsBlackReader.js +764 -764
  42. package/dist/formats/black/core/CjsBlackSchemaRegistry.js +540 -540
  43. package/dist/formats/black/core/black-schema-v1-2026-07-23.json.js +4 -4
  44. package/dist/formats/black/core/blackConstants.js +7 -7
  45. package/dist/formats/black/core/blackDefinitions.js +10 -10
  46. package/dist/formats/black/core/blackEnums.js +6 -6
  47. package/dist/formats/black/core/blackSchema.js +3 -3
  48. package/dist/formats/black/core/blackVersion.js +22 -22
  49. package/dist/formats/black/core/helpers.js +199 -199
  50. package/dist/formats/black/core/schema.js +4 -4
  51. package/dist/formats/black/index.js +2 -2
  52. package/dist/formats/bnk/CjsBnkFormat.js +175 -156
  53. package/dist/formats/bnk/CjsBnkFormat.js.map +1 -1
  54. package/dist/formats/bnk/core/busNodes.js +252 -0
  55. package/dist/formats/bnk/core/busNodes.js.map +1 -0
  56. package/dist/formats/bnk/core/effectNodes.js +147 -0
  57. package/dist/formats/bnk/core/effectNodes.js.map +1 -0
  58. package/dist/formats/bnk/core/eventAction.js +416 -305
  59. package/dist/formats/bnk/core/eventAction.js.map +1 -1
  60. package/dist/formats/bnk/core/globalSettings.js +215 -0
  61. package/dist/formats/bnk/core/globalSettings.js.map +1 -0
  62. package/dist/formats/bnk/core/graph.js +137 -137
  63. package/dist/formats/bnk/core/helpers.js +512 -480
  64. package/dist/formats/bnk/core/helpers.js.map +1 -1
  65. package/dist/formats/bnk/core/musicNodes.js +533 -509
  66. package/dist/formats/bnk/core/musicNodes.js.map +1 -1
  67. package/dist/formats/bnk/core/nodeBase.js +553 -532
  68. package/dist/formats/bnk/core/nodeBase.js.map +1 -1
  69. package/dist/formats/bnk/core/sfxNodes.js +632 -632
  70. package/dist/formats/bnk/core/soundbanksInfo.js +209 -209
  71. package/dist/formats/bnk/index.js +2 -2
  72. package/dist/formats/cmf/CjsCmfFormat.js +497 -497
  73. package/dist/formats/cmf/core/binary.js +194 -194
  74. package/dist/formats/cmf/core/buffers.js +237 -237
  75. package/dist/formats/cmf/core/constants.js +47 -47
  76. package/dist/formats/cmf/core/gr2Anim.js +453 -453
  77. package/dist/formats/cmf/core/helpers.js +318 -318
  78. package/dist/formats/cmf/core/pack.js +276 -276
  79. package/dist/formats/cmf/core/schema.js +374 -374
  80. package/dist/formats/cmf/core/shared.js +277 -277
  81. package/dist/formats/cmf/core/writer.js +571 -571
  82. package/dist/formats/cmf/index.js +2 -2
  83. package/dist/formats/dds/CjsDdsFormat.js +200 -200
  84. package/dist/formats/dds/core/bc6h.js +298 -298
  85. package/dist/formats/dds/core/bc7.js +272 -272
  86. package/dist/formats/dds/core/helpers.js +862 -862
  87. package/dist/formats/dds/index.js +2 -2
  88. package/dist/formats/dxbc/CjsDxbcFormat.js +142 -142
  89. package/dist/formats/dxbc/core/DxbcReader.js +266 -266
  90. package/dist/formats/dxbc/core/container.js +169 -169
  91. package/dist/formats/dxbc/core/decoder.js +789 -789
  92. package/dist/formats/dxbc/core/errors.js +19 -19
  93. package/dist/formats/dxbc/core/helpers.js +220 -220
  94. package/dist/formats/dxbc/core/opcodes.js +45 -45
  95. package/dist/formats/dxbc/core/program.js +91 -91
  96. package/dist/formats/dxbc/core/signature.js +172 -172
  97. package/dist/formats/dxbc/index.js +2 -2
  98. package/dist/formats/fbx/CjsFbxFormat.js +266 -266
  99. package/dist/formats/fbx/core/helpers.js +3932 -3932
  100. package/dist/formats/fbx/index.js +2 -2
  101. package/dist/formats/flac/CjsFlacFormat.js +142 -142
  102. package/dist/formats/flac/core/helpers.js +315 -315
  103. package/dist/formats/flac/index.js +2 -2
  104. package/dist/formats/gif/CjsGifFormat.js +141 -141
  105. package/dist/formats/gif/core/helpers.js +380 -380
  106. package/dist/formats/gif/index.js +2 -2
  107. package/dist/formats/gltf/CjsGltfFormat.js +290 -290
  108. package/dist/formats/gltf/core/helpers.js +307 -307
  109. package/dist/formats/gltf/core/json.js +79 -79
  110. package/dist/formats/gltf/core/parser.js +679 -679
  111. package/dist/formats/gltf/core/targets.js +173 -173
  112. package/dist/formats/gltf/index.js +2 -2
  113. package/dist/formats/gr2/CjsGr2Format.js +289 -289
  114. package/dist/formats/gr2/core/bitknit2.js +282 -282
  115. package/dist/formats/gr2/core/curves.js +1047 -1047
  116. package/dist/formats/gr2/core/gsf.js +72 -72
  117. package/dist/formats/gr2/core/helpers.js +352 -352
  118. package/dist/formats/gr2/core/json.js +622 -622
  119. package/dist/formats/gr2/core/oodle1.js +388 -388
  120. package/dist/formats/gr2/core/tangents.js +48 -48
  121. package/dist/formats/gr2/core/targets.js +361 -361
  122. package/dist/formats/gr2/index.js +2 -2
  123. package/dist/formats/hlsl/CjsHlslFormat.js +254 -254
  124. package/dist/formats/hlsl/core/HlslBinaryUtils.js +15 -15
  125. package/dist/formats/hlsl/core/HlslEffectReadError.js +19 -19
  126. package/dist/formats/hlsl/core/HlslEffectStateManager.js +130 -130
  127. package/dist/formats/hlsl/core/HlslRenderStateSetup.js +37 -37
  128. package/dist/formats/hlsl/core/HlslResourceSetDescription.js +94 -94
  129. package/dist/formats/hlsl/core/HlslShaderBytecode.js +44 -44
  130. package/dist/formats/hlsl/core/analysis.js +51 -51
  131. package/dist/formats/hlsl/core/carbonDescriptionToRuntime.js +850 -781
  132. package/dist/formats/hlsl/core/carbonDescriptionToRuntime.js.map +1 -1
  133. package/dist/formats/hlsl/core/detailMapFamily.js +128 -0
  134. package/dist/formats/hlsl/core/detailMapFamily.js.map +1 -0
  135. package/dist/formats/hlsl/core/helpers.js +270 -270
  136. package/dist/formats/hlsl/core/json.js +284 -284
  137. package/dist/formats/hlsl/core/localLightFamily.js +133 -0
  138. package/dist/formats/hlsl/core/localLightFamily.js.map +1 -0
  139. package/dist/formats/hlsl/core/metadata.js +327 -327
  140. package/dist/formats/hlsl/core/render-states.js +280 -280
  141. package/dist/formats/hlsl/core/tr2/HlslRenderContextEnum.js +43 -43
  142. package/dist/formats/hlsl/core/tr2/resources/HlslEffectRes.js +320 -314
  143. package/dist/formats/hlsl/core/tr2/resources/HlslEffectRes.js.map +1 -1
  144. package/dist/formats/hlsl/core/tr2/resources/HlslShaderPermutation.js +33 -33
  145. package/dist/formats/hlsl/core/tr2/shader/HlslEffectBindingManifest.js +416 -416
  146. package/dist/formats/hlsl/core/tr2/shader/HlslEffectConstant.js +40 -40
  147. package/dist/formats/hlsl/core/tr2/shader/HlslEffectDescription.js +62 -742
  148. package/dist/formats/hlsl/core/tr2/shader/HlslEffectDescription.js.map +1 -1
  149. package/dist/formats/hlsl/core/tr2/shader/HlslEffectLibrary.js +52 -52
  150. package/dist/formats/hlsl/core/tr2/shader/HlslEffectParameterAnnotation.js +38 -38
  151. package/dist/formats/hlsl/core/tr2/shader/HlslEffectResource.js +50 -50
  152. package/dist/formats/hlsl/core/tr2/shader/HlslEffectStageInput.js +86 -86
  153. package/dist/formats/hlsl/core/tr2/shader/HlslEffectTechnique.js +31 -31
  154. package/dist/formats/hlsl/core/tr2/shader/HlslPass.js +42 -42
  155. package/dist/formats/hlsl/core/tr2/shader/HlslSamplerDescription.js +55 -55
  156. package/dist/formats/hlsl/core/tr2/shader/HlslSamplerSetup.js +29 -29
  157. package/dist/formats/hlsl/core/tr2/shader/HlslShader.js +220 -220
  158. package/dist/formats/hlsl/core/tr2/shader/HlslShaderOption.js +30 -30
  159. package/dist/formats/hlsl/index.js +3 -3
  160. package/dist/formats/index.js +33 -31
  161. package/dist/formats/index.js.map +1 -1
  162. package/dist/formats/jpeg/CjsJpegFormat.js +212 -212
  163. package/dist/formats/jpeg/core/helpers.js +402 -402
  164. package/dist/formats/jpeg/core/jpeg.js +480 -480
  165. package/dist/formats/jpeg/index.js +2 -2
  166. package/dist/formats/mp3/CjsMp3Format.js +197 -197
  167. package/dist/formats/mp3/core/helpers.js +375 -375
  168. package/dist/formats/mp3/index.js +2 -2
  169. package/dist/formats/mp4/CjsMp4Format.js +197 -197
  170. package/dist/formats/mp4/core/helpers.js +484 -484
  171. package/dist/formats/mp4/index.js +2 -2
  172. package/dist/formats/obj/CjsObjFormat.js +253 -253
  173. package/dist/formats/obj/core/helpers.js +573 -573
  174. package/dist/formats/obj/core/json.js +64 -64
  175. package/dist/formats/obj/core/parser.js +321 -321
  176. package/dist/formats/obj/index.js +2 -2
  177. package/dist/formats/ogg/CjsOggFormat.js +143 -143
  178. package/dist/formats/ogg/core/helpers.js +410 -410
  179. package/dist/formats/ogg/core/imdct.js +178 -178
  180. package/dist/formats/ogg/core/vorbis.js +1017 -1017
  181. package/dist/formats/ogg/index.js +2 -2
  182. package/dist/formats/pickle/CjsPickleFormat.js +214 -0
  183. package/dist/formats/pickle/CjsPickleFormat.js.map +1 -0
  184. package/dist/formats/pickle/core/CjsPickleProtocol0Reader.js +551 -0
  185. package/dist/formats/pickle/core/CjsPickleProtocol0Reader.js.map +1 -0
  186. package/dist/formats/pickle/index.js +2 -0
  187. package/dist/formats/pickle/index.js.map +1 -0
  188. package/dist/formats/png/CjsPngFormat.js +201 -201
  189. package/dist/formats/png/core/helpers.js +635 -635
  190. package/dist/formats/png/index.js +2 -2
  191. package/dist/formats/red/CjsRedFormat.js +263 -263
  192. package/dist/formats/red/core/CjsRedReader.js +246 -246
  193. package/dist/formats/red/core/blackDefinitions.js +3 -3
  194. package/dist/formats/red/core/helpers.js +158 -158
  195. package/dist/formats/red/core/redGraph.js +71 -68
  196. package/dist/formats/red/core/redGraph.js.map +1 -1
  197. package/dist/formats/red/core/schema.js +4 -4
  198. package/dist/formats/red/index.js +2 -2
  199. package/dist/formats/stl/CjsStlFormat.js +365 -365
  200. package/dist/formats/stl/core/helpers.js +261 -261
  201. package/dist/formats/stl/core/json.js +51 -51
  202. package/dist/formats/stl/core/stl.js +642 -642
  203. package/dist/formats/stl/core/targets.js +173 -173
  204. package/dist/formats/stl/index.js +2 -2
  205. package/dist/formats/tga/CjsTgaFormat.js +197 -197
  206. package/dist/formats/tga/core/helpers.js +493 -493
  207. package/dist/formats/tga/index.js +2 -2
  208. package/dist/formats/wav/CjsWavFormat.js +198 -198
  209. package/dist/formats/wav/core/helpers.js +365 -365
  210. package/dist/formats/wav/index.js +2 -2
  211. package/dist/formats/webgl/CjsWebglFormat.js +199 -221
  212. package/dist/formats/webgl/CjsWebglFormat.js.map +1 -1
  213. package/dist/formats/webgl/core/buildGlslEffectContainer.js +70 -0
  214. package/dist/formats/webgl/core/buildGlslEffectContainer.js.map +1 -0
  215. package/dist/formats/webgl/core/effectPackage.js +900 -792
  216. package/dist/formats/webgl/core/effectPackage.js.map +1 -1
  217. package/dist/formats/webgl/core/errors.js +27 -27
  218. package/dist/formats/webgl/core/errors.js.map +1 -1
  219. package/dist/formats/webgl/core/glsl/DxbcGlslEmitter.js +2820 -2678
  220. package/dist/formats/webgl/core/glsl/DxbcGlslEmitter.js.map +1 -1
  221. package/dist/formats/webgl/core/glsl/DxbcGlslHelpers.js +89 -89
  222. package/dist/formats/webgl/core/glsl/DxbcGlslOperandFormatter.js +486 -428
  223. package/dist/formats/webgl/core/glsl/DxbcGlslOperandFormatter.js.map +1 -1
  224. package/dist/formats/webgl/core/glsl/packedLightFixups.js +98 -0
  225. package/dist/formats/webgl/core/glsl/packedLightFixups.js.map +1 -0
  226. package/dist/formats/webgl/core/glslBackendBlock.js +552 -0
  227. package/dist/formats/webgl/core/glslBackendBlock.js.map +1 -0
  228. package/dist/formats/webgl/core/glslBackendBodySet.js +243 -0
  229. package/dist/formats/webgl/core/glslBackendBodySet.js.map +1 -0
  230. package/dist/formats/webgl/core/{cewgCompleteness.js → glslEffectCompleteness.js} +85 -81
  231. package/dist/formats/webgl/core/glslEffectCompleteness.js.map +1 -0
  232. package/dist/formats/webgl/core/helpers.js +167 -306
  233. package/dist/formats/webgl/core/helpers.js.map +1 -1
  234. package/dist/formats/webgl/core/inspectGlslEffectContainer.js +122 -0
  235. package/dist/formats/webgl/core/inspectGlslEffectContainer.js.map +1 -0
  236. package/dist/formats/webgl/core/readGlslEffectContainer.js +303 -0
  237. package/dist/formats/webgl/core/readGlslEffectContainer.js.map +1 -0
  238. package/dist/formats/webgl/index.js +2 -2
  239. package/dist/formats/webgpu/CjsWebgpuFormat.js +357 -357
  240. package/dist/formats/webgpu/CjsWebgpuFormat.js.map +1 -1
  241. package/dist/formats/webgpu/core/buildCarbonEffectContainer.js +89 -197
  242. package/dist/formats/webgpu/core/buildCarbonEffectContainer.js.map +1 -1
  243. package/dist/formats/webgpu/core/{cewgpu/CewgpuContainer.js → carbonWebgpu/CarbonWebgpuContainer.js} +354 -368
  244. package/dist/formats/webgpu/core/carbonWebgpu/CarbonWebgpuContainer.js.map +1 -0
  245. package/dist/formats/webgpu/core/{cewgpu → carbonWebgpu}/containerViews.js +355 -355
  246. package/dist/formats/webgpu/core/carbonWebgpu/containerViews.js.map +1 -0
  247. package/dist/formats/webgpu/core/{cewgpu → carbonWebgpu}/validateContainer.js +90 -90
  248. package/dist/formats/webgpu/core/carbonWebgpu/validateContainer.js.map +1 -0
  249. package/dist/formats/webgpu/core/effectAnalysis.js +82 -82
  250. package/dist/formats/webgpu/core/effectBackendBodySet.js +289 -289
  251. package/dist/formats/webgpu/core/effectBackendBodySet.js.map +1 -1
  252. package/dist/formats/webgpu/core/errors.js +20 -20
  253. package/dist/formats/webgpu/core/errors.js.map +1 -1
  254. package/dist/formats/webgpu/core/helpers.js +443 -443
  255. package/dist/formats/webgpu/core/helpers.js.map +1 -1
  256. package/dist/formats/webgpu/core/ir/analyzeRegisterValues.js +212 -212
  257. package/dist/formats/webgpu/core/ir/buildControlFlow.js +220 -220
  258. package/dist/formats/webgpu/core/ir/indexableTemps.js +137 -137
  259. package/dist/formats/webgpu/core/ir/inferValueTypes.js +449 -449
  260. package/dist/formats/webgpu/core/ir/lowerDxbcToIr.js +494 -494
  261. package/dist/formats/webgpu/core/ir/resolveRegisterFlow.js +177 -177
  262. package/dist/formats/webgpu/core/ir/sourceLanes.js +61 -61
  263. package/dist/formats/webgpu/core/packageEffect.js +381 -385
  264. package/dist/formats/webgpu/core/packageEffect.js.map +1 -1
  265. package/dist/formats/webgpu/core/packageEffectSelection.js +164 -164
  266. package/dist/formats/webgpu/core/packageEffectSelection.js.map +1 -1
  267. package/dist/formats/webgpu/core/packageMetadata.js +17 -17
  268. package/dist/formats/webgpu/core/schema.js +4 -4
  269. package/dist/formats/webgpu/core/wgsl/buildResourceTransformPlan.js +263 -263
  270. package/dist/formats/webgpu/core/wgsl/buildResourceTransformPlan.js.map +1 -1
  271. package/dist/formats/webgpu/core/wgsl/buildWgslBindingPlan.js +172 -172
  272. package/dist/formats/webgpu/core/wgsl/buildWgslSet.js +320 -320
  273. package/dist/formats/webgpu/core/wgsl/buildWgslSet.js.map +1 -1
  274. package/dist/formats/webgpu/core/wgsl/emitWgsl.js +356 -356
  275. package/dist/formats/webgpu/core/wgsl/hoistEscapingValues.js +77 -77
  276. package/dist/formats/webgpu/core/wgsl/lowerBindingLayout.js +451 -451
  277. package/dist/formats/webgpu/core/wgsl/lowerComputeProgram.js +735 -735
  278. package/dist/formats/webgpu/core/wgsl/lowerCreateHistogramsComputeProgram.js +457 -457
  279. package/dist/formats/webgpu/core/wgsl/lowerFragmentProgram.js +1572 -1572
  280. package/dist/formats/webgpu/core/wgsl/lowerMergeHistogramsComputeProgram.js +659 -659
  281. package/dist/formats/webgpu/core/wgsl/lowerParticleClearComputePrograms.js +734 -734
  282. package/dist/formats/webgpu/core/wgsl/lowerParticleEmitComputeProgram.js +583 -583
  283. package/dist/formats/webgpu/core/wgsl/lowerSkinVerticesComputeProgram.js +621 -621
  284. package/dist/formats/webgpu/core/wgsl/lowerSortComputeProgram.js +824 -824
  285. package/dist/formats/webgpu/core/wgsl/lowerSortInnerComputeProgram.js +697 -697
  286. package/dist/formats/webgpu/core/wgsl/lowerSortStepComputeProgram.js +559 -559
  287. package/dist/formats/webgpu/core/wgsl/lowerVertexProgram.js +1328 -1328
  288. package/dist/formats/webgpu/core/wgsl/particleEmitSemanticDigest.js +110 -110
  289. package/dist/formats/webgpu/core/wgsl/precisionControls.js +55 -55
  290. package/dist/formats/webgpu/core/wgsl/selectionPlans.js +717 -717
  291. package/dist/formats/webgpu/core/wgsl/uniformity.js +78 -78
  292. package/dist/formats/webgpu/core/wgsl/validateExactComputeIr.js +196 -196
  293. package/dist/formats/webgpu/core/wgsl/validateHandleOperand.js +37 -37
  294. package/dist/formats/webgpu/index.js +2 -2
  295. package/dist/formats/webm/CjsWebmFormat.js +197 -197
  296. package/dist/formats/webm/core/helpers.js +572 -572
  297. package/dist/formats/webm/index.js +2 -2
  298. package/dist/formats/webp/CjsWebpFormat.js +140 -140
  299. package/dist/formats/webp/core/helpers.js +237 -237
  300. package/dist/formats/webp/index.js +2 -2
  301. package/dist/formats/wem/CjsWemFormat.js +250 -250
  302. package/dist/formats/wem/core/bitStream.js +261 -261
  303. package/dist/formats/wem/core/codebookLibrary.js +164 -164
  304. package/dist/formats/wem/core/helpers.js +437 -437
  305. package/dist/formats/wem/core/packedCodebooksAotuv603.js +30 -30
  306. package/dist/formats/wem/core/ptadpcm.js +77 -77
  307. package/dist/formats/wem/core/resolve.js +121 -121
  308. package/dist/formats/wem/core/wemToOgg.js +485 -485
  309. package/dist/formats/wem/index.js +2 -2
  310. package/dist/formats/yaml/CjsYamlFormat.js +134 -134
  311. package/dist/formats/yaml/CjsYamlFormat.js.map +1 -1
  312. package/dist/formats/yaml/core/CjsYamlReader.js +400 -402
  313. package/dist/formats/yaml/core/CjsYamlReader.js.map +1 -1
  314. package/dist/formats/yaml/core/helpers.js +196 -170
  315. package/dist/formats/yaml/core/helpers.js.map +1 -1
  316. package/dist/formats/yaml/index.js +2 -2
  317. package/dist/index.js +64 -62
  318. package/dist/index.js.map +1 -1
  319. package/dist/resource/CjsLoadingObject.js +19 -0
  320. package/dist/resource/CjsLoadingObject.js.map +1 -0
  321. package/dist/resource/CjsResource.js +801 -797
  322. package/dist/resource/CjsResource.js.map +1 -1
  323. package/dist/resource/ResourceHandlerMode.js +14 -0
  324. package/dist/resource/ResourceHandlerMode.js.map +1 -0
  325. package/dist/resource/Tr2LightProfileRes.js +32 -32
  326. package/dist/resource/audio/AudioGeometryResData.js +47 -47
  327. package/dist/resource/audio/CjsAudioBufferRes.js +86 -86
  328. package/dist/resource/audio/CjsAudioRes.js +213 -213
  329. package/dist/resource/audio/index.js +4 -4
  330. package/dist/resource/geometry/MeshDecalData.js +37 -37
  331. package/dist/resource/geometry/MeshDecalLodData.js +34 -34
  332. package/dist/resource/geometry/TriGeometryRes.js +675 -675
  333. package/dist/resource/geometry/TriGeometryResAreaData.js +59 -59
  334. package/dist/resource/geometry/TriGeometryResJointData.js +38 -38
  335. package/dist/resource/geometry/TriGeometryResLodData.js +88 -88
  336. package/dist/resource/geometry/TriGeometryResMeshData.js +63 -63
  337. package/dist/resource/geometry/TriGeometryResSkeletonData.js +34 -34
  338. package/dist/resource/geometry/TriJointBinding.js +38 -38
  339. package/dist/resource/geometry/TriMorphTargetGeometryConstants.js +46 -46
  340. package/dist/resource/geometry/TriRtGeometryConstants.js +88 -88
  341. package/dist/resource/geometry/granny/GStateBindingCallbackData.js +31 -31
  342. package/dist/resource/geometry/granny/Tr2GrannyIntersectionResult.js +60 -60
  343. package/dist/resource/geometry/granny/Tr2GrannyStateRes.js +36 -36
  344. package/dist/resource/geometry/granny/TriGrannyRes.js +35 -35
  345. package/dist/resource/geometry/granny/enums.js +10 -10
  346. package/dist/resource/geometry/granny/index.js +6 -6
  347. package/dist/resource/geometry/index.js +17 -17
  348. package/dist/resource/index.js +54 -52
  349. package/dist/resource/index.js.map +1 -1
  350. package/dist/resource/resourceBoundary.js +64 -64
  351. package/dist/resource/shader/Tr2EffectRes.js +336 -431
  352. package/dist/resource/shader/Tr2EffectRes.js.map +1 -1
  353. package/dist/resource/shader/Tr2MaterialArea.js +31 -31
  354. package/dist/resource/shader/Tr2MaterialMesh.js +27 -27
  355. package/dist/resource/shader/Tr2MaterialRes.js +31 -31
  356. package/dist/resource/shader/Tr2Shader.js +283 -261
  357. package/dist/resource/shader/Tr2Shader.js.map +1 -1
  358. package/dist/resource/shader/Tr2ShaderPermutation.js +43 -43
  359. package/dist/resource/shader/index.js +17 -17
  360. package/dist/resource/shader/reflection/Tr2EffectConstant.js +143 -135
  361. package/dist/resource/shader/reflection/Tr2EffectConstant.js.map +1 -1
  362. package/dist/resource/shader/reflection/Tr2EffectDefine.js +30 -30
  363. package/dist/resource/shader/reflection/Tr2EffectDescription.js +114 -109
  364. package/dist/resource/shader/reflection/Tr2EffectDescription.js.map +1 -1
  365. package/dist/resource/shader/reflection/Tr2EffectLibrary.js +168 -147
  366. package/dist/resource/shader/reflection/Tr2EffectLibrary.js.map +1 -1
  367. package/dist/resource/shader/reflection/Tr2EffectParameterAnnotation.js +125 -105
  368. package/dist/resource/shader/reflection/Tr2EffectParameterAnnotation.js.map +1 -1
  369. package/dist/resource/shader/reflection/Tr2EffectResource.js +120 -86
  370. package/dist/resource/shader/reflection/Tr2EffectResource.js.map +1 -1
  371. package/dist/resource/shader/reflection/Tr2EffectStageInput.js +372 -241
  372. package/dist/resource/shader/reflection/Tr2EffectStageInput.js.map +1 -1
  373. package/dist/resource/shader/reflection/Tr2EffectTechnique.js +78 -68
  374. package/dist/resource/shader/reflection/Tr2EffectTechnique.js.map +1 -1
  375. package/dist/resource/shader/reflection/Tr2Pass.js +168 -111
  376. package/dist/resource/shader/reflection/Tr2Pass.js.map +1 -1
  377. package/dist/resource/shader/reflection/carbonRecordFields.js +159 -0
  378. package/dist/resource/shader/reflection/carbonRecordFields.js.map +1 -0
  379. package/dist/resource/shader/reflection/shaderStage.js +22 -0
  380. package/dist/resource/shader/reflection/shaderStage.js.map +1 -0
  381. package/dist/resource/shader/sampler/Tr2SamplerSetup.js +135 -77
  382. package/dist/resource/shader/sampler/Tr2SamplerSetup.js.map +1 -1
  383. package/dist/resource/texture/CjsTextureArrayRes.js +472 -472
  384. package/dist/resource/texture/CjsTextureArrayResParameterProxy.js +179 -179
  385. package/dist/resource/texture/Tr2ImageRes.js +120 -120
  386. package/dist/resource/texture/Tr2TextureLodManager.js +82 -82
  387. package/dist/resource/texture/Tr2TextureLodUpdateRequest.js +37 -37
  388. package/dist/resource/texture/Tr2TexturePackChannel.js +37 -37
  389. package/dist/resource/texture/Tr2TexturePipeline.js +54 -54
  390. package/dist/resource/texture/Tr2TexturePipelineParams.js +34 -34
  391. package/dist/resource/texture/Tr2TexturePipelineStepCompress.js +40 -40
  392. package/dist/resource/texture/Tr2TexturePipelineStepGenerateMips.js +22 -22
  393. package/dist/resource/texture/Tr2TexturePipelineStepLimitSize.js +34 -34
  394. package/dist/resource/texture/Tr2TexturePipelineStepLoad.js +31 -31
  395. package/dist/resource/texture/Tr2TexturePipelineStepPack.js +43 -43
  396. package/dist/resource/texture/TriTextureRes.js +359 -359
  397. package/dist/resource/texture/index.js +15 -15
  398. package/dist/resource/texture/texturePipelineBehavior.js +308 -308
  399. package/dist/worker/CjsResManMainThreadLoader.js +89 -87
  400. package/dist/worker/CjsResManMainThreadLoader.js.map +1 -1
  401. package/dist/worker/CjsResManWorker.js +218 -217
  402. package/dist/worker/CjsResManWorker.js.map +1 -1
  403. package/dist/worker/CjsResManWorkerLoader.js +437 -434
  404. package/dist/worker/CjsResManWorkerLoader.js.map +1 -1
  405. package/dist/worker/protocol.js +12 -12
  406. package/docs/README.md +98 -98
  407. package/docs/architecture.md +118 -109
  408. package/docs/concepts/resource-lifecycle.md +226 -225
  409. package/docs/concepts/shader-resource-model.md +111 -114
  410. package/docs/concepts/writing-an-engine-adapter.md +115 -115
  411. package/docs/formats/README.md +138 -136
  412. package/docs/formats/carbon-effect-container.md +553 -452
  413. package/docs/formats/dxbc/README.md +68 -68
  414. package/docs/formats/dxbc/architecture.md +80 -80
  415. package/docs/formats/dxbc/reference/api.md +77 -77
  416. package/docs/formats/dxbc/reference/classes/README.md +9 -9
  417. package/docs/formats/dxbc/reference/decoded-output.md +122 -122
  418. package/docs/formats/gr2.md +160 -160
  419. package/docs/formats/hlsl/README.md +54 -54
  420. package/docs/formats/hlsl/architecture.md +65 -67
  421. package/docs/formats/hlsl/guides/hydrating-json-output.md +60 -62
  422. package/docs/formats/hlsl/guides/reading-effects.md +64 -64
  423. package/docs/formats/hlsl/reference/advanced-analysis.md +61 -66
  424. package/docs/formats/hlsl/reference/api.md +92 -98
  425. package/docs/formats/hlsl/reference/classes/README.md +11 -11
  426. package/docs/formats/hlsl/reference/json-graph.md +97 -100
  427. package/docs/formats/pickle.md +82 -0
  428. package/docs/formats/provenance.md +196 -196
  429. package/docs/formats/stl.md +37 -37
  430. package/docs/formats/webgl/README.md +115 -57
  431. package/docs/formats/webgl/architecture.md +69 -70
  432. package/docs/formats/webgl/carbon-constant-layouts.md +326 -326
  433. package/docs/formats/webgl/decl-io.md +1234 -1234
  434. package/docs/formats/webgl/memory-structured.md +890 -871
  435. package/docs/formats/webgl/reference/classes/README.md +9 -9
  436. package/docs/formats/webgl/texture-sample.md +964 -964
  437. package/docs/formats/webgpu/README.md +84 -84
  438. package/docs/formats/webgpu/architecture.md +95 -96
  439. package/docs/formats/webgpu/formats/{cewgpu.md → carbon-webgpu.md} +215 -216
  440. package/docs/formats/webgpu/guides/effect-packaging.md +189 -191
  441. package/docs/formats/webgpu/reference/api.md +196 -197
  442. package/docs/formats/webgpu/reference/classes/README.md +9 -9
  443. package/docs/formats/webgpu/reference/wgsl-compatibility.md +1546 -1543
  444. package/docs/formats/wwise.md +146 -85
  445. package/docs/reference/classes/README.md +35 -35
  446. package/docs/reference/classes/audio.md +30 -30
  447. package/docs/reference/classes/core.md +216 -206
  448. package/docs/reference/classes/dropped.md +46 -46
  449. package/docs/reference/classes/formats.md +944 -952
  450. package/docs/reference/classes/resources.md +456 -456
  451. package/docs/reference/classes/texture.md +26 -26
  452. package/docs/reference/events.md +117 -117
  453. package/docs/reference/motherlode-cache.md +275 -275
  454. package/docs/reference/queues.md +194 -110
  455. package/docs/reference/reload.md +107 -107
  456. package/docs/reference/texture-arrays.md +113 -113
  457. package/docs/reference/texture-pipeline.md +53 -53
  458. package/docs/reference/workers.md +142 -135
  459. package/docs/roadmap.md +150 -150
  460. package/format-notices/black/LICENSE +21 -21
  461. package/format-notices/black/NOTICE +47 -47
  462. package/format-notices/bnk/LICENSE +21 -21
  463. package/format-notices/bnk/NOTICE +21 -21
  464. package/format-notices/cmf/LICENSE +21 -21
  465. package/format-notices/cmf/NOTICE +36 -36
  466. package/format-notices/dds/LICENSE +21 -21
  467. package/format-notices/dds/NOTICE +14 -14
  468. package/format-notices/dxbc/LICENSE +21 -21
  469. package/format-notices/dxbc/NOTICE +20 -20
  470. package/format-notices/fbx/LICENSE +21 -21
  471. package/format-notices/fbx/NOTICE +14 -14
  472. package/format-notices/flac/LICENSE +21 -21
  473. package/format-notices/flac/NOTICE +14 -14
  474. package/format-notices/gif/LICENSE +21 -21
  475. package/format-notices/gif/NOTICE +14 -14
  476. package/format-notices/gltf/LICENSE +21 -21
  477. package/format-notices/gltf/NOTICE +27 -27
  478. package/format-notices/gr2/LICENSE +21 -21
  479. package/format-notices/gr2/NOTICE +60 -60
  480. package/format-notices/gr2/THIRD-PARTY-NOTICES.md +93 -93
  481. package/format-notices/hlsl/LICENSE +21 -21
  482. package/format-notices/hlsl/NOTICE +25 -25
  483. package/format-notices/jpeg/LICENSE +21 -21
  484. package/format-notices/jpeg/NOTICE +14 -14
  485. package/format-notices/mp3/LICENSE +21 -21
  486. package/format-notices/mp3/NOTICE +14 -14
  487. package/format-notices/mp4/LICENSE +21 -21
  488. package/format-notices/mp4/NOTICE +14 -14
  489. package/format-notices/obj/LICENSE +21 -21
  490. package/format-notices/obj/NOTICE +26 -26
  491. package/format-notices/ogg/LICENSE +21 -21
  492. package/format-notices/ogg/NOTICE +28 -28
  493. package/format-notices/png/LICENSE +21 -21
  494. package/format-notices/png/NOTICE +14 -14
  495. package/format-notices/red/LICENSE +21 -21
  496. package/format-notices/red/NOTICE +31 -31
  497. package/format-notices/stl/LICENSE +21 -21
  498. package/format-notices/stl/NOTICE +21 -21
  499. package/format-notices/tga/LICENSE +21 -21
  500. package/format-notices/tga/NOTICE +14 -14
  501. package/format-notices/wav/LICENSE +21 -21
  502. package/format-notices/wav/NOTICE +14 -14
  503. package/format-notices/webgl/LICENSE +21 -21
  504. package/format-notices/webgl/NOTICE +35 -35
  505. package/format-notices/webgpu/LICENSE +21 -21
  506. package/format-notices/webgpu/NOTICE +31 -31
  507. package/format-notices/webm/LICENSE +21 -21
  508. package/format-notices/webm/NOTICE +14 -14
  509. package/format-notices/webp/LICENSE +21 -21
  510. package/format-notices/webp/NOTICE +14 -14
  511. package/format-notices/wem/LICENSE +57 -57
  512. package/format-notices/wem/NOTICE +33 -33
  513. package/format-notices/yaml/LICENSE +21 -21
  514. package/format-notices/yaml/NOTICE +44 -44
  515. package/package.json +63 -63
  516. package/dist/format/carbonEffect/carbonDescriptionFromPortable.js +0 -372
  517. package/dist/format/carbonEffect/carbonDescriptionFromPortable.js.map +0 -1
  518. package/dist/format/effect/effectReflectionPackage.js +0 -636
  519. package/dist/format/effect/effectReflectionPackage.js.map +0 -1
  520. package/dist/formats/hlsl/core/HlslReader.js +0 -16
  521. package/dist/formats/hlsl/core/HlslReader.js.map +0 -1
  522. package/dist/formats/hlsl/core/portableReflection.js +0 -848
  523. package/dist/formats/hlsl/core/portableReflection.js.map +0 -1
  524. package/dist/formats/hlsl/portable.js +0 -2
  525. package/dist/formats/hlsl/portable.js.map +0 -1
  526. package/dist/formats/webgl/core/cewg/CewgPackage.js +0 -340
  527. package/dist/formats/webgl/core/cewg/CewgPackage.js.map +0 -1
  528. package/dist/formats/webgl/core/cewg/CewgPackageBuilder.js +0 -104
  529. package/dist/formats/webgl/core/cewg/CewgPackageBuilder.js.map +0 -1
  530. package/dist/formats/webgl/core/cewg/binary.js +0 -19
  531. package/dist/formats/webgl/core/cewg/binary.js.map +0 -1
  532. package/dist/formats/webgl/core/cewgCompleteness.js.map +0 -1
  533. package/dist/formats/webgl/core/effectPackageValidation.js +0 -331
  534. package/dist/formats/webgl/core/effectPackageValidation.js.map +0 -1
  535. package/dist/formats/webgpu/core/cewgpu/CewgpuContainer.js.map +0 -1
  536. package/dist/formats/webgpu/core/cewgpu/containerViews.js.map +0 -1
  537. package/dist/formats/webgpu/core/cewgpu/validateContainer.js.map +0 -1
  538. package/dist/resource/shader/portable.js +0 -33
  539. package/dist/resource/shader/portable.js.map +0 -1
  540. package/docs/formats/hlsl/reference/portable-reflection.md +0 -141
  541. package/docs/formats/webgl/effect-reflection.md +0 -127
@@ -0,0 +1,122 @@
1
+ import { CjsCarbonEffectReader } from '../../../format/carbonEffect/CjsCarbonEffectReader.js';
2
+ import { hlslShaderStageName } from '../../hlsl/core/tr2/HlslRenderContextEnum.js';
3
+
4
+ /**
5
+ * Cheap inspection of a WebGL effect container.
6
+ *
7
+ * The chunk package's inspection reported tags, offsets and sizes, because a
8
+ * chunk file's structure *was* a list of tagged byte ranges. A Carbon v15
9
+ * container has no such list, so none of that vocabulary is carried across. A
10
+ * `chunks` array describing a container would be a lie, and a believed one.
11
+ *
12
+ * What a container's structure actually is: an arena of strings, a set of
13
+ * permutation axes, and an offset table whose rows point at description bodies —
14
+ * with rows deliberately aliased onto one body when permutations share a
15
+ * translation. So that is what this reports: how many rows, how many distinct
16
+ * bodies they resolve to, how much of the file is arena, and what the axes are.
17
+ *
18
+ * `uniqueBodyCount` and `aliasedRowCount` come from the reader's own structural
19
+ * diagnostics rather than being recomputed here — the reader already validates
20
+ * every row's byte range while building them, so a second walk could only
21
+ * disagree with the thing that already refused to construct.
22
+ *
23
+ * Body decoding is done once per *distinct* body offset, not once per row.
24
+ * Effects here reach 4,096 permutations over a few dozen bodies, so decoding per
25
+ * row would make an inspection call cost more than the packaging that produced
26
+ * the file.
27
+ */
28
+
29
+ /**
30
+ * Counts programs and backend blocks across the container's distinct bodies.
31
+ *
32
+ * A stage slot with zero-length `shaderData` is a declared stage that carries no
33
+ * stored program — the shape `buildCarbonEffectContainer` emits for a body the
34
+ * translator could not lower. Counting those separately is the whole point: a
35
+ * container with every stage present and every program empty would otherwise
36
+ * inspect identically to a complete one.
37
+ *
38
+ * @param {CjsCarbonEffectReader} reader Container reader.
39
+ * @returns {{programCount:number, emptyProgramCount:number, backendBlockCount:number,
40
+ * techniqueCount:number, passCount:number, stageNames:string[]}} Body tallies.
41
+ */
42
+ function inspectBodies(reader) {
43
+ const seenOffsets = new Set();
44
+ const stageNames = new Set();
45
+ let programCount = 0;
46
+ let emptyProgramCount = 0;
47
+ let backendBlockCount = 0;
48
+ let techniqueCount = 0;
49
+ let passCount = 0;
50
+ for (let index = 0; index < reader.records.length; index += 1) {
51
+ const {
52
+ offset
53
+ } = reader.records[index];
54
+ if (seenOffsets.has(offset)) continue;
55
+ seenOffsets.add(offset);
56
+ const description = reader.readDescription(index, {
57
+ backend: true
58
+ });
59
+ for (const technique of description.techniques) {
60
+ techniqueCount += 1;
61
+ for (const pass of technique.passes) {
62
+ passCount += 1;
63
+ if (pass.backendBlock?.size) backendBlockCount += 1;
64
+ for (const stage of pass.stages) {
65
+ stageNames.add(hlslShaderStageName(stage.type));
66
+ if (stage.shaderData?.size) programCount += 1;else emptyProgramCount += 1;
67
+ }
68
+ }
69
+ }
70
+ }
71
+ return {
72
+ programCount,
73
+ emptyProgramCount,
74
+ backendBlockCount,
75
+ techniqueCount,
76
+ passCount,
77
+ stageNames: [...stageNames].sort()
78
+ };
79
+ }
80
+
81
+ /**
82
+ * Inspects WebGL effect container bytes.
83
+ *
84
+ * @param {Uint8Array|ArrayBuffer|Buffer|DataView} input Container payload.
85
+ * @param {object} [values] Normalized format values.
86
+ * @param {string} [values.source] Source name, for diagnostics.
87
+ * @returns {object} Plain summary data.
88
+ */
89
+ function inspectGlslEffectContainer(input, values = {}) {
90
+ const source = values.source ?? "memory";
91
+ const reader = new CjsCarbonEffectReader(input, {
92
+ source
93
+ });
94
+ const bodies = inspectBodies(reader);
95
+ return {
96
+ source,
97
+ isContainer: true,
98
+ version: reader.version,
99
+ compilerVersion: [...reader.compilerVersion],
100
+ byteLength: reader.bytes.length,
101
+ arenaByteLength: reader.stringTableSize,
102
+ // The offset table, and what it resolves to. `recordCount` counts rows;
103
+ // `uniqueBodyCount` counts the bodies those rows point at. The gap
104
+ // between them is the sharing, which is the container's whole reason for
105
+ // being cheaper than one file per permutation.
106
+ recordCount: reader.diagnostics.recordCount,
107
+ permutationProduct: reader.diagnostics.permutationProduct,
108
+ dense: reader.diagnostics.dense,
109
+ uniqueBodyCount: reader.diagnostics.uniqueBodyCount,
110
+ aliasedRowCount: reader.diagnostics.aliasedRowCount,
111
+ permutationAxes: reader.permutations.map(axis => ({
112
+ name: axis.name.value,
113
+ type: axis.type,
114
+ defaultOption: axis.defaultOption,
115
+ options: axis.options.map(option => option.value)
116
+ })),
117
+ ...bodies
118
+ };
119
+ }
120
+
121
+ export { inspectGlslEffectContainer };
122
+ //# sourceMappingURL=inspectGlslEffectContainer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inspectGlslEffectContainer.js","sources":["../../../../../src/formats/webgl/core/inspectGlslEffectContainer.js"],"sourcesContent":["import { CjsCarbonEffectReader } from \"../../../format/carbonEffect/CjsCarbonEffectReader.js\";\nimport { hlslShaderStageName } from \"../../hlsl/core/tr2/HlslRenderContextEnum.js\";\n\n/**\n * Cheap inspection of a WebGL effect container.\n *\n * The chunk package's inspection reported tags, offsets and sizes, because a\n * chunk file's structure *was* a list of tagged byte ranges. A Carbon v15\n * container has no such list, so none of that vocabulary is carried across. A\n * `chunks` array describing a container would be a lie, and a believed one.\n *\n * What a container's structure actually is: an arena of strings, a set of\n * permutation axes, and an offset table whose rows point at description bodies —\n * with rows deliberately aliased onto one body when permutations share a\n * translation. So that is what this reports: how many rows, how many distinct\n * bodies they resolve to, how much of the file is arena, and what the axes are.\n *\n * `uniqueBodyCount` and `aliasedRowCount` come from the reader's own structural\n * diagnostics rather than being recomputed here — the reader already validates\n * every row's byte range while building them, so a second walk could only\n * disagree with the thing that already refused to construct.\n *\n * Body decoding is done once per *distinct* body offset, not once per row.\n * Effects here reach 4,096 permutations over a few dozen bodies, so decoding per\n * row would make an inspection call cost more than the packaging that produced\n * the file.\n */\n\n/**\n * Counts programs and backend blocks across the container's distinct bodies.\n *\n * A stage slot with zero-length `shaderData` is a declared stage that carries no\n * stored program — the shape `buildCarbonEffectContainer` emits for a body the\n * translator could not lower. Counting those separately is the whole point: a\n * container with every stage present and every program empty would otherwise\n * inspect identically to a complete one.\n *\n * @param {CjsCarbonEffectReader} reader Container reader.\n * @returns {{programCount:number, emptyProgramCount:number, backendBlockCount:number,\n * techniqueCount:number, passCount:number, stageNames:string[]}} Body tallies.\n */\nfunction inspectBodies(reader)\n{\n const seenOffsets = new Set();\n const stageNames = new Set();\n let programCount = 0;\n let emptyProgramCount = 0;\n let backendBlockCount = 0;\n let techniqueCount = 0;\n let passCount = 0;\n\n for (let index = 0; index < reader.records.length; index += 1)\n {\n const { offset } = reader.records[index];\n if (seenOffsets.has(offset)) continue;\n seenOffsets.add(offset);\n\n const description = reader.readDescription(index, { backend: true });\n for (const technique of description.techniques)\n {\n techniqueCount += 1;\n for (const pass of technique.passes)\n {\n passCount += 1;\n if (pass.backendBlock?.size) backendBlockCount += 1;\n for (const stage of pass.stages)\n {\n stageNames.add(hlslShaderStageName(stage.type));\n if (stage.shaderData?.size) programCount += 1;\n else emptyProgramCount += 1;\n }\n }\n }\n }\n\n return {\n programCount,\n emptyProgramCount,\n backendBlockCount,\n techniqueCount,\n passCount,\n stageNames: [ ...stageNames ].sort()\n };\n}\n\n/**\n * Inspects WebGL effect container bytes.\n *\n * @param {Uint8Array|ArrayBuffer|Buffer|DataView} input Container payload.\n * @param {object} [values] Normalized format values.\n * @param {string} [values.source] Source name, for diagnostics.\n * @returns {object} Plain summary data.\n */\nexport function inspectGlslEffectContainer(input, values = {})\n{\n const source = values.source ?? \"memory\";\n const reader = new CjsCarbonEffectReader(input, { source });\n const bodies = inspectBodies(reader);\n\n return {\n source,\n isContainer: true,\n version: reader.version,\n compilerVersion: [ ...reader.compilerVersion ],\n byteLength: reader.bytes.length,\n arenaByteLength: reader.stringTableSize,\n\n // The offset table, and what it resolves to. `recordCount` counts rows;\n // `uniqueBodyCount` counts the bodies those rows point at. The gap\n // between them is the sharing, which is the container's whole reason for\n // being cheaper than one file per permutation.\n recordCount: reader.diagnostics.recordCount,\n permutationProduct: reader.diagnostics.permutationProduct,\n dense: reader.diagnostics.dense,\n uniqueBodyCount: reader.diagnostics.uniqueBodyCount,\n aliasedRowCount: reader.diagnostics.aliasedRowCount,\n\n permutationAxes: reader.permutations.map((axis) => ({\n name: axis.name.value,\n type: axis.type,\n defaultOption: axis.defaultOption,\n options: axis.options.map((option) => option.value)\n })),\n\n ...bodies\n };\n}\n\nexport default inspectGlslEffectContainer;\n"],"names":["inspectBodies","reader","seenOffsets","Set","stageNames","programCount","emptyProgramCount","backendBlockCount","techniqueCount","passCount","index","records","length","offset","has","add","description","readDescription","backend","technique","techniques","pass","passes","backendBlock","size","stage","stages","hlslShaderStageName","type","shaderData","sort","inspectGlslEffectContainer","input","values","source","CjsCarbonEffectReader","bodies","isContainer","version","compilerVersion","byteLength","bytes","arenaByteLength","stringTableSize","recordCount","diagnostics","permutationProduct","dense","uniqueBodyCount","aliasedRowCount","permutationAxes","permutations","map","axis","name","value","defaultOption","options","option"],"mappings":"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"}
@@ -0,0 +1,303 @@
1
+ import { CjsCarbonEffectReader } from '../../../format/carbonEffect/CjsCarbonEffectReader.js';
2
+ import { readGlslBackendBlock } from './glslBackendBlock.js';
3
+ import { hlslShaderStageName, HlslUsageCodeNames } from '../../hlsl/core/tr2/HlslRenderContextEnum.js';
4
+
5
+ /**
6
+ * Decodes a WebGL effect container into the stage/shader records the
7
+ * completeness rules consume.
8
+ *
9
+ * This exists so the rules run from container bytes alone. The alternative was
10
+ * to hand them the in-memory translation, which works inside `buildEffectPackage`
11
+ * and nowhere else — the validator reads a finished file and has no translation
12
+ * in scope. That would have cost the validator its completeness check while
13
+ * still requiring a decoder to produce the programs it compiles in a browser, so
14
+ * it was strictly more work for strictly less checking.
15
+ *
16
+ * The vocabulary is deliberately the one the rules already speak — `stages` with
17
+ * pass coordinates, `shaders` with source and a translation verdict. The rules
18
+ * are about the translation, not about how it was stored, so retargeting them
19
+ * meant changing where the records come from and nothing about what they mean.
20
+ *
21
+ * **What the wire cannot tell you.** `buildCarbonEffectContainer` stores a body
22
+ * the translator could not lower as its full pass tree with zero-length
23
+ * programs; the *reason* it failed stays in the in-memory build result and is
24
+ * never written. So a shader decoded from bytes reports `ok: false` with
25
+ * "no program was stored" and nothing more specific. That is the honest answer:
26
+ * a file on disk does not know why a translation failed months ago. Callers that
27
+ * do know — `buildEffectPackage`, at build time — keep their specific
28
+ * diagnostics by feeding the rules their own records instead.
29
+ */
30
+
31
+ /** The verdict a stage carrying no stored program gets. */
32
+ const NO_PROGRAM_REASON = "no program was stored";
33
+
34
+ /**
35
+ * Reshapes one Carbon stage's own reflection into the manifest vocabulary the
36
+ * runtime-ABI rules read.
37
+ *
38
+ * The chunk package carried this as a separate META manifest, which is why the
39
+ * old rules cross-checked two chunks against each other. The container needs no
40
+ * such cross-check: `pipelineInputs`, `textures` and `samplers` are Carbon's own
41
+ * per-stage reflection, read straight out of the description. There is only one
42
+ * copy, so there is nothing for a second copy to disagree with — the class of
43
+ * bug those cross-chunk rules existed to catch cannot occur here.
44
+ *
45
+ * `usageName` is derived from the `usage` byte rather than carried, the same way
46
+ * `carbonDescriptionToRuntime.js:261` derives it.
47
+ *
48
+ * @param {object} stage Decoded Carbon stage record.
49
+ * @returns {{pipelineInputs:object[], bindings:object[]}} Manifest-shaped reflection.
50
+ */
51
+ function stageManifest(stage) {
52
+ return {
53
+ pipelineInputs: (stage.pipelineInputs ?? []).map(input => ({
54
+ registerIndex: input.registerIndex,
55
+ usageName: HlslUsageCodeNames[input.usage] || `USAGE_${input.usage}`,
56
+ usageIndex: input.usageIndex,
57
+ usedMask: input.usedMask
58
+ })),
59
+ bindings: [
60
+ // The stage-local constant buffer, carrying the named constants an
61
+ // engine binds its material parameters to. Register 0 is this
62
+ // stage's own buffer in per-stage numbering; a consumer maps it to
63
+ // the slot its backend uses (vertex b0, pixel b7 by the GL
64
+ // convention).
65
+ //
66
+ // This is not optional detail. Without it an engine has no names to
67
+ // bind parameters to, uploads nothing, and every material value the
68
+ // shader reads is zero — which draws, links and binds correctly and
69
+ // renders pure black. It was missing because the completeness rules
70
+ // this reader was written for only needed inputs, resources and
71
+ // samplers, so nothing noticed the constants were dropped.
72
+ {
73
+ kind: "constantBuffer",
74
+ registerIndex: 0,
75
+ carbon: {
76
+ // Authored defaults live in the stage's blob; its declared
77
+ // size is what a consumer allocates against.
78
+ constantValueSize: stage.defaultValues?.size ?? 0,
79
+ constants: (stage.constants ?? []).map(constant => ({
80
+ // String refs decode as `{offset, value}` records.
81
+ name: constant.name?.value ?? constant.name,
82
+ offset: constant.offset,
83
+ size: constant.size,
84
+ type: constant.type,
85
+ dimension: constant.dimension,
86
+ elements: constant.elements,
87
+ isSRGB: constant.isSRGB,
88
+ isAutoregister: constant.isAutoregister
89
+ }))
90
+ }
91
+ }, ...(stage.textures ?? []).map(texture => ({
92
+ kind: "resource",
93
+ registerIndex: texture.registerIndex,
94
+ // Named so a rule can ask whether a described resource belongs
95
+ // to a family the packager is known to lower away.
96
+ name: texture.name.value,
97
+ // Carbon's own flags, nested like the sampler's, because that
98
+ // is where the consumer already looks for them.
99
+ //
100
+ // `isAutoregister` is not cosmetic: such a resource is bound
101
+ // automatically from the engine's global variable store rather
102
+ // than set by a material. Dropping it makes every resource look
103
+ // user-settable, so a consumer builds an ordinary texture
104
+ // parameter that nothing ever assigns and the global never
105
+ // reaches the shader.
106
+ carbon: {
107
+ isSRGB: texture.isSRGB === 1,
108
+ isAutoregister: texture.isAutoregister === 1
109
+ }
110
+ })), ...(stage.samplers ?? []).map(sampler => ({
111
+ kind: "sampler",
112
+ registerIndex: sampler.registerIndex,
113
+ // Carbon stores the flag as a byte; the rule compares against
114
+ // `=== true`, so the conversion has to happen here rather than
115
+ // letting a truthy 1 pass a strict check by accident.
116
+ carbon: {
117
+ sampler: {
118
+ comparison: sampler.comparison !== 0
119
+ }
120
+ }
121
+ }))]
122
+ };
123
+ }
124
+
125
+ /**
126
+ * Decodes one pass's backend block, tolerating a pass that has none.
127
+ *
128
+ * @param {object} pass Decoded pass record.
129
+ * @param {string} passKey Enclosing pass key.
130
+ * @param {string} source Source name for error details.
131
+ * @returns {object} Per-stage backend data, keyed by stage name.
132
+ */
133
+ function backendStages(pass, passKey, source) {
134
+ if (!pass.backendBlock?.size) return {
135
+ stages: {},
136
+ transforms: []
137
+ };
138
+ const block = readGlslBackendBlock(pass.backendBlock.bytes, {
139
+ layoutKey: passKey,
140
+ source
141
+ });
142
+ return {
143
+ stages: block.stages ?? {},
144
+ transforms: block.transforms ?? []
145
+ };
146
+ }
147
+
148
+ /**
149
+ * Decodes container bytes into stage and shader records.
150
+ *
151
+ * Bodies are decoded once each rather than once per permutation row: rows alias
152
+ * onto shared bodies, and a rule that saw the same body 4,096 times would report
153
+ * 4,096 identical incomplete passes.
154
+ *
155
+ * @param {Uint8Array|ArrayBuffer|Buffer|DataView} input Container payload.
156
+ * @param {object} [values] Read values.
157
+ * @param {string} [values.source] Source name, for diagnostics.
158
+ * @returns {{stages:object[], shaders:object[], recordCount:number, bodyCount:number}}
159
+ * Stage graph in the completeness rules' vocabulary.
160
+ */
161
+ function readGlslEffectContainer(input, values = {}) {
162
+ const source = values.source ?? "memory";
163
+ const reader = new CjsCarbonEffectReader(input, {
164
+ source
165
+ });
166
+ const stages = [];
167
+ const shaders = [];
168
+ const bodyKeyByOffset = new Map();
169
+
170
+ // Every permutation index that resolves to each body.
171
+ //
172
+ // This is the bridge a caller actually needs, and the only one that is
173
+ // sound. `bodyKey` here is this reader's own ordinal spelling; the
174
+ // permutation graph mints `body${N}` for the same body, and the two are not
175
+ // merely spelled differently — the graph dedupes by content (SHA-256 plus
176
+ // byte equality) while this reader dedupes by source-record offset. Those
177
+ // partitions coincide only because the container writer aliases
178
+ // byte-identical bodies onto one offset, which is a property of the writer
179
+ // rather than a contract.
180
+ //
181
+ // So a consumer must never map between the two by string surgery on either
182
+ // spelling, and must not assume the two ordinal sequences agree. It holds a
183
+ // permutation index; this gives it the body directly.
184
+ const permutationIndicesByOffset = new Map();
185
+ for (let index = 0; index < reader.records.length; index += 1) {
186
+ const {
187
+ offset
188
+ } = reader.records[index];
189
+ const seen = permutationIndicesByOffset.get(offset);
190
+ if (seen) seen.push(index);else permutationIndicesByOffset.set(offset, [index]);
191
+ }
192
+
193
+ // Distinct program texts share one shader record, so `shaders` counts unique
194
+ // translations the way the chunk package's shader table did. Empty stages are
195
+ // deliberately *not* pooled: each keeps its own record so a report can name
196
+ // every pass that is missing a program rather than one shared "absent".
197
+ //
198
+ // The pool key is the program text *and* the backend reflection that came
199
+ // with it, not the text alone. A pooled record carries the bindings and
200
+ // stage inputs of whichever stage was seen first, and
201
+ // `validateShaderRuntimeContract` judges the emitted GLSL against them — so
202
+ // pooling on text alone would let two stages with identical source but
203
+ // different reflection be checked against the wrong metadata, silently. It
204
+ // is unlikely that identical GLSL ever carries different reflection, which
205
+ // is exactly why it would not be noticed.
206
+ const shaderKeyByIdentity = new Map();
207
+ for (let index = 0; index < reader.records.length; index += 1) {
208
+ const {
209
+ offset
210
+ } = reader.records[index];
211
+ if (bodyKeyByOffset.has(offset)) continue;
212
+ const bodyKey = `body_${bodyKeyByOffset.size}`;
213
+ bodyKeyByOffset.set(offset, bodyKey);
214
+ const description = reader.readDescription(index, {
215
+ backend: true
216
+ });
217
+ for (const technique of description.techniques) {
218
+ const techniqueName = technique.name.value;
219
+ for (const [passIndex, pass] of technique.passes.entries()) {
220
+ const passKey = `${techniqueName}.pass${passIndex}`;
221
+ const {
222
+ stages: backend,
223
+ transforms
224
+ } = backendStages(pass, passKey, source);
225
+ for (const stage of pass.stages) {
226
+ const name = hlslShaderStageName(stage.type);
227
+ const stageKey = `${bodyKey}.${passKey}.${name}`;
228
+ const stageBackend = backend[name] ?? {};
229
+ let shaderKey;
230
+ if (stage.shaderData?.size) {
231
+ const code = new TextDecoder().decode(stage.shaderData.bytes);
232
+ const identity = `${JSON.stringify([stageBackend.bindings ?? [], stageBackend.stageInputs ?? [], stageBackend.computeFragment ?? null])} ${code}`;
233
+ const pooled = shaderKeyByIdentity.get(identity);
234
+ if (pooled) {
235
+ shaderKey = pooled;
236
+ } else {
237
+ shaderKey = `shader_${shaderKeyByIdentity.size}`;
238
+ shaderKeyByIdentity.set(identity, shaderKey);
239
+ shaders.push({
240
+ key: shaderKey,
241
+ stageName: name,
242
+ source: code,
243
+ hlsl2webgl: {
244
+ ok: true
245
+ },
246
+ bindings: stageBackend.bindings ?? [],
247
+ stageInputs: stageBackend.stageInputs ?? [],
248
+ ...(stageBackend.computeFragment ? {
249
+ computeFragment: stageBackend.computeFragment
250
+ } : {})
251
+ });
252
+ }
253
+ } else {
254
+ shaderKey = `${stageKey}.absent`;
255
+ shaders.push({
256
+ key: shaderKey,
257
+ stageName: name,
258
+ source: "",
259
+ hlsl2webgl: {
260
+ ok: false,
261
+ reason: NO_PROGRAM_REASON
262
+ },
263
+ bindings: stageBackend.bindings ?? [],
264
+ stageInputs: stageBackend.stageInputs ?? []
265
+ });
266
+ }
267
+ stages.push({
268
+ key: stageKey,
269
+ bodyKey,
270
+ techniqueName,
271
+ passIndex,
272
+ stageName: name,
273
+ stageType: stage.type,
274
+ shaderKey,
275
+ manifest: stageManifest(stage),
276
+ // The pass's transforms, so a rule can ask whether a
277
+ // description resource was merged away rather than lost.
278
+ transforms
279
+ });
280
+ }
281
+ }
282
+ }
283
+ }
284
+
285
+ // Ordered by first appearance, matching `bodyKey`'s ordinal.
286
+ const bodies = [];
287
+ for (const [offset, key] of bodyKeyByOffset) {
288
+ bodies.push({
289
+ key,
290
+ permutationIndices: Object.freeze(permutationIndicesByOffset.get(offset) ?? [])
291
+ });
292
+ }
293
+ return {
294
+ stages,
295
+ shaders,
296
+ bodies,
297
+ recordCount: reader.records.length,
298
+ bodyCount: bodyKeyByOffset.size
299
+ };
300
+ }
301
+
302
+ export { readGlslEffectContainer };
303
+ //# sourceMappingURL=readGlslEffectContainer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"readGlslEffectContainer.js","sources":["../../../../../src/formats/webgl/core/readGlslEffectContainer.js"],"sourcesContent":["import { CjsCarbonEffectReader } from \"../../../format/carbonEffect/CjsCarbonEffectReader.js\";\r\nimport { readGlslBackendBlock } from \"./glslBackendBlock.js\";\r\nimport {\r\n hlslShaderStageName,\r\n HlslUsageCodeNames\r\n} from \"../../hlsl/core/tr2/HlslRenderContextEnum.js\";\r\n\r\n/**\r\n * Decodes a WebGL effect container into the stage/shader records the\r\n * completeness rules consume.\r\n *\r\n * This exists so the rules run from container bytes alone. The alternative was\r\n * to hand them the in-memory translation, which works inside `buildEffectPackage`\r\n * and nowhere else — the validator reads a finished file and has no translation\r\n * in scope. That would have cost the validator its completeness check while\r\n * still requiring a decoder to produce the programs it compiles in a browser, so\r\n * it was strictly more work for strictly less checking.\r\n *\r\n * The vocabulary is deliberately the one the rules already speak — `stages` with\r\n * pass coordinates, `shaders` with source and a translation verdict. The rules\r\n * are about the translation, not about how it was stored, so retargeting them\r\n * meant changing where the records come from and nothing about what they mean.\r\n *\r\n * **What the wire cannot tell you.** `buildCarbonEffectContainer` stores a body\r\n * the translator could not lower as its full pass tree with zero-length\r\n * programs; the *reason* it failed stays in the in-memory build result and is\r\n * never written. So a shader decoded from bytes reports `ok: false` with\r\n * \"no program was stored\" and nothing more specific. That is the honest answer:\r\n * a file on disk does not know why a translation failed months ago. Callers that\r\n * do know — `buildEffectPackage`, at build time — keep their specific\r\n * diagnostics by feeding the rules their own records instead.\r\n */\r\n\r\n/** The verdict a stage carrying no stored program gets. */\r\nconst NO_PROGRAM_REASON = \"no program was stored\";\r\n\r\n/**\r\n * Reshapes one Carbon stage's own reflection into the manifest vocabulary the\r\n * runtime-ABI rules read.\r\n *\r\n * The chunk package carried this as a separate META manifest, which is why the\r\n * old rules cross-checked two chunks against each other. The container needs no\r\n * such cross-check: `pipelineInputs`, `textures` and `samplers` are Carbon's own\r\n * per-stage reflection, read straight out of the description. There is only one\r\n * copy, so there is nothing for a second copy to disagree with — the class of\r\n * bug those cross-chunk rules existed to catch cannot occur here.\r\n *\r\n * `usageName` is derived from the `usage` byte rather than carried, the same way\r\n * `carbonDescriptionToRuntime.js:261` derives it.\r\n *\r\n * @param {object} stage Decoded Carbon stage record.\r\n * @returns {{pipelineInputs:object[], bindings:object[]}} Manifest-shaped reflection.\r\n */\r\nfunction stageManifest(stage)\r\n{\r\n return {\r\n pipelineInputs: (stage.pipelineInputs ?? []).map((input) => ({\r\n registerIndex: input.registerIndex,\r\n usageName: HlslUsageCodeNames[input.usage] || `USAGE_${input.usage}`,\r\n usageIndex: input.usageIndex,\r\n usedMask: input.usedMask\r\n })),\r\n bindings: [\r\n // The stage-local constant buffer, carrying the named constants an\r\n // engine binds its material parameters to. Register 0 is this\r\n // stage's own buffer in per-stage numbering; a consumer maps it to\r\n // the slot its backend uses (vertex b0, pixel b7 by the GL\r\n // convention).\r\n //\r\n // This is not optional detail. Without it an engine has no names to\r\n // bind parameters to, uploads nothing, and every material value the\r\n // shader reads is zero — which draws, links and binds correctly and\r\n // renders pure black. It was missing because the completeness rules\r\n // this reader was written for only needed inputs, resources and\r\n // samplers, so nothing noticed the constants were dropped.\r\n {\r\n kind: \"constantBuffer\",\r\n registerIndex: 0,\r\n carbon: {\r\n // Authored defaults live in the stage's blob; its declared\r\n // size is what a consumer allocates against.\r\n constantValueSize: stage.defaultValues?.size ?? 0,\r\n constants: (stage.constants ?? []).map((constant) => ({\r\n // String refs decode as `{offset, value}` records.\r\n name: constant.name?.value ?? constant.name,\r\n offset: constant.offset,\r\n size: constant.size,\r\n type: constant.type,\r\n dimension: constant.dimension,\r\n elements: constant.elements,\r\n isSRGB: constant.isSRGB,\r\n isAutoregister: constant.isAutoregister\r\n }))\r\n }\r\n },\r\n ...(stage.textures ?? []).map((texture) => ({\r\n kind: \"resource\",\r\n registerIndex: texture.registerIndex,\r\n // Named so a rule can ask whether a described resource belongs\r\n // to a family the packager is known to lower away.\r\n name: texture.name.value,\r\n // Carbon's own flags, nested like the sampler's, because that\r\n // is where the consumer already looks for them.\r\n //\r\n // `isAutoregister` is not cosmetic: such a resource is bound\r\n // automatically from the engine's global variable store rather\r\n // than set by a material. Dropping it makes every resource look\r\n // user-settable, so a consumer builds an ordinary texture\r\n // parameter that nothing ever assigns and the global never\r\n // reaches the shader.\r\n carbon: {\r\n isSRGB: texture.isSRGB === 1,\r\n isAutoregister: texture.isAutoregister === 1\r\n }\r\n })),\r\n ...(stage.samplers ?? []).map((sampler) => ({\r\n kind: \"sampler\",\r\n registerIndex: sampler.registerIndex,\r\n // Carbon stores the flag as a byte; the rule compares against\r\n // `=== true`, so the conversion has to happen here rather than\r\n // letting a truthy 1 pass a strict check by accident.\r\n carbon: { sampler: { comparison: sampler.comparison !== 0 } }\r\n }))\r\n ]\r\n };\r\n}\r\n\r\n/**\r\n * Decodes one pass's backend block, tolerating a pass that has none.\r\n *\r\n * @param {object} pass Decoded pass record.\r\n * @param {string} passKey Enclosing pass key.\r\n * @param {string} source Source name for error details.\r\n * @returns {object} Per-stage backend data, keyed by stage name.\r\n */\r\nfunction backendStages(pass, passKey, source)\r\n{\r\n if (!pass.backendBlock?.size) return { stages: {}, transforms: [] };\r\n const block = readGlslBackendBlock(pass.backendBlock.bytes, { layoutKey: passKey, source });\r\n return { stages: block.stages ?? {}, transforms: block.transforms ?? [] };\r\n}\r\n\r\n/**\r\n * Decodes container bytes into stage and shader records.\r\n *\r\n * Bodies are decoded once each rather than once per permutation row: rows alias\r\n * onto shared bodies, and a rule that saw the same body 4,096 times would report\r\n * 4,096 identical incomplete passes.\r\n *\r\n * @param {Uint8Array|ArrayBuffer|Buffer|DataView} input Container payload.\r\n * @param {object} [values] Read values.\r\n * @param {string} [values.source] Source name, for diagnostics.\r\n * @returns {{stages:object[], shaders:object[], recordCount:number, bodyCount:number}}\r\n * Stage graph in the completeness rules' vocabulary.\r\n */\r\nexport function readGlslEffectContainer(input, values = {})\r\n{\r\n const source = values.source ?? \"memory\";\r\n const reader = new CjsCarbonEffectReader(input, { source });\r\n\r\n const stages = [];\r\n const shaders = [];\r\n const bodyKeyByOffset = new Map();\r\n\r\n // Every permutation index that resolves to each body.\r\n //\r\n // This is the bridge a caller actually needs, and the only one that is\r\n // sound. `bodyKey` here is this reader's own ordinal spelling; the\r\n // permutation graph mints `body${N}` for the same body, and the two are not\r\n // merely spelled differently — the graph dedupes by content (SHA-256 plus\r\n // byte equality) while this reader dedupes by source-record offset. Those\r\n // partitions coincide only because the container writer aliases\r\n // byte-identical bodies onto one offset, which is a property of the writer\r\n // rather than a contract.\r\n //\r\n // So a consumer must never map between the two by string surgery on either\r\n // spelling, and must not assume the two ordinal sequences agree. It holds a\r\n // permutation index; this gives it the body directly.\r\n const permutationIndicesByOffset = new Map();\r\n\r\n for (let index = 0; index < reader.records.length; index += 1)\r\n {\r\n const { offset } = reader.records[index];\r\n const seen = permutationIndicesByOffset.get(offset);\r\n if (seen) seen.push(index);\r\n else permutationIndicesByOffset.set(offset, [ index ]);\r\n }\r\n\r\n // Distinct program texts share one shader record, so `shaders` counts unique\r\n // translations the way the chunk package's shader table did. Empty stages are\r\n // deliberately *not* pooled: each keeps its own record so a report can name\r\n // every pass that is missing a program rather than one shared \"absent\".\r\n //\r\n // The pool key is the program text *and* the backend reflection that came\r\n // with it, not the text alone. A pooled record carries the bindings and\r\n // stage inputs of whichever stage was seen first, and\r\n // `validateShaderRuntimeContract` judges the emitted GLSL against them — so\r\n // pooling on text alone would let two stages with identical source but\r\n // different reflection be checked against the wrong metadata, silently. It\r\n // is unlikely that identical GLSL ever carries different reflection, which\r\n // is exactly why it would not be noticed.\r\n const shaderKeyByIdentity = new Map();\r\n\r\n for (let index = 0; index < reader.records.length; index += 1)\r\n {\r\n const { offset } = reader.records[index];\r\n if (bodyKeyByOffset.has(offset)) continue;\r\n\r\n const bodyKey = `body_${bodyKeyByOffset.size}`;\r\n bodyKeyByOffset.set(offset, bodyKey);\r\n\r\n const description = reader.readDescription(index, { backend: true });\r\n\r\n for (const technique of description.techniques)\r\n {\r\n const techniqueName = technique.name.value;\r\n for (const [ passIndex, pass ] of technique.passes.entries())\r\n {\r\n const passKey = `${techniqueName}.pass${passIndex}`;\r\n const { stages: backend, transforms } = backendStages(\r\n pass,\r\n passKey,\r\n source\r\n );\r\n\r\n for (const stage of pass.stages)\r\n {\r\n const name = hlslShaderStageName(stage.type);\r\n const stageKey = `${bodyKey}.${passKey}.${name}`;\r\n const stageBackend = backend[name] ?? {};\r\n\r\n let shaderKey;\r\n if (stage.shaderData?.size)\r\n {\r\n const code = new TextDecoder().decode(stage.shaderData.bytes);\r\n const identity = `${JSON.stringify([\r\n stageBackend.bindings ?? [],\r\n stageBackend.stageInputs ?? [],\r\n stageBackend.computeFragment ?? null\r\n ])} ${code}`;\r\n const pooled = shaderKeyByIdentity.get(identity);\r\n if (pooled)\r\n {\r\n shaderKey = pooled;\r\n }\r\n else\r\n {\r\n shaderKey = `shader_${shaderKeyByIdentity.size}`;\r\n shaderKeyByIdentity.set(identity, shaderKey);\r\n shaders.push({\r\n key: shaderKey,\r\n stageName: name,\r\n source: code,\r\n hlsl2webgl: { ok: true },\r\n bindings: stageBackend.bindings ?? [],\r\n stageInputs: stageBackend.stageInputs ?? [],\r\n ...(stageBackend.computeFragment\r\n ? { computeFragment: stageBackend.computeFragment }\r\n : {})\r\n });\r\n }\r\n }\r\n else\r\n {\r\n shaderKey = `${stageKey}.absent`;\r\n shaders.push({\r\n key: shaderKey,\r\n stageName: name,\r\n source: \"\",\r\n hlsl2webgl: { ok: false, reason: NO_PROGRAM_REASON },\r\n bindings: stageBackend.bindings ?? [],\r\n stageInputs: stageBackend.stageInputs ?? []\r\n });\r\n }\r\n\r\n stages.push({\r\n key: stageKey,\r\n bodyKey,\r\n techniqueName,\r\n passIndex,\r\n stageName: name,\r\n stageType: stage.type,\r\n shaderKey,\r\n manifest: stageManifest(stage),\r\n // The pass's transforms, so a rule can ask whether a\r\n // description resource was merged away rather than lost.\r\n transforms\r\n });\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Ordered by first appearance, matching `bodyKey`'s ordinal.\r\n const bodies = [];\r\n for (const [ offset, key ] of bodyKeyByOffset)\r\n {\r\n bodies.push({\r\n key,\r\n permutationIndices: Object.freeze(permutationIndicesByOffset.get(offset) ?? [])\r\n });\r\n }\r\n\r\n return {\r\n stages,\r\n shaders,\r\n bodies,\r\n recordCount: reader.records.length,\r\n bodyCount: bodyKeyByOffset.size\r\n };\r\n}\r\n\r\nexport default readGlslEffectContainer;\r\n"],"names":["NO_PROGRAM_REASON","stageManifest","stage","pipelineInputs","map","input","registerIndex","usageName","HlslUsageCodeNames","usage","usageIndex","usedMask","bindings","kind","carbon","constantValueSize","defaultValues","size","constants","constant","name","value","offset","type","dimension","elements","isSRGB","isAutoregister","textures","texture","samplers","sampler","comparison","backendStages","pass","passKey","source","backendBlock","stages","transforms","block","readGlslBackendBlock","bytes","layoutKey","readGlslEffectContainer","values","reader","CjsCarbonEffectReader","shaders","bodyKeyByOffset","Map","permutationIndicesByOffset","index","records","length","seen","get","push","set","shaderKeyByIdentity","has","bodyKey","description","readDescription","backend","technique","techniques","techniqueName","passIndex","passes","entries","hlslShaderStageName","stageKey","stageBackend","shaderKey","shaderData","code","TextDecoder","decode","identity","JSON","stringify","stageInputs","computeFragment","pooled","key","stageName","hlsl2webgl","ok","reason","stageType","manifest","bodies","permutationIndices","Object","freeze","recordCount","bodyCount"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- export { CjsWebglFormat, CjsWebglFormat as default } from './CjsWebglFormat.js';
2
- //# sourceMappingURL=index.js.map
1
+ export { CjsWebglFormat, CjsWebglFormat as default } from './CjsWebglFormat.js';
2
+ //# sourceMappingURL=index.js.map