@carbonenginejs/runtime-resource 0.10.0 → 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 (254) hide show
  1. package/dist/format/effect/effectPermutationGraph.js +257 -0
  2. package/dist/format/effect/effectPermutationGraph.js.map +1 -0
  3. package/dist/format/effect/effectReflectionPackage.js +636 -0
  4. package/dist/format/effect/effectReflectionPackage.js.map +1 -0
  5. package/dist/format/effect/sha256.js +114 -0
  6. package/dist/format/effect/sha256.js.map +1 -0
  7. package/dist/formats/dxbc/CjsDxbcFormat.js +142 -0
  8. package/dist/formats/dxbc/CjsDxbcFormat.js.map +1 -0
  9. package/dist/formats/dxbc/core/DxbcReader.js +266 -0
  10. package/dist/formats/dxbc/core/DxbcReader.js.map +1 -0
  11. package/dist/formats/dxbc/core/container.js +169 -0
  12. package/dist/formats/dxbc/core/container.js.map +1 -0
  13. package/dist/formats/dxbc/core/decoder.js +789 -0
  14. package/dist/formats/dxbc/core/decoder.js.map +1 -0
  15. package/dist/formats/dxbc/core/errors.js +19 -0
  16. package/dist/formats/dxbc/core/errors.js.map +1 -0
  17. package/dist/formats/dxbc/core/helpers.js +220 -0
  18. package/dist/formats/dxbc/core/helpers.js.map +1 -0
  19. package/dist/formats/dxbc/core/opcodes.js +45 -0
  20. package/dist/formats/dxbc/core/opcodes.js.map +1 -0
  21. package/dist/formats/dxbc/core/program.js +91 -0
  22. package/dist/formats/dxbc/core/program.js.map +1 -0
  23. package/dist/formats/dxbc/core/signature.js +172 -0
  24. package/dist/formats/dxbc/core/signature.js.map +1 -0
  25. package/dist/formats/dxbc/index.js +2 -0
  26. package/dist/formats/dxbc/index.js.map +1 -0
  27. package/dist/formats/hlsl/CjsHlslFormat.js +254 -0
  28. package/dist/formats/hlsl/CjsHlslFormat.js.map +1 -0
  29. package/dist/formats/hlsl/core/HlslBinaryUtils.js +15 -0
  30. package/dist/formats/hlsl/core/HlslBinaryUtils.js.map +1 -0
  31. package/dist/formats/hlsl/core/HlslEffectReadError.js +19 -0
  32. package/dist/formats/hlsl/core/HlslEffectReadError.js.map +1 -0
  33. package/dist/formats/hlsl/core/HlslEffectStateManager.js +130 -0
  34. package/dist/formats/hlsl/core/HlslEffectStateManager.js.map +1 -0
  35. package/dist/formats/hlsl/core/HlslReader.js +266 -0
  36. package/dist/formats/hlsl/core/HlslReader.js.map +1 -0
  37. package/dist/formats/hlsl/core/HlslRenderStateSetup.js +37 -0
  38. package/dist/formats/hlsl/core/HlslRenderStateSetup.js.map +1 -0
  39. package/dist/formats/hlsl/core/HlslResourceSetDescription.js +94 -0
  40. package/dist/formats/hlsl/core/HlslResourceSetDescription.js.map +1 -0
  41. package/dist/formats/hlsl/core/HlslShaderBytecode.js +44 -0
  42. package/dist/formats/hlsl/core/HlslShaderBytecode.js.map +1 -0
  43. package/dist/formats/hlsl/core/analysis.js +51 -0
  44. package/dist/formats/hlsl/core/analysis.js.map +1 -0
  45. package/dist/formats/hlsl/core/helpers.js +270 -0
  46. package/dist/formats/hlsl/core/helpers.js.map +1 -0
  47. package/dist/formats/hlsl/core/json.js +284 -0
  48. package/dist/formats/hlsl/core/json.js.map +1 -0
  49. package/dist/formats/hlsl/core/metadata.js +327 -0
  50. package/dist/formats/hlsl/core/metadata.js.map +1 -0
  51. package/dist/formats/hlsl/core/portableReflection.js +848 -0
  52. package/dist/formats/hlsl/core/portableReflection.js.map +1 -0
  53. package/dist/formats/hlsl/core/render-states.js +280 -0
  54. package/dist/formats/hlsl/core/render-states.js.map +1 -0
  55. package/dist/formats/hlsl/core/tr2/HlslRenderContextEnum.js +43 -0
  56. package/dist/formats/hlsl/core/tr2/HlslRenderContextEnum.js.map +1 -0
  57. package/dist/formats/hlsl/core/tr2/resources/HlslEffectRes.js +294 -0
  58. package/dist/formats/hlsl/core/tr2/resources/HlslEffectRes.js.map +1 -0
  59. package/dist/formats/hlsl/core/tr2/resources/HlslShaderPermutation.js +33 -0
  60. package/dist/formats/hlsl/core/tr2/resources/HlslShaderPermutation.js.map +1 -0
  61. package/dist/formats/hlsl/core/tr2/shader/HlslEffectBindingManifest.js +416 -0
  62. package/dist/formats/hlsl/core/tr2/shader/HlslEffectBindingManifest.js.map +1 -0
  63. package/dist/formats/hlsl/core/tr2/shader/HlslEffectConstant.js +40 -0
  64. package/dist/formats/hlsl/core/tr2/shader/HlslEffectConstant.js.map +1 -0
  65. package/dist/formats/hlsl/core/tr2/shader/HlslEffectDescription.js +742 -0
  66. package/dist/formats/hlsl/core/tr2/shader/HlslEffectDescription.js.map +1 -0
  67. package/dist/formats/hlsl/core/tr2/shader/HlslEffectLibrary.js +52 -0
  68. package/dist/formats/hlsl/core/tr2/shader/HlslEffectLibrary.js.map +1 -0
  69. package/dist/formats/hlsl/core/tr2/shader/HlslEffectParameterAnnotation.js +38 -0
  70. package/dist/formats/hlsl/core/tr2/shader/HlslEffectParameterAnnotation.js.map +1 -0
  71. package/dist/formats/hlsl/core/tr2/shader/HlslEffectResource.js +50 -0
  72. package/dist/formats/hlsl/core/tr2/shader/HlslEffectResource.js.map +1 -0
  73. package/dist/formats/hlsl/core/tr2/shader/HlslEffectStageInput.js +86 -0
  74. package/dist/formats/hlsl/core/tr2/shader/HlslEffectStageInput.js.map +1 -0
  75. package/dist/formats/hlsl/core/tr2/shader/HlslEffectTechnique.js +31 -0
  76. package/dist/formats/hlsl/core/tr2/shader/HlslEffectTechnique.js.map +1 -0
  77. package/dist/formats/hlsl/core/tr2/shader/HlslPass.js +42 -0
  78. package/dist/formats/hlsl/core/tr2/shader/HlslPass.js.map +1 -0
  79. package/dist/formats/hlsl/core/tr2/shader/HlslSamplerDescription.js +55 -0
  80. package/dist/formats/hlsl/core/tr2/shader/HlslSamplerDescription.js.map +1 -0
  81. package/dist/formats/hlsl/core/tr2/shader/HlslSamplerSetup.js +29 -0
  82. package/dist/formats/hlsl/core/tr2/shader/HlslSamplerSetup.js.map +1 -0
  83. package/dist/formats/hlsl/core/tr2/shader/HlslShader.js +220 -0
  84. package/dist/formats/hlsl/core/tr2/shader/HlslShader.js.map +1 -0
  85. package/dist/formats/hlsl/core/tr2/shader/HlslShaderOption.js +30 -0
  86. package/dist/formats/hlsl/core/tr2/shader/HlslShaderOption.js.map +1 -0
  87. package/dist/formats/hlsl/index.js +2 -0
  88. package/dist/formats/hlsl/index.js.map +1 -0
  89. package/dist/formats/hlsl/portable.js +2 -0
  90. package/dist/formats/hlsl/portable.js.map +1 -0
  91. package/dist/formats/index.js +4 -0
  92. package/dist/formats/index.js.map +1 -1
  93. package/dist/formats/webgl/CjsWebglFormat.js +221 -0
  94. package/dist/formats/webgl/CjsWebglFormat.js.map +1 -0
  95. package/dist/formats/webgl/core/cewg/CewgPackage.js +339 -0
  96. package/dist/formats/webgl/core/cewg/CewgPackage.js.map +1 -0
  97. package/dist/formats/webgl/core/cewg/CewgPackageBuilder.js +104 -0
  98. package/dist/formats/webgl/core/cewg/CewgPackageBuilder.js.map +1 -0
  99. package/dist/formats/webgl/core/cewg/binary.js +101 -0
  100. package/dist/formats/webgl/core/cewg/binary.js.map +1 -0
  101. package/dist/formats/webgl/core/cewgCompleteness.js +81 -0
  102. package/dist/formats/webgl/core/cewgCompleteness.js.map +1 -0
  103. package/dist/formats/webgl/core/effectPackage.js +789 -0
  104. package/dist/formats/webgl/core/effectPackage.js.map +1 -0
  105. package/dist/formats/webgl/core/effectPackageValidation.js +331 -0
  106. package/dist/formats/webgl/core/effectPackageValidation.js.map +1 -0
  107. package/dist/formats/webgl/core/errors.js +27 -0
  108. package/dist/formats/webgl/core/errors.js.map +1 -0
  109. package/dist/formats/webgl/core/glsl/DxbcGlslEmitter.js +2678 -0
  110. package/dist/formats/webgl/core/glsl/DxbcGlslEmitter.js.map +1 -0
  111. package/dist/formats/webgl/core/glsl/DxbcGlslHelpers.js +89 -0
  112. package/dist/formats/webgl/core/glsl/DxbcGlslHelpers.js.map +1 -0
  113. package/dist/formats/webgl/core/glsl/DxbcGlslOperandFormatter.js +428 -0
  114. package/dist/formats/webgl/core/glsl/DxbcGlslOperandFormatter.js.map +1 -0
  115. package/dist/formats/webgl/core/helpers.js +306 -0
  116. package/dist/formats/webgl/core/helpers.js.map +1 -0
  117. package/dist/formats/webgl/index.js +2 -0
  118. package/dist/formats/webgl/index.js.map +1 -0
  119. package/dist/formats/webgpu/CjsWebgpuFormat.js +376 -0
  120. package/dist/formats/webgpu/CjsWebgpuFormat.js.map +1 -0
  121. package/dist/formats/webgpu/core/cewgpu/CewgpuPackage.js +415 -0
  122. package/dist/formats/webgpu/core/cewgpu/CewgpuPackage.js.map +1 -0
  123. package/dist/formats/webgpu/core/cewgpu/CewgpuPackageBuilder.js +100 -0
  124. package/dist/formats/webgpu/core/cewgpu/CewgpuPackageBuilder.js.map +1 -0
  125. package/dist/formats/webgpu/core/cewgpu/binary.js +93 -0
  126. package/dist/formats/webgpu/core/cewgpu/binary.js.map +1 -0
  127. package/dist/formats/webgpu/core/cewgpu/tags.js +17 -0
  128. package/dist/formats/webgpu/core/cewgpu/tags.js.map +1 -0
  129. package/dist/formats/webgpu/core/effectAnalysis.js +82 -0
  130. package/dist/formats/webgpu/core/effectAnalysis.js.map +1 -0
  131. package/dist/formats/webgpu/core/effectBackendBodySet.js +305 -0
  132. package/dist/formats/webgpu/core/effectBackendBodySet.js.map +1 -0
  133. package/dist/formats/webgpu/core/effectPackageValidation.js +1078 -0
  134. package/dist/formats/webgpu/core/effectPackageValidation.js.map +1 -0
  135. package/dist/formats/webgpu/core/errors.js +20 -0
  136. package/dist/formats/webgpu/core/errors.js.map +1 -0
  137. package/dist/formats/webgpu/core/helpers.js +448 -0
  138. package/dist/formats/webgpu/core/helpers.js.map +1 -0
  139. package/dist/formats/webgpu/core/ir/analyzeRegisterValues.js +223 -0
  140. package/dist/formats/webgpu/core/ir/analyzeRegisterValues.js.map +1 -0
  141. package/dist/formats/webgpu/core/ir/buildControlFlow.js +220 -0
  142. package/dist/formats/webgpu/core/ir/buildControlFlow.js.map +1 -0
  143. package/dist/formats/webgpu/core/ir/indexableTemps.js +137 -0
  144. package/dist/formats/webgpu/core/ir/indexableTemps.js.map +1 -0
  145. package/dist/formats/webgpu/core/ir/inferValueTypes.js +454 -0
  146. package/dist/formats/webgpu/core/ir/inferValueTypes.js.map +1 -0
  147. package/dist/formats/webgpu/core/ir/lowerDxbcToIr.js +494 -0
  148. package/dist/formats/webgpu/core/ir/lowerDxbcToIr.js.map +1 -0
  149. package/dist/formats/webgpu/core/ir/resolveRegisterFlow.js +177 -0
  150. package/dist/formats/webgpu/core/ir/resolveRegisterFlow.js.map +1 -0
  151. package/dist/formats/webgpu/core/ir/sourceLanes.js +61 -0
  152. package/dist/formats/webgpu/core/ir/sourceLanes.js.map +1 -0
  153. package/dist/formats/webgpu/core/packageEffect.js +300 -0
  154. package/dist/formats/webgpu/core/packageEffect.js.map +1 -0
  155. package/dist/formats/webgpu/core/packageEffectSelection.js +164 -0
  156. package/dist/formats/webgpu/core/packageEffectSelection.js.map +1 -0
  157. package/dist/formats/webgpu/core/packageMetadata.js +8 -0
  158. package/dist/formats/webgpu/core/packageMetadata.js.map +1 -0
  159. package/dist/formats/webgpu/core/schema.js +4 -0
  160. package/dist/formats/webgpu/core/schema.js.map +1 -0
  161. package/dist/formats/webgpu/core/wgsl/buildResourceTransformPlan.js +275 -0
  162. package/dist/formats/webgpu/core/wgsl/buildResourceTransformPlan.js.map +1 -0
  163. package/dist/formats/webgpu/core/wgsl/buildWgslBindingPlan.js +182 -0
  164. package/dist/formats/webgpu/core/wgsl/buildWgslBindingPlan.js.map +1 -0
  165. package/dist/formats/webgpu/core/wgsl/buildWgslSet.js +324 -0
  166. package/dist/formats/webgpu/core/wgsl/buildWgslSet.js.map +1 -0
  167. package/dist/formats/webgpu/core/wgsl/emitWgsl.js +356 -0
  168. package/dist/formats/webgpu/core/wgsl/emitWgsl.js.map +1 -0
  169. package/dist/formats/webgpu/core/wgsl/hoistEscapingValues.js +77 -0
  170. package/dist/formats/webgpu/core/wgsl/hoistEscapingValues.js.map +1 -0
  171. package/dist/formats/webgpu/core/wgsl/lowerBindingLayout.js +451 -0
  172. package/dist/formats/webgpu/core/wgsl/lowerBindingLayout.js.map +1 -0
  173. package/dist/formats/webgpu/core/wgsl/lowerComputeProgram.js +754 -0
  174. package/dist/formats/webgpu/core/wgsl/lowerComputeProgram.js.map +1 -0
  175. package/dist/formats/webgpu/core/wgsl/lowerCreateHistogramsComputeProgram.js +457 -0
  176. package/dist/formats/webgpu/core/wgsl/lowerCreateHistogramsComputeProgram.js.map +1 -0
  177. package/dist/formats/webgpu/core/wgsl/lowerFragmentProgram.js +1572 -0
  178. package/dist/formats/webgpu/core/wgsl/lowerFragmentProgram.js.map +1 -0
  179. package/dist/formats/webgpu/core/wgsl/lowerMergeHistogramsComputeProgram.js +659 -0
  180. package/dist/formats/webgpu/core/wgsl/lowerMergeHistogramsComputeProgram.js.map +1 -0
  181. package/dist/formats/webgpu/core/wgsl/lowerParticleClearComputePrograms.js +734 -0
  182. package/dist/formats/webgpu/core/wgsl/lowerParticleClearComputePrograms.js.map +1 -0
  183. package/dist/formats/webgpu/core/wgsl/lowerParticleEmitComputeProgram.js +583 -0
  184. package/dist/formats/webgpu/core/wgsl/lowerParticleEmitComputeProgram.js.map +1 -0
  185. package/dist/formats/webgpu/core/wgsl/lowerSkinVerticesComputeProgram.js +621 -0
  186. package/dist/formats/webgpu/core/wgsl/lowerSkinVerticesComputeProgram.js.map +1 -0
  187. package/dist/formats/webgpu/core/wgsl/lowerSortComputeProgram.js +824 -0
  188. package/dist/formats/webgpu/core/wgsl/lowerSortComputeProgram.js.map +1 -0
  189. package/dist/formats/webgpu/core/wgsl/lowerSortInnerComputeProgram.js +697 -0
  190. package/dist/formats/webgpu/core/wgsl/lowerSortInnerComputeProgram.js.map +1 -0
  191. package/dist/formats/webgpu/core/wgsl/lowerSortStepComputeProgram.js +559 -0
  192. package/dist/formats/webgpu/core/wgsl/lowerSortStepComputeProgram.js.map +1 -0
  193. package/dist/formats/webgpu/core/wgsl/lowerVertexProgram.js +1328 -0
  194. package/dist/formats/webgpu/core/wgsl/lowerVertexProgram.js.map +1 -0
  195. package/dist/formats/webgpu/core/wgsl/particleEmitSemanticDigest.js +110 -0
  196. package/dist/formats/webgpu/core/wgsl/particleEmitSemanticDigest.js.map +1 -0
  197. package/dist/formats/webgpu/core/wgsl/precisionControls.js +55 -0
  198. package/dist/formats/webgpu/core/wgsl/precisionControls.js.map +1 -0
  199. package/dist/formats/webgpu/core/wgsl/selectionPlans.js +758 -0
  200. package/dist/formats/webgpu/core/wgsl/selectionPlans.js.map +1 -0
  201. package/dist/formats/webgpu/core/wgsl/uniformity.js +78 -0
  202. package/dist/formats/webgpu/core/wgsl/uniformity.js.map +1 -0
  203. package/dist/formats/webgpu/core/wgsl/validateExactComputeIr.js +196 -0
  204. package/dist/formats/webgpu/core/wgsl/validateExactComputeIr.js.map +1 -0
  205. package/dist/formats/webgpu/core/wgsl/validateHandleOperand.js +37 -0
  206. package/dist/formats/webgpu/core/wgsl/validateHandleOperand.js.map +1 -0
  207. package/dist/formats/webgpu/index.js +2 -0
  208. package/dist/formats/webgpu/index.js.map +1 -0
  209. package/dist/resource/shader/Tr2EffectRes.js +159 -150
  210. package/dist/resource/shader/Tr2EffectRes.js.map +1 -1
  211. package/dist/resource/shader/Tr2MaterialArea.js +23 -28
  212. package/dist/resource/shader/Tr2MaterialArea.js.map +1 -1
  213. package/dist/resource/shader/Tr2MaterialMesh.js +21 -27
  214. package/dist/resource/shader/Tr2MaterialMesh.js.map +1 -1
  215. package/dist/resource/shader/Tr2MaterialRes.js +24 -29
  216. package/dist/resource/shader/Tr2MaterialRes.js.map +1 -1
  217. package/dist/resource/shader/Tr2Shader.js +45 -39
  218. package/dist/resource/shader/Tr2Shader.js.map +1 -1
  219. package/dist/resource/shader/Tr2ShaderPermutation.js +30 -32
  220. package/dist/resource/shader/Tr2ShaderPermutation.js.map +1 -1
  221. package/dist/resource/shader/reflection/Tr2EffectConstant.js +113 -78
  222. package/dist/resource/shader/reflection/Tr2EffectConstant.js.map +1 -1
  223. package/dist/resource/shader/reflection/Tr2EffectDefine.js +17 -23
  224. package/dist/resource/shader/reflection/Tr2EffectDefine.js.map +1 -1
  225. package/dist/resource/shader/reflection/Tr2EffectDescription.js +23 -29
  226. package/dist/resource/shader/reflection/Tr2EffectDescription.js.map +1 -1
  227. package/dist/resource/shader/reflection/Tr2EffectLibrary.js +44 -40
  228. package/dist/resource/shader/reflection/Tr2EffectLibrary.js.map +1 -1
  229. package/dist/resource/shader/reflection/Tr2EffectParameterAnnotation.js +82 -86
  230. package/dist/resource/shader/reflection/Tr2EffectParameterAnnotation.js.map +1 -1
  231. package/dist/resource/shader/reflection/Tr2EffectResource.js +55 -61
  232. package/dist/resource/shader/reflection/Tr2EffectResource.js.map +1 -1
  233. package/dist/resource/shader/reflection/Tr2EffectStageInput.js +49 -45
  234. package/dist/resource/shader/reflection/Tr2EffectStageInput.js.map +1 -1
  235. package/dist/resource/shader/reflection/Tr2EffectTechnique.js +25 -30
  236. package/dist/resource/shader/reflection/Tr2EffectTechnique.js.map +1 -1
  237. package/dist/resource/shader/reflection/Tr2Pass.js +30 -32
  238. package/dist/resource/shader/reflection/Tr2Pass.js.map +1 -1
  239. package/dist/resource/shader/sampler/Tr2SamplerSetup.js +21 -26
  240. package/dist/resource/shader/sampler/Tr2SamplerSetup.js.map +1 -1
  241. package/docs/formats/README.md +4 -0
  242. package/docs/formats/provenance.md +11 -3
  243. package/docs/reference/classes/formats.md +440 -0
  244. package/format-notices/dxbc/LICENSE +21 -0
  245. package/format-notices/dxbc/NOTICE +20 -0
  246. package/format-notices/hlsl/LICENSE +21 -0
  247. package/format-notices/hlsl/NOTICE +25 -0
  248. package/format-notices/webgl/LICENSE +21 -0
  249. package/format-notices/webgl/NOTICE +35 -0
  250. package/format-notices/webgpu/LICENSE +21 -0
  251. package/format-notices/webgpu/NOTICE +31 -0
  252. package/package.json +6 -1
  253. package/dist/resource/shader/portableValidation.js +0 -461
  254. package/dist/resource/shader/portableValidation.js.map +0 -1
@@ -0,0 +1,257 @@
1
+ import { sha256Bytes } from './sha256.js';
2
+
3
+ const EFFECT_PERMUTATION_GRAPH_FORMAT = "CJS_EFFECT_PERMUTATION_GRAPH";
4
+ const EFFECT_PERMUTATION_GRAPH_VERSION = 1;
5
+ const EFFECT_PERMUTATION_GRAPH_CHUNK = "PGRF";
6
+ const SHA256 = /^[0-9a-f]{64}$/u;
7
+ const UINT8_MAX = 0xff;
8
+ const UINT32_MAX = 0xffffffff;
9
+ const MAX_EFFECT_PERMUTATIONS = 0x10000;
10
+
11
+ /**
12
+ * Build a complete source permutation topology without claiming that every
13
+ * body has portable reflection or backend programs.
14
+ *
15
+ * @param {object} effectRes Raw format-hlsl effect resource.
16
+ * @returns {object} JSON-safe permutation graph.
17
+ */
18
+ function buildEffectPermutationGraph(effectRes) {
19
+ if (!effectRes || typeof effectRes !== "object") {
20
+ throw new TypeError("Effect permutation graph requires a decoded effect resource");
21
+ }
22
+ const sourceBytes = effectRes.m_data;
23
+ if (!(sourceBytes instanceof Uint8Array)) {
24
+ throw new TypeError("Effect permutation graph requires exact source bytes");
25
+ }
26
+ const axes = normalizeAxes(effectRes.m_permutations);
27
+ const permutationCount = permutationProduct(axes);
28
+ const offsets = effectRes.m_offsets;
29
+ if (!Array.isArray(offsets) || offsets.length !== permutationCount || effectRes.m_offsetCount !== offsets.length) {
30
+ throw new Error("Effect permutation graph requires one source body record per permutation");
31
+ }
32
+ const sourceRecords = offsets.map((record, permutationIndex) => normalizeSourceRecord(record, permutationIndex, sourceBytes.byteLength));
33
+ validateDisjointSourceRecords(sourceRecords, "Effect permutation source body records partially overlap");
34
+ const bodies = [];
35
+ const bodyCandidatesByDigest = new Map();
36
+ const bodyBySourceRecord = new Map();
37
+ const variants = sourceRecords.map((sourceRecord, permutationIndex) => {
38
+ const sourceRecordKey = `${sourceRecord.offset}:${sourceRecord.byteLength}`;
39
+ let body = bodyBySourceRecord.get(sourceRecordKey);
40
+ if (!body) {
41
+ const bodyBytes = sourceBytes.subarray(sourceRecord.offset, sourceRecord.offset + sourceRecord.byteLength);
42
+ const digest = sha256Bytes(bodyBytes);
43
+ body = (bodyCandidatesByDigest.get(digest) || []).find(candidate => bytesEqual(candidate.bytes, bodyBytes));
44
+ if (!body && bodyCandidatesByDigest.has(digest)) {
45
+ throw new Error("Effect permutation graph body SHA-256 collision detected");
46
+ }
47
+ if (!body) {
48
+ body = {
49
+ bytes: bodyBytes,
50
+ record: Object.freeze({
51
+ key: `body${bodies.length}`,
52
+ byteLength: bodyBytes.byteLength,
53
+ sha256: digest
54
+ })
55
+ };
56
+ bodyCandidatesByDigest.set(digest, [body]);
57
+ bodies.push(body.record);
58
+ }
59
+ bodyBySourceRecord.set(sourceRecordKey, body);
60
+ }
61
+ return Object.freeze({
62
+ permutationIndex,
63
+ optionIndices: Object.freeze(decodeOptionIndices(permutationIndex, axes)),
64
+ bodyKey: body.record.key,
65
+ sourceRecord
66
+ });
67
+ });
68
+ const graph = Object.freeze({
69
+ format: EFFECT_PERMUTATION_GRAPH_FORMAT,
70
+ formatVersion: EFFECT_PERMUTATION_GRAPH_VERSION,
71
+ coverage: Object.freeze({
72
+ permutations: "complete",
73
+ bodies: "identity-only",
74
+ reflection: "absent"
75
+ }),
76
+ axes: Object.freeze(axes),
77
+ variants: Object.freeze(variants),
78
+ bodies: Object.freeze(bodies)
79
+ });
80
+ validateEffectPermutationGraph(graph, {
81
+ sourceByteLength: sourceBytes.byteLength
82
+ });
83
+ return graph;
84
+ }
85
+
86
+ /**
87
+ * Validate a source permutation graph independently of the original effect
88
+ * bytes.
89
+ *
90
+ * @param {object} graph Candidate graph.
91
+ * @param {object} [options] Optional source-envelope limits.
92
+ * @param {number} [options.sourceByteLength] Exact enclosing source byte length.
93
+ * @returns {{permutationCount:number,uniqueBodyCount:number}} Validated counts.
94
+ */
95
+ function validateEffectPermutationGraph(graph, options = {}) {
96
+ if (!graph || typeof graph !== "object" || Array.isArray(graph) || graph.format !== EFFECT_PERMUTATION_GRAPH_FORMAT || graph.formatVersion !== EFFECT_PERMUTATION_GRAPH_VERSION || !graph.coverage || typeof graph.coverage !== "object" || Array.isArray(graph.coverage) || graph.coverage.permutations !== "complete" || graph.coverage.bodies !== "identity-only" || graph.coverage.reflection !== "absent") {
97
+ throw new Error("CEWGPU PGRF schema or coverage is unsupported");
98
+ }
99
+ const axes = validateGraphAxes(graph.axes);
100
+ const permutationCount = permutationProduct(axes);
101
+ if (!Array.isArray(graph.variants) || graph.variants.length !== permutationCount) {
102
+ throw new Error("CEWGPU PGRF must contain one variant per Cartesian permutation");
103
+ }
104
+ if (!Array.isArray(graph.bodies) || !graph.bodies.length || graph.bodies.length > graph.variants.length) {
105
+ throw new Error("CEWGPU PGRF bodies are malformed");
106
+ }
107
+ const bodies = new Map();
108
+ const bodyDigests = new Set();
109
+ for (const [bodyIndex, body] of graph.bodies.entries()) {
110
+ if (!body || typeof body !== "object" || Array.isArray(body) || typeof body.key !== "string" || !body.key || body.key !== body.key.trim() || !Number.isSafeInteger(body.byteLength) || body.byteLength < 1 || body.byteLength > UINT32_MAX || typeof body.sha256 !== "string" || !SHA256.test(body.sha256) || bodies.has(body.key) || bodyDigests.has(body.sha256)) {
111
+ throw new Error(`CEWGPU PGRF body ${bodyIndex} is malformed or duplicated`);
112
+ }
113
+ bodyDigests.add(body.sha256);
114
+ bodies.set(body.key, {
115
+ byteLength: body.byteLength,
116
+ references: 0
117
+ });
118
+ }
119
+ const bodyKeyBySourceRecord = new Map();
120
+ const sourceRecords = [];
121
+ for (const [permutationIndex, variant] of graph.variants.entries()) {
122
+ const expectedOptionIndices = decodeOptionIndices(permutationIndex, axes);
123
+ if (!variant || typeof variant !== "object" || Array.isArray(variant) || variant.permutationIndex !== permutationIndex || !Array.isArray(variant.optionIndices) || variant.optionIndices.length !== expectedOptionIndices.length || variant.optionIndices.some((value, index) => value !== expectedOptionIndices[index]) || typeof variant.bodyKey !== "string" || !bodies.has(variant.bodyKey)) {
124
+ throw new Error(`CEWGPU PGRF variant ${permutationIndex} is malformed`);
125
+ }
126
+ const sourceRecord = validateGraphSourceRecord(variant.sourceRecord, permutationIndex, options.sourceByteLength);
127
+ const body = bodies.get(variant.bodyKey);
128
+ if (sourceRecord.byteLength !== body.byteLength) {
129
+ throw new Error(`CEWGPU PGRF variant ${permutationIndex} body length disagrees`);
130
+ }
131
+ const recordKey = `${sourceRecord.offset}:${sourceRecord.byteLength}`;
132
+ const existingBodyKey = bodyKeyBySourceRecord.get(recordKey);
133
+ if (existingBodyKey && existingBodyKey !== variant.bodyKey) {
134
+ throw new Error(`CEWGPU PGRF source record ${recordKey} maps to multiple bodies`);
135
+ }
136
+ bodyKeyBySourceRecord.set(recordKey, variant.bodyKey);
137
+ sourceRecords.push(sourceRecord);
138
+ body.references += 1;
139
+ }
140
+ validateDisjointSourceRecords(sourceRecords, "CEWGPU PGRF source body records partially overlap");
141
+ for (const [bodyKey, body] of bodies) {
142
+ if (!body.references) {
143
+ throw new Error(`CEWGPU PGRF body ${bodyKey} is unreferenced`);
144
+ }
145
+ }
146
+ return Object.freeze({
147
+ permutationCount,
148
+ uniqueBodyCount: bodies.size
149
+ });
150
+ }
151
+ function normalizeAxes(value) {
152
+ if (!Array.isArray(value) || value.length > UINT8_MAX) {
153
+ throw new TypeError("Effect permutation axes must be an array");
154
+ }
155
+ const names = new Set();
156
+ return value.map((axis, index) => {
157
+ if (!axis || typeof axis !== "object" || typeof axis.name !== "string" || !axis.name || axis.name !== axis.name.trim() || names.has(axis.name) || !Array.isArray(axis.options) || !axis.options.length || axis.options.length > UINT8_MAX || !Number.isSafeInteger(axis.defaultOption) || axis.defaultOption < 0 || axis.defaultOption >= axis.options.length || typeof axis.description !== "string" || !Number.isSafeInteger(axis.type) || axis.type < 0 || axis.type > UINT8_MAX) {
158
+ throw new Error(`Effect permutation axis ${index} is malformed`);
159
+ }
160
+ names.add(axis.name);
161
+ const options = new Set();
162
+ for (const option of axis.options) {
163
+ if (typeof option !== "string" || !option || option !== option.trim() || options.has(option)) {
164
+ throw new Error(`Effect permutation axis ${axis.name} has malformed options`);
165
+ }
166
+ options.add(option);
167
+ }
168
+ return Object.freeze({
169
+ index,
170
+ name: axis.name,
171
+ options: Object.freeze(axis.options.slice()),
172
+ defaultOption: axis.defaultOption,
173
+ description: axis.description,
174
+ type: axis.type
175
+ });
176
+ });
177
+ }
178
+ function validateGraphAxes(value) {
179
+ if (!Array.isArray(value) || value.length > UINT8_MAX) {
180
+ throw new Error("CEWGPU PGRF axes must be an array");
181
+ }
182
+ const names = new Set();
183
+ return value.map((axis, index) => {
184
+ if (!axis || typeof axis !== "object" || Array.isArray(axis) || axis.index !== index || typeof axis.name !== "string" || !axis.name || axis.name !== axis.name.trim() || names.has(axis.name) || !Array.isArray(axis.options) || !axis.options.length || axis.options.length > UINT8_MAX || !Number.isSafeInteger(axis.defaultOption) || axis.defaultOption < 0 || axis.defaultOption >= axis.options.length || typeof axis.description !== "string" || !Number.isSafeInteger(axis.type) || axis.type < 0 || axis.type > UINT8_MAX) {
185
+ throw new Error(`CEWGPU PGRF axis ${index} is malformed or duplicated`);
186
+ }
187
+ names.add(axis.name);
188
+ const options = new Set();
189
+ for (const option of axis.options) {
190
+ if (typeof option !== "string" || !option || option !== option.trim() || options.has(option)) {
191
+ throw new Error(`CEWGPU PGRF axis ${index} options are malformed`);
192
+ }
193
+ options.add(option);
194
+ }
195
+ return axis;
196
+ });
197
+ }
198
+ function permutationProduct(axes) {
199
+ let product = 1;
200
+ for (const axis of axes) {
201
+ product *= axis.options.length;
202
+ if (!Number.isSafeInteger(product) || product < 1 || product > MAX_EFFECT_PERMUTATIONS) {
203
+ throw new Error(`Effect permutation count above the implementation limit ` + `${MAX_EFFECT_PERMUTATIONS} is not supported`);
204
+ }
205
+ }
206
+ return product;
207
+ }
208
+ function decodeOptionIndices(permutationIndex, axes) {
209
+ let value = permutationIndex;
210
+ return axes.map(axis => {
211
+ const optionIndex = value % axis.options.length;
212
+ value = Math.floor(value / axis.options.length);
213
+ return optionIndex;
214
+ });
215
+ }
216
+ function normalizeSourceRecord(record, permutationIndex, sourceByteLength) {
217
+ if (!record || typeof record !== "object" || record.index !== permutationIndex || !Number.isSafeInteger(record.offset) || record.offset < 0 || record.offset > UINT32_MAX || !Number.isSafeInteger(record.size) || record.size < 1 || record.size > UINT32_MAX || !Number.isSafeInteger(record.end) || record.end !== record.offset + record.size || record.end > sourceByteLength) {
218
+ throw new Error(`Effect permutation ${permutationIndex} has an invalid source body record`);
219
+ }
220
+ return Object.freeze({
221
+ offset: record.offset,
222
+ byteLength: record.size
223
+ });
224
+ }
225
+ function validateGraphSourceRecord(record, permutationIndex, sourceByteLength) {
226
+ const offset = record?.offset;
227
+ const byteLength = record?.byteLength;
228
+ const end = offset + byteLength;
229
+ if (!record || typeof record !== "object" || Array.isArray(record) || !Number.isSafeInteger(offset) || offset < 0 || offset > UINT32_MAX || !Number.isSafeInteger(byteLength) || byteLength < 1 || byteLength > UINT32_MAX || !Number.isSafeInteger(end) || sourceByteLength !== undefined && (!Number.isSafeInteger(sourceByteLength) || sourceByteLength < 1 || end > sourceByteLength)) {
230
+ throw new Error(`CEWGPU PGRF variant ${permutationIndex} source record is malformed`);
231
+ }
232
+ return record;
233
+ }
234
+ function validateDisjointSourceRecords(records, message) {
235
+ const uniqueRanges = new Map();
236
+ for (const record of records) {
237
+ const key = `${record.offset}:${record.byteLength}`;
238
+ if (!uniqueRanges.has(key)) {
239
+ uniqueRanges.set(key, {
240
+ offset: record.offset,
241
+ end: record.offset + record.byteLength
242
+ });
243
+ }
244
+ }
245
+ const orderedRanges = Array.from(uniqueRanges.values()).sort((left, right) => left.offset - right.offset || left.end - right.end);
246
+ for (let index = 1; index < orderedRanges.length; index += 1) {
247
+ if (orderedRanges[index].offset < orderedRanges[index - 1].end) {
248
+ throw new Error(message);
249
+ }
250
+ }
251
+ }
252
+ function bytesEqual(left, right) {
253
+ return left.byteLength === right.byteLength && left.every((value, index) => value === right[index]);
254
+ }
255
+
256
+ export { EFFECT_PERMUTATION_GRAPH_CHUNK, EFFECT_PERMUTATION_GRAPH_FORMAT, EFFECT_PERMUTATION_GRAPH_VERSION, buildEffectPermutationGraph, validateEffectPermutationGraph };
257
+ //# sourceMappingURL=effectPermutationGraph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"effectPermutationGraph.js","sources":["../../../../src/format/effect/effectPermutationGraph.js"],"sourcesContent":["import { sha256Bytes } from \"./sha256.js\";\n\nexport const EFFECT_PERMUTATION_GRAPH_FORMAT = \"CJS_EFFECT_PERMUTATION_GRAPH\";\nexport const EFFECT_PERMUTATION_GRAPH_VERSION = 1;\nexport const EFFECT_PERMUTATION_GRAPH_CHUNK = \"PGRF\";\n\nconst SHA256 = /^[0-9a-f]{64}$/u;\nconst UINT8_MAX = 0xff;\nconst UINT32_MAX = 0xffffffff;\nconst MAX_EFFECT_PERMUTATIONS = 0x10000;\n\n/**\n * Build a complete source permutation topology without claiming that every\n * body has portable reflection or backend programs.\n *\n * @param {object} effectRes Raw format-hlsl effect resource.\n * @returns {object} JSON-safe permutation graph.\n */\nexport function buildEffectPermutationGraph(effectRes)\n{\n if (!effectRes || typeof effectRes !== \"object\")\n {\n throw new TypeError(\"Effect permutation graph requires a decoded effect resource\");\n }\n\n const sourceBytes = effectRes.m_data;\n if (!(sourceBytes instanceof Uint8Array))\n {\n throw new TypeError(\"Effect permutation graph requires exact source bytes\");\n }\n\n const axes = normalizeAxes(effectRes.m_permutations);\n const permutationCount = permutationProduct(axes);\n const offsets = effectRes.m_offsets;\n if (!Array.isArray(offsets) || offsets.length !== permutationCount\n || effectRes.m_offsetCount !== offsets.length)\n {\n throw new Error(\n \"Effect permutation graph requires one source body record per permutation\"\n );\n }\n\n const sourceRecords = offsets.map((record, permutationIndex) =>\n normalizeSourceRecord(\n record,\n permutationIndex,\n sourceBytes.byteLength\n ));\n validateDisjointSourceRecords(\n sourceRecords,\n \"Effect permutation source body records partially overlap\"\n );\n\n const bodies = [];\n const bodyCandidatesByDigest = new Map();\n const bodyBySourceRecord = new Map();\n const variants = sourceRecords.map((sourceRecord, permutationIndex) =>\n {\n const sourceRecordKey = `${sourceRecord.offset}:${sourceRecord.byteLength}`;\n let body = bodyBySourceRecord.get(sourceRecordKey);\n if (!body)\n {\n const bodyBytes = sourceBytes.subarray(\n sourceRecord.offset,\n sourceRecord.offset + sourceRecord.byteLength\n );\n const digest = sha256Bytes(bodyBytes);\n body = (bodyCandidatesByDigest.get(digest) || [])\n .find((candidate) => bytesEqual(candidate.bytes, bodyBytes));\n if (!body && bodyCandidatesByDigest.has(digest))\n {\n throw new Error(\n \"Effect permutation graph body SHA-256 collision detected\"\n );\n }\n if (!body)\n {\n body = {\n bytes: bodyBytes,\n record: Object.freeze({\n key: `body${bodies.length}`,\n byteLength: bodyBytes.byteLength,\n sha256: digest\n })\n };\n bodyCandidatesByDigest.set(digest, [ body ]);\n bodies.push(body.record);\n }\n bodyBySourceRecord.set(sourceRecordKey, body);\n }\n\n return Object.freeze({\n permutationIndex,\n optionIndices: Object.freeze(decodeOptionIndices(\n permutationIndex,\n axes\n )),\n bodyKey: body.record.key,\n sourceRecord\n });\n });\n\n const graph = Object.freeze({\n format: EFFECT_PERMUTATION_GRAPH_FORMAT,\n formatVersion: EFFECT_PERMUTATION_GRAPH_VERSION,\n coverage: Object.freeze({\n permutations: \"complete\",\n bodies: \"identity-only\",\n reflection: \"absent\"\n }),\n axes: Object.freeze(axes),\n variants: Object.freeze(variants),\n bodies: Object.freeze(bodies)\n });\n\n validateEffectPermutationGraph(graph, {\n sourceByteLength: sourceBytes.byteLength\n });\n return graph;\n}\n\n/**\n * Validate a source permutation graph independently of the original effect\n * bytes.\n *\n * @param {object} graph Candidate graph.\n * @param {object} [options] Optional source-envelope limits.\n * @param {number} [options.sourceByteLength] Exact enclosing source byte length.\n * @returns {{permutationCount:number,uniqueBodyCount:number}} Validated counts.\n */\nexport function validateEffectPermutationGraph(graph, options = {})\n{\n if (!graph || typeof graph !== \"object\" || Array.isArray(graph)\n || graph.format !== EFFECT_PERMUTATION_GRAPH_FORMAT\n || graph.formatVersion !== EFFECT_PERMUTATION_GRAPH_VERSION\n || !graph.coverage || typeof graph.coverage !== \"object\"\n || Array.isArray(graph.coverage)\n || graph.coverage.permutations !== \"complete\"\n || graph.coverage.bodies !== \"identity-only\"\n || graph.coverage.reflection !== \"absent\")\n {\n throw new Error(\"CEWGPU PGRF schema or coverage is unsupported\");\n }\n\n const axes = validateGraphAxes(graph.axes);\n const permutationCount = permutationProduct(axes);\n if (!Array.isArray(graph.variants)\n || graph.variants.length !== permutationCount)\n {\n throw new Error(\n \"CEWGPU PGRF must contain one variant per Cartesian permutation\"\n );\n }\n if (!Array.isArray(graph.bodies)\n || !graph.bodies.length\n || graph.bodies.length > graph.variants.length)\n {\n throw new Error(\"CEWGPU PGRF bodies are malformed\");\n }\n\n const bodies = new Map();\n const bodyDigests = new Set();\n for (const [ bodyIndex, body ] of graph.bodies.entries())\n {\n if (!body || typeof body !== \"object\" || Array.isArray(body)\n || typeof body.key !== \"string\" || !body.key\n || body.key !== body.key.trim()\n || !Number.isSafeInteger(body.byteLength) || body.byteLength < 1\n || body.byteLength > UINT32_MAX\n || typeof body.sha256 !== \"string\" || !SHA256.test(body.sha256)\n || bodies.has(body.key)\n || bodyDigests.has(body.sha256))\n {\n throw new Error(`CEWGPU PGRF body ${bodyIndex} is malformed or duplicated`);\n }\n bodyDigests.add(body.sha256);\n bodies.set(body.key, {\n byteLength: body.byteLength,\n references: 0\n });\n }\n\n const bodyKeyBySourceRecord = new Map();\n const sourceRecords = [];\n for (const [ permutationIndex, variant ] of graph.variants.entries())\n {\n const expectedOptionIndices = decodeOptionIndices(permutationIndex, axes);\n if (!variant || typeof variant !== \"object\" || Array.isArray(variant)\n || variant.permutationIndex !== permutationIndex\n || !Array.isArray(variant.optionIndices)\n || variant.optionIndices.length !== expectedOptionIndices.length\n || variant.optionIndices.some((value, index) =>\n value !== expectedOptionIndices[index])\n || typeof variant.bodyKey !== \"string\"\n || !bodies.has(variant.bodyKey))\n {\n throw new Error(`CEWGPU PGRF variant ${permutationIndex} is malformed`);\n }\n\n const sourceRecord = validateGraphSourceRecord(\n variant.sourceRecord,\n permutationIndex,\n options.sourceByteLength\n );\n const body = bodies.get(variant.bodyKey);\n if (sourceRecord.byteLength !== body.byteLength)\n {\n throw new Error(\n `CEWGPU PGRF variant ${permutationIndex} body length disagrees`\n );\n }\n\n const recordKey = `${sourceRecord.offset}:${sourceRecord.byteLength}`;\n const existingBodyKey = bodyKeyBySourceRecord.get(recordKey);\n if (existingBodyKey && existingBodyKey !== variant.bodyKey)\n {\n throw new Error(\n `CEWGPU PGRF source record ${recordKey} maps to multiple bodies`\n );\n }\n bodyKeyBySourceRecord.set(recordKey, variant.bodyKey);\n sourceRecords.push(sourceRecord);\n body.references += 1;\n }\n\n validateDisjointSourceRecords(\n sourceRecords,\n \"CEWGPU PGRF source body records partially overlap\"\n );\n\n for (const [ bodyKey, body ] of bodies)\n {\n if (!body.references)\n {\n throw new Error(`CEWGPU PGRF body ${bodyKey} is unreferenced`);\n }\n }\n\n return Object.freeze({\n permutationCount,\n uniqueBodyCount: bodies.size\n });\n}\n\nfunction normalizeAxes(value)\n{\n if (!Array.isArray(value) || value.length > UINT8_MAX)\n {\n throw new TypeError(\"Effect permutation axes must be an array\");\n }\n\n const names = new Set();\n return value.map((axis, index) =>\n {\n if (!axis || typeof axis !== \"object\"\n || typeof axis.name !== \"string\" || !axis.name\n || axis.name !== axis.name.trim()\n || names.has(axis.name)\n || !Array.isArray(axis.options) || !axis.options.length\n || axis.options.length > UINT8_MAX\n || !Number.isSafeInteger(axis.defaultOption)\n || axis.defaultOption < 0\n || axis.defaultOption >= axis.options.length\n || typeof axis.description !== \"string\"\n || !Number.isSafeInteger(axis.type)\n || axis.type < 0 || axis.type > UINT8_MAX)\n {\n throw new Error(`Effect permutation axis ${index} is malformed`);\n }\n names.add(axis.name);\n\n const options = new Set();\n for (const option of axis.options)\n {\n if (typeof option !== \"string\" || !option\n || option !== option.trim() || options.has(option))\n {\n throw new Error(\n `Effect permutation axis ${axis.name} has malformed options`\n );\n }\n options.add(option);\n }\n\n return Object.freeze({\n index,\n name: axis.name,\n options: Object.freeze(axis.options.slice()),\n defaultOption: axis.defaultOption,\n description: axis.description,\n type: axis.type\n });\n });\n}\n\nfunction validateGraphAxes(value)\n{\n if (!Array.isArray(value) || value.length > UINT8_MAX)\n {\n throw new Error(\"CEWGPU PGRF axes must be an array\");\n }\n\n const names = new Set();\n return value.map((axis, index) =>\n {\n if (!axis || typeof axis !== \"object\" || Array.isArray(axis)\n || axis.index !== index\n || typeof axis.name !== \"string\" || !axis.name\n || axis.name !== axis.name.trim() || names.has(axis.name)\n || !Array.isArray(axis.options) || !axis.options.length\n || axis.options.length > UINT8_MAX\n || !Number.isSafeInteger(axis.defaultOption)\n || axis.defaultOption < 0\n || axis.defaultOption >= axis.options.length\n || typeof axis.description !== \"string\"\n || !Number.isSafeInteger(axis.type)\n || axis.type < 0 || axis.type > UINT8_MAX)\n {\n throw new Error(`CEWGPU PGRF axis ${index} is malformed or duplicated`);\n }\n names.add(axis.name);\n\n const options = new Set();\n for (const option of axis.options)\n {\n if (typeof option !== \"string\" || !option\n || option !== option.trim() || options.has(option))\n {\n throw new Error(`CEWGPU PGRF axis ${index} options are malformed`);\n }\n options.add(option);\n }\n return axis;\n });\n}\n\nfunction permutationProduct(axes)\n{\n let product = 1;\n for (const axis of axes)\n {\n product *= axis.options.length;\n if (!Number.isSafeInteger(product) || product < 1\n || product > MAX_EFFECT_PERMUTATIONS)\n {\n throw new Error(\n `Effect permutation count above the implementation limit `\n + `${MAX_EFFECT_PERMUTATIONS} is not supported`\n );\n }\n }\n return product;\n}\n\nfunction decodeOptionIndices(permutationIndex, axes)\n{\n let value = permutationIndex;\n return axes.map((axis) =>\n {\n const optionIndex = value % axis.options.length;\n value = Math.floor(value / axis.options.length);\n return optionIndex;\n });\n}\n\nfunction normalizeSourceRecord(record, permutationIndex, sourceByteLength)\n{\n if (!record || typeof record !== \"object\"\n || record.index !== permutationIndex\n || !Number.isSafeInteger(record.offset) || record.offset < 0\n || record.offset > UINT32_MAX\n || !Number.isSafeInteger(record.size) || record.size < 1\n || record.size > UINT32_MAX\n || !Number.isSafeInteger(record.end)\n || record.end !== record.offset + record.size\n || record.end > sourceByteLength)\n {\n throw new Error(\n `Effect permutation ${permutationIndex} has an invalid source body record`\n );\n }\n\n return Object.freeze({\n offset: record.offset,\n byteLength: record.size\n });\n}\n\nfunction validateGraphSourceRecord(record, permutationIndex, sourceByteLength)\n{\n const offset = record?.offset;\n const byteLength = record?.byteLength;\n const end = offset + byteLength;\n if (!record || typeof record !== \"object\" || Array.isArray(record)\n || !Number.isSafeInteger(offset) || offset < 0 || offset > UINT32_MAX\n || !Number.isSafeInteger(byteLength) || byteLength < 1\n || byteLength > UINT32_MAX\n || !Number.isSafeInteger(end)\n || (sourceByteLength !== undefined\n && (!Number.isSafeInteger(sourceByteLength)\n || sourceByteLength < 1\n || end > sourceByteLength)))\n {\n throw new Error(\n `CEWGPU PGRF variant ${permutationIndex} source record is malformed`\n );\n }\n return record;\n}\n\nfunction validateDisjointSourceRecords(records, message)\n{\n const uniqueRanges = new Map();\n for (const record of records)\n {\n const key = `${record.offset}:${record.byteLength}`;\n if (!uniqueRanges.has(key))\n {\n uniqueRanges.set(key, {\n offset: record.offset,\n end: record.offset + record.byteLength\n });\n }\n }\n\n const orderedRanges = Array.from(uniqueRanges.values())\n .sort((left, right) => left.offset - right.offset || left.end - right.end);\n for (let index = 1; index < orderedRanges.length; index += 1)\n {\n if (orderedRanges[index].offset < orderedRanges[index - 1].end)\n {\n throw new Error(message);\n }\n }\n}\n\nfunction bytesEqual(left, right)\n{\n return left.byteLength === right.byteLength\n && left.every((value, index) => value === right[index]);\n}\n"],"names":["EFFECT_PERMUTATION_GRAPH_FORMAT","EFFECT_PERMUTATION_GRAPH_VERSION","EFFECT_PERMUTATION_GRAPH_CHUNK","SHA256","UINT8_MAX","UINT32_MAX","MAX_EFFECT_PERMUTATIONS","buildEffectPermutationGraph","effectRes","TypeError","sourceBytes","m_data","Uint8Array","axes","normalizeAxes","m_permutations","permutationCount","permutationProduct","offsets","m_offsets","Array","isArray","length","m_offsetCount","Error","sourceRecords","map","record","permutationIndex","normalizeSourceRecord","byteLength","validateDisjointSourceRecords","bodies","bodyCandidatesByDigest","Map","bodyBySourceRecord","variants","sourceRecord","sourceRecordKey","offset","body","get","bodyBytes","subarray","digest","sha256Bytes","find","candidate","bytesEqual","bytes","has","Object","freeze","key","sha256","set","push","optionIndices","decodeOptionIndices","bodyKey","graph","format","formatVersion","coverage","permutations","reflection","validateEffectPermutationGraph","sourceByteLength","options","validateGraphAxes","bodyDigests","Set","bodyIndex","entries","trim","Number","isSafeInteger","test","add","references","bodyKeyBySourceRecord","variant","expectedOptionIndices","some","value","index","validateGraphSourceRecord","recordKey","existingBodyKey","uniqueBodyCount","size","names","axis","name","defaultOption","description","type","option","slice","product","optionIndex","Math","floor","end","undefined","records","message","uniqueRanges","orderedRanges","from","values","sort","left","right","every"],"mappings":"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"}