@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 @@
1
+ {"version":3,"file":"lowerDxbcToIr.js","sources":["../../../../../../src/formats/webgpu/core/ir/lowerDxbcToIr.js"],"sourcesContent":["import CjsDxbcFormat from \"../../../dxbc/index.js\";\nimport { analyzeRegisterValues, operandRoles } from \"./analyzeRegisterValues.js\";\nimport { buildControlFlow } from \"./buildControlFlow.js\";\nimport { resolveRegisterFlow } from \"./resolveRegisterFlow.js\";\nimport { inferValueTypes, SCALAR_TYPES } from \"./inferValueTypes.js\";\n\nexport const SHADER_IR_FORMAT = \"CJS_SHADER_IR\";\nexport const SHADER_IR_VERSION = 1;\nconst PRECISE_MASK = /^x?y?z?w?$/u;\n\nconst BINDING_KINDS = Object.freeze({\n dcl_constant_buffer: \"uniform-buffer\",\n dcl_sampler: \"sampler\",\n dcl_resource: \"sampled-resource\",\n dcl_resource_raw: \"sampled-resource\",\n dcl_resource_structured: \"sampled-resource\",\n dcl_unordered_access_view_typed: \"storage-resource\",\n dcl_unordered_access_view_raw: \"storage-resource\",\n dcl_unordered_access_view_structured: \"storage-resource\"\n});\n\nconst BLOCK_BEFORE = new Set([ \"loop\", \"else\", \"endif\", \"endloop\", \"case\", \"default\", \"endswitch\" ]);\nconst BLOCK_AFTER = new Set([\n \"if\", \"loop\", \"switch\", \"break\", \"breakc\", \"continue\", \"continuec\",\n \"ret\", \"retc\", \"discard\", \"else\", \"endif\", \"endloop\", \"case\", \"default\", \"endswitch\"\n]);\n\nfunction clonePlain(value)\n{\n if (value === null || value === undefined) return value ?? null;\n if (ArrayBuffer.isView(value)) return Array.from(value);\n if (Array.isArray(value)) return value.map(clonePlain);\n if (typeof value === \"object\")\n {\n const out = {};\n for (const [ key, entry ] of Object.entries(value)) out[key] = clonePlain(entry);\n return out;\n }\n return value;\n}\n\nfunction readDecoded(input, options)\n{\n if (input instanceof Uint8Array || input instanceof ArrayBuffer || ArrayBuffer.isView(input))\n {\n const raw = CjsDxbcFormat.read(input, {\n emit: CjsDxbcFormat.OUTPUT_RAW,\n source: options.source || \"memory\",\n decodeInstructions: true\n });\n return {\n program: raw.program,\n instructions: raw.decoder?.instructions || [],\n signatures: {\n input: raw.inputSignature?.elements || [],\n output: raw.outputSignature?.elements || [],\n patch: raw.patchSignature?.elements || []\n }\n };\n }\n if (input?.program && input?.decoder)\n {\n return {\n program: input.program,\n instructions: input.decoder.instructions || [],\n signatures: {\n input: input.inputSignature?.elements || input.signatures?.input || [],\n output: input.outputSignature?.elements || input.signatures?.output || [],\n patch: input.patchSignature?.elements || input.signatures?.patch || []\n }\n };\n }\n if (input?.program && Array.isArray(input.instructions))\n {\n return { program: input.program, instructions: input.instructions, signatures: input.signatures || {} };\n }\n throw new TypeError(\"CjsWebgpuFormat.BuildShaderIr: expected DXBC bytes or decoded program/instructions\");\n}\n\nfunction normalizedRange(declaration)\n{\n if (declaration.bindingRange) return clonePlain(declaration.bindingRange);\n const registerIndex = declaration.registerIndex ?? null;\n return {\n bindingModel: \"sm5.0-register\",\n rangeId: null,\n lowerBound: registerIndex,\n upperBound: registerIndex,\n unbounded: false,\n registerCount: registerIndex === null ? 0 : 1,\n registerSpace: 0\n };\n}\n\nfunction buildBinding(instruction)\n{\n const resourceKind = BINDING_KINDS[instruction.opcodeName];\n if (!resourceKind) return null;\n const declaration = instruction.declaration || {};\n const range = normalizedRange(declaration);\n return {\n kind: \"binding\",\n id: `${resourceKind}:space${range.registerSpace}:range${range.rangeId ?? range.lowerBound}`,\n resourceKind,\n operandType: instruction.operands?.[0]?.typeName || null,\n declarationOffset: instruction.offset,\n registerIndex: declaration.registerIndex ?? range.lowerBound,\n range,\n accessPattern: declaration.accessPattern || null,\n resourceDimension: declaration.resourceDimensionName || null,\n structureStride: declaration.structureStride ?? null,\n returnType: clonePlain(declaration.returnType || null)\n };\n}\n\nfunction controlKind(opcodeName)\n{\n if ([ \"if\", \"else\", \"endif\" ].includes(opcodeName)) return \"selection\";\n if ([ \"loop\", \"endloop\", \"break\", \"breakc\", \"continue\", \"continuec\" ].includes(opcodeName)) return \"loop\";\n if ([ \"switch\", \"case\", \"default\", \"endswitch\" ].includes(opcodeName)) return \"switch\";\n if ([ \"ret\", \"retc\", \"discard\", \"abort\" ].includes(opcodeName)) return \"termination\";\n return null;\n}\n\nconst COMPONENT_ORDER = [ \"x\", \"y\", \"z\", \"w\" ];\nconst FLOAT_VIEW = new DataView(new ArrayBuffer(4));\n\nfunction immediateRecord(value)\n{\n const bits = (value?.uint32 ?? 0) >>> 0;\n FLOAT_VIEW.setUint32(0, bits);\n return { uint32: bits, float32: FLOAT_VIEW.getFloat32(0) };\n}\n\n/**\n * Recognizes indexable temps that are immutable constant tables: every write\n * is a straight-line pre-control-flow `mov x#[slot].mask, l(...)` immediate,\n * and at least one access uses relative addressing. Such registers lower to a\n * module-scope WGSL `const` array (the same shape as the DXBC icb), so their\n * dynamic reads never need mutable-register SSA. Any relative indexable-temp\n * usage that does not fit this shape fails closed here with a diagnostic.\n *\n * @param {object[]} declarationInstructions Decoded declaration instructions.\n * @param {object[]} executable Decoded executable instructions.\n * @returns {{tables: object[]|null, removed: Set<number>|null}} Tables and initializer indices.\n */\nfunction extractConstTables(declarationInstructions, executable)\n{\n const declared = new Map();\n const duplicateDeclarations = new Set();\n for (const declaration of declarationInstructions)\n {\n if (declaration.opcodeName !== \"dcl_indexable_temp\") continue;\n const data = declaration.declaration || {};\n if (declared.has(data.registerIndex)) duplicateDeclarations.add(data.registerIndex);\n declared.set(data.registerIndex, {\n slotCount: data.registerCount,\n componentCount: data.componentCount\n });\n }\n\n const touched = new Map();\n const entryFor = (registerIndex) =>\n {\n let entry = touched.get(registerIndex);\n if (!entry)\n {\n entry = { writes: [], hasRelative: false, invalid: null };\n touched.set(registerIndex, entry);\n }\n return entry;\n };\n const invalidate = (entry, reason) =>\n {\n if (!entry.invalid) entry.invalid = reason;\n };\n let firstControl = executable.findIndex((instruction) => controlKind(instruction.opcodeName) !== null);\n if (firstControl < 0) firstControl = executable.length;\n\n executable.forEach((instruction, instructionIndex) =>\n {\n operandRoles(instruction).forEach(({ operand, role }, operandIndex) =>\n {\n if (operand.typeName !== \"indexable_temp\") return;\n const indices = operand.indices || [];\n const registerIndex = indices[0]?.values?.[0];\n const entry = entryFor(registerIndex);\n if (indices.length !== 2 || indices[0]?.relative\n || indices[0]?.values?.length !== 1\n || !Number.isInteger(registerIndex) || registerIndex < 0\n || operand.registerIndex !== registerIndex)\n {\n return invalidate(entry, \"requires one consistent fixed register identity and [register][slot] addressing\");\n }\n if (indices[1]?.relative) entry.hasRelative = true;\n\n if (role === \"source\")\n {\n const lanes = operand.selected\n ? [ operand.selected ]\n : operand.swizzle\n ? Array.from(new Set(operand.swizzle))\n : COMPONENT_ORDER.slice();\n entry.reads = entry.reads || [];\n entry.reads.push({ instructionIndex, lanes });\n return;\n }\n\n // Destination use: only straight-line immediate table initializers\n // are representable; anything else is a mutable indexable temp.\n const source = instruction.operands?.[1];\n const slot = indices[1]?.values?.[0];\n if (instruction.opcodeName !== \"mov\" || instruction.saturate)\n {\n return invalidate(entry, \"is only writable by non-saturating mov initializers\");\n }\n if (instructionIndex >= firstControl)\n {\n return invalidate(entry, \"initializers must precede all control flow\");\n }\n if (indices[1]?.relative || indices[1]?.values?.length !== 1\n || !Number.isInteger(slot) || slot < 0)\n {\n return invalidate(entry, \"initializers require an immediate slot index\");\n }\n if (source?.typeName !== \"immediate32\" || (source.modifierName || \"none\") !== \"none\"\n || ![ 1, 4 ].includes(source.immediateValues?.length ?? 0))\n {\n return invalidate(entry, \"initializers require immediate32 sources\");\n }\n if ((operand.modifierName || \"none\") !== \"none\"\n || (operand.minPrecisionName || \"default\") !== \"default\"\n || (source.minPrecisionName || \"default\") !== \"default\"\n || instruction.extensions?.length)\n {\n return invalidate(entry, \"initializers require canonical default-precision mov operands\");\n }\n if (!operand.mask || operand.swizzle || operand.selected || source.mask\n || (source.swizzle && source.selected)\n || (source.selected && !COMPONENT_ORDER.includes(source.selected))\n || (source.swizzle && (source.swizzle.length !== 4\n || Array.from(source.swizzle).some((lane) => !COMPONENT_ORDER.includes(lane)))))\n {\n return invalidate(entry, \"initializers require canonical destination and source component selection\");\n }\n const valuesByLane = {};\n for (const lane of operand.mask)\n {\n const destinationLane = COMPONENT_ORDER.indexOf(lane);\n const sourceLane = source.selected || source.swizzle?.[destinationLane] || lane;\n const sourceLaneIndex = COMPONENT_ORDER.indexOf(sourceLane);\n const value = source.immediateValues.length === 1\n ? source.immediateValues[0]\n : source.immediateValues[sourceLaneIndex];\n if (!value)\n {\n return invalidate(entry, \"an initializer selects an unavailable immediate lane\");\n }\n valuesByLane[lane] = value;\n }\n entry.writes.push({ instructionIndex, slot, mask: operand.mask, valuesByLane });\n });\n });\n\n const tables = [];\n const removed = new Set();\n\n for (const [ registerIndex, entry ] of touched)\n {\n if (!entry.hasRelative) continue;\n const declaration = declared.get(registerIndex);\n const describe = (reason) => new Error(\n `Shader IR indexable temp x${registerIndex} relative addressing is not supported: ${reason}`);\n if (entry.invalid) throw describe(entry.invalid);\n if (duplicateDeclarations.has(registerIndex)) throw describe(\"it has duplicate declarations\");\n if (!declaration || !Number.isInteger(declaration.slotCount) || declaration.slotCount < 1)\n {\n throw describe(\"it has no usable declaration\");\n }\n if (!Number.isInteger(declaration.componentCount)\n || declaration.componentCount < 1 || declaration.componentCount > 4)\n {\n throw describe(\"it has an invalid component count\");\n }\n const lastWrite = Math.max(...entry.writes.map((write) => write.instructionIndex));\n const firstRead = Math.min(...(entry.reads || []).map((read) => read.instructionIndex));\n if (lastWrite >= firstRead)\n {\n throw describe(\"all initializers must precede every read\");\n }\n\n const laneMask = entry.writes[0]?.mask;\n if (Array.from(laneMask || \"\").some((lane) =>\n COMPONENT_ORDER.indexOf(lane) >= declaration.componentCount))\n {\n throw describe(\"an initializer writes outside the declared component range\");\n }\n const rows = Array.from({ length: declaration.slotCount }, () =>\n COMPONENT_ORDER.map(() => null));\n for (const write of entry.writes)\n {\n if (write.mask !== laneMask) throw describe(\"initializers must share one write mask\");\n if (write.slot < 0 || write.slot >= declaration.slotCount)\n {\n throw describe(\"an initializer writes outside the declared range\");\n }\n for (const lane of write.mask)\n {\n const laneIndex = COMPONENT_ORDER.indexOf(lane);\n if (rows[write.slot][laneIndex] !== null) throw describe(\"a slot lane is written twice\");\n rows[write.slot][laneIndex] = immediateRecord(write.valuesByLane[lane]);\n }\n removed.add(write.instructionIndex);\n }\n for (const [ slot, row ] of rows.entries())\n {\n for (const lane of laneMask || \"\")\n {\n if (row[COMPONENT_ORDER.indexOf(lane)] === null)\n {\n throw describe(`slot ${slot} is never fully written`);\n }\n }\n }\n for (const read of entry.reads || [])\n {\n if (read.lanes.some((lane) => !(laneMask || \"\").includes(lane)))\n {\n throw describe(\"a read selects lanes the table never writes\");\n }\n }\n\n tables.push(Object.freeze({\n kind: \"const-table\",\n registerIndex,\n symbol: `xt${registerIndex}`,\n slotCount: declaration.slotCount,\n laneMask: laneMask || \"\",\n rows: rows.map((row) => row.map((value) => value ?? { uint32: 0, float32: 0 }))\n }));\n }\n\n return tables.length ? { tables, removed } : { tables: null, removed: null };\n}\n\nfunction buildInstruction(instruction, index)\n{\n return {\n kind: \"instruction\",\n index,\n dxbcOffset: instruction.offset,\n opcode: instruction.opcode,\n opcodeName: instruction.opcodeName,\n controlKind: controlKind(instruction.opcodeName),\n testBoolean: instruction.testBoolean || null,\n saturate: !!instruction.saturate,\n preciseMask: instruction.preciseMask || \"\",\n ...(instruction.opcodeName === \"resinfo\"\n ? { resinfoReturnTypeName: instruction.resinfoReturnTypeName || \"float\" }\n : {}),\n ...(instruction.opcodeName === \"sync\"\n ? {\n syncFlags: Number.isInteger(instruction.syncFlags)\n ? instruction.syncFlags\n : null,\n syncFlagNames: Array.isArray(instruction.syncFlagNames)\n ? clonePlain(instruction.syncFlagNames)\n : null\n }\n : {}),\n ...(instruction.extensions?.length\n ? { extensions: clonePlain(instruction.extensions) }\n : {}),\n ...(instruction.tailTokens?.length\n ? { tailTokens: clonePlain(instruction.tailTokens) }\n : {}),\n operands: clonePlain(instruction.operands || [])\n };\n}\n\nfunction buildBlocks(instructions)\n{\n if (instructions.length === 0) return [];\n const leaders = new Set([ 0 ]);\n for (let index = 0; index < instructions.length; index += 1)\n {\n if (BLOCK_BEFORE.has(instructions[index].opcodeName)) leaders.add(index);\n if (BLOCK_AFTER.has(instructions[index].opcodeName) && index + 1 < instructions.length) leaders.add(index + 1);\n }\n\n const starts = Array.from(leaders).sort((a, b) => a - b);\n return starts.map((start, blockIndex) =>\n {\n const end = (starts[blockIndex + 1] ?? instructions.length) - 1;\n const last = instructions[end];\n return {\n kind: \"basic-block\",\n id: `block${blockIndex}`,\n index: blockIndex,\n startInstruction: start,\n endInstruction: end,\n startDxbcOffset: instructions[start].dxbcOffset,\n endDxbcOffset: last.dxbcOffset,\n instructionIndices: Array.from({ length: end - start + 1 }, (_, offset) => start + offset),\n terminator: last.controlKind ? last.opcodeName : null\n };\n });\n}\n\nfunction validateProgram(program)\n{\n if (!program.stage || !Number.isInteger(program.shaderModel.major))\n {\n throw new Error(\"Invalid shader IR program identity\");\n }\n for (let index = 1; index < program.instructions.length; index += 1)\n {\n if (program.instructions[index].dxbcOffset <= program.instructions[index - 1].dxbcOffset)\n {\n throw new Error(\"Shader IR instruction offsets must be strictly increasing\");\n }\n }\n const covered = program.blocks.flatMap((block) => block.instructionIndices);\n if (covered.length !== program.instructions.length || covered.some((value, index) => value !== index))\n {\n throw new Error(\"Shader IR basic blocks must cover every executable instruction exactly once\");\n }\n const blockIds = new Set(program.blocks.map((block) => block.id));\n for (const block of program.blocks)\n {\n if (block.successors.some((edge) => !blockIds.has(edge.blockId)))\n {\n throw new Error(\"Shader IR control-flow edge references an unknown block\");\n }\n for (const edge of block.successors)\n {\n const successor = program.blocks.find((entry) => entry.id === edge.blockId);\n if (!successor.predecessors.some((entry) => entry.blockId === block.id && entry.kind === edge.kind))\n {\n throw new Error(\"Shader IR control-flow successor/predecessor edges must be symmetric\");\n }\n }\n }\n const bindingIds = new Set();\n for (const binding of program.bindings)\n {\n if (bindingIds.has(binding.id)) throw new Error(`Duplicate shader IR binding ${binding.id}`);\n bindingIds.add(binding.id);\n }\n const valueIds = new Set(program.values.map((value) => value.id));\n const valuesById = new Map(program.values.map((value) => [ value.id, value ]));\n if (valueIds.size !== program.values.length) throw new Error(\"Shader IR register value ids must be unique\");\n for (const block of program.blocks)\n {\n if (block.inputValueIds.some((id) => !valueIds.has(id)))\n {\n throw new Error(\"Shader IR block input references an unknown value\");\n }\n if (block.outputValues.some((output) => !valueIds.has(output.ref.valueId)))\n {\n throw new Error(\"Shader IR block output references an unknown value\");\n }\n if (block.mergeSite?.valueIds?.some((id) =>\n !valueIds.has(id)\n || valuesById.get(id).origin !== \"control-flow-merge\"\n || valuesById.get(id).blockId !== block.id))\n {\n throw new Error(\"Shader IR merge site references an invalid merge value\");\n }\n }\n for (const instruction of program.instructions)\n {\n if (!instruction.dataflow) throw new Error(\"Shader IR instruction is missing register dataflow\");\n const refs = [\n ...instruction.dataflow.reads.flatMap((read) => read.refs),\n ...instruction.dataflow.writes.flatMap((write) => [\n { valueId: write.valueId },\n ...Object.values(write.previous || {}),\n ...Object.values(write.result || {})\n ])\n ];\n if (refs.some((ref) => !valueIds.has(ref.valueId)))\n {\n throw new Error(\"Shader IR register dataflow references an unknown value\");\n }\n }\n for (const value of program.values)\n {\n if (value.origin === \"block-input\") throw new Error(\"Shader IR contains an unresolved block input\");\n if (value.origin === \"control-flow-merge\")\n {\n if (value.incoming.length < 2) throw new Error(\"Shader IR merge value must have at least two incoming values\");\n if (value.incoming.some((incoming) => !valueIds.has(incoming.valueId)))\n {\n throw new Error(\"Shader IR merge value references an unknown incoming value\");\n }\n if (value.incoming.some((incoming) =>\n incoming.component !== value.writeMask\n || valuesById.get(incoming.valueId).register !== value.register))\n {\n throw new Error(\"Shader IR merge value has an incompatible incoming register component\");\n }\n }\n if (!value.componentTypes || Object.values(value.componentTypes).some((type) => !SCALAR_TYPES.includes(type)))\n {\n throw new Error(\"Shader IR register value has an invalid component type\");\n }\n }\n for (const instruction of program.instructions)\n {\n if (!instruction.typeInfo) throw new Error(\"Shader IR instruction is missing type information\");\n if (typeof instruction.preciseMask !== \"string\" || !PRECISE_MASK.test(instruction.preciseMask))\n {\n throw new Error(`Shader IR instruction ${instruction.index} has an invalid precise component mask`);\n }\n if (instruction.typeInfo.bitcasts.some((bitcast) =>\n !SCALAR_TYPES.includes(bitcast.from) || !SCALAR_TYPES.includes(bitcast.to)))\n {\n throw new Error(\"Shader IR instruction has an invalid bitcast type\");\n }\n }\n}\n\nfunction deepFreeze(value)\n{\n if (!value || typeof value !== \"object\" || Object.isFrozen(value)) return value;\n for (const entry of Object.values(value)) deepFreeze(entry);\n return Object.freeze(value);\n}\n\n/**\n * Lowers decoded DXBC framing into the stable front-end shader IR.\n * Type inference and SSA value reconstruction are later passes.\n *\n * @param {Uint8Array|ArrayBuffer|ArrayBufferView|object} input DXBC bytes or decoded result.\n * @param {object} [options] IR provenance options.\n * @returns {object} Frozen, validated shader IR program.\n */\nexport function lowerDxbcToIr(input, options = {})\n{\n const decoded = readDecoded(input, options);\n if (!decoded.program) throw new Error(\"DXBC input has no shader program\");\n\n const declarationInstructions = decoded.instructions.filter((instruction) => instruction.isDeclaration);\n let executable = decoded.instructions.filter((instruction) => !instruction.isDeclaration);\n const constTableExtraction = extractConstTables(declarationInstructions, executable);\n if (constTableExtraction.removed)\n {\n executable = executable.filter((_, index) => !constTableExtraction.removed.has(index));\n }\n const instructions = executable.map(buildInstruction);\n const icbInstruction = declarationInstructions.find((instruction) => instruction.customData?.immediateConstantBuffer);\n const immediateConstantBuffer = icbInstruction\n ? clonePlain(icbInstruction.customData.immediateConstantBuffer)\n : null;\n const program = {\n kind: \"shader-program\",\n format: SHADER_IR_FORMAT,\n formatVersion: SHADER_IR_VERSION,\n source: options.source || decoded.program.source || \"memory\",\n stage: decoded.program.programTypeName,\n programType: decoded.program.programType,\n shaderModel: {\n major: decoded.program.majorVersion,\n minor: decoded.program.minorVersion\n },\n signatures: {\n input: clonePlain(decoded.signatures?.input || []),\n output: clonePlain(decoded.signatures?.output || []),\n patch: clonePlain(decoded.signatures?.patch || [])\n },\n declarations: declarationInstructions.map((instruction) => ({\n kind: \"declaration\",\n dxbcOffset: instruction.offset,\n opcodeName: instruction.opcodeName,\n data: clonePlain(instruction.declaration),\n operands: clonePlain(instruction.operands || []),\n ...(instruction.tailTokens?.length\n ? { tailTokens: clonePlain(instruction.tailTokens) }\n : {})\n })),\n bindings: declarationInstructions.map(buildBinding).filter(Boolean),\n immediateConstantBuffer,\n constTables: constTableExtraction.tables,\n instructions,\n blocks: buildBlocks(instructions)\n };\n buildControlFlow(program);\n analyzeRegisterValues(program);\n resolveRegisterFlow(program);\n inferValueTypes(program);\n validateProgram(program);\n return deepFreeze(program);\n}\n"],"names":["SHADER_IR_FORMAT","SHADER_IR_VERSION","PRECISE_MASK","BINDING_KINDS","Object","freeze","dcl_constant_buffer","dcl_sampler","dcl_resource","dcl_resource_raw","dcl_resource_structured","dcl_unordered_access_view_typed","dcl_unordered_access_view_raw","dcl_unordered_access_view_structured","BLOCK_BEFORE","Set","BLOCK_AFTER","clonePlain","value","undefined","ArrayBuffer","isView","Array","from","isArray","map","out","key","entry","entries","readDecoded","input","options","Uint8Array","raw","CjsDxbcFormat","read","emit","OUTPUT_RAW","source","decodeInstructions","program","instructions","decoder","signatures","inputSignature","elements","output","outputSignature","patch","patchSignature","TypeError","normalizedRange","declaration","bindingRange","registerIndex","bindingModel","rangeId","lowerBound","upperBound","unbounded","registerCount","registerSpace","buildBinding","instruction","resourceKind","opcodeName","range","kind","id","operandType","operands","typeName","declarationOffset","offset","accessPattern","resourceDimension","resourceDimensionName","structureStride","returnType","controlKind","includes","COMPONENT_ORDER","FLOAT_VIEW","DataView","immediateRecord","bits","uint32","setUint32","float32","getFloat32","extractConstTables","declarationInstructions","executable","declared","Map","duplicateDeclarations","data","has","add","set","slotCount","componentCount","touched","entryFor","get","writes","hasRelative","invalid","invalidate","reason","firstControl","findIndex","length","forEach","instructionIndex","operandRoles","operand","role","operandIndex","indices","values","relative","Number","isInteger","lanes","selected","swizzle","slice","reads","push","slot","saturate","modifierName","immediateValues","minPrecisionName","extensions","mask","some","lane","valuesByLane","destinationLane","indexOf","sourceLane","sourceLaneIndex","tables","removed","describe","Error","lastWrite","Math","max","write","firstRead","min","laneMask","rows","laneIndex","row","symbol","buildInstruction","index","dxbcOffset","opcode","testBoolean","preciseMask","resinfoReturnTypeName","syncFlags","syncFlagNames","tailTokens","buildBlocks","leaders","starts","sort","a","b","start","blockIndex","end","last","startInstruction","endInstruction","startDxbcOffset","endDxbcOffset","instructionIndices","_","terminator","validateProgram","stage","shaderModel","major","covered","blocks","flatMap","block","blockIds","successors","edge","blockId","successor","find","predecessors","bindingIds","binding","bindings","valueIds","valuesById","size","inputValueIds","outputValues","ref","valueId","mergeSite","origin","dataflow","refs","previous","result","incoming","component","writeMask","register","componentTypes","type","SCALAR_TYPES","typeInfo","test","bitcasts","bitcast","to","deepFreeze","isFrozen","lowerDxbcToIr","decoded","filter","isDeclaration","constTableExtraction","icbInstruction","customData","immediateConstantBuffer","format","formatVersion","programTypeName","programType","majorVersion","minor","minorVersion","declarations","Boolean","constTables","buildControlFlow","analyzeRegisterValues","resolveRegisterFlow","inferValueTypes"],"mappings":"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"}
@@ -0,0 +1,177 @@
1
+ const MUTABLE_REGISTER_FILES = new Set(["temp", "output", "indexable_temp", "output_depth", "output_coverage", "output_control_point", "output_depth_greater_equal", "output_depth_less_equal"]);
2
+ function refKey(register, component) {
3
+ return `${register}.${component}`;
4
+ }
5
+ function valueRef(value, component) {
6
+ return {
7
+ valueId: value.id,
8
+ component
9
+ };
10
+ }
11
+ function isMutableRegister(register) {
12
+ return MUTABLE_REGISTER_FILES.has(register.slice(0, register.indexOf("[")));
13
+ }
14
+ function replaceObjectRefs(object, replacements) {
15
+ if (!object) return object;
16
+ for (const [key, ref] of Object.entries(object)) object[key] = replacements.get(ref.valueId) || ref;
17
+ return object;
18
+ }
19
+
20
+ /**
21
+ * Resolves conservative block inputs through CFG predecessors and materializes
22
+ * live cross-block merge values. Values are component-granular so masked DXBC
23
+ * writes retain the correct incoming lanes.
24
+ *
25
+ * @param {object} program Mutable shader IR under construction.
26
+ * @returns {object} The same program.
27
+ */
28
+ function resolveRegisterFlow(program) {
29
+ const values = program.values;
30
+ const blocksById = new Map(program.blocks.map(block => [block.id, block]));
31
+ const placeholders = new Map(values.filter(value => value.origin === "block-input").map(value => [value.id, value]));
32
+ const replacements = new Map();
33
+ const externalValues = new Map();
34
+ const mergeValues = new Map();
35
+ const entryBlockId = program.controlFlow.entryBlockId;
36
+ const outputMaps = new Map(program.blocks.map(block => [block.id, new Map(block.outputValues.map(entry => [refKey(entry.register, entry.component), entry.ref]))]));
37
+ const createValue = data => {
38
+ const value = {
39
+ kind: "register-value",
40
+ id: `value${values.length}`,
41
+ ...data
42
+ };
43
+ values.push(value);
44
+ return value;
45
+ };
46
+ const externalRef = (register, component) => {
47
+ const key = refKey(register, component);
48
+ if (!externalValues.has(key)) {
49
+ externalValues.set(key, createValue({
50
+ origin: isMutableRegister(register) ? "undefined-register" : "program-input",
51
+ blockId: null,
52
+ instructionIndex: null,
53
+ register,
54
+ writeMask: component,
55
+ previous: null
56
+ }));
57
+ }
58
+ return valueRef(externalValues.get(key), component);
59
+ };
60
+ let resolveEntry;
61
+ let resolveExit;
62
+ const resolveRef = ref => {
63
+ const placeholder = placeholders.get(ref.valueId);
64
+ if (!placeholder) return replacements.get(ref.valueId) || ref;
65
+ if (!replacements.has(ref.valueId)) {
66
+ replacements.set(ref.valueId, resolveEntry(blocksById.get(placeholder.blockId), placeholder.register, placeholder.writeMask));
67
+ }
68
+ return replacements.get(ref.valueId);
69
+ };
70
+ resolveExit = (block, register, component) => {
71
+ const local = outputMaps.get(block.id).get(refKey(register, component));
72
+ return local ? resolveRef(local) : resolveEntry(block, register, component);
73
+ };
74
+ resolveEntry = (block, register, component) => {
75
+ if (!isMutableRegister(register)) return externalRef(register, component);
76
+ const key = refKey(register, component);
77
+ const mergeKey = `${block.id}:${key}`;
78
+ if (mergeValues.has(mergeKey)) return valueRef(mergeValues.get(mergeKey), component);
79
+ const predecessorIds = Array.from(new Set(block.predecessors.map(edge => edge.blockId))).filter(id => block.reachable && blocksById.get(id).reachable).sort((a, b) => blocksById.get(a).index - blocksById.get(b).index);
80
+ const includesProgramEntry = block.id === entryBlockId || !block.reachable || predecessorIds.length === 0;
81
+ const incomingCount = predecessorIds.length + (includesProgramEntry ? 1 : 0);
82
+ if (incomingCount === 1) {
83
+ if (includesProgramEntry) return externalRef(register, component);
84
+ return resolveExit(blocksById.get(predecessorIds[0]), register, component);
85
+ }
86
+ const merge = createValue({
87
+ origin: "control-flow-merge",
88
+ blockId: block.id,
89
+ instructionIndex: null,
90
+ register,
91
+ writeMask: component,
92
+ previous: null,
93
+ incoming: []
94
+ });
95
+ mergeValues.set(mergeKey, merge);
96
+ if (includesProgramEntry) {
97
+ const ref = externalRef(register, component);
98
+ merge.incoming.push({
99
+ kind: "program-entry",
100
+ blockId: null,
101
+ ...ref
102
+ });
103
+ }
104
+ for (const predecessorId of predecessorIds) {
105
+ const ref = resolveExit(blocksById.get(predecessorId), register, component);
106
+ merge.incoming.push({
107
+ kind: "predecessor",
108
+ blockId: predecessorId,
109
+ ...ref
110
+ });
111
+ }
112
+ return valueRef(merge, component);
113
+ };
114
+ for (const placeholder of placeholders.values()) {
115
+ if (!replacements.has(placeholder.id)) {
116
+ replacements.set(placeholder.id, resolveEntry(blocksById.get(placeholder.blockId), placeholder.register, placeholder.writeMask));
117
+ }
118
+ }
119
+ const aliases = new Map();
120
+ const canonicalRef = ref => {
121
+ let current = ref;
122
+ const seen = new Set();
123
+ while (aliases.has(current.valueId) && !seen.has(current.valueId)) {
124
+ seen.add(current.valueId);
125
+ current = aliases.get(current.valueId);
126
+ }
127
+ return current;
128
+ };
129
+ let changed = true;
130
+ while (changed) {
131
+ changed = false;
132
+ for (const merge of mergeValues.values()) {
133
+ if (aliases.has(merge.id)) continue;
134
+ const refs = merge.incoming.map(incoming => canonicalRef(incoming)).filter(ref => ref.valueId !== merge.id);
135
+ const unique = Array.from(new Map(refs.map(ref => [`${ref.valueId}.${ref.component}`, ref])).values());
136
+ if (unique.length === 1) {
137
+ aliases.set(merge.id, unique[0]);
138
+ changed = true;
139
+ }
140
+ }
141
+ }
142
+ for (const [id, ref] of replacements) replacements.set(id, canonicalRef(ref));
143
+ for (const [id, ref] of aliases) replacements.set(id, canonicalRef(ref));
144
+ for (const merge of mergeValues.values()) {
145
+ if (aliases.has(merge.id)) continue;
146
+ merge.incoming = merge.incoming.map(incoming => ({
147
+ ...incoming,
148
+ ...canonicalRef(incoming)
149
+ }));
150
+ }
151
+ for (const instruction of program.instructions) {
152
+ for (const read of instruction.dataflow.reads) {
153
+ read.refs = read.refs.map(resolveRef);
154
+ }
155
+ for (const write of instruction.dataflow.writes) {
156
+ replaceObjectRefs(write.previous, replacements);
157
+ replaceObjectRefs(write.result, replacements);
158
+ }
159
+ }
160
+ for (const value of values) {
161
+ replaceObjectRefs(value.previous, replacements);
162
+ }
163
+ for (const block of program.blocks) {
164
+ block.inputValueIds = Array.from(new Set(block.inputValueIds.map(id => replacements.get(id)?.valueId).filter(Boolean)));
165
+ for (const output of block.outputValues) output.ref = resolveRef(output.ref);
166
+ const concreteMerges = Array.from(mergeValues.values()).filter(value => value.blockId === block.id && !aliases.has(value.id)).map(value => value.id);
167
+ if (block.mergeSite) {
168
+ block.mergeSite.valueIds = concreteMerges;
169
+ block.mergeSite.requiresRegisterMerge = concreteMerges.length > 0;
170
+ }
171
+ }
172
+ program.values = values.filter(value => value.origin !== "block-input" && !aliases.has(value.id));
173
+ return program;
174
+ }
175
+
176
+ export { resolveRegisterFlow };
177
+ //# sourceMappingURL=resolveRegisterFlow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveRegisterFlow.js","sources":["../../../../../../src/formats/webgpu/core/ir/resolveRegisterFlow.js"],"sourcesContent":["const MUTABLE_REGISTER_FILES = new Set([\n \"temp\", \"output\", \"indexable_temp\", \"output_depth\", \"output_coverage\",\n \"output_control_point\", \"output_depth_greater_equal\", \"output_depth_less_equal\"\n]);\n\nfunction refKey(register, component)\n{\n return `${register}.${component}`;\n}\n\nfunction valueRef(value, component)\n{\n return { valueId: value.id, component };\n}\n\nfunction isMutableRegister(register)\n{\n return MUTABLE_REGISTER_FILES.has(register.slice(0, register.indexOf(\"[\")));\n}\n\nfunction replaceObjectRefs(object, replacements)\n{\n if (!object) return object;\n for (const [ key, ref ] of Object.entries(object)) object[key] = replacements.get(ref.valueId) || ref;\n return object;\n}\n\n/**\n * Resolves conservative block inputs through CFG predecessors and materializes\n * live cross-block merge values. Values are component-granular so masked DXBC\n * writes retain the correct incoming lanes.\n *\n * @param {object} program Mutable shader IR under construction.\n * @returns {object} The same program.\n */\nexport function resolveRegisterFlow(program)\n{\n const values = program.values;\n const blocksById = new Map(program.blocks.map((block) => [ block.id, block ]));\n const placeholders = new Map(values\n .filter((value) => value.origin === \"block-input\")\n .map((value) => [ value.id, value ]));\n const replacements = new Map();\n const externalValues = new Map();\n const mergeValues = new Map();\n const entryBlockId = program.controlFlow.entryBlockId;\n const outputMaps = new Map(program.blocks.map((block) => [\n block.id,\n new Map(block.outputValues.map((entry) => [ refKey(entry.register, entry.component), entry.ref ]))\n ]));\n\n const createValue = (data) =>\n {\n const value = { kind: \"register-value\", id: `value${values.length}`, ...data };\n values.push(value);\n return value;\n };\n\n const externalRef = (register, component) =>\n {\n const key = refKey(register, component);\n if (!externalValues.has(key))\n {\n externalValues.set(key, createValue({\n origin: isMutableRegister(register) ? \"undefined-register\" : \"program-input\",\n blockId: null,\n instructionIndex: null,\n register,\n writeMask: component,\n previous: null\n }));\n }\n return valueRef(externalValues.get(key), component);\n };\n\n let resolveEntry;\n let resolveExit;\n const resolveRef = (ref) =>\n {\n const placeholder = placeholders.get(ref.valueId);\n if (!placeholder) return replacements.get(ref.valueId) || ref;\n if (!replacements.has(ref.valueId))\n {\n replacements.set(ref.valueId, resolveEntry(\n blocksById.get(placeholder.blockId),\n placeholder.register,\n placeholder.writeMask\n ));\n }\n return replacements.get(ref.valueId);\n };\n\n resolveExit = (block, register, component) =>\n {\n const local = outputMaps.get(block.id).get(refKey(register, component));\n return local ? resolveRef(local) : resolveEntry(block, register, component);\n };\n\n resolveEntry = (block, register, component) =>\n {\n if (!isMutableRegister(register)) return externalRef(register, component);\n const key = refKey(register, component);\n const mergeKey = `${block.id}:${key}`;\n if (mergeValues.has(mergeKey)) return valueRef(mergeValues.get(mergeKey), component);\n\n const predecessorIds = Array.from(new Set(block.predecessors.map((edge) => edge.blockId)))\n .filter((id) => block.reachable && blocksById.get(id).reachable)\n .sort((a, b) => blocksById.get(a).index - blocksById.get(b).index);\n const includesProgramEntry = block.id === entryBlockId || !block.reachable || predecessorIds.length === 0;\n const incomingCount = predecessorIds.length + (includesProgramEntry ? 1 : 0);\n\n if (incomingCount === 1)\n {\n if (includesProgramEntry) return externalRef(register, component);\n return resolveExit(blocksById.get(predecessorIds[0]), register, component);\n }\n\n const merge = createValue({\n origin: \"control-flow-merge\",\n blockId: block.id,\n instructionIndex: null,\n register,\n writeMask: component,\n previous: null,\n incoming: []\n });\n mergeValues.set(mergeKey, merge);\n if (includesProgramEntry)\n {\n const ref = externalRef(register, component);\n merge.incoming.push({ kind: \"program-entry\", blockId: null, ...ref });\n }\n for (const predecessorId of predecessorIds)\n {\n const ref = resolveExit(blocksById.get(predecessorId), register, component);\n merge.incoming.push({ kind: \"predecessor\", blockId: predecessorId, ...ref });\n }\n return valueRef(merge, component);\n };\n\n for (const placeholder of placeholders.values())\n {\n if (!replacements.has(placeholder.id))\n {\n replacements.set(placeholder.id, resolveEntry(\n blocksById.get(placeholder.blockId),\n placeholder.register,\n placeholder.writeMask\n ));\n }\n }\n\n const aliases = new Map();\n const canonicalRef = (ref) =>\n {\n let current = ref;\n const seen = new Set();\n while (aliases.has(current.valueId) && !seen.has(current.valueId))\n {\n seen.add(current.valueId);\n current = aliases.get(current.valueId);\n }\n return current;\n };\n let changed = true;\n while (changed)\n {\n changed = false;\n for (const merge of mergeValues.values())\n {\n if (aliases.has(merge.id)) continue;\n const refs = merge.incoming\n .map((incoming) => canonicalRef(incoming))\n .filter((ref) => ref.valueId !== merge.id);\n const unique = Array.from(new Map(refs.map((ref) => [ `${ref.valueId}.${ref.component}`, ref ])).values());\n if (unique.length === 1)\n {\n aliases.set(merge.id, unique[0]);\n changed = true;\n }\n }\n }\n for (const [ id, ref ] of replacements) replacements.set(id, canonicalRef(ref));\n for (const [ id, ref ] of aliases) replacements.set(id, canonicalRef(ref));\n for (const merge of mergeValues.values())\n {\n if (aliases.has(merge.id)) continue;\n merge.incoming = merge.incoming.map((incoming) => ({ ...incoming, ...canonicalRef(incoming) }));\n }\n\n for (const instruction of program.instructions)\n {\n for (const read of instruction.dataflow.reads)\n {\n read.refs = read.refs.map(resolveRef);\n }\n for (const write of instruction.dataflow.writes)\n {\n replaceObjectRefs(write.previous, replacements);\n replaceObjectRefs(write.result, replacements);\n }\n }\n for (const value of values)\n {\n replaceObjectRefs(value.previous, replacements);\n }\n for (const block of program.blocks)\n {\n block.inputValueIds = Array.from(new Set(block.inputValueIds\n .map((id) => replacements.get(id)?.valueId)\n .filter(Boolean)));\n for (const output of block.outputValues) output.ref = resolveRef(output.ref);\n const concreteMerges = Array.from(mergeValues.values())\n .filter((value) => value.blockId === block.id && !aliases.has(value.id))\n .map((value) => value.id);\n if (block.mergeSite)\n {\n block.mergeSite.valueIds = concreteMerges;\n block.mergeSite.requiresRegisterMerge = concreteMerges.length > 0;\n }\n }\n\n program.values = values.filter((value) => value.origin !== \"block-input\" && !aliases.has(value.id));\n return program;\n}\n"],"names":["MUTABLE_REGISTER_FILES","Set","refKey","register","component","valueRef","value","valueId","id","isMutableRegister","has","slice","indexOf","replaceObjectRefs","object","replacements","key","ref","Object","entries","get","resolveRegisterFlow","program","values","blocksById","Map","blocks","map","block","placeholders","filter","origin","externalValues","mergeValues","entryBlockId","controlFlow","outputMaps","outputValues","entry","createValue","data","kind","length","push","externalRef","set","blockId","instructionIndex","writeMask","previous","resolveEntry","resolveExit","resolveRef","placeholder","local","mergeKey","predecessorIds","Array","from","predecessors","edge","reachable","sort","a","b","index","includesProgramEntry","incomingCount","merge","incoming","predecessorId","aliases","canonicalRef","current","seen","add","changed","refs","unique","instruction","instructions","read","dataflow","reads","write","writes","result","inputValueIds","Boolean","output","concreteMerges","mergeSite","valueIds","requiresRegisterMerge"],"mappings":"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"}
@@ -0,0 +1,61 @@
1
+ const DOT_LANES = Object.freeze({
2
+ dp2: Object.freeze(["x", "y"]),
3
+ dp3: Object.freeze(["x", "y", "z"]),
4
+ dp4: Object.freeze(["x", "y", "z", "w"])
5
+ });
6
+ const XY = Object.freeze(["x", "y"]);
7
+ const XYZ = Object.freeze(["x", "y", "z"]);
8
+ function sampledResourceDimension(instruction, program) {
9
+ const resource = instruction.operands?.[2];
10
+ if (!program || !resource) return null;
11
+ const reference = resource.resourceReference;
12
+ const binding = (program.bindings || []).find(entry => entry.resourceKind === "sampled-resource" && (reference?.rangeId !== null && reference?.rangeId !== undefined ? entry.range?.rangeId === reference.rangeId : entry.registerIndex === resource.registerIndex));
13
+ return binding?.resourceDimension || null;
14
+ }
15
+ function sampleCoordinateLanes(instruction, program) {
16
+ return ["texturecube", "texture3d", "texture2darray"].includes(sampledResourceDimension(instruction, program)) ? XYZ : XY;
17
+ }
18
+ function sampleGradientLanes(instruction, program) {
19
+ return ["texturecube", "texture3d"].includes(sampledResourceDimension(instruction, program)) ? XYZ : XY;
20
+ }
21
+ function loadAddressLanes(instruction, program) {
22
+ const dimension = sampledResourceDimension(instruction, program);
23
+ if (dimension === "buffer") return ["x"];
24
+ if (dimension === "texture2d") return ["x", "y", "w"];
25
+ return null;
26
+ }
27
+
28
+ /**
29
+ * Returns intrinsic source-lane positions for instructions whose inputs are
30
+ * independent of the destination write mask.
31
+ *
32
+ * @param {object} instruction Decoded/IR instruction.
33
+ * @param {number} operandIndex Operand index within the instruction.
34
+ * @param {object} [program] Shader IR, used to resolve sampled-resource dimension.
35
+ * @returns {Array<string>|null} Fixed x/y/z/w positions, when applicable.
36
+ */
37
+ function fixedSourceLanes(instruction, operandIndex, program = null) {
38
+ const dot = DOT_LANES[instruction.opcodeName];
39
+ if (dot && operandIndex > 0) return dot;
40
+ if (instruction.opcodeName === "ld" && operandIndex === 1) return loadAddressLanes(instruction, program);
41
+ if (instruction.opcodeName === "store_uav_typed" && operandIndex === 1) return ["x"];
42
+ if (instruction.opcodeName === "ld_structured" && operandIndex === 1) return ["x"];
43
+ if (instruction.opcodeName === "store_structured") {
44
+ if ([1, 2].includes(operandIndex)) return ["x"];
45
+ if (operandIndex === 3) {
46
+ const mask = Array.from(instruction.operands?.[0]?.mask || "");
47
+ return mask.length ? mask : null;
48
+ }
49
+ }
50
+ if (["sample", "sample_b", "sample_c", "sample_c_lz", "sample_d", "sample_l", "gather4"].includes(instruction.opcodeName)) {
51
+ if (operandIndex === 1) return sampleCoordinateLanes(instruction, program);
52
+ if (instruction.opcodeName === "sample_d" && [4, 5].includes(operandIndex)) {
53
+ return sampleGradientLanes(instruction, program);
54
+ }
55
+ if (["sample_b", "sample_c", "sample_l"].includes(instruction.opcodeName) && operandIndex === 4) return ["x"];
56
+ }
57
+ return null;
58
+ }
59
+
60
+ export { fixedSourceLanes };
61
+ //# sourceMappingURL=sourceLanes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sourceLanes.js","sources":["../../../../../../src/formats/webgpu/core/ir/sourceLanes.js"],"sourcesContent":["const DOT_LANES = Object.freeze({\n dp2: Object.freeze([ \"x\", \"y\" ]),\n dp3: Object.freeze([ \"x\", \"y\", \"z\" ]),\n dp4: Object.freeze([ \"x\", \"y\", \"z\", \"w\" ])\n});\n\nconst XY = Object.freeze([ \"x\", \"y\" ]);\nconst XYZ = Object.freeze([ \"x\", \"y\", \"z\" ]);\n\nfunction sampledResourceDimension(instruction, program)\n{\n const resource = instruction.operands?.[2];\n if (!program || !resource) return null;\n const reference = resource.resourceReference;\n const binding = (program.bindings || []).find((entry) => entry.resourceKind === \"sampled-resource\"\n && (reference?.rangeId !== null && reference?.rangeId !== undefined\n ? entry.range?.rangeId === reference.rangeId\n : entry.registerIndex === resource.registerIndex));\n return binding?.resourceDimension || null;\n}\n\nfunction sampleCoordinateLanes(instruction, program)\n{\n return [ \"texturecube\", \"texture3d\", \"texture2darray\" ]\n .includes(sampledResourceDimension(instruction, program))\n ? XYZ\n : XY;\n}\n\nfunction sampleGradientLanes(instruction, program)\n{\n return [ \"texturecube\", \"texture3d\" ].includes(sampledResourceDimension(instruction, program))\n ? XYZ\n : XY;\n}\n\nfunction loadAddressLanes(instruction, program)\n{\n const dimension = sampledResourceDimension(instruction, program);\n if (dimension === \"buffer\") return [ \"x\" ];\n if (dimension === \"texture2d\") return [ \"x\", \"y\", \"w\" ];\n return null;\n}\n\n/**\n * Returns intrinsic source-lane positions for instructions whose inputs are\n * independent of the destination write mask.\n *\n * @param {object} instruction Decoded/IR instruction.\n * @param {number} operandIndex Operand index within the instruction.\n * @param {object} [program] Shader IR, used to resolve sampled-resource dimension.\n * @returns {Array<string>|null} Fixed x/y/z/w positions, when applicable.\n */\nexport function fixedSourceLanes(instruction, operandIndex, program = null)\n{\n const dot = DOT_LANES[instruction.opcodeName];\n if (dot && operandIndex > 0) return dot;\n if (instruction.opcodeName === \"ld\" && operandIndex === 1) return loadAddressLanes(instruction, program);\n if (instruction.opcodeName === \"store_uav_typed\" && operandIndex === 1) return [ \"x\" ];\n if (instruction.opcodeName === \"ld_structured\" && operandIndex === 1) return [ \"x\" ];\n if (instruction.opcodeName === \"store_structured\")\n {\n if ([ 1, 2 ].includes(operandIndex)) return [ \"x\" ];\n if (operandIndex === 3)\n {\n const mask = Array.from(instruction.operands?.[0]?.mask || \"\");\n return mask.length ? mask : null;\n }\n }\n if ([ \"sample\", \"sample_b\", \"sample_c\", \"sample_c_lz\", \"sample_d\", \"sample_l\", \"gather4\" ]\n .includes(instruction.opcodeName))\n {\n if (operandIndex === 1) return sampleCoordinateLanes(instruction, program);\n if (instruction.opcodeName === \"sample_d\" && [ 4, 5 ].includes(operandIndex))\n {\n return sampleGradientLanes(instruction, program);\n }\n if ([ \"sample_b\", \"sample_c\", \"sample_l\" ].includes(instruction.opcodeName) && operandIndex === 4) return [ \"x\" ];\n }\n return null;\n}\n"],"names":["DOT_LANES","Object","freeze","dp2","dp3","dp4","XY","XYZ","sampledResourceDimension","instruction","program","resource","operands","reference","resourceReference","binding","bindings","find","entry","resourceKind","rangeId","undefined","range","registerIndex","resourceDimension","sampleCoordinateLanes","includes","sampleGradientLanes","loadAddressLanes","dimension","fixedSourceLanes","operandIndex","dot","opcodeName","mask","Array","from","length"],"mappings":"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"}