@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,327 @@
1
+ import { emitRenderStates } from './render-states.js';
2
+ import { hlslShaderStageName } from './tr2/HlslRenderContextEnum.js';
3
+
4
+ /**
5
+ * Metadata-only projection for decoded Tr2 effect containers.
6
+ *
7
+ * This keeps the public shader-inspection endpoint small: permutation axes,
8
+ * selected option sets, techniques, passes, stage inputs, constants,
9
+ * resources, UAVs, samplers, pass render states, and signatures. It
10
+ * intentionally omits shader bytecode, constant value bytes, render-state
11
+ * handles, and other runtime renderer state.
12
+ */
13
+
14
+
15
+ /**
16
+ * Normalize caller-supplied permutation option selections.
17
+ *
18
+ * @param {Array<object>|Map<string, string>|null|undefined} options Option input.
19
+ * @param {string} source Source label for emitted selections.
20
+ * @returns {object[]} Normalized option selections.
21
+ */
22
+ function normalizeOptionSelections(options, source) {
23
+ if (options instanceof Map) {
24
+ return Array.from(options.entries()).map(([name, value]) => ({
25
+ name,
26
+ value,
27
+ source
28
+ }));
29
+ }
30
+ if (!Array.isArray(options)) {
31
+ return [];
32
+ }
33
+ return options.map(entry => ({
34
+ name: entry?.name || "",
35
+ value: entry?.value || "",
36
+ source
37
+ }));
38
+ }
39
+
40
+ /**
41
+ * Emit one permutation axis.
42
+ *
43
+ * @param {object} permutation Decoded permutation axis.
44
+ * @returns {object} Plain metadata.
45
+ */
46
+ function emitPermutation(permutation) {
47
+ return {
48
+ name: permutation.name,
49
+ options: permutation.options.slice(),
50
+ defaultOption: permutation.defaultOption,
51
+ defaultValue: permutation.options[permutation.defaultOption] ?? null,
52
+ description: permutation.description,
53
+ type: permutation.type
54
+ };
55
+ }
56
+
57
+ /**
58
+ * Resolve the option set that Carbon's `GetShader` lookup will use.
59
+ *
60
+ * @param {object} effect Loaded HlslEffectRes.
61
+ * @param {Array<object>|Map<string, string>|null|undefined} options Local option selections.
62
+ * @returns {{bodyIndex: number, selectedOptions: object[]}} Resolved body index and options.
63
+ */
64
+ function resolveSelectedOptions(effect, options = null) {
65
+ const localOptions = normalizeOptionSelections(options, "local");
66
+ const globalOptions = normalizeOptionSelections(effect.constructor.globalEffectOptions || [], "global");
67
+ const selectedOptions = [];
68
+ let multiplier = 1;
69
+ let bodyIndex = 0;
70
+ for (const permutation of effect.m_permutations) {
71
+ let optionIndex = permutation.defaultOption;
72
+ let source = "default";
73
+ const globalOption = globalOptions.find(entry => entry.name === permutation.name);
74
+ const localOption = localOptions.find(entry => entry.name === permutation.name);
75
+ const selected = globalOption || localOption;
76
+ if (selected) {
77
+ const selectedIndex = permutation.options.findIndex(option => option === selected.value);
78
+ if (selectedIndex >= 0) {
79
+ optionIndex = selectedIndex;
80
+ source = selected.source;
81
+ }
82
+ }
83
+ selectedOptions.push({
84
+ name: permutation.name,
85
+ value: permutation.options[optionIndex] ?? null,
86
+ optionIndex,
87
+ defaultOption: permutation.defaultOption,
88
+ defaultValue: permutation.options[permutation.defaultOption] ?? null,
89
+ source
90
+ });
91
+ bodyIndex += optionIndex * multiplier;
92
+ multiplier *= permutation.options.length || 1;
93
+ }
94
+ return {
95
+ bodyIndex,
96
+ selectedOptions
97
+ };
98
+ }
99
+
100
+ /**
101
+ * Emit one constant-buffer field metadata record.
102
+ *
103
+ * @param {object} constant Decoded constant metadata.
104
+ * @returns {object} Plain metadata.
105
+ */
106
+ function emitConstant(constant) {
107
+ return {
108
+ name: constant.name,
109
+ offset: constant.offset,
110
+ size: constant.size,
111
+ type: constant.type,
112
+ dimension: constant.dimension,
113
+ elements: constant.elements,
114
+ isSRGB: constant.isSRGB,
115
+ isAutoregister: constant.isAutoregister
116
+ };
117
+ }
118
+
119
+ /**
120
+ * Emit one SRV/UAV metadata record.
121
+ *
122
+ * @param {number} registerIndex Shader register index.
123
+ * @param {object} resource Decoded resource metadata.
124
+ * @returns {object} Plain metadata.
125
+ */
126
+ function emitResource(registerIndex, resource) {
127
+ return {
128
+ registerIndex,
129
+ name: resource.name,
130
+ type: resource.type,
131
+ arrayElements: resource.arrayElements,
132
+ isSRGB: resource.isSRGB,
133
+ isAutoregister: resource.isAutoregister
134
+ };
135
+ }
136
+
137
+ /**
138
+ * Emit one sampler metadata record.
139
+ *
140
+ * @param {number} registerIndex Shader register index.
141
+ * @param {object} samplerSetup Decoded sampler setup.
142
+ * @returns {object} Plain metadata.
143
+ */
144
+ function emitSampler(registerIndex, samplerSetup) {
145
+ const sampler = samplerSetup.sampler || {};
146
+ return {
147
+ registerIndex,
148
+ name: samplerSetup.name,
149
+ isDynamic: !!sampler.isDynamic,
150
+ comparison: !!sampler.comparison,
151
+ minFilter: sampler.minFilter,
152
+ magFilter: sampler.magFilter,
153
+ mipFilter: sampler.mipFilter,
154
+ addressU: sampler.addressU,
155
+ addressV: sampler.addressV,
156
+ addressW: sampler.addressW,
157
+ mipLODBias: sampler.mipLODBias,
158
+ maxAnisotropy: sampler.maxAnisotropy,
159
+ comparisonFunc: sampler.comparisonFunc,
160
+ borderColor: (sampler.borderColor || []).slice(),
161
+ minLOD: sampler.minLOD,
162
+ maxLOD: sampler.maxLOD
163
+ };
164
+ }
165
+
166
+ /**
167
+ * Emit one stage or library input.
168
+ *
169
+ * @param {object} stageInput Decoded stage input.
170
+ * @param {number} stageType Trinity shader stage enum.
171
+ * @param {object} [options] Emission options.
172
+ * @param {boolean} [options.requireExists] Whether absent stage inputs emit null.
173
+ * @returns {object|null} Plain metadata, or null for absent pass stages.
174
+ */
175
+ function emitStageInput(stageInput, stageType, options = {}) {
176
+ const {
177
+ requireExists = true
178
+ } = options;
179
+ if (!stageInput || requireExists && !stageInput.m_exists) return null;
180
+ const signature = stageInput.signature || {};
181
+ return {
182
+ stageType,
183
+ stageName: hlslShaderStageName(stageType),
184
+ constantValueSize: stageInput.m_constantValueSize || 0,
185
+ constants: (stageInput.constants || []).map(emitConstant),
186
+ resources: Array.from(stageInput.resources || [], ([registerIndex, resource]) => emitResource(registerIndex, resource)),
187
+ samplers: Array.from(stageInput.samplers || [], ([registerIndex, sampler]) => emitSampler(registerIndex, sampler)),
188
+ uavs: Array.from(stageInput.uavs || [], ([registerIndex, resource]) => emitResource(registerIndex, resource)),
189
+ annotations: (stageInput.annotation || []).map(entry => entry?.toJSON?.() ?? {
190
+ ...entry
191
+ }),
192
+ signature: {
193
+ pipelineInputs: (signature.pipelineInputs || []).map(entry => ({
194
+ ...entry
195
+ })),
196
+ registers: (signature.registers || []).map(entry => ({
197
+ ...entry
198
+ })),
199
+ samplers: (signature.samplers || []).map(entry => ({
200
+ ...entry
201
+ })),
202
+ threadGroupSize: signature.threadGroupSize ? {
203
+ ...signature.threadGroupSize
204
+ } : null
205
+ }
206
+ };
207
+ }
208
+
209
+ /**
210
+ * Emit ray-tracing shader-library metadata without bytecode or runtime handles.
211
+ *
212
+ * @param {object} library Decoded shader library.
213
+ * @returns {object} Plain metadata.
214
+ */
215
+ function emitLibrary(library) {
216
+ return {
217
+ payloadSize: library.payloadSize,
218
+ rayGenName: library.rayGenName,
219
+ missName: library.missName,
220
+ closestHitName: library.closestHitName,
221
+ anyHitName: library.anyHitName,
222
+ intersectionName: library.intersectionName,
223
+ hitGroupName: library.hitGroupName,
224
+ exports: library.exports.map(entry => ({
225
+ ...entry
226
+ })),
227
+ globalInput: emitStageInput(library.globalInput, 2, {
228
+ requireExists: false
229
+ }),
230
+ localInput: emitStageInput(library.localInput, 2, {
231
+ requireExists: false
232
+ })
233
+ };
234
+ }
235
+
236
+ /**
237
+ * Emit one pass metadata record.
238
+ *
239
+ * @param {object} pass Decoded pass.
240
+ * @returns {object} Plain metadata.
241
+ */
242
+ function emitPass(pass) {
243
+ return {
244
+ shaderTypeMask: pass.shaderTypeMask,
245
+ renderStates: emitRenderStates(pass.cjsRenderStateSetup),
246
+ stageInputs: pass.stageInputs.map((stageInput, stageType) => emitStageInput(stageInput, stageType))
247
+ };
248
+ }
249
+
250
+ /**
251
+ * Emit one technique metadata record.
252
+ *
253
+ * @param {object} technique Decoded technique.
254
+ * @returns {object} Plain metadata.
255
+ */
256
+ function emitTechnique(technique) {
257
+ return {
258
+ name: technique.name,
259
+ shaderTypeMask: technique.shaderTypeMask,
260
+ passes: technique.passes.map(emitPass),
261
+ libraries: technique.libraries.map(emitLibrary)
262
+ };
263
+ }
264
+
265
+ /**
266
+ * Emit one effect-description metadata record.
267
+ *
268
+ * @param {object} description Decoded effect description.
269
+ * @returns {object} Plain metadata.
270
+ */
271
+ function emitEffectDescription(description) {
272
+ return {
273
+ version: description.version,
274
+ effectName: description.effectName,
275
+ techniques: description.techniques.map(emitTechnique),
276
+ annotations: Array.from(description.annotations.entries(), ([name, entries]) => ({
277
+ name,
278
+ annotations: entries.map(entry => entry?.toJSON?.() ?? {
279
+ ...entry
280
+ })
281
+ })),
282
+ readError: description.readError ? {
283
+ name: description.readError.name,
284
+ message: description.readError.message
285
+ } : null
286
+ };
287
+ }
288
+
289
+ /**
290
+ * Emit shared effect header metadata.
291
+ *
292
+ * @param {object} effect Loaded HlslEffectRes.
293
+ * @returns {object} Plain metadata.
294
+ */
295
+ function emitHeader(effect) {
296
+ return {
297
+ version: effect.m_version,
298
+ compilerVersion: effect.m_compilerVersion,
299
+ sourcePath: effect.sourcePath,
300
+ bodyCount: effect.m_offsetCount,
301
+ permutations: effect.m_permutations.map(emitPermutation),
302
+ loadError: effect.loadError ? {
303
+ name: effect.loadError.name,
304
+ message: effect.loadError.message
305
+ } : null
306
+ };
307
+ }
308
+
309
+ /**
310
+ * Emit metadata for one resolved permutation body.
311
+ *
312
+ * @param {object} effect Loaded HlslEffectRes.
313
+ * @param {object|null} shader Resolved shader, if decoded.
314
+ * @param {{bodyIndex: number, selectedOptions: object[]}} selection Resolved option selection.
315
+ * @returns {object} Plain metadata.
316
+ */
317
+ function emitEffectMetadata(effect, shader, selection) {
318
+ return {
319
+ ...emitHeader(effect),
320
+ bodyIndex: selection.bodyIndex,
321
+ selectedOptions: selection.selectedOptions,
322
+ effect: shader ? emitEffectDescription(shader.GetEffectDescription()) : null
323
+ };
324
+ }
325
+
326
+ export { emitEffectMetadata, resolveSelectedOptions };
327
+ //# sourceMappingURL=metadata.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metadata.js","sources":["../../../../../src/formats/hlsl/core/metadata.js"],"sourcesContent":["/**\n * Metadata-only projection for decoded Tr2 effect containers.\n *\n * This keeps the public shader-inspection endpoint small: permutation axes,\n * selected option sets, techniques, passes, stage inputs, constants,\n * resources, UAVs, samplers, pass render states, and signatures. It\n * intentionally omits shader bytecode, constant value bytes, render-state\n * handles, and other runtime renderer state.\n */\n\nimport { emitRenderStates } from \"./render-states.js\";\nimport { hlslShaderStageName } from \"./tr2/HlslRenderContextEnum.js\";\n\n/**\n * Normalize caller-supplied permutation option selections.\n *\n * @param {Array<object>|Map<string, string>|null|undefined} options Option input.\n * @param {string} source Source label for emitted selections.\n * @returns {object[]} Normalized option selections.\n */\nfunction normalizeOptionSelections(options, source)\n{\n if (options instanceof Map)\n {\n return Array.from(options.entries()).map(([ name, value ]) => ({ name, value, source }));\n }\n if (!Array.isArray(options))\n {\n return [];\n }\n return options.map((entry) => ({\n name: entry?.name || \"\",\n value: entry?.value || \"\",\n source\n }));\n}\n\n/**\n * Emit one permutation axis.\n *\n * @param {object} permutation Decoded permutation axis.\n * @returns {object} Plain metadata.\n */\nfunction emitPermutation(permutation)\n{\n return {\n name: permutation.name,\n options: permutation.options.slice(),\n defaultOption: permutation.defaultOption,\n defaultValue: permutation.options[permutation.defaultOption] ?? null,\n description: permutation.description,\n type: permutation.type\n };\n}\n\n/**\n * Resolve the option set that Carbon's `GetShader` lookup will use.\n *\n * @param {object} effect Loaded HlslEffectRes.\n * @param {Array<object>|Map<string, string>|null|undefined} options Local option selections.\n * @returns {{bodyIndex: number, selectedOptions: object[]}} Resolved body index and options.\n */\nexport function resolveSelectedOptions(effect, options = null)\n{\n const localOptions = normalizeOptionSelections(options, \"local\");\n const globalOptions = normalizeOptionSelections(effect.constructor.globalEffectOptions || [], \"global\");\n const selectedOptions = [];\n let multiplier = 1;\n let bodyIndex = 0;\n\n for (const permutation of effect.m_permutations)\n {\n let optionIndex = permutation.defaultOption;\n let source = \"default\";\n const globalOption = globalOptions.find((entry) => entry.name === permutation.name);\n const localOption = localOptions.find((entry) => entry.name === permutation.name);\n const selected = globalOption || localOption;\n\n if (selected)\n {\n const selectedIndex = permutation.options.findIndex((option) => option === selected.value);\n if (selectedIndex >= 0)\n {\n optionIndex = selectedIndex;\n source = selected.source;\n }\n }\n\n selectedOptions.push({\n name: permutation.name,\n value: permutation.options[optionIndex] ?? null,\n optionIndex,\n defaultOption: permutation.defaultOption,\n defaultValue: permutation.options[permutation.defaultOption] ?? null,\n source\n });\n\n bodyIndex += optionIndex * multiplier;\n multiplier *= permutation.options.length || 1;\n }\n\n return { bodyIndex, selectedOptions };\n}\n\n/**\n * Emit one constant-buffer field metadata record.\n *\n * @param {object} constant Decoded constant metadata.\n * @returns {object} Plain metadata.\n */\nfunction emitConstant(constant)\n{\n return {\n name: constant.name,\n offset: constant.offset,\n size: constant.size,\n type: constant.type,\n dimension: constant.dimension,\n elements: constant.elements,\n isSRGB: constant.isSRGB,\n isAutoregister: constant.isAutoregister\n };\n}\n\n/**\n * Emit one SRV/UAV metadata record.\n *\n * @param {number} registerIndex Shader register index.\n * @param {object} resource Decoded resource metadata.\n * @returns {object} Plain metadata.\n */\nfunction emitResource(registerIndex, resource)\n{\n return {\n registerIndex,\n name: resource.name,\n type: resource.type,\n arrayElements: resource.arrayElements,\n isSRGB: resource.isSRGB,\n isAutoregister: resource.isAutoregister\n };\n}\n\n/**\n * Emit one sampler metadata record.\n *\n * @param {number} registerIndex Shader register index.\n * @param {object} samplerSetup Decoded sampler setup.\n * @returns {object} Plain metadata.\n */\nfunction emitSampler(registerIndex, samplerSetup)\n{\n const sampler = samplerSetup.sampler || {};\n return {\n registerIndex,\n name: samplerSetup.name,\n isDynamic: !!sampler.isDynamic,\n comparison: !!sampler.comparison,\n minFilter: sampler.minFilter,\n magFilter: sampler.magFilter,\n mipFilter: sampler.mipFilter,\n addressU: sampler.addressU,\n addressV: sampler.addressV,\n addressW: sampler.addressW,\n mipLODBias: sampler.mipLODBias,\n maxAnisotropy: sampler.maxAnisotropy,\n comparisonFunc: sampler.comparisonFunc,\n borderColor: (sampler.borderColor || []).slice(),\n minLOD: sampler.minLOD,\n maxLOD: sampler.maxLOD\n };\n}\n\n/**\n * Emit one stage or library input.\n *\n * @param {object} stageInput Decoded stage input.\n * @param {number} stageType Trinity shader stage enum.\n * @param {object} [options] Emission options.\n * @param {boolean} [options.requireExists] Whether absent stage inputs emit null.\n * @returns {object|null} Plain metadata, or null for absent pass stages.\n */\nfunction emitStageInput(stageInput, stageType, options = {})\n{\n const { requireExists = true } = options;\n if (!stageInput || (requireExists && !stageInput.m_exists)) return null;\n\n const signature = stageInput.signature || {};\n\n return {\n stageType,\n stageName: hlslShaderStageName(stageType),\n constantValueSize: stageInput.m_constantValueSize || 0,\n constants: (stageInput.constants || []).map(emitConstant),\n resources: Array.from(\n stageInput.resources || [],\n ([ registerIndex, resource ]) => emitResource(registerIndex, resource)\n ),\n samplers: Array.from(\n stageInput.samplers || [],\n ([ registerIndex, sampler ]) => emitSampler(registerIndex, sampler)\n ),\n uavs: Array.from(\n stageInput.uavs || [],\n ([ registerIndex, resource ]) => emitResource(registerIndex, resource)\n ),\n annotations: (stageInput.annotation || []).map((entry) => entry?.toJSON?.() ?? { ...entry }),\n signature: {\n pipelineInputs: (signature.pipelineInputs || []).map((entry) => ({ ...entry })),\n registers: (signature.registers || []).map((entry) => ({ ...entry })),\n samplers: (signature.samplers || []).map((entry) => ({ ...entry })),\n threadGroupSize: signature.threadGroupSize ? { ...signature.threadGroupSize } : null\n }\n };\n}\n\n/**\n * Emit ray-tracing shader-library metadata without bytecode or runtime handles.\n *\n * @param {object} library Decoded shader library.\n * @returns {object} Plain metadata.\n */\nfunction emitLibrary(library)\n{\n return {\n payloadSize: library.payloadSize,\n rayGenName: library.rayGenName,\n missName: library.missName,\n closestHitName: library.closestHitName,\n anyHitName: library.anyHitName,\n intersectionName: library.intersectionName,\n hitGroupName: library.hitGroupName,\n exports: library.exports.map((entry) => ({ ...entry })),\n globalInput: emitStageInput(library.globalInput, 2, { requireExists: false }),\n localInput: emitStageInput(library.localInput, 2, { requireExists: false })\n };\n}\n\n/**\n * Emit one pass metadata record.\n *\n * @param {object} pass Decoded pass.\n * @returns {object} Plain metadata.\n */\nfunction emitPass(pass)\n{\n return {\n shaderTypeMask: pass.shaderTypeMask,\n renderStates: emitRenderStates(pass.cjsRenderStateSetup),\n stageInputs: pass.stageInputs.map((stageInput, stageType) => emitStageInput(stageInput, stageType))\n };\n}\n\n/**\n * Emit one technique metadata record.\n *\n * @param {object} technique Decoded technique.\n * @returns {object} Plain metadata.\n */\nfunction emitTechnique(technique)\n{\n return {\n name: technique.name,\n shaderTypeMask: technique.shaderTypeMask,\n passes: technique.passes.map(emitPass),\n libraries: technique.libraries.map(emitLibrary)\n };\n}\n\n/**\n * Emit one effect-description metadata record.\n *\n * @param {object} description Decoded effect description.\n * @returns {object} Plain metadata.\n */\nfunction emitEffectDescription(description)\n{\n return {\n version: description.version,\n effectName: description.effectName,\n techniques: description.techniques.map(emitTechnique),\n annotations: Array.from(description.annotations.entries(), ([ name, entries ]) => ({\n name,\n annotations: entries.map((entry) => entry?.toJSON?.() ?? { ...entry })\n })),\n readError: description.readError\n ? { name: description.readError.name, message: description.readError.message }\n : null\n };\n}\n\n/**\n * Emit shared effect header metadata.\n *\n * @param {object} effect Loaded HlslEffectRes.\n * @returns {object} Plain metadata.\n */\nfunction emitHeader(effect)\n{\n return {\n version: effect.m_version,\n compilerVersion: effect.m_compilerVersion,\n sourcePath: effect.sourcePath,\n bodyCount: effect.m_offsetCount,\n permutations: effect.m_permutations.map(emitPermutation),\n loadError: effect.loadError ? { name: effect.loadError.name, message: effect.loadError.message } : null\n };\n}\n\n/**\n * Emit metadata for one resolved permutation body.\n *\n * @param {object} effect Loaded HlslEffectRes.\n * @param {object|null} shader Resolved shader, if decoded.\n * @param {{bodyIndex: number, selectedOptions: object[]}} selection Resolved option selection.\n * @returns {object} Plain metadata.\n */\nexport function emitEffectMetadata(effect, shader, selection)\n{\n return {\n ...emitHeader(effect),\n bodyIndex: selection.bodyIndex,\n selectedOptions: selection.selectedOptions,\n effect: shader ? emitEffectDescription(shader.GetEffectDescription()) : null\n };\n}\n"],"names":["normalizeOptionSelections","options","source","Map","Array","from","entries","map","name","value","isArray","entry","emitPermutation","permutation","slice","defaultOption","defaultValue","description","type","resolveSelectedOptions","effect","localOptions","globalOptions","constructor","globalEffectOptions","selectedOptions","multiplier","bodyIndex","m_permutations","optionIndex","globalOption","find","localOption","selected","selectedIndex","findIndex","option","push","length","emitConstant","constant","offset","size","dimension","elements","isSRGB","isAutoregister","emitResource","registerIndex","resource","arrayElements","emitSampler","samplerSetup","sampler","isDynamic","comparison","minFilter","magFilter","mipFilter","addressU","addressV","addressW","mipLODBias","maxAnisotropy","comparisonFunc","borderColor","minLOD","maxLOD","emitStageInput","stageInput","stageType","requireExists","m_exists","signature","stageName","hlslShaderStageName","constantValueSize","m_constantValueSize","constants","resources","samplers","uavs","annotations","annotation","toJSON","pipelineInputs","registers","threadGroupSize","emitLibrary","library","payloadSize","rayGenName","missName","closestHitName","anyHitName","intersectionName","hitGroupName","exports","globalInput","localInput","emitPass","pass","shaderTypeMask","renderStates","emitRenderStates","cjsRenderStateSetup","stageInputs","emitTechnique","technique","passes","libraries","emitEffectDescription","version","effectName","techniques","readError","message","emitHeader","m_version","compilerVersion","m_compilerVersion","sourcePath","bodyCount","m_offsetCount","permutations","loadError","emitEffectMetadata","shader","selection","GetEffectDescription"],"mappings":"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"}