@carbonenginejs/runtime 0.1.0-alpha.4 → 0.1.0-alpha.5

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 (384) hide show
  1. package/dist/global/blue/BlueClasses.js +200 -0
  2. package/dist/global/blue/BlueClasses.js.map +1 -0
  3. package/dist/global/blue/IBlueClasses.js +79 -0
  4. package/dist/global/blue/IBlueClasses.js.map +1 -0
  5. package/dist/global/blue/IBlueDynamicResourceConstructor.js +16 -0
  6. package/dist/global/blue/IBlueDynamicResourceConstructor.js.map +1 -1
  7. package/dist/global/blue/blue.js +8 -2
  8. package/dist/global/blue/blue.js.map +1 -1
  9. package/dist/global/blue/index.js +2 -0
  10. package/dist/global/blue/index.js.map +1 -1
  11. package/dist/global/consts/index.js +0 -1
  12. package/dist/global/consts/index.js.map +1 -1
  13. package/dist/global/consts/renderContext/formats.js +26 -25
  14. package/dist/global/consts/renderContext/formats.js.map +1 -1
  15. package/dist/{trinityal/Tr2BitmapDimensions.js → global/imageio/BitmapDimensions.js} +19 -15
  16. package/dist/global/imageio/BitmapDimensions.js.map +1 -0
  17. package/dist/global/imageio/Cutout.js +28 -0
  18. package/dist/global/imageio/Cutout.js.map +1 -0
  19. package/dist/global/imageio/HostBitmap.js +1106 -0
  20. package/dist/global/imageio/HostBitmap.js.map +1 -0
  21. package/dist/global/imageio/ImageIOResult.js +99 -0
  22. package/dist/global/imageio/ImageIOResult.js.map +1 -0
  23. package/dist/global/imageio/ImageUtility.js +205 -0
  24. package/dist/global/imageio/ImageUtility.js.map +1 -0
  25. package/dist/global/imageio/LoadParameters.js +86 -0
  26. package/dist/global/imageio/LoadParameters.js.map +1 -0
  27. package/dist/global/imageio/Metadata.js +22 -0
  28. package/dist/global/imageio/Metadata.js.map +1 -0
  29. package/dist/global/imageio/index.js +8 -0
  30. package/dist/global/{consts/webgpu → imageio}/index.js.map +1 -1
  31. package/dist/global/index.js +2 -1
  32. package/dist/global/index.js.map +1 -1
  33. package/dist/global/math/color.js +1 -1
  34. package/dist/global/math/color.js.map +1 -1
  35. package/dist/global/schema/CjsSchema.js +8 -0
  36. package/dist/global/schema/CjsSchema.js.map +1 -1
  37. package/dist/index.js +12 -4
  38. package/dist/index.js.map +1 -1
  39. package/dist/resource/CjsResMan.js +47 -7
  40. package/dist/resource/CjsResMan.js.map +1 -1
  41. package/dist/resource/Tr2LightProfileRes.js +37 -0
  42. package/dist/resource/Tr2LightProfileRes.js.map +1 -1
  43. package/dist/resource/format/CjsByteWriter.js +46 -46
  44. package/dist/resource/format/CjsByteWriter.js.map +1 -1
  45. package/dist/resource/format/CjsFormat.js +7 -8
  46. package/dist/resource/format/CjsFormat.js.map +1 -1
  47. package/dist/resource/format/CjsFormatStore.js +8 -8
  48. package/dist/resource/format/CjsFormatStore.js.map +1 -1
  49. package/dist/resource/format/CjsGeometryFormat.js +114 -0
  50. package/dist/resource/format/CjsGeometryFormat.js.map +1 -0
  51. package/dist/resource/format/CjsImageFormat.js +282 -0
  52. package/dist/resource/format/CjsImageFormat.js.map +1 -0
  53. package/dist/resource/format/CjsResourceProbe.js +12 -48
  54. package/dist/resource/format/CjsResourceProbe.js.map +1 -1
  55. package/dist/resource/format/CjsStringTable.js +37 -37
  56. package/dist/resource/format/CjsStringTable.js.map +1 -1
  57. package/dist/resource/format/carbonEffect/CjsCarbonEffectReader.js +10 -10
  58. package/dist/resource/format/carbonEffect/CjsCarbonEffectReader.js.map +1 -1
  59. package/dist/resource/format/carbonEffect/CjsCarbonEffectWriter.js +37 -37
  60. package/dist/resource/format/carbonEffect/CjsCarbonEffectWriter.js.map +1 -1
  61. package/dist/resource/format/carbonEffect/carbonEffectBackendBlock.js +35 -7
  62. package/dist/resource/format/carbonEffect/carbonEffectBackendBlock.js.map +1 -1
  63. package/dist/resource/format/index.js +3 -1
  64. package/dist/resource/format/index.js.map +1 -1
  65. package/dist/resource/formats/black/CjsBlackFormat.js +130 -137
  66. package/dist/resource/formats/black/CjsBlackFormat.js.map +1 -1
  67. package/dist/resource/formats/bnk/CjsBnkFormat.js +12 -19
  68. package/dist/resource/formats/bnk/CjsBnkFormat.js.map +1 -1
  69. package/dist/resource/formats/bnk/core/helpers.js +1 -3
  70. package/dist/resource/formats/bnk/core/helpers.js.map +1 -1
  71. package/dist/resource/formats/cmf/CjsCmfFormat.js +19 -82
  72. package/dist/resource/formats/cmf/CjsCmfFormat.js.map +1 -1
  73. package/dist/resource/formats/cmf/core/constants.js +1 -2
  74. package/dist/resource/formats/cmf/core/constants.js.map +1 -1
  75. package/dist/resource/formats/{stl/core/targets.js → cmf/core/flatShared.js} +9 -8
  76. package/dist/resource/formats/cmf/core/flatShared.js.map +1 -0
  77. package/dist/resource/formats/cmf/core/helpers.js +13 -13
  78. package/dist/resource/formats/cmf/core/helpers.js.map +1 -1
  79. package/dist/resource/formats/cmf/core/writer.js +24 -24
  80. package/dist/resource/formats/cmf/core/writer.js.map +1 -1
  81. package/dist/resource/formats/dds/CjsDdsFormat.js +134 -17
  82. package/dist/resource/formats/dds/CjsDdsFormat.js.map +1 -1
  83. package/dist/resource/formats/dds/core/helpers.js +125 -40
  84. package/dist/resource/formats/dds/core/helpers.js.map +1 -1
  85. package/dist/resource/formats/dxbc/CjsDxbcFormat.js +14 -16
  86. package/dist/resource/formats/dxbc/CjsDxbcFormat.js.map +1 -1
  87. package/dist/resource/formats/dxbc/core/{container.js → DxbcContainer.js} +2 -2
  88. package/dist/resource/formats/dxbc/core/DxbcContainer.js.map +1 -0
  89. package/dist/resource/formats/dxbc/core/{errors.js → DxbcReadError.js} +1 -1
  90. package/dist/resource/formats/dxbc/core/DxbcReadError.js.map +1 -0
  91. package/dist/resource/formats/dxbc/core/DxbcReader.js +1 -1
  92. package/dist/resource/formats/dxbc/core/DxbcReader.js.map +1 -1
  93. package/dist/resource/formats/dxbc/core/{program.js → DxbcShaderProgram.js} +2 -2
  94. package/dist/resource/formats/dxbc/core/DxbcShaderProgram.js.map +1 -0
  95. package/dist/resource/formats/dxbc/core/{signature.js → DxbcSignatureChunk.js} +2 -2
  96. package/dist/resource/formats/dxbc/core/DxbcSignatureChunk.js.map +1 -0
  97. package/dist/resource/formats/dxbc/core/decoder.js +2 -2
  98. package/dist/resource/formats/dxbc/core/decoder.js.map +1 -1
  99. package/dist/resource/formats/dxbc/core/helpers.js +3 -3
  100. package/dist/resource/formats/dxbc/core/helpers.js.map +1 -1
  101. package/dist/resource/formats/fbx/CjsFbxFormat.js +18 -20
  102. package/dist/resource/formats/fbx/CjsFbxFormat.js.map +1 -1
  103. package/dist/resource/formats/flac/CjsFlacFormat.js +7 -13
  104. package/dist/resource/formats/flac/CjsFlacFormat.js.map +1 -1
  105. package/dist/resource/formats/fsd/32/CjsFsd32Format.js +29 -29
  106. package/dist/resource/formats/fsd/32/CjsFsd32Format.js.map +1 -1
  107. package/dist/resource/formats/fsd/64/CjsFsd64Format.js +3 -3
  108. package/dist/resource/formats/fsd/64/CjsFsd64Format.js.map +1 -1
  109. package/dist/resource/formats/fsd/64/core/CjsFsd64Binary.js +23 -23
  110. package/dist/resource/formats/fsd/64/core/CjsFsd64Binary.js.map +1 -1
  111. package/dist/resource/formats/fsd/64/core/CjsFsd64Reader.js +8 -8
  112. package/dist/resource/formats/fsd/64/core/CjsFsd64Reader.js.map +1 -1
  113. package/dist/resource/formats/fsd/CjsFsdFormat.js +23 -23
  114. package/dist/resource/formats/fsd/CjsFsdFormat.js.map +1 -1
  115. package/dist/resource/formats/gif/CjsGifFormat.js +24 -15
  116. package/dist/resource/formats/gif/CjsGifFormat.js.map +1 -1
  117. package/dist/resource/formats/gltf/CjsGltfFormat.js +33 -98
  118. package/dist/resource/formats/gltf/CjsGltfFormat.js.map +1 -1
  119. package/dist/resource/formats/gltf/core/helpers.js +3 -12
  120. package/dist/resource/formats/gltf/core/helpers.js.map +1 -1
  121. package/dist/resource/formats/gr2/CjsGr2Format.js +27 -91
  122. package/dist/resource/formats/gr2/CjsGr2Format.js.map +1 -1
  123. package/dist/resource/formats/hlsl/CjsHlslFormat.js +22 -25
  124. package/dist/resource/formats/hlsl/CjsHlslFormat.js.map +1 -1
  125. package/dist/resource/formats/hlsl/core/carbonDescriptionToRuntime.js +1 -1
  126. package/dist/resource/formats/hlsl/core/carbonDescriptionToRuntime.js.map +1 -1
  127. package/dist/resource/formats/hlsl/core/tr2/shader/HlslEffectStageInput.js +3 -3
  128. package/dist/resource/formats/hlsl/core/tr2/shader/HlslEffectStageInput.js.map +1 -1
  129. package/dist/resource/formats/ies/CjsIESFormat.js +29 -29
  130. package/dist/resource/formats/ies/CjsIESFormat.js.map +1 -1
  131. package/dist/resource/formats/jpeg/CjsJpegFormat.js +24 -15
  132. package/dist/resource/formats/jpeg/CjsJpegFormat.js.map +1 -1
  133. package/dist/resource/formats/jpeg/core/helpers.js +3 -5
  134. package/dist/resource/formats/jpeg/core/helpers.js.map +1 -1
  135. package/dist/resource/formats/jpeg/core/jpeg.js +58 -58
  136. package/dist/resource/formats/jpeg/core/jpeg.js.map +1 -1
  137. package/dist/resource/formats/jsonl/CjsJsonlFormat.js +3 -3
  138. package/dist/resource/formats/jsonl/CjsJsonlFormat.js.map +1 -1
  139. package/dist/resource/formats/mp3/CjsMp3Format.js +7 -14
  140. package/dist/resource/formats/mp3/CjsMp3Format.js.map +1 -1
  141. package/dist/resource/formats/mp3/core/helpers.js +3 -5
  142. package/dist/resource/formats/mp3/core/helpers.js.map +1 -1
  143. package/dist/resource/formats/mp4/CjsMp4Format.js +7 -13
  144. package/dist/resource/formats/mp4/CjsMp4Format.js.map +1 -1
  145. package/dist/resource/formats/mp4/core/helpers.js +3 -5
  146. package/dist/resource/formats/mp4/core/helpers.js.map +1 -1
  147. package/dist/resource/formats/obj/CjsObjFormat.js +92 -157
  148. package/dist/resource/formats/obj/CjsObjFormat.js.map +1 -1
  149. package/dist/resource/formats/obj/core/helpers.js +5 -113
  150. package/dist/resource/formats/obj/core/helpers.js.map +1 -1
  151. package/dist/resource/formats/ogg/CjsOggFormat.js +7 -14
  152. package/dist/resource/formats/ogg/CjsOggFormat.js.map +1 -1
  153. package/dist/resource/formats/pickle/CjsPickleFormat.js +7 -12
  154. package/dist/resource/formats/pickle/CjsPickleFormat.js.map +1 -1
  155. package/dist/resource/formats/pickle/core/CjsPickleProtocol0Reader.js +7 -7
  156. package/dist/resource/formats/pickle/core/CjsPickleProtocol0Reader.js.map +1 -1
  157. package/dist/resource/formats/pickle/core/CjsPickleProtocol4Reader.js +7 -7
  158. package/dist/resource/formats/pickle/core/CjsPickleProtocol4Reader.js.map +1 -1
  159. package/dist/resource/formats/png/CjsPngFormat.js +40 -15
  160. package/dist/resource/formats/png/CjsPngFormat.js.map +1 -1
  161. package/dist/resource/formats/png/core/helpers.js +4 -6
  162. package/dist/resource/formats/png/core/helpers.js.map +1 -1
  163. package/dist/resource/formats/red/CjsRedFormat.js +22 -28
  164. package/dist/resource/formats/red/CjsRedFormat.js.map +1 -1
  165. package/dist/resource/formats/schemabound/CjsSchemaBoundFormat.js +3 -7
  166. package/dist/resource/formats/schemabound/CjsSchemaBoundFormat.js.map +1 -1
  167. package/dist/resource/formats/schemabound/core/schemaBoundValues.js +5 -0
  168. package/dist/resource/formats/schemabound/core/schemaBoundValues.js.map +1 -1
  169. package/dist/resource/formats/sqlite/CjsSqliteFormat.js +4 -9
  170. package/dist/resource/formats/sqlite/CjsSqliteFormat.js.map +1 -1
  171. package/dist/resource/formats/static/CjsStaticFormat.js +4 -4
  172. package/dist/resource/formats/static/CjsStaticFormat.js.map +1 -1
  173. package/dist/resource/formats/stl/CjsStlFormat.js +39 -104
  174. package/dist/resource/formats/stl/CjsStlFormat.js.map +1 -1
  175. package/dist/resource/formats/stl/core/helpers.js +5 -19
  176. package/dist/resource/formats/stl/core/helpers.js.map +1 -1
  177. package/dist/resource/formats/tga/CjsTgaFormat.js +26 -15
  178. package/dist/resource/formats/tga/CjsTgaFormat.js.map +1 -1
  179. package/dist/resource/formats/tga/core/helpers.js +3 -5
  180. package/dist/resource/formats/tga/core/helpers.js.map +1 -1
  181. package/dist/resource/formats/vta/CjsVtaFormat.js +8 -15
  182. package/dist/resource/formats/vta/CjsVtaFormat.js.map +1 -1
  183. package/dist/resource/formats/wav/CjsWavFormat.js +7 -14
  184. package/dist/resource/formats/wav/CjsWavFormat.js.map +1 -1
  185. package/dist/resource/formats/wav/core/helpers.js +3 -5
  186. package/dist/resource/formats/wav/core/helpers.js.map +1 -1
  187. package/dist/resource/formats/webgl/CjsWebglFormat.js +103 -105
  188. package/dist/resource/formats/webgl/CjsWebglFormat.js.map +1 -1
  189. package/dist/resource/formats/webgl/core/{errors.js → WebglReadError.js} +1 -1
  190. package/dist/resource/formats/webgl/core/WebglReadError.js.map +1 -0
  191. package/dist/resource/formats/webgl/core/effectPackage.js +1 -1
  192. package/dist/resource/formats/webgl/core/effectPackage.js.map +1 -1
  193. package/dist/resource/formats/webgl/core/glsl/DxbcGlslEmitter.js +3 -3
  194. package/dist/resource/formats/webgl/core/glsl/DxbcGlslEmitter.js.map +1 -1
  195. package/dist/resource/formats/webgl/core/glsl/{DxbcGlslHelpers.js → DxbcGlslHelperRegistry.js} +2 -2
  196. package/dist/resource/formats/webgl/core/glsl/DxbcGlslHelperRegistry.js.map +1 -0
  197. package/dist/resource/formats/webgl/core/glsl/DxbcGlslOperandFormatter.js +1 -1
  198. package/dist/resource/formats/webgl/core/glsl/DxbcGlslOperandFormatter.js.map +1 -1
  199. package/dist/resource/formats/webgl/core/glslBackendBlock.js +1 -1
  200. package/dist/resource/formats/webgl/core/glslBackendBlock.js.map +1 -1
  201. package/dist/resource/formats/webgl/core/helpers.js.map +1 -1
  202. package/dist/resource/formats/webgpu/CjsWebgpuFormat.js +28 -29
  203. package/dist/resource/formats/webgpu/CjsWebgpuFormat.js.map +1 -1
  204. package/dist/resource/formats/webgpu/core/{errors.js → WebgpuReadError.js} +1 -1
  205. package/dist/resource/formats/webgpu/core/WebgpuReadError.js.map +1 -0
  206. package/dist/resource/formats/webgpu/core/carbonWebgpu/validateContainer.js +1 -1
  207. package/dist/resource/formats/webgpu/core/carbonWebgpu/validateContainer.js.map +1 -1
  208. package/dist/resource/formats/webgpu/core/helpers.js +1 -1
  209. package/dist/resource/formats/webgpu/core/helpers.js.map +1 -1
  210. package/dist/resource/formats/webgpu/core/ir/lowerDxbcToIr.js +1 -1
  211. package/dist/resource/formats/webgpu/core/ir/lowerDxbcToIr.js.map +1 -1
  212. package/dist/resource/formats/webgpu/core/wgsl/buildWgslSet.js +18 -6
  213. package/dist/resource/formats/webgpu/core/wgsl/buildWgslSet.js.map +1 -1
  214. package/dist/resource/formats/webgpu/core/wgsl/lowerBindingLayout.js +39 -13
  215. package/dist/resource/formats/webgpu/core/wgsl/lowerBindingLayout.js.map +1 -1
  216. package/dist/resource/formats/webgpu/core/wgsl/lowerCreateHistogramsComputeProgram.js +16 -14
  217. package/dist/resource/formats/webgpu/core/wgsl/lowerCreateHistogramsComputeProgram.js.map +1 -1
  218. package/dist/resource/formats/webm/CjsWebmFormat.js +8 -13
  219. package/dist/resource/formats/webm/CjsWebmFormat.js.map +1 -1
  220. package/dist/resource/formats/webm/core/helpers.js +3 -5
  221. package/dist/resource/formats/webm/core/helpers.js.map +1 -1
  222. package/dist/resource/formats/webp/CjsWebpFormat.js +8 -12
  223. package/dist/resource/formats/webp/CjsWebpFormat.js.map +1 -1
  224. package/dist/resource/formats/wem/CjsWemFormat.js +9 -17
  225. package/dist/resource/formats/wem/CjsWemFormat.js.map +1 -1
  226. package/dist/resource/formats/wem/core/bitStream.js +35 -35
  227. package/dist/resource/formats/wem/core/bitStream.js.map +1 -1
  228. package/dist/resource/formats/wem/core/helpers.js +1 -3
  229. package/dist/resource/formats/wem/core/helpers.js.map +1 -1
  230. package/dist/resource/formats/yaml/CjsYamlFormat.js +28 -37
  231. package/dist/resource/formats/yaml/CjsYamlFormat.js.map +1 -1
  232. package/dist/resource/imageio/ImageIO.js +142 -0
  233. package/dist/resource/imageio/ImageIO.js.map +1 -0
  234. package/dist/resource/imageio/index.js +17 -0
  235. package/dist/resource/imageio/index.js.map +1 -0
  236. package/dist/resource/index.js +7 -0
  237. package/dist/resource/index.js.map +1 -1
  238. package/dist/resource/shader/reflection/Tr2EffectResource.js +24 -2
  239. package/dist/resource/shader/reflection/Tr2EffectResource.js.map +1 -1
  240. package/dist/resource/shader/reflection/Tr2Pass.js +76 -5
  241. package/dist/resource/shader/reflection/Tr2Pass.js.map +1 -1
  242. package/dist/resource/texture/CjsTextureArrayConstructor.js +97 -0
  243. package/dist/resource/texture/CjsTextureArrayConstructor.js.map +1 -0
  244. package/dist/resource/texture/CjsTexturePackConstructor.js +160 -0
  245. package/dist/resource/texture/CjsTexturePackConstructor.js.map +1 -0
  246. package/dist/resource/texture/CjsTexturePipelineStepArray.js +72 -0
  247. package/dist/resource/texture/CjsTexturePipelineStepArray.js.map +1 -0
  248. package/dist/resource/texture/CjsTexturePipelineStepConvert.js +73 -0
  249. package/dist/resource/texture/CjsTexturePipelineStepConvert.js.map +1 -0
  250. package/dist/resource/texture/CjsTexturePipelineStepPack.js +71 -0
  251. package/dist/resource/texture/CjsTexturePipelineStepPack.js.map +1 -0
  252. package/dist/resource/texture/CjsTexturePipelineStepResize.js +123 -0
  253. package/dist/resource/texture/CjsTexturePipelineStepResize.js.map +1 -0
  254. package/dist/resource/texture/SolidColorTextureConstructor.js +11 -1
  255. package/dist/resource/texture/SolidColorTextureConstructor.js.map +1 -1
  256. package/dist/resource/texture/Tr2ImageRes.js +100 -68
  257. package/dist/resource/texture/Tr2ImageRes.js.map +1 -1
  258. package/dist/resource/texture/Tr2TexturePipeline.js +45 -25
  259. package/dist/resource/texture/Tr2TexturePipeline.js.map +1 -1
  260. package/dist/resource/texture/Tr2TexturePipelineStepCompress.js +34 -1
  261. package/dist/resource/texture/Tr2TexturePipelineStepCompress.js.map +1 -1
  262. package/dist/resource/texture/Tr2TexturePipelineStepGenerateMips.js +30 -3
  263. package/dist/resource/texture/Tr2TexturePipelineStepGenerateMips.js.map +1 -1
  264. package/dist/resource/texture/Tr2TexturePipelineStepLimitSize.js +81 -1
  265. package/dist/resource/texture/Tr2TexturePipelineStepLimitSize.js.map +1 -1
  266. package/dist/resource/texture/Tr2TexturePipelineStepLoad.js +36 -1
  267. package/dist/resource/texture/Tr2TexturePipelineStepLoad.js.map +1 -1
  268. package/dist/resource/texture/Tr2TexturePipelineStepPack.js +146 -24
  269. package/dist/resource/texture/Tr2TexturePipelineStepPack.js.map +1 -1
  270. package/dist/resource/texture/TriTextureRes.js +151 -29
  271. package/dist/resource/texture/TriTextureRes.js.map +1 -1
  272. package/dist/resource/texture/index.js +7 -0
  273. package/dist/resource/texture/index.js.map +1 -1
  274. package/dist/resource/texture/registerTextureResources.js +83 -0
  275. package/dist/resource/texture/registerTextureResources.js.map +1 -0
  276. package/dist/resource/texture/solidColorTexture.js +10 -19
  277. package/dist/resource/texture/solidColorTexture.js.map +1 -1
  278. package/dist/sof/EveSOF.js +39 -7
  279. package/dist/sof/EveSOF.js.map +1 -1
  280. package/dist/trinity/core/Tr2GpuResourcePool/Tr2GpuResourcePool.js +2 -2
  281. package/dist/trinity/core/Tr2GpuResourcePool/Tr2GpuResourcePool.js.map +1 -1
  282. package/dist/trinity/core/Tr2ImageIOHelpers.js +80 -17
  283. package/dist/trinity/core/Tr2ImageIOHelpers.js.map +1 -1
  284. package/dist/trinity/core/Tr2RenderUtils.js +1 -1
  285. package/dist/trinity/core/Tr2TextureArray/Tr2TextureArray.js +49 -62
  286. package/dist/trinity/core/Tr2TextureArray/Tr2TextureArray.js.map +1 -1
  287. package/dist/trinity/core/Tr2TextureReference.js +114 -0
  288. package/dist/trinity/core/Tr2TextureReference.js.map +1 -0
  289. package/dist/trinity/core/device/Tr2DepthStencil.js +2 -2
  290. package/dist/trinity/core/device/Tr2DepthStencil.js.map +1 -1
  291. package/dist/trinity/core/device/Tr2RingBuffer/Tr2RingBuffer.js +1 -1
  292. package/dist/trinity/core/index.js +1 -0
  293. package/dist/trinity/core/index.js.map +1 -1
  294. package/dist/trinity/core/lighting/Tr2LightManager.js +5 -4
  295. package/dist/trinity/core/lighting/Tr2LightManager.js.map +1 -1
  296. package/dist/trinity/core/procedural/GradientTextureConstructor.js +5 -4
  297. package/dist/trinity/core/procedural/GradientTextureConstructor.js.map +1 -1
  298. package/dist/trinity/core/procedural/gradientTexture.js +10 -13
  299. package/dist/trinity/core/procedural/gradientTexture.js.map +1 -1
  300. package/dist/trinity/core/volumetrics/Tr2VolumetricsRenderer.js +1 -1
  301. package/dist/trinity/core/volumetrics/Tr2VolumetricsRenderer.js.map +1 -1
  302. package/dist/trinity/eve/EveImpactOverlay.js +102 -50
  303. package/dist/trinity/eve/EveImpactOverlay.js.map +1 -1
  304. package/dist/trinity/eve/EveModularObjectModifier.js +9 -18
  305. package/dist/trinity/eve/EveModularObjectModifier.js.map +1 -1
  306. package/dist/trinity/eve/attachment/turrets/EveTurretSet.js +175 -157
  307. package/dist/trinity/eve/attachment/turrets/EveTurretSet.js.map +1 -1
  308. package/dist/trinity/eve/attachment/turrets/EveTurretTarget.js +100 -83
  309. package/dist/trinity/eve/attachment/turrets/EveTurretTarget.js.map +1 -1
  310. package/dist/trinity/eve/child/EveChildInstancedMeshes/EveChildInstancedMesh.js +26 -20
  311. package/dist/trinity/eve/child/EveChildInstancedMeshes/EveChildInstancedMesh.js.map +1 -1
  312. package/dist/trinity/eve/child/EveChildInstancedMeshes/EveChildInstancedMeshes.js +368 -179
  313. package/dist/trinity/eve/child/EveChildInstancedMeshes/EveChildInstancedMeshes.js.map +1 -1
  314. package/dist/trinity/eve/child/EveChildMesh.js +242 -234
  315. package/dist/trinity/eve/child/EveChildMesh.js.map +1 -1
  316. package/dist/trinity/eve/child/EveChildTurret.js +57 -16
  317. package/dist/trinity/eve/child/EveChildTurret.js.map +1 -1
  318. package/dist/trinity/eve/child/EveSpaceObjectChild.js +28 -1
  319. package/dist/trinity/eve/child/EveSpaceObjectChild.js.map +1 -1
  320. package/dist/trinity/eve/index.js +2 -2
  321. package/dist/trinity/eve/overlays/EveDamageOverlay.js +5 -1
  322. package/dist/trinity/eve/overlays/EveDamageOverlay.js.map +1 -1
  323. package/dist/trinity/eve/scene/EveSpaceScene.js +234 -233
  324. package/dist/trinity/eve/scene/EveSpaceScene.js.map +1 -1
  325. package/dist/trinity/eve/scene/EveSpaceSceneRenderDriver.js +2 -0
  326. package/dist/trinity/eve/scene/EveSpaceSceneRenderDriver.js.map +1 -1
  327. package/dist/trinity/eve/spaceObject/EveSpaceObject2.js +492 -437
  328. package/dist/trinity/eve/spaceObject/EveSpaceObject2.js.map +1 -1
  329. package/dist/trinity/generated/index.js +0 -1
  330. package/dist/trinity/generated/index.js.map +1 -1
  331. package/dist/trinity/generated/trinityCore/index.js +0 -1
  332. package/dist/trinity/generated/trinityCore/index.js.map +1 -1
  333. package/dist/trinity/index.js +3 -3
  334. package/dist/trinity/particle/emitter/Tr2GpuSharedEmitter.js +10 -1
  335. package/dist/trinity/particle/emitter/Tr2GpuSharedEmitter.js.map +1 -1
  336. package/dist/trinity/shader/Tr2DataTextureManager.js +152 -66
  337. package/dist/trinity/shader/Tr2DataTextureManager.js.map +1 -1
  338. package/dist/trinity/shader/Tr2Material.js +1 -1
  339. package/dist/trinityal/Tr2HalHelperStructures/Tr2TextureSubresource.js +5 -5
  340. package/dist/trinityal/Tr2HalHelperStructures/Tr2TextureSubresource.js.map +1 -1
  341. package/dist/trinityal/index.js +1 -1
  342. package/dist/trinityal/stub/Tr2RenderContextALStub/Tr2RenderContextALStub.js +2 -2
  343. package/dist/trinityal/stub/Tr2RenderContextALStub/Tr2RenderContextALStub.js.map +1 -1
  344. package/dist/trinityal/stub/Tr2SwapChainALStub.js +45 -45
  345. package/dist/trinityal/stub/Tr2SwapChainALStub.js.map +1 -1
  346. package/dist/trinityal/stub/Tr2TextureALStub.js +170 -170
  347. package/dist/trinityal/stub/Tr2TextureALStub.js.map +1 -1
  348. package/dist/trinityal/webgpu/CjsWebgpuDevice.js +234 -164
  349. package/dist/trinityal/webgpu/CjsWebgpuDevice.js.map +1 -1
  350. package/dist/trinityal/webgpu/CjsWebgpuRenderContextAL.js +7 -0
  351. package/dist/trinityal/webgpu/CjsWebgpuRenderContextAL.js.map +1 -1
  352. package/dist/trinityal/webgpu/CjsWebgpuTextureAL.js +78 -14
  353. package/dist/trinityal/webgpu/CjsWebgpuTextureAL.js.map +1 -1
  354. package/dist/trinityal/webgpu/core/CjsWebgpuUtils.js +94 -0
  355. package/dist/trinityal/webgpu/core/CjsWebgpuUtils.js.map +1 -0
  356. package/dist/trinityal/webgpu/internal.js +1 -0
  357. package/dist/trinityal/webgpu/internal.js.map +1 -1
  358. package/docs/global/reference/classes/README.md +90 -0
  359. package/docs/resource/concepts/format-capabilities.md +3 -3
  360. package/docs/resource/formats/README.md +1 -1
  361. package/docs/resource/reference/classes/core.md +31 -1
  362. package/docs/resource/reference/classes/formats.md +7 -7
  363. package/docs/resource/reference/classes/resources.md +76 -16
  364. package/docs/trinity/reference/classes/generated.md +0 -10
  365. package/docs/trinity/reference/classes/trinity-core.md +1692 -1682
  366. package/docs/trinityal/reference/classes/README.md +0 -10
  367. package/docs/trinityal/webgpu/reference/classes/README.md +276 -266
  368. package/package.json +4 -3
  369. package/dist/global/consts/webgpu/index.js +0 -2
  370. package/dist/global/consts/webgpu/textureFormats.js +0 -180
  371. package/dist/global/consts/webgpu/textureFormats.js.map +0 -1
  372. package/dist/resource/formats/dxbc/core/container.js.map +0 -1
  373. package/dist/resource/formats/dxbc/core/errors.js.map +0 -1
  374. package/dist/resource/formats/dxbc/core/program.js.map +0 -1
  375. package/dist/resource/formats/dxbc/core/signature.js.map +0 -1
  376. package/dist/resource/formats/stl/core/targets.js.map +0 -1
  377. package/dist/resource/formats/webgl/core/errors.js.map +0 -1
  378. package/dist/resource/formats/webgl/core/glsl/DxbcGlslHelpers.js.map +0 -1
  379. package/dist/resource/formats/webgpu/core/errors.js.map +0 -1
  380. package/dist/resource/texture/texturePipelineBehavior.js +0 -332
  381. package/dist/resource/texture/texturePipelineBehavior.js.map +0 -1
  382. package/dist/trinity/generated/trinityCore/Tr2TextureReference.js +0 -40
  383. package/dist/trinity/generated/trinityCore/Tr2TextureReference.js.map +0 -1
  384. package/dist/trinityal/Tr2BitmapDimensions.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"CjsDxbcFormat.js","sources":["../../../../../src/resource/formats/dxbc/CjsDxbcFormat.js"],"sourcesContent":["import { CjsFormat } from \"../../format/CjsFormat.js\";\r\n/**\r\n * Exposed CarbonEngineJS-facing DXBC format class.\r\n *\r\n * Keep this file small and reviewable: container/signature/program parsing\r\n * and the instruction decoder live in core/; input/option normalization and\r\n * the shared read path live in core/helpers.js.\r\n */\r\n\r\nimport { DxbcContainer } from \"./core/container.js\";\r\nimport { disassembleInstructions } from \"./core/disassemble.js\";\r\nimport {\r\n DEFAULT_VALUES,\r\n OUTPUT_JSON,\r\n OUTPUT_RAW,\r\n inspectWithValues,\r\n normalizeValues,\r\n readWithValues,\r\n toJsonValue\r\n} from \"./core/helpers.js\";\r\n\r\nconst FORMAT_NAME = \"CjsDxbcFormat\";\r\n\r\n/**\r\n * Resolves whatever the caller has to the decoder record a listing needs.\r\n *\r\n * Callers reach disassembly from three places: raw bytes, the result of a\r\n * previous read they do not want to repeat, and a decoder they already hold\r\n * from an emitter. All three are accepted so the listing never costs a second\r\n * decode.\r\n *\r\n * @param {Uint8Array|ArrayBuffer|Buffer|DataView|object} input Bytes or record.\r\n * @param {object} options Format values for the byte path.\r\n * @returns {object} Record carrying an `instructions` array.\r\n */\r\nfunction resolveDecoderRecord(input, options)\r\n{\r\n if (input && typeof input === \"object\" && Array.isArray(input.instructions))\r\n {\r\n return input;\r\n }\r\n\r\n if (input && typeof input === \"object\" && input.decoder)\r\n {\r\n return input.decoder;\r\n }\r\n\r\n const result = readWithValues(input, normalizeValues(DEFAULT_VALUES, {\r\n ...options,\r\n emit: OUTPUT_RAW,\r\n decodeInstructions: true\r\n }, FORMAT_NAME));\r\n\r\n return result.decoder;\r\n}\r\n\r\n/**\r\n * CarbonEngineJS-facing DXBC (Direct3D shader bytecode) reader.\r\n *\r\n * The Cjs prefix marks this as a JavaScript format/construction boundary.\r\n * DXBC is Microsoft's compiled-shader container format; this reader has no\r\n * CCP/Carbon vocabulary. It parses the container, signatures and the\r\n * SM4/SM5 token stream, and emits plain JSON data by default or the raw\r\n * decoder objects for backends (GLSL/WGSL emitters) that want them.\r\n */\r\nexport class CjsDxbcFormat extends CjsFormat\r\n{\r\n\r\n #emit = DEFAULT_VALUES.emit;\r\n #source = DEFAULT_VALUES.source;\r\n #decodeInstructions = DEFAULT_VALUES.decodeInstructions;\r\n\r\n /**\r\n * Create a reusable format profile.\r\n *\r\n * @param {object} [options] Default format values.\r\n */\r\n constructor(options = {})\r\n {\r\n super();\r\n this.SetValues(options);\r\n }\r\n\r\n /**\r\n * Set format values for this reusable profile.\r\n *\r\n * @param {object} [options] Values to merge into the profile.\r\n * @returns {CjsDxbcFormat} This format profile.\r\n */\r\n SetValues(options = {})\r\n {\r\n const values = normalizeValues(this.GetValues(), options, FORMAT_NAME);\r\n\r\n this.#emit = values.emit;\r\n this.#source = values.source;\r\n this.#decodeInstructions = values.decodeInstructions;\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Get this profile's current values, optionally with per-call overrides.\r\n *\r\n * @param {object} [options] Optional values to merge into a copy.\r\n * @returns {object} A copy of the effective values.\r\n */\r\n GetValues(options = {})\r\n {\r\n return normalizeValues({\r\n emit: this.#emit,\r\n source: this.#source,\r\n decodeInstructions: this.#decodeInstructions\r\n }, options, FORMAT_NAME);\r\n }\r\n\r\n /**\r\n * Read a DXBC payload with this profile's values.\r\n *\r\n * @param {Uint8Array|ArrayBuffer|Buffer|DataView} input DXBC bytes.\r\n * @param {object} [options] Per-call value overrides.\r\n * @returns {object} Plain JSON data, or raw decoder objects when emit is \"raw\".\r\n */\r\n Read(input, options = {})\r\n {\r\n return readWithValues(input, this.GetValues(options));\r\n }\r\n\r\n /**\r\n * Inspect a DXBC payload without decoding instructions.\r\n *\r\n * @param {Uint8Array|ArrayBuffer|Buffer|DataView} input DXBC bytes.\r\n * @param {object} [options] Per-call value overrides.\r\n * @returns {object} Plain summary data.\r\n */\r\n Inspect(input, options = {})\r\n {\r\n return inspectWithValues(input, this.GetValues(options));\r\n }\r\n\r\n /**\r\n * Static payload sniff. Static methods use camelCase by convention.\r\n *\r\n * @param {Uint8Array|ArrayBuffer|Buffer|DataView} input Candidate bytes.\r\n * @returns {boolean} True when the payload starts with the DXBC magic.\r\n */\r\n static isDxbc(input)\r\n {\r\n try\r\n {\r\n return DxbcContainer.IsDxbc(input);\r\n }\r\n catch\r\n {\r\n return false;\r\n }\r\n }\r\n\r\n /**\r\n * Static one-shot read.\r\n *\r\n * @param {Uint8Array|ArrayBuffer|Buffer|DataView} input DXBC bytes.\r\n * @param {object} [options] Format values.\r\n * @returns {object} Plain JSON data, or raw decoder objects when emit is \"raw\".\r\n */\r\n static read(input, options = {})\r\n {\r\n return readWithValues(input, normalizeValues(DEFAULT_VALUES, options, FORMAT_NAME));\r\n }\r\n\r\n /**\r\n * Static one-shot inspection.\r\n *\r\n * @param {Uint8Array|ArrayBuffer|Buffer|DataView} input DXBC bytes.\r\n * @param {object} [options] Format values.\r\n * @returns {object} Plain summary data.\r\n */\r\n static inspect(input, options = {})\r\n {\r\n return inspectWithValues(input, normalizeValues(DEFAULT_VALUES, options, FORMAT_NAME));\r\n }\r\n\r\n /**\r\n * Static one-shot disassembly.\r\n *\r\n * A translated shader can only be judged against the bytecode it was\r\n * translated from, so the listing exists to be read beside emitted GLSL or\r\n * WGSL. Accepts DXBC bytes or an already-decoded result from `read`.\r\n *\r\n * @param {Uint8Array|ArrayBuffer|Buffer|DataView|object} input DXBC bytes,\r\n * a read result, or a decoder record.\r\n * @param {object} [options] Listing options plus format values.\r\n * @returns {string} Assembly listing.\r\n */\r\n static disassemble(input, options = {})\r\n {\r\n const decoder = resolveDecoderRecord(input, options);\r\n\r\n return disassembleInstructions(decoder, options);\r\n }\r\n\r\n /**\r\n * Static JSON-compatible conversion.\r\n *\r\n * @param {any} value Format output to convert.\r\n * @returns {any} Plain JSON-compatible data.\r\n */\r\n static toJSON(value)\r\n {\r\n return toJsonValue(value);\r\n }\r\n\r\n static OUTPUT_JSON = OUTPUT_JSON;\r\n static OUTPUT_RAW = OUTPUT_RAW;\r\n static id = \"dxbc\";\r\n static mediaTypes = Object.freeze([ \"shader\" ]);\r\n static outputs = CjsFormat.defineOutputs({\r\n json: { default: true, decoded: true },\r\n raw: { role: \"debug\", decoded: true }\r\n });\r\n static extensions = Object.freeze([]);\r\n\r\n}\r\n\r\nexport default CjsDxbcFormat;\r\n"],"names":["FORMAT_NAME","resolveDecoderRecord","input","options","Array","isArray","instructions","decoder","result","readWithValues","normalizeValues","DEFAULT_VALUES","emit","OUTPUT_RAW","decodeInstructions","CjsDxbcFormat","CjsFormat","source","constructor","SetValues","values","GetValues","Read","Inspect","inspectWithValues","isDxbc","DxbcContainer","IsDxbc","read","inspect","disassemble","disassembleInstructions","toJSON","value","toJsonValue","OUTPUT_JSON","id","mediaTypes","Object","freeze","outputs","defineOutputs","json","default","decoded","raw","role","extensions"],"mappings":"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"}
1
+ {"version":3,"file":"CjsDxbcFormat.js","sources":["../../../../../src/resource/formats/dxbc/CjsDxbcFormat.js"],"sourcesContent":["import { CjsFormat } from \"../../format/CjsFormat.js\";\r\n/**\r\n * Exposed CarbonEngineJS-facing DXBC format class.\r\n *\r\n * Keep this file small and reviewable: container/signature/program parsing\r\n * and the instruction decoder live in core/; input/option normalization and\r\n * the shared read path live in core/helpers.js.\r\n */\r\n\r\nimport { DxbcContainer } from \"./core/DxbcContainer.js\";\r\nimport { disassembleInstructions } from \"./core/disassemble.js\";\r\nimport {\r\n DEFAULT_VALUES,\r\n OUTPUT_JSON,\r\n OUTPUT_RAW,\r\n inspectWithValues,\r\n normalizeValues,\r\n readWithValues,\r\n toJsonValue\r\n} from \"./core/helpers.js\";\r\n\r\nconst FORMAT_NAME = \"CjsDxbcFormat\";\r\n\r\n/**\r\n * Resolves whatever the caller has to the decoder record a listing needs.\r\n *\r\n * Callers reach disassembly from three places: raw bytes, the result of a\r\n * previous read they do not want to repeat, and a decoder they already hold\r\n * from an emitter. All three are accepted so the listing never costs a second\r\n * decode.\r\n *\r\n * @param {Uint8Array|ArrayBuffer|Buffer|DataView|object} input Bytes or record.\r\n * @param {object} options Format values for the byte path.\r\n * @returns {object} Record carrying an `instructions` array.\r\n */\r\nfunction resolveDecoderRecord(input, options)\r\n{\r\n if (input && typeof input === \"object\" && Array.isArray(input.instructions))\r\n {\r\n return input;\r\n }\r\n\r\n if (input && typeof input === \"object\" && input.decoder)\r\n {\r\n return input.decoder;\r\n }\r\n\r\n const result = readWithValues(input, normalizeValues(DEFAULT_VALUES, {\r\n ...options,\r\n emit: OUTPUT_RAW,\r\n decodeInstructions: true\r\n }, FORMAT_NAME));\r\n\r\n return result.decoder;\r\n}\r\n\r\n/**\r\n * CarbonEngineJS-facing DXBC (Direct3D shader bytecode) reader.\r\n *\r\n * The Cjs prefix marks this as a JavaScript format/construction boundary.\r\n * DXBC is Microsoft's compiled-shader container format; this reader has no\r\n * CCP/Carbon vocabulary. It parses the container, signatures and the\r\n * SM4/SM5 token stream, and emits plain JSON data by default or the raw\r\n * decoder objects for backends (GLSL/WGSL emitters) that want them.\r\n */\r\nexport class CjsDxbcFormat extends CjsFormat\r\n{\r\n\r\n _emit = DEFAULT_VALUES.emit;\r\n _source = DEFAULT_VALUES.source;\r\n _decodeInstructions = DEFAULT_VALUES.decodeInstructions;\r\n\r\n /**\r\n * Create a reusable format profile.\r\n *\r\n * @param {object} [options] Default format values.\r\n */\r\n constructor(options = {})\r\n {\r\n super();\r\n this.SetValues(options);\r\n }\r\n\r\n /**\r\n * Set format values for this reusable profile.\r\n *\r\n * @param {object} [options] Values to merge into the profile.\r\n * @returns {CjsDxbcFormat} This format profile.\r\n */\r\n SetValues(options = {})\r\n {\r\n const values = normalizeValues(this.GetValues(), options, FORMAT_NAME);\r\n\r\n this._emit = values.emit;\r\n this._source = values.source;\r\n this._decodeInstructions = values.decodeInstructions;\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Get this profile's current values, optionally with per-call overrides.\r\n *\r\n * @param {object} [options] Optional values to merge into a copy.\r\n * @returns {object} A copy of the effective values.\r\n */\r\n GetValues(options = {})\r\n {\r\n return normalizeValues({\r\n emit: this._emit,\r\n source: this._source,\r\n decodeInstructions: this._decodeInstructions\r\n }, options, FORMAT_NAME);\r\n }\r\n\r\n /**\r\n * Read a DXBC payload with this profile's values.\r\n *\r\n * @param {Uint8Array|ArrayBuffer|Buffer|DataView} input DXBC bytes.\r\n * @param {object} [options] Per-call value overrides.\r\n * @returns {object} Plain JSON data, or raw decoder objects when emit is \"raw\".\r\n */\r\n Read(input, options = {})\r\n {\r\n return readWithValues(input, this.GetValues(options));\r\n }\r\n\r\n /**\r\n * Inspect a DXBC payload without decoding instructions.\r\n *\r\n * @param {Uint8Array|ArrayBuffer|Buffer|DataView} input DXBC bytes.\r\n * @param {object} [options] Per-call value overrides.\r\n * @returns {object} Plain summary data.\r\n */\r\n Inspect(input, options = {})\r\n {\r\n return inspectWithValues(input, this.GetValues(options));\r\n }\r\n\r\n /**\r\n * Static payload sniff. Static methods use camelCase by convention.\r\n *\r\n * @param {Uint8Array|ArrayBuffer|Buffer|DataView} input Candidate bytes.\r\n * @returns {boolean} True when the payload starts with the DXBC magic.\r\n */\r\n static isDxbc(input)\r\n {\r\n try\r\n {\r\n return DxbcContainer.IsDxbc(input);\r\n }\r\n catch\r\n {\r\n return false;\r\n }\r\n }\r\n\r\n /**\r\n * Static one-shot read.\r\n *\r\n * @param {Uint8Array|ArrayBuffer|Buffer|DataView} input DXBC bytes.\r\n * @param {object} [options] Format values.\r\n * @returns {object} Plain JSON data, or raw decoder objects when emit is \"raw\".\r\n */\r\n static read(input, options = {})\r\n {\r\n return readWithValues(input, normalizeValues(DEFAULT_VALUES, options, FORMAT_NAME));\r\n }\r\n\r\n /**\r\n * Static one-shot inspection.\r\n *\r\n * @param {Uint8Array|ArrayBuffer|Buffer|DataView} input DXBC bytes.\r\n * @param {object} [options] Format values.\r\n * @returns {object} Plain summary data.\r\n */\r\n static inspect(input, options = {})\r\n {\r\n return inspectWithValues(input, normalizeValues(DEFAULT_VALUES, options, FORMAT_NAME));\r\n }\r\n\r\n /**\r\n * Static one-shot disassembly.\r\n *\r\n * A translated shader can only be judged against the bytecode it was\r\n * translated from, so the listing exists to be read beside emitted GLSL or\r\n * WGSL. Accepts DXBC bytes or an already-decoded result from `read`.\r\n *\r\n * @param {Uint8Array|ArrayBuffer|Buffer|DataView|object} input DXBC bytes,\r\n * a read result, or a decoder record.\r\n * @param {object} [options] Listing options plus format values.\r\n * @returns {string} Assembly listing.\r\n */\r\n static disassemble(input, options = {})\r\n {\r\n const decoder = resolveDecoderRecord(input, options);\r\n\r\n return disassembleInstructions(decoder, options);\r\n }\r\n\r\n /**\r\n * Static JSON-compatible conversion.\r\n *\r\n * @param {any} value Format output to convert.\r\n * @returns {any} Plain JSON-compatible data.\r\n */\r\n static toJSON(value)\r\n {\r\n return toJsonValue(value);\r\n }\r\n\r\n static id = \"CjsDxbcFormat\";\r\n static mediaTypes = [ \"shader\" ];\r\n static outputs = CjsFormat.defineOutputs({\r\n json: { default: true, decoded: true },\r\n raw: { role: \"debug\", decoded: true }\r\n });\r\n static extensions = [];\r\n\r\n}\r\n\r\nexport default CjsDxbcFormat;\r\n"],"names":["FORMAT_NAME","resolveDecoderRecord","input","options","Array","isArray","instructions","decoder","result","readWithValues","normalizeValues","DEFAULT_VALUES","emit","OUTPUT_RAW","decodeInstructions","CjsDxbcFormat","CjsFormat","_emit","_source","source","_decodeInstructions","constructor","SetValues","values","GetValues","Read","Inspect","inspectWithValues","isDxbc","DxbcContainer","IsDxbc","read","inspect","disassemble","disassembleInstructions","toJSON","value","toJsonValue","id","mediaTypes","outputs","defineOutputs","json","default","decoded","raw","role","extensions"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { asUint8Array } from '#utils/bytes';
2
2
  import { DxbcReader } from './DxbcReader.js';
3
- import { DxbcReadError } from './errors.js';
3
+ import { DxbcReadError } from './DxbcReadError.js';
4
4
 
5
5
  const DXBC_HEADER_SIZE = 32;
6
6
  const DXBC_CHUNK_HEADER_SIZE = 8;
@@ -166,4 +166,4 @@ class DxbcContainer {
166
166
  }
167
167
 
168
168
  export { DxbcContainer };
169
- //# sourceMappingURL=container.js.map
169
+ //# sourceMappingURL=DxbcContainer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DxbcContainer.js","sources":["../../../../../../src/resource/formats/dxbc/core/DxbcContainer.js"],"sourcesContent":["import { asUint8Array } from \"#utils/bytes\";\r\nimport { DxbcReader } from \"./DxbcReader.js\";\r\nimport { DxbcReadError } from \"./DxbcReadError.js\";\r\n\r\nconst DXBC_HEADER_SIZE = 32;\r\nconst DXBC_CHUNK_HEADER_SIZE = 8;\r\nconst DXBC_MAGIC = new Uint8Array([ 0x44, 0x58, 0x42, 0x43 ]);\r\n\r\nconst fourCCDecoder = new TextDecoder(\"latin1\");\r\n\r\n/**\r\n * DirectX shader bytecode container reader.\r\n *\r\n * Splits a DXBC blob into its chunk directory without interpreting chunk\r\n * payloads, so stripped containers (for example Carbon blobs without `RDEF`)\r\n * parse the same way as fully reflected ones.\r\n */\r\nexport class DxbcContainer\r\n{\r\n /**\r\n * Creates an empty container; call a read entry point to populate it from bytes.\r\n */\r\n constructor()\r\n {\r\n this.bytes = new Uint8Array(0);\r\n this.checksum = new Uint8Array(0);\r\n this.version = 0;\r\n this.totalSize = 0;\r\n this.chunks = [];\r\n this.source = \"memory\";\r\n }\r\n\r\n /**\r\n * Checks whether a byte payload starts with the DXBC container magic.\r\n *\r\n * @param {ArrayBuffer|ArrayBufferView|Uint8Array} bytes Candidate payload.\r\n * @returns {boolean} True when the payload looks like DXBC.\r\n */\r\n static IsDxbc(bytes)\r\n {\r\n const data = asUint8Array(bytes);\r\n return data.length >= DXBC_MAGIC.length && DXBC_MAGIC.every((byte, index) => data[index] === byte);\r\n }\r\n\r\n /**\r\n * Reads the container header and chunk directory.\r\n *\r\n * @param {ArrayBuffer|ArrayBufferView|Uint8Array} bytes DXBC payload.\r\n * @param {object} [options] Read options.\r\n * @param {string} [options.source] Source name used in error details.\r\n * @returns {DxbcContainer} This container.\r\n */\r\n Read(bytes, options = {})\r\n {\r\n this.bytes = asUint8Array(bytes);\r\n this.source = options.source || \"memory\";\r\n\r\n if (!DxbcContainer.IsDxbc(this.bytes))\r\n {\r\n throw new DxbcReadError(\"Missing DXBC container magic\", {\r\n source: this.source,\r\n length: this.bytes.length\r\n });\r\n }\r\n if (this.bytes.length < DXBC_HEADER_SIZE)\r\n {\r\n throw new DxbcReadError(\"DXBC payload is smaller than the container header\", {\r\n source: this.source,\r\n length: this.bytes.length\r\n });\r\n }\r\n\r\n const reader = new DxbcReader(this.bytes, { source: this.source, offset: DXBC_MAGIC.length });\r\n this.checksum = reader.ReadRaw(16).slice();\r\n this.version = reader.ReadUint32();\r\n this.totalSize = reader.ReadUint32();\r\n if (this.totalSize > this.bytes.length)\r\n {\r\n throw new DxbcReadError(\"DXBC container size exceeds the payload\", {\r\n source: this.source,\r\n totalSize: this.totalSize,\r\n length: this.bytes.length\r\n });\r\n }\r\n\r\n const chunkCount = reader.ReadUint32();\r\n if (DXBC_HEADER_SIZE + chunkCount * 4 > this.totalSize)\r\n {\r\n throw new DxbcReadError(\"DXBC chunk directory exceeds the container size\", {\r\n source: this.source,\r\n chunkCount,\r\n totalSize: this.totalSize\r\n });\r\n }\r\n\r\n this.chunks = [];\r\n for (let index = 0; index < chunkCount; index += 1)\r\n {\r\n const offset = reader.ReadUint32();\r\n this.chunks.push(this._readChunkAt(offset, index));\r\n }\r\n return this;\r\n }\r\n\r\n /**\r\n * Finds a chunk by its four-character code.\r\n *\r\n * @param {string} fourCC Chunk identifier such as `\"SHEX\"` or `\"ISGN\"`.\r\n * @returns {{fourCC:string,offset:number,size:number,bytes:Uint8Array}|null} Chunk record or null.\r\n */\r\n getChunk(fourCC)\r\n {\r\n return this.chunks.find((chunk) => chunk.fourCC === fourCC) || null;\r\n }\r\n\r\n /**\r\n * Returns serializable container metadata while omitting chunk payload bytes.\r\n *\r\n * @returns {object} JSON-safe container summary.\r\n */\r\n toJSON()\r\n {\r\n return {\r\n source: this.source,\r\n version: this.version,\r\n totalSize: this.totalSize,\r\n chunks: this.chunks.map(({ fourCC, offset, size }) => ({ fourCC, offset, size }))\r\n };\r\n }\r\n\r\n /**\r\n * Reads one chunk header and bounds-checks its payload.\r\n *\r\n * @param {number} offset Chunk offset from the container start.\r\n * @param {number} index Chunk directory index used in error details.\r\n * @returns {{fourCC:string,offset:number,size:number,bytes:Uint8Array}} Chunk record.\r\n * @private\r\n */\r\n _readChunkAt(offset, index)\r\n {\r\n if (offset + DXBC_CHUNK_HEADER_SIZE > this.totalSize)\r\n {\r\n throw new DxbcReadError(\"DXBC chunk header lies outside the container\", {\r\n source: this.source,\r\n chunkIndex: index,\r\n offset,\r\n totalSize: this.totalSize\r\n });\r\n }\r\n const reader = new DxbcReader(this.bytes, { source: this.source, offset });\r\n const fourCC = fourCCDecoder.decode(reader.ReadRaw(4));\r\n const size = reader.ReadUint32();\r\n if (offset + DXBC_CHUNK_HEADER_SIZE + size > this.totalSize)\r\n {\r\n throw new DxbcReadError(\"DXBC chunk payload lies outside the container\", {\r\n source: this.source,\r\n chunkIndex: index,\r\n fourCC,\r\n offset,\r\n size,\r\n totalSize: this.totalSize\r\n });\r\n }\r\n return {\r\n fourCC,\r\n offset,\r\n size,\r\n bytes: this.bytes.subarray(offset + DXBC_CHUNK_HEADER_SIZE, offset + DXBC_CHUNK_HEADER_SIZE + size)\r\n };\r\n }\r\n}\r\n"],"names":["DXBC_HEADER_SIZE","DXBC_CHUNK_HEADER_SIZE","DXBC_MAGIC","Uint8Array","fourCCDecoder","TextDecoder","DxbcContainer","constructor","bytes","checksum","version","totalSize","chunks","source","IsDxbc","data","asUint8Array","length","every","byte","index","Read","options","DxbcReadError","reader","DxbcReader","offset","ReadRaw","slice","ReadUint32","chunkCount","push","_readChunkAt","getChunk","fourCC","find","chunk","toJSON","map","size","chunkIndex","decode","subarray"],"mappings":"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"}
@@ -16,4 +16,4 @@ class DxbcReadError extends Error {
16
16
  }
17
17
 
18
18
  export { DxbcReadError };
19
- //# sourceMappingURL=errors.js.map
19
+ //# sourceMappingURL=DxbcReadError.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DxbcReadError.js","sources":["../../../../../../src/resource/formats/dxbc/core/DxbcReadError.js"],"sourcesContent":["/**\r\n * Error raised when DirectX shader bytecode cannot be decoded safely.\r\n */\r\nexport class DxbcReadError extends Error\r\n{\r\n /**\r\n * Creates a bytecode-read error with structured location details.\r\n *\r\n * @param {string} message Human-readable failure reason.\r\n * @param {object} [details] Extra reader state such as source, offset, or size.\r\n */\r\n constructor(message, details = {})\r\n {\r\n super(message);\r\n this.name = \"DxbcReadError\";\r\n this.details = details;\r\n }\r\n}\r\n"],"names":["DxbcReadError","Error","constructor","message","details","name"],"mappings":"AAAA;AACA;AACA;AACO,MAAMA,aAAa,SAASC,KAAK,CACxC;AACI;AACJ;AACA;AACA;AACA;AACA;AACIC,EAAAA,WAAWA,CAACC,OAAO,EAAEC,OAAO,GAAG,EAAE,EACjC;IACI,KAAK,CAACD,OAAO,CAAC;IACd,IAAI,CAACE,IAAI,GAAG,eAAe;IAC3B,IAAI,CAACD,OAAO,GAAGA,OAAO;AAC1B,EAAA;AACJ;;;;"}
@@ -1,5 +1,5 @@
1
1
  import { CjsByteReader } from '../../../format/CjsByteReader.js';
2
- import { DxbcReadError } from './errors.js';
2
+ import { DxbcReadError } from './DxbcReadError.js';
3
3
 
4
4
  /**
5
5
  * Little-endian binary reader for DirectX shader bytecode.
@@ -1 +1 @@
1
- {"version":3,"file":"DxbcReader.js","sources":["../../../../../../src/resource/formats/dxbc/core/DxbcReader.js"],"sourcesContent":["import { CjsByteReader } from \"../../../format/CjsByteReader.js\";\nimport { DxbcReadError } from \"./errors.js\";\n\n/**\n * Little-endian binary reader for DirectX shader bytecode.\n *\n * The implementation is `CjsByteReader` in `src/resource/format/`; this\n * subclass only supplies the error class and message this format reports.\n */\nexport class DxbcReader extends CjsByteReader\n{\n static ReadError = DxbcReadError;\n\n static endOfDataMessage = \"Unexpected end of effect data\";\n}\n\nexport default DxbcReader;\n"],"names":["DxbcReader","CjsByteReader","ReadError","DxbcReadError","endOfDataMessage"],"mappings":";;;AAGA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMA,UAAU,SAASC,aAAa,CAC7C;EACI,OAAOC,SAAS,GAAGC,aAAa;EAEhC,OAAOC,gBAAgB,GAAG,+BAA+B;AAC7D;;;;"}
1
+ {"version":3,"file":"DxbcReader.js","sources":["../../../../../../src/resource/formats/dxbc/core/DxbcReader.js"],"sourcesContent":["import { CjsByteReader } from \"../../../format/CjsByteReader.js\";\nimport { DxbcReadError } from \"./DxbcReadError.js\";\n\n/**\n * Little-endian binary reader for DirectX shader bytecode.\n *\n * The implementation is `CjsByteReader` in `src/resource/format/`; this\n * subclass only supplies the error class and message this format reports.\n */\nexport class DxbcReader extends CjsByteReader\n{\n static ReadError = DxbcReadError;\n\n static endOfDataMessage = \"Unexpected end of effect data\";\n}\n\nexport default DxbcReader;\n"],"names":["DxbcReader","CjsByteReader","ReadError","DxbcReadError","endOfDataMessage"],"mappings":";;;AAGA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMA,UAAU,SAASC,aAAa,CAC7C;EACI,OAAOC,SAAS,GAAGC,aAAa;EAEhC,OAAOC,gBAAgB,GAAG,+BAA+B;AAC7D;;;;"}
@@ -1,4 +1,4 @@
1
- import { DxbcReadError } from './errors.js';
1
+ import { DxbcReadError } from './DxbcReadError.js';
2
2
 
3
3
  /**
4
4
  * Program type names indexed by the SM4/SM5 version-token program-type field.
@@ -88,4 +88,4 @@ class DxbcShaderProgram {
88
88
  }
89
89
 
90
90
  export { DxbcProgramTypeNames, DxbcShaderProgram };
91
- //# sourceMappingURL=program.js.map
91
+ //# sourceMappingURL=DxbcShaderProgram.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DxbcShaderProgram.js","sources":["../../../../../../src/resource/formats/dxbc/core/DxbcShaderProgram.js"],"sourcesContent":["import { DxbcReadError } from \"./DxbcReadError.js\";\r\n\r\n/**\r\n * Program type names indexed by the SM4/SM5 version-token program-type field.\r\n */\r\nexport const DxbcProgramTypeNames = Object.freeze([\r\n \"pixel\",\r\n \"vertex\",\r\n \"geometry\",\r\n \"hull\",\r\n \"domain\",\r\n \"compute\"\r\n]);\r\n\r\n/**\r\n * DXBC shader program chunk reader for `SHEX`/`SHDR` token streams.\r\n *\r\n * Decodes the version header and exposes the raw instruction tokens for the\r\n * translator stages that follow. Token interpretation stays out of this class\r\n * so container inspection never depends on opcode coverage.\r\n */\r\nexport class DxbcShaderProgram\r\n{\r\n /**\r\n * Creates an empty shader program; call a read entry point to populate its version, stage, and instructions.\r\n */\r\n constructor()\r\n {\r\n this.fourCC = \"\";\r\n this.majorVersion = 0;\r\n this.minorVersion = 0;\r\n this.programType = 0;\r\n this.programTypeName = \"unknown\";\r\n this.lengthDwords = 0;\r\n this.tokens = new Uint32Array(0);\r\n this.source = \"memory\";\r\n }\r\n\r\n /**\r\n * Reads the program version header and copies the aligned token stream.\r\n *\r\n * @param {{fourCC:string,bytes:Uint8Array}} chunk Chunk record from `DxbcContainer`.\r\n * @param {object} [options] Read options.\r\n * @param {string} [options.source] Source name used in error details.\r\n * @returns {DxbcShaderProgram} This program.\r\n */\r\n Read(chunk, options = {})\r\n {\r\n this.fourCC = chunk.fourCC;\r\n this.source = options.source || \"memory\";\r\n const bytes = chunk.bytes;\r\n if (bytes.length < 8)\r\n {\r\n throw new DxbcReadError(\"DXBC shader chunk is smaller than the program header\", {\r\n source: this.source,\r\n fourCC: this.fourCC,\r\n chunkSize: bytes.length\r\n });\r\n }\r\n\r\n const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);\r\n const versionToken = view.getUint32(0, true);\r\n this.minorVersion = versionToken & 0xf;\r\n this.majorVersion = (versionToken >>> 4) & 0xf;\r\n this.programType = (versionToken >>> 16) & 0xffff;\r\n this.programTypeName = DxbcProgramTypeNames[this.programType] || \"unknown\";\r\n this.lengthDwords = view.getUint32(4, true);\r\n if (this.lengthDwords < 2 || this.lengthDwords * 4 > bytes.length)\r\n {\r\n throw new DxbcReadError(\"DXBC program length disagrees with the chunk size\", {\r\n source: this.source,\r\n fourCC: this.fourCC,\r\n lengthDwords: this.lengthDwords,\r\n chunkSize: bytes.length\r\n });\r\n }\r\n\r\n // Copy through DataView so unaligned subarrays and big-endian hosts both decode correctly.\r\n this.tokens = new Uint32Array(this.lengthDwords);\r\n for (let index = 0; index < this.lengthDwords; index += 1)\r\n {\r\n this.tokens[index] = view.getUint32(index * 4, true);\r\n }\r\n return this;\r\n }\r\n\r\n /**\r\n * Returns serializable program metadata while omitting the token stream.\r\n *\r\n * @returns {object} JSON-safe program summary.\r\n */\r\n toJSON()\r\n {\r\n return {\r\n fourCC: this.fourCC,\r\n majorVersion: this.majorVersion,\r\n minorVersion: this.minorVersion,\r\n programType: this.programType,\r\n programTypeName: this.programTypeName,\r\n lengthDwords: this.lengthDwords\r\n };\r\n }\r\n}\r\n"],"names":["DxbcProgramTypeNames","Object","freeze","DxbcShaderProgram","constructor","fourCC","majorVersion","minorVersion","programType","programTypeName","lengthDwords","tokens","Uint32Array","source","Read","chunk","options","bytes","length","DxbcReadError","chunkSize","view","DataView","buffer","byteOffset","byteLength","versionToken","getUint32","index","toJSON"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { DxbcReader } from './DxbcReader.js';
2
- import { DxbcReadError } from './errors.js';
2
+ import { DxbcReadError } from './DxbcReadError.js';
3
3
 
4
4
  const SIGNATURE_TABLE_HEADER_SIZE = 8;
5
5
  const semanticNameDecoder = new TextDecoder("latin1");
@@ -169,4 +169,4 @@ class DxbcSignatureChunk {
169
169
  }
170
170
 
171
171
  export { DxbcComponentTypeNames, DxbcSignatureChunk };
172
- //# sourceMappingURL=signature.js.map
172
+ //# sourceMappingURL=DxbcSignatureChunk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DxbcSignatureChunk.js","sources":["../../../../../../src/resource/formats/dxbc/core/DxbcSignatureChunk.js"],"sourcesContent":["import { DxbcReader } from \"./DxbcReader.js\";\r\nimport { DxbcReadError } from \"./DxbcReadError.js\";\r\n\r\nconst SIGNATURE_TABLE_HEADER_SIZE = 8;\r\n\r\nconst semanticNameDecoder = new TextDecoder(\"latin1\");\r\n\r\n/**\r\n * Per-fourCC signature element layouts.\r\n *\r\n * `ISGN`/`OSGN`/`PCSG` use the 24-byte Shader Model 4 layout. `OSG5` prefixes\r\n * a stream index. `ISG1`/`OSG1`/`PSG1` prefix a stream index and append a\r\n * minimum-precision field.\r\n */\r\nconst SIGNATURE_ELEMENT_LAYOUTS = Object.freeze({\r\n ISGN: { stride: 24, hasStream: false, hasMinPrecision: false },\r\n OSGN: { stride: 24, hasStream: false, hasMinPrecision: false },\r\n PCSG: { stride: 24, hasStream: false, hasMinPrecision: false },\r\n OSG5: { stride: 28, hasStream: true, hasMinPrecision: false },\r\n ISG1: { stride: 32, hasStream: true, hasMinPrecision: true },\r\n OSG1: { stride: 32, hasStream: true, hasMinPrecision: true },\r\n PSG1: { stride: 32, hasStream: true, hasMinPrecision: true }\r\n});\r\n\r\n/**\r\n * Register component type names indexed by DXBC signature component-type ids.\r\n */\r\nexport const DxbcComponentTypeNames = Object.freeze([ \"unknown\", \"uint32\", \"int32\", \"float32\" ]);\r\n\r\n/**\r\n * DXBC input/output signature chunk reader for `ISGN`-family chunks.\r\n */\r\nexport class DxbcSignatureChunk\r\n{\r\n /**\r\n * Creates an empty signature chunk; call a read entry point to populate its parameter records.\r\n */\r\n constructor()\r\n {\r\n this.fourCC = \"\";\r\n this.elements = [];\r\n this.source = \"memory\";\r\n }\r\n\r\n /**\r\n * Reads a signature chunk payload into semantic/register element records.\r\n *\r\n * @param {{fourCC:string,bytes:Uint8Array}} chunk Chunk record from `DxbcContainer`.\r\n * @param {object} [options] Read options.\r\n * @param {string} [options.source] Source name used in error details.\r\n * @returns {DxbcSignatureChunk} This signature.\r\n */\r\n Read(chunk, options = {})\r\n {\r\n this.fourCC = chunk.fourCC;\r\n this.source = options.source || \"memory\";\r\n const layout = SIGNATURE_ELEMENT_LAYOUTS[this.fourCC];\r\n if (!layout)\r\n {\r\n throw new DxbcReadError(\"Unsupported DXBC signature chunk\", {\r\n source: this.source,\r\n fourCC: this.fourCC\r\n });\r\n }\r\n\r\n const bytes = chunk.bytes;\r\n const reader = new DxbcReader(bytes, { source: this.source });\r\n const elementCount = reader.ReadUint32();\r\n const elementOffset = reader.ReadUint32() || SIGNATURE_TABLE_HEADER_SIZE;\r\n if (elementOffset + elementCount * layout.stride > bytes.length)\r\n {\r\n throw new DxbcReadError(\"DXBC signature elements lie outside the chunk\", {\r\n source: this.source,\r\n fourCC: this.fourCC,\r\n elementCount,\r\n elementOffset,\r\n chunkSize: bytes.length\r\n });\r\n }\r\n\r\n this.elements = [];\r\n reader.offset = elementOffset;\r\n for (let index = 0; index < elementCount; index += 1)\r\n {\r\n const stream = layout.hasStream ? reader.ReadUint32() : 0;\r\n const semanticNameOffset = reader.ReadUint32();\r\n const semanticIndex = reader.ReadUint32();\r\n const systemValueType = reader.ReadUint32();\r\n const componentType = reader.ReadUint32();\r\n const registerIndex = reader.ReadUint32();\r\n const mask = reader.ReadUint8();\r\n const readWriteMask = reader.ReadUint8();\r\n reader.Skip(2);\r\n const minPrecision = layout.hasMinPrecision ? reader.ReadUint32() : 0;\r\n\r\n this.elements.push({\r\n semanticName: this._readSemanticName(bytes, semanticNameOffset, index),\r\n semanticIndex,\r\n systemValueType,\r\n componentType,\r\n componentTypeName: DxbcComponentTypeNames[componentType] || \"unknown\",\r\n registerIndex,\r\n mask,\r\n readWriteMask,\r\n stream,\r\n minPrecision\r\n });\r\n }\r\n return this;\r\n }\r\n\r\n /**\r\n * Finds a signature element by semantic name and index.\r\n *\r\n * @param {string} semanticName Case-insensitive semantic name such as `\"TEXCOORD\"`.\r\n * @param {number} [semanticIndex] Semantic index, defaulting to 0.\r\n * @returns {object|null} Element record or null.\r\n */\r\n findElement(semanticName, semanticIndex = 0)\r\n {\r\n const wanted = String(semanticName).toUpperCase();\r\n return this.elements.find(\r\n (element) => element.semanticName.toUpperCase() === wanted && element.semanticIndex === semanticIndex\r\n ) || null;\r\n }\r\n\r\n /**\r\n * Resolves a null-terminated semantic name inside the chunk payload.\r\n *\r\n * @param {Uint8Array} bytes Chunk payload.\r\n * @param {number} offset Name offset relative to the chunk payload start.\r\n * @param {number} index Element index used in error details.\r\n * @returns {string} Decoded semantic name.\r\n * @private\r\n */\r\n _readSemanticName(bytes, offset, index)\r\n {\r\n if (offset >= bytes.length)\r\n {\r\n throw new DxbcReadError(\"DXBC signature semantic name lies outside the chunk\", {\r\n source: this.source,\r\n fourCC: this.fourCC,\r\n elementIndex: index,\r\n offset,\r\n chunkSize: bytes.length\r\n });\r\n }\r\n let end = offset;\r\n while (end < bytes.length && bytes[end] !== 0)\r\n {\r\n end += 1;\r\n }\r\n return semanticNameDecoder.decode(bytes.subarray(offset, end));\r\n }\r\n}\r\n"],"names":["SIGNATURE_TABLE_HEADER_SIZE","semanticNameDecoder","TextDecoder","SIGNATURE_ELEMENT_LAYOUTS","Object","freeze","ISGN","stride","hasStream","hasMinPrecision","OSGN","PCSG","OSG5","ISG1","OSG1","PSG1","DxbcComponentTypeNames","DxbcSignatureChunk","constructor","fourCC","elements","source","Read","chunk","options","layout","DxbcReadError","bytes","reader","DxbcReader","elementCount","ReadUint32","elementOffset","length","chunkSize","offset","index","stream","semanticNameOffset","semanticIndex","systemValueType","componentType","registerIndex","mask","ReadUint8","readWriteMask","Skip","minPrecision","push","semanticName","_readSemanticName","componentTypeName","findElement","wanted","String","toUpperCase","find","element","elementIndex","end","decode","subarray"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { DxbcReadError } from './errors.js';
1
+ import { DxbcReadError } from './DxbcReadError.js';
2
2
  import { dxbcOpcodeName, DxbcOpcodeNames, DXBC_OPCODE_CUSTOMDATA, dxbcIsDeclarationOpcode, DxbcBooleanTestOpcodeNames } from './opcodes.js';
3
3
 
4
4
  const COMPONENTS = ["x", "y", "z", "w"];
@@ -213,7 +213,7 @@ class DxbcInstructionDecoder {
213
213
  /**
214
214
  * Decodes every instruction in a shader program token stream.
215
215
  *
216
- * @param {import("./program.js").DxbcShaderProgram} program Parsed `SHEX`/`SHDR` program.
216
+ * @param {import("./DxbcShaderProgram.js").DxbcShaderProgram} program Parsed `SHEX`/`SHDR` program.
217
217
  * @param {object} [options] Decode options.
218
218
  * @param {string} [options.source] Source name used in error details.
219
219
  * @returns {DxbcInstructionDecoder} This decoder.
@@ -1 +1 @@
1
- {"version":3,"file":"decoder.js","sources":["../../../../../../src/resource/formats/dxbc/core/decoder.js"],"sourcesContent":["import { DxbcReadError } from \"./errors.js\";\r\nimport {\r\n DXBC_OPCODE_CUSTOMDATA,\r\n DxbcBooleanTestOpcodeNames,\r\n DxbcOpcodeNames,\r\n dxbcIsDeclarationOpcode,\r\n dxbcOpcodeName\r\n} from \"./opcodes.js\";\r\n\r\nconst COMPONENTS = [ \"x\", \"y\", \"z\", \"w\" ];\r\n\r\n/**\r\n * Operand register-file names indexed by the operand-token type field.\r\n */\r\nexport const DxbcOperandTypeNames = Object.freeze([\r\n \"temp\", \"input\", \"output\", \"indexable_temp\", \"immediate32\", \"immediate64\",\r\n \"sampler\", \"resource\", \"constant_buffer\", \"immediate_constant_buffer\",\r\n \"label\", \"input_primitive_id\", \"output_depth\", \"null\", \"rasterizer\",\r\n \"output_coverage\", \"stream\", \"function_body\", \"function_table\", \"interface\",\r\n \"function_input\", \"function_output\", \"output_control_point_id\",\r\n \"input_fork_instance_id\", \"input_join_instance_id\", \"input_control_point\",\r\n \"output_control_point\", \"input_patch_constant\", \"input_domain_point\",\r\n \"this_pointer\", \"uav\", \"thread_group_shared_memory\", \"input_thread_id\",\r\n \"input_thread_group_id\", \"input_thread_id_in_group\", \"input_coverage_mask\",\r\n \"input_thread_id_in_group_flattened\", \"input_gs_instance_id\",\r\n \"output_depth_greater_equal\", \"output_depth_less_equal\", \"cycle_counter\"\r\n]);\r\n\r\n/**\r\n * Operand modifier names indexed by the extended-operand modifier field.\r\n */\r\nexport const DxbcOperandModifierNames = Object.freeze([ \"none\", \"neg\", \"abs\", \"absneg\" ]);\r\n\r\n/**\r\n * System-value names indexed by DXBC name-token values.\r\n */\r\nexport const DxbcSystemValueNames = Object.freeze([\r\n \"undefined\", \"position\", \"clip_distance\", \"cull_distance\",\r\n \"render_target_array_index\", \"viewport_array_index\", \"vertex_id\",\r\n \"primitive_id\", \"instance_id\", \"is_front_face\", \"sample_index\"\r\n]);\r\n\r\n/**\r\n * Resource dimension names indexed by declaration resource-dimension ids.\r\n */\r\nexport const DxbcResourceDimensionNames = Object.freeze([\r\n \"unknown\", \"buffer\", \"texture1d\", \"texture2d\", \"texture2dms\", \"texture3d\",\r\n \"texturecube\", \"texture1darray\", \"texture2darray\", \"texture2dmsarray\",\r\n \"texturecubearray\", \"raw_buffer\", \"structured_buffer\"\r\n]);\r\n\r\n/**\r\n * Resource return-type names indexed by return-type nibble values.\r\n */\r\nexport const DxbcResourceReturnTypeNames = Object.freeze([\r\n \"unknown\", \"unorm\", \"snorm\", \"sint\", \"uint\", \"float\", \"mixed\", \"double\",\r\n \"continued\"\r\n]);\r\n\r\nconst RESINFO_RETURN_TYPE_NAMES = [ \"float\", \"rcpfloat\", \"uint\" ];\r\nconst SAMPLER_MODE_NAMES = [ \"default\", \"comparison\", \"mono\" ];\r\nconst INTERPOLATION_MODE_NAMES = [\r\n \"undefined\", \"constant\", \"linear\", \"linear_centroid\", \"linear_noperspective\",\r\n \"linear_noperspective_centroid\", \"linear_sample\", \"linear_noperspective_sample\"\r\n];\r\nconst MIN_PRECISION_NAMES = [ \"default\", \"float_16\", \"float_2_8\", \"reserved\", \"sint_16\", \"uint_16\" ];\r\nconst CUSTOM_DATA_CLASS_NAMES = [\r\n \"comment\", \"debug_info\", \"opaque\", \"dcl_immediate_constant_buffer\",\r\n \"shader_message\"\r\n];\r\nconst SYNC_FLAG_NAMES = [\r\n \"threads_in_group\",\r\n \"thread_group_shared_memory\",\r\n \"thread_group_uav_memory\",\r\n \"global_uav_memory\"\r\n];\r\n\r\nconst SM51_RESOURCE_OPERAND_TYPES = new Set([ 6, 7, 8, 30 ]);\r\nconst SM51_UNBOUNDED_REGISTER = 0xffffffff;\r\n\r\nfunction signExtend4(value)\r\n{\r\n return (value & 0x8) ? value - 0x10 : value;\r\n}\r\n\r\nfunction maskToComponents(mask)\r\n{\r\n return COMPONENTS.filter((_, index) => (mask & (1 << index)) !== 0).join(\"\");\r\n}\r\n\r\n/**\r\n * Decodes an opcode-extension token (`sample_controls`, `resource_dimension`,\r\n * or `resource_return_type`).\r\n *\r\n * @param {number} token Extension token.\r\n * @returns {object} Decoded extension record.\r\n */\r\nfunction decodeOpcodeExtension(token)\r\n{\r\n const type = token & 0x3f;\r\n const out = { token, type };\r\n if (type === 1)\r\n {\r\n out.typeName = \"sample_controls\";\r\n out.sampleOffsets = {\r\n u: signExtend4((token >>> 9) & 0xf),\r\n v: signExtend4((token >>> 13) & 0xf),\r\n w: signExtend4((token >>> 17) & 0xf)\r\n };\r\n }\r\n else if (type === 2)\r\n {\r\n out.typeName = \"resource_dimension\";\r\n out.resourceDimension = (token >>> 6) & 0x1f;\r\n out.resourceDimensionName = DxbcResourceDimensionNames[out.resourceDimension] || \"unknown\";\r\n out.structureStride = (token >>> 11) & 0xfff;\r\n }\r\n else if (type === 3)\r\n {\r\n out.typeName = \"resource_return_type\";\r\n out.resourceReturnTypes = [ 0, 1, 2, 3 ].map((coord) => (token >>> (coord * 4 + 6)) & 0xf);\r\n }\r\n else\r\n {\r\n out.typeName = type === 0 ? \"empty\" : `extended_opcode_${type}`;\r\n }\r\n return out;\r\n}\r\n\r\n/**\r\n * Decodes a standalone resource return-type token (four nibbles from bit 0).\r\n *\r\n * @param {number} token Return-type token.\r\n * @returns {{token:number,returnTypes:number[],returnTypeNames:string[]}} Decoded record.\r\n */\r\nfunction decodeReturnTypeToken(token)\r\n{\r\n const returnTypes = [ 0, 1, 2, 3 ].map((coord) => (token >>> (coord * 4)) & 0xf);\r\n return {\r\n token,\r\n returnTypes,\r\n returnTypeNames: returnTypes.map((value) => DxbcResourceReturnTypeNames[value] || `return_type_${value}`)\r\n };\r\n}\r\n\r\nfunction decodeSm51BindingRange(operand, registerSpace, fail)\r\n{\r\n if (operand.indices.length !== 3)\r\n {\r\n throw fail(\"SM5.1 resource declaration must use a 3D binding-range operand\", {\r\n indexDimension: operand.indices.length\r\n });\r\n }\r\n\r\n const values = operand.indices.map((index) =>\r\n {\r\n if (index.representation !== 0 || index.values.length !== 1 || index.relative)\r\n {\r\n throw fail(\"SM5.1 binding-range indices must be immediate32 values\", {\r\n dimension: index.dimension,\r\n representation: index.representation\r\n });\r\n }\r\n return index.values[0];\r\n });\r\n const [ rangeId, lowerBound, upperBound ] = values;\r\n const unbounded = upperBound === SM51_UNBOUNDED_REGISTER;\r\n if (!unbounded && upperBound < lowerBound)\r\n {\r\n throw fail(\"SM5.1 binding range has an upper bound below its lower bound\", {\r\n rangeId,\r\n lowerBound,\r\n upperBound\r\n });\r\n }\r\n\r\n return {\r\n bindingModel: \"sm5.1-range\",\r\n rangeId,\r\n lowerBound,\r\n upperBound,\r\n unbounded,\r\n registerCount: unbounded ? null : upperBound - lowerBound + 1,\r\n registerSpace\r\n };\r\n}\r\n\r\nfunction decodeSm51ResourceReference(operand)\r\n{\r\n if (!SM51_RESOURCE_OPERAND_TYPES.has(operand.type) || operand.indices.length === 0)\r\n {\r\n return null;\r\n }\r\n\r\n const reference = {\r\n bindingModel: \"sm5.1-range\",\r\n rangeId: operand.indices[0]?.values[0] ?? null,\r\n nonUniform: operand.nonUniform,\r\n absoluteIndex: null,\r\n bufferIndex: null,\r\n vectorOffset: null\r\n };\r\n if (operand.type === 8)\r\n {\r\n reference.bufferIndex = operand.indices[1] || null;\r\n reference.vectorOffset = operand.indices[2] || null;\r\n }\r\n else\r\n {\r\n reference.absoluteIndex = operand.indices[1] || null;\r\n }\r\n return reference;\r\n}\r\n\r\nfunction decodeThreadGroupSharedMemoryRegister(operand, fail)\r\n{\r\n if (operand.typeName !== \"thread_group_shared_memory\")\r\n {\r\n throw fail(\"DXBC thread-group shared-memory declaration must use a thread-group shared-memory operand\", {\r\n operandType: operand.type,\r\n operandTypeName: operand.typeName\r\n });\r\n }\r\n if (operand.componentCount !== 0)\r\n {\r\n throw fail(\"DXBC thread-group shared-memory declaration operand must not select components\", {\r\n componentCount: operand.componentCount,\r\n selectionModeName: operand.selectionModeName\r\n });\r\n }\r\n if ((operand.token & 0xfff) !== 0\r\n || (operand.token & 0x7e000000) !== 0\r\n || (operand.token >>> 31) !== 0\r\n || operand.modifierName !== \"none\"\r\n || operand.minPrecisionName !== \"default\"\r\n || operand.nonUniform)\r\n {\r\n throw fail(\"DXBC thread-group shared-memory declaration operand must be unmodified\", {\r\n token: operand.token,\r\n modifierName: operand.modifierName,\r\n minPrecisionName: operand.minPrecisionName,\r\n nonUniform: operand.nonUniform\r\n });\r\n }\r\n if (operand.indices.length !== 1)\r\n {\r\n throw fail(\"DXBC thread-group shared-memory declaration must use a 1D register operand\", {\r\n indexDimension: operand.indices.length\r\n });\r\n }\r\n\r\n const index = operand.indices[0];\r\n if (index.representation !== 0 || index.values.length !== 1 || index.relative)\r\n {\r\n throw fail(\"DXBC thread-group shared-memory register index must be an immediate32 value\", {\r\n representation: index.representation\r\n });\r\n }\r\n if (operand.length !== 2)\r\n {\r\n throw fail(\"DXBC thread-group shared-memory declaration operand has an unsupported encoding\", {\r\n length: operand.length\r\n });\r\n }\r\n return index.values[0];\r\n}\r\n\r\nfunction requirePositiveDwordAligned(value, fieldName, fail)\r\n{\r\n if (value === 0 || (value & 0x3) !== 0)\r\n {\r\n throw fail(`DXBC thread-group shared-memory ${fieldName} must be a positive multiple of 4`, {\r\n [fieldName]: value\r\n });\r\n }\r\n return value;\r\n}\r\n\r\n/**\r\n * SM4/SM5 instruction-stream decoder over a `DxbcShaderProgram` token array.\r\n *\r\n * Executable instructions decode strictly: operands must consume the exact\r\n * instruction length or the decoder throws. Declarations decode the payloads\r\n * the vertex/pixel corpus uses and keep any remaining dwords as `tailTokens`\r\n * so unusual stages stay inspectable without failing the framing walk.\r\n */\r\nexport class DxbcInstructionDecoder\r\n{\r\n /**\r\n * Creates an empty instruction decoder; call a read entry point to decode a token stream.\r\n */\r\n constructor()\r\n {\r\n this.tokens = new Uint32Array(0);\r\n this.instructions = [];\r\n this.source = \"memory\";\r\n }\r\n\r\n /**\r\n * Decodes every instruction in a shader program token stream.\r\n *\r\n * @param {import(\"./program.js\").DxbcShaderProgram} program Parsed `SHEX`/`SHDR` program.\r\n * @param {object} [options] Decode options.\r\n * @param {string} [options.source] Source name used in error details.\r\n * @returns {DxbcInstructionDecoder} This decoder.\r\n */\r\n Decode(program, options = {})\r\n {\r\n this.tokens = program.tokens;\r\n this.source = options.source || program.source || \"memory\";\r\n this.programType = program.programType;\r\n this.programTypeName = program.programTypeName;\r\n this.majorVersion = program.majorVersion;\r\n this.minorVersion = program.minorVersion;\r\n this.instructions = [];\r\n\r\n let position = 2;\r\n while (position < this.tokens.length)\r\n {\r\n const instruction = this._decodeInstruction(position);\r\n this.instructions.push(instruction);\r\n position += instruction.length;\r\n }\r\n return this;\r\n }\r\n\r\n /**\r\n * Counts decoded instructions per mnemonic.\r\n *\r\n * @returns {Map<string, number>} Opcode-name histogram.\r\n */\r\n opcodeHistogram()\r\n {\r\n const histogram = new Map();\r\n for (const instruction of this.instructions)\r\n {\r\n histogram.set(instruction.opcodeName, (histogram.get(instruction.opcodeName) || 0) + 1);\r\n }\r\n return histogram;\r\n }\r\n\r\n /**\r\n * Decodes one instruction starting at a token position.\r\n *\r\n * @param {number} position Token index of the instruction's first token.\r\n * @returns {object} Instruction record.\r\n * @private\r\n */\r\n _decodeInstruction(position)\r\n {\r\n const token0 = this.tokens[position];\r\n const opcode = token0 & 0x7ff;\r\n const opcodeName = dxbcOpcodeName(opcode);\r\n\r\n if (opcode >= DxbcOpcodeNames.length)\r\n {\r\n throw new DxbcReadError(\"Unknown DXBC opcode\", {\r\n source: this.source,\r\n offset: position,\r\n opcode\r\n });\r\n }\r\n\r\n if (opcode === DXBC_OPCODE_CUSTOMDATA)\r\n {\r\n return this._decodeCustomData(position, token0);\r\n }\r\n\r\n const length = (token0 >>> 24) & 0x7f;\r\n if (length < 1 || position + length > this.tokens.length)\r\n {\r\n throw new DxbcReadError(\"DXBC instruction length lies outside the program\", {\r\n source: this.source,\r\n offset: position,\r\n opcode,\r\n opcodeName,\r\n length,\r\n programLength: this.tokens.length\r\n });\r\n }\r\n\r\n const extensions = [];\r\n let cursor = position + 1;\r\n let chainToken = token0;\r\n while ((chainToken >>> 31) === 1)\r\n {\r\n if (cursor >= position + length)\r\n {\r\n throw new DxbcReadError(\"DXBC extended-opcode chain overruns the instruction\", {\r\n source: this.source,\r\n offset: position,\r\n opcodeName\r\n });\r\n }\r\n chainToken = this.tokens[cursor];\r\n extensions.push(decodeOpcodeExtension(chainToken));\r\n cursor += 1;\r\n }\r\n\r\n const instruction = {\r\n offset: position,\r\n opcode,\r\n opcodeName,\r\n length,\r\n token0,\r\n isDeclaration: dxbcIsDeclarationOpcode(opcode),\r\n saturate: opcodeName === \"sync\" ? false : (token0 & 0x00002000) !== 0,\r\n preciseMask: maskToComponents((token0 >>> 19) & 0xf),\r\n extensions,\r\n operands: [],\r\n declaration: null,\r\n customData: null,\r\n tailTokens: []\r\n };\r\n\r\n if (DxbcBooleanTestOpcodeNames.has(opcodeName))\r\n {\r\n instruction.testBoolean = ((token0 >>> 18) & 1) === 0 ? \"zero\" : \"nonzero\";\r\n }\r\n if (opcodeName === \"resinfo\")\r\n {\r\n const returnType = (token0 >>> 11) & 0x3;\r\n instruction.resinfoReturnType = returnType;\r\n instruction.resinfoReturnTypeName = RESINFO_RETURN_TYPE_NAMES[returnType] || `return_type_${returnType}`;\r\n }\r\n if (opcodeName === \"sync\")\r\n {\r\n instruction.syncFlags = (token0 >>> 11) & 0xff;\r\n instruction.syncFlagNames = SYNC_FLAG_NAMES.filter((_, index) =>\r\n (instruction.syncFlags & (1 << index)) !== 0);\r\n }\r\n\r\n const end = position + length;\r\n if (instruction.isDeclaration)\r\n {\r\n this._decodeDeclaration(instruction, cursor, end);\r\n }\r\n else if (opcodeName === \"sync\")\r\n {\r\n if (instruction.extensions.length\r\n || cursor !== end\r\n || (token0 & 0x00f80000) !== 0)\r\n {\r\n throw new DxbcReadError(\"DXBC sync instruction must not contain extensions, operands, or reserved controls\", {\r\n source: this.source,\r\n offset: instruction.offset,\r\n opcodeName\r\n });\r\n }\r\n }\r\n else\r\n {\r\n instruction.operands = this._decodeOperandRun(cursor, end, instruction);\r\n if (this.majorVersion === 5 && this.minorVersion >= 1)\r\n {\r\n for (const operand of instruction.operands)\r\n {\r\n const resourceReference = decodeSm51ResourceReference(operand);\r\n if (resourceReference) operand.resourceReference = resourceReference;\r\n }\r\n }\r\n }\r\n return instruction;\r\n }\r\n\r\n /**\r\n * Decodes a custom-data block, including immediate constant buffers.\r\n *\r\n * @param {number} position Token index of the custom-data token.\r\n * @param {number} token0 Custom-data opcode token.\r\n * @returns {object} Instruction record.\r\n * @private\r\n */\r\n _decodeCustomData(position, token0)\r\n {\r\n if (position + 1 >= this.tokens.length)\r\n {\r\n throw new DxbcReadError(\"DXBC custom-data block is missing its length token\", {\r\n source: this.source,\r\n offset: position\r\n });\r\n }\r\n const length = this.tokens[position + 1];\r\n if (length < 2 || position + length > this.tokens.length)\r\n {\r\n throw new DxbcReadError(\"DXBC custom-data length lies outside the program\", {\r\n source: this.source,\r\n offset: position,\r\n length,\r\n programLength: this.tokens.length\r\n });\r\n }\r\n\r\n const dataClass = token0 >>> 11;\r\n const customData = {\r\n dataClass,\r\n dataClassName: CUSTOM_DATA_CLASS_NAMES[dataClass] || `custom_data_${dataClass}`,\r\n valueCount: length - 2,\r\n immediateConstantBuffer: null\r\n };\r\n\r\n if (dataClass === 3)\r\n {\r\n if ((length - 2) % 4 !== 0)\r\n {\r\n throw new DxbcReadError(\"DXBC immediate constant buffer is not vec4-aligned\", {\r\n source: this.source,\r\n offset: position,\r\n length\r\n });\r\n }\r\n const floatView = new Float32Array(this.tokens.buffer, this.tokens.byteOffset, this.tokens.length);\r\n const rows = [];\r\n for (let index = position + 2; index < position + length; index += 4)\r\n {\r\n rows.push([ 0, 1, 2, 3 ].map((component) => ({\r\n uint32: this.tokens[index + component],\r\n float32: floatView[index + component]\r\n })));\r\n }\r\n customData.immediateConstantBuffer = rows;\r\n }\r\n\r\n return {\r\n offset: position,\r\n opcode: DXBC_OPCODE_CUSTOMDATA,\r\n opcodeName: \"customdata\",\r\n length,\r\n token0,\r\n isDeclaration: true,\r\n saturate: false,\r\n preciseMask: \"\",\r\n extensions: [],\r\n operands: [],\r\n declaration: null,\r\n customData,\r\n tailTokens: []\r\n };\r\n }\r\n\r\n /**\r\n * Decodes declaration payloads for the opcodes the WebGL corpus exercises,\r\n * keeping unconsumed dwords as raw tail tokens.\r\n *\r\n * @param {object} instruction Instruction record being filled.\r\n * @param {number} cursor Token index after the opcode and extension tokens.\r\n * @param {number} end Exclusive token index of the instruction end.\r\n * @private\r\n */\r\n _decodeDeclaration(instruction, cursor, end)\r\n {\r\n const token0 = instruction.token0;\r\n const name = instruction.opcodeName;\r\n const declaration = {};\r\n instruction.declaration = declaration;\r\n\r\n const takeOperand = () =>\r\n {\r\n const operand = this._decodeOperand(cursor, end, instruction);\r\n instruction.operands.push(operand);\r\n cursor += operand.length;\r\n return operand;\r\n };\r\n const takeToken = () =>\r\n {\r\n if (cursor >= end)\r\n {\r\n throw new DxbcReadError(\"DXBC declaration payload is truncated\", {\r\n source: this.source,\r\n offset: instruction.offset,\r\n opcodeName: name\r\n });\r\n }\r\n const value = this.tokens[cursor];\r\n cursor += 1;\r\n return value;\r\n };\r\n const failDeclaration = (message, details = {}) => new DxbcReadError(message, {\r\n source: this.source,\r\n offset: instruction.offset,\r\n opcodeName: name,\r\n ...details\r\n });\r\n const applyBindingRange = (operand, registerSpace) =>\r\n {\r\n const bindingRange = decodeSm51BindingRange(operand, registerSpace, failDeclaration);\r\n declaration.bindingModel = bindingRange.bindingModel;\r\n declaration.bindingRange = bindingRange;\r\n declaration.registerIndex = bindingRange.lowerBound;\r\n };\r\n const isSm51 = this.majorVersion === 5 && this.minorVersion >= 1;\r\n\r\n switch (name)\r\n {\r\n case \"dcl_global_flags\":\r\n // Kept unshifted (bits 11-23) so values compare directly against the\r\n // GLOBAL_FLAG_* constants in HLSLcc's tokens.h.\r\n declaration.globalFlags = token0 & 0x00fff800;\r\n declaration.refactoringAllowed = (token0 & (1 << 11)) !== 0;\r\n break;\r\n case \"dcl_temps\":\r\n declaration.tempCount = takeToken();\r\n break;\r\n case \"dcl_indexable_temp\":\r\n declaration.registerIndex = takeToken();\r\n declaration.registerCount = takeToken();\r\n declaration.componentCount = takeToken();\r\n break;\r\n case \"dcl_constant_buffer\": {\r\n declaration.accessPattern = ((token0 >>> 11) & 1) === 0 ? \"immediate_indexed\" : \"dynamic_indexed\";\r\n const operand = takeOperand();\r\n if (isSm51)\r\n {\r\n declaration.sizeInVec4 = takeToken();\r\n applyBindingRange(operand, takeToken());\r\n }\r\n else\r\n {\r\n declaration.registerIndex = operand.indices[0]?.values[0] ?? null;\r\n declaration.sizeInVec4 = operand.indices[1]?.values[0] ?? null;\r\n }\r\n break;\r\n }\r\n case \"dcl_sampler\": {\r\n const samplerMode = (token0 >>> 11) & 0x3;\r\n declaration.samplerMode = samplerMode;\r\n declaration.samplerModeName = SAMPLER_MODE_NAMES[samplerMode] || `sampler_mode_${samplerMode}`;\r\n const operand = takeOperand();\r\n if (isSm51) applyBindingRange(operand, takeToken());\r\n else declaration.registerIndex = operand.registerIndex;\r\n break;\r\n }\r\n case \"dcl_resource\": {\r\n const dimension = (token0 >>> 11) & 0x1f;\r\n declaration.resourceDimension = dimension;\r\n declaration.resourceDimensionName = DxbcResourceDimensionNames[dimension] || `dimension_${dimension}`;\r\n declaration.sampleCount = (token0 >>> 16) & 0x7f;\r\n const operand = takeOperand();\r\n declaration.returnType = decodeReturnTypeToken(takeToken());\r\n if (isSm51) applyBindingRange(operand, takeToken());\r\n else declaration.registerIndex = operand.registerIndex;\r\n break;\r\n }\r\n case \"dcl_resource_raw\": {\r\n const operand = takeOperand();\r\n if (isSm51) applyBindingRange(operand, takeToken());\r\n else declaration.registerIndex = operand.registerIndex;\r\n break;\r\n }\r\n case \"dcl_resource_structured\": {\r\n const operand = takeOperand();\r\n // Corpus reality: the byte stride is a trailing dword after the operand\r\n // (48 for BoneTransforms float4x3 rows, 4 for uint index lists). The\r\n // extended-opcode RESOURCE_DIM stride is a fork-added fallback only.\r\n const extensionStride = instruction.extensions.find((ext) => ext.typeName === \"resource_dimension\");\r\n declaration.structureStride = cursor < end ? takeToken() : (extensionStride?.structureStride ?? null);\r\n if (isSm51) applyBindingRange(operand, takeToken());\r\n else declaration.registerIndex = operand.registerIndex;\r\n break;\r\n }\r\n case \"dcl_input\": {\r\n const operand = takeOperand();\r\n declaration.registerIndex = operand.registerIndex;\r\n // Compute-stage pseudo-inputs (thread id / thread group id / thread id\r\n // in group / flattened thread id in group) are distinguished purely by\r\n // the operand's own type field, not by register index — surface it so\r\n // the emitter can branch without re-decoding the operand.\r\n declaration.operandType = operand.type;\r\n declaration.operandTypeName = operand.typeName;\r\n break;\r\n }\r\n case \"dcl_output\":\r\n declaration.registerIndex = takeOperand().registerIndex;\r\n break;\r\n case \"dcl_thread_group\":\r\n // Three raw dwords, no operand (`decode.cpp` OPCODE_DCL_THREAD_GROUP:\r\n // pui32Token[1..3] are the X/Y/Z workgroup sizes).\r\n declaration.threadGroupX = takeToken();\r\n declaration.threadGroupY = takeToken();\r\n declaration.threadGroupZ = takeToken();\r\n break;\r\n case \"dcl_unordered_access_view_typed\": {\r\n // Same dimension-bits layout as `dcl_resource` (bits 11-15); bit 16 is\r\n // the globally-coherent access flag here rather than an MS sample count.\r\n const dimension = (token0 >>> 11) & 0x1f;\r\n declaration.resourceDimension = dimension;\r\n declaration.resourceDimensionName = DxbcResourceDimensionNames[dimension] || `dimension_${dimension}`;\r\n declaration.globallyCoherent = (token0 & 0x00010000) !== 0;\r\n const operand = takeOperand();\r\n declaration.returnType = decodeReturnTypeToken(takeToken());\r\n if (isSm51) applyBindingRange(operand, takeToken());\r\n else declaration.registerIndex = operand.registerIndex;\r\n break;\r\n }\r\n case \"dcl_unordered_access_view_raw\": {\r\n const operand = takeOperand();\r\n declaration.globallyCoherent = (token0 & 0x00010000) !== 0;\r\n if (isSm51) applyBindingRange(operand, takeToken());\r\n else declaration.registerIndex = operand.registerIndex;\r\n break;\r\n }\r\n case \"dcl_unordered_access_view_structured\": {\r\n const operand = takeOperand();\r\n declaration.globallyCoherent = (token0 & 0x00010000) !== 0;\r\n declaration.structureStride = takeToken();\r\n if (isSm51) applyBindingRange(operand, takeToken());\r\n else declaration.registerIndex = operand.registerIndex;\r\n break;\r\n }\r\n case \"dcl_thread_group_shared_memory_raw\": {\r\n const operand = takeOperand();\r\n declaration.registerIndex = decodeThreadGroupSharedMemoryRegister(operand, failDeclaration);\r\n declaration.byteCount = requirePositiveDwordAligned(takeToken(), \"byteCount\", failDeclaration);\r\n break;\r\n }\r\n case \"dcl_thread_group_shared_memory_structured\": {\r\n const operand = takeOperand();\r\n declaration.registerIndex = decodeThreadGroupSharedMemoryRegister(operand, failDeclaration);\r\n declaration.structureStride = requirePositiveDwordAligned(takeToken(), \"structureStride\", failDeclaration);\r\n declaration.structureCount = takeToken();\r\n if (declaration.structureCount === 0)\r\n {\r\n throw failDeclaration(\"DXBC thread-group shared-memory structureCount must be positive\");\r\n }\r\n break;\r\n }\r\n case \"dcl_input_ps\": {\r\n const interpolation = (token0 >>> 11) & 0xf;\r\n declaration.interpolationMode = interpolation;\r\n declaration.interpolationModeName = INTERPOLATION_MODE_NAMES[interpolation] || `interpolation_${interpolation}`;\r\n declaration.registerIndex = takeOperand().registerIndex;\r\n break;\r\n }\r\n case \"dcl_input_sgv\":\r\n case \"dcl_input_siv\":\r\n case \"dcl_output_sgv\":\r\n case \"dcl_output_siv\":\r\n case \"dcl_input_ps_sgv\":\r\n case \"dcl_input_ps_siv\": {\r\n if (name === \"dcl_input_ps_siv\")\r\n {\r\n const interpolation = (token0 >>> 11) & 0xf;\r\n declaration.interpolationMode = interpolation;\r\n declaration.interpolationModeName = INTERPOLATION_MODE_NAMES[interpolation] || `interpolation_${interpolation}`;\r\n }\r\n declaration.registerIndex = takeOperand().registerIndex;\r\n const nameToken = takeToken();\r\n declaration.systemValue = nameToken & 0xffff;\r\n declaration.systemValueName = DxbcSystemValueNames[declaration.systemValue] || `name_${declaration.systemValue}`;\r\n break;\r\n }\r\n case \"dcl_index_range\":\r\n declaration.registerIndex = takeOperand().registerIndex;\r\n declaration.indexRange = takeToken();\r\n break;\r\n default:\r\n instruction.declaration = null;\r\n break;\r\n }\r\n\r\n if (cursor < end)\r\n {\r\n instruction.tailTokens = Array.from(this.tokens.subarray(cursor, end));\r\n }\r\n }\r\n\r\n /**\r\n * Decodes a run of operands that must consume the region exactly.\r\n *\r\n * @param {number} cursor Token index of the first operand.\r\n * @param {number} end Exclusive token index of the instruction end.\r\n * @param {object} instruction Instruction record used in error details.\r\n * @returns {object[]} Decoded operands.\r\n * @private\r\n */\r\n _decodeOperandRun(cursor, end, instruction)\r\n {\r\n const operands = [];\r\n while (cursor < end)\r\n {\r\n const operand = this._decodeOperand(cursor, end, instruction);\r\n operands.push(operand);\r\n cursor += operand.length;\r\n }\r\n if (cursor !== end)\r\n {\r\n throw new DxbcReadError(\"DXBC operands overran the instruction length\", {\r\n source: this.source,\r\n offset: instruction.offset,\r\n opcodeName: instruction.opcodeName\r\n });\r\n }\r\n return operands;\r\n }\r\n\r\n /**\r\n * Decodes one operand, including extension tokens, register indices,\r\n * relative-index nested operands, and immediate values.\r\n *\r\n * @param {number} cursor Token index of the operand token.\r\n * @param {number} end Exclusive token index of the instruction end.\r\n * @param {object} instruction Instruction record used in error details.\r\n * @param {number} [depth] Relative-operand nesting depth.\r\n * @returns {object} Decoded operand with its consumed token `length`.\r\n * @private\r\n */\r\n _decodeOperand(cursor, end, instruction, depth = 0)\r\n {\r\n const fail = (message, details = {}) => new DxbcReadError(message, {\r\n source: this.source,\r\n offset: instruction.offset,\r\n opcodeName: instruction.opcodeName,\r\n operandCursor: cursor,\r\n ...details\r\n });\r\n\r\n if (cursor >= end)\r\n {\r\n throw fail(\"DXBC operand lies outside the instruction\");\r\n }\r\n if (depth > 4)\r\n {\r\n throw fail(\"DXBC relative operand nesting is too deep\");\r\n }\r\n\r\n const token = this.tokens[cursor];\r\n const type = (token >>> 12) & 0xff;\r\n const componentCountMode = token & 0x3;\r\n const selectionMode = (token >>> 2) & 0x3;\r\n const operand = {\r\n token,\r\n type,\r\n typeName: DxbcOperandTypeNames[type] || `operand_type_${type}`,\r\n componentCount: componentCountMode === 0 ? 0 : (componentCountMode === 1 ? 1 : 4),\r\n selectionModeName: \"none\",\r\n mask: \"\",\r\n swizzle: \"\",\r\n selected: \"\",\r\n modifierName: \"none\",\r\n minPrecisionName: \"default\",\r\n nonUniform: false,\r\n registerIndex: null,\r\n indices: [],\r\n immediateValues: [],\r\n length: 1\r\n };\r\n if (componentCountMode === 3)\r\n {\r\n throw fail(\"DXBC N-component operands are not supported\", { token });\r\n }\r\n\r\n if (operand.componentCount === 4)\r\n {\r\n if (selectionMode === 0)\r\n {\r\n operand.selectionModeName = \"mask\";\r\n operand.mask = maskToComponents((token >>> 4) & 0xf);\r\n }\r\n else if (selectionMode === 1)\r\n {\r\n operand.selectionModeName = \"swizzle\";\r\n operand.swizzle = [ 0, 1, 2, 3 ]\r\n .map((slot) => COMPONENTS[(token >>> (4 + slot * 2)) & 0x3])\r\n .join(\"\");\r\n }\r\n else if (selectionMode === 2)\r\n {\r\n operand.selectionModeName = \"select1\";\r\n operand.selected = COMPONENTS[(token >>> 4) & 0x3];\r\n }\r\n }\r\n\r\n let chainToken = token;\r\n while ((chainToken >>> 31) === 1)\r\n {\r\n if (cursor + operand.length >= end)\r\n {\r\n throw fail(\"DXBC extended-operand chain overruns the instruction\");\r\n }\r\n chainToken = this.tokens[cursor + operand.length];\r\n operand.length += 1;\r\n if ((chainToken & 0x3f) === 1)\r\n {\r\n const modifier = (chainToken >>> 6) & 0xff;\r\n const minPrecision = (chainToken >>> 14) & 0x7;\r\n operand.modifierName = DxbcOperandModifierNames[modifier] || `modifier_${modifier}`;\r\n operand.minPrecisionName = MIN_PRECISION_NAMES[minPrecision] || `min_precision_${minPrecision}`;\r\n operand.nonUniform = ((chainToken >>> 17) & 1) !== 0;\r\n }\r\n }\r\n\r\n const indexDimension = (token >>> 20) & 0x3;\r\n for (let dimension = 0; dimension < indexDimension; dimension += 1)\r\n {\r\n const representation = (token >>> (22 + dimension * 3)) & 0x7;\r\n const index = { dimension, representation, values: [], relative: null };\r\n const immediateCount = representation === 1 || representation === 4 ? 2 : (representation === 2 ? 0 : 1);\r\n\r\n for (let word = 0; word < immediateCount; word += 1)\r\n {\r\n if (cursor + operand.length >= end)\r\n {\r\n throw fail(\"DXBC operand index lies outside the instruction\", { dimension, representation });\r\n }\r\n index.values.push(this.tokens[cursor + operand.length]);\r\n operand.length += 1;\r\n }\r\n if (representation >= 2 && representation <= 4)\r\n {\r\n const relative = this._decodeOperand(cursor + operand.length, end, instruction, depth + 1);\r\n index.relative = relative;\r\n operand.length += relative.length;\r\n }\r\n else if (representation > 4)\r\n {\r\n throw fail(\"Unknown DXBC operand index representation\", { dimension, representation });\r\n }\r\n\r\n if (dimension === 0 && index.values.length > 0)\r\n {\r\n operand.registerIndex = index.values[0];\r\n }\r\n operand.indices.push(index);\r\n }\r\n\r\n if (type === 4 || type === 5)\r\n {\r\n const words = operand.componentCount * (type === 5 ? 2 : 1);\r\n if (cursor + operand.length + words > end)\r\n {\r\n throw fail(\"DXBC immediate values lie outside the instruction\");\r\n }\r\n const floatView = new Float32Array(this.tokens.buffer, this.tokens.byteOffset, this.tokens.length);\r\n for (let word = 0; word < words; word += 1)\r\n {\r\n operand.immediateValues.push({\r\n uint32: this.tokens[cursor + operand.length + word],\r\n float32: type === 4 ? floatView[cursor + operand.length + word] : null\r\n });\r\n }\r\n operand.length += words;\r\n }\r\n\r\n return operand;\r\n }\r\n}\r\n"],"names":["COMPONENTS","DxbcOperandTypeNames","Object","freeze","DxbcOperandModifierNames","DxbcSystemValueNames","DxbcResourceDimensionNames","DxbcResourceReturnTypeNames","RESINFO_RETURN_TYPE_NAMES","SAMPLER_MODE_NAMES","INTERPOLATION_MODE_NAMES","MIN_PRECISION_NAMES","CUSTOM_DATA_CLASS_NAMES","SYNC_FLAG_NAMES","SM51_RESOURCE_OPERAND_TYPES","Set","SM51_UNBOUNDED_REGISTER","signExtend4","value","maskToComponents","mask","filter","_","index","join","decodeOpcodeExtension","token","type","out","typeName","sampleOffsets","u","v","w","resourceDimension","resourceDimensionName","structureStride","resourceReturnTypes","map","coord","decodeReturnTypeToken","returnTypes","returnTypeNames","decodeSm51BindingRange","operand","registerSpace","fail","indices","length","indexDimension","values","representation","relative","dimension","rangeId","lowerBound","upperBound","unbounded","bindingModel","registerCount","decodeSm51ResourceReference","has","reference","nonUniform","absoluteIndex","bufferIndex","vectorOffset","decodeThreadGroupSharedMemoryRegister","operandType","operandTypeName","componentCount","selectionModeName","modifierName","minPrecisionName","requirePositiveDwordAligned","fieldName","DxbcInstructionDecoder","constructor","tokens","Uint32Array","instructions","source","Decode","program","options","programType","programTypeName","majorVersion","minorVersion","position","instruction","_decodeInstruction","push","opcodeHistogram","histogram","Map","set","opcodeName","get","token0","opcode","dxbcOpcodeName","DxbcOpcodeNames","DxbcReadError","offset","DXBC_OPCODE_CUSTOMDATA","_decodeCustomData","programLength","extensions","cursor","chainToken","isDeclaration","dxbcIsDeclarationOpcode","saturate","preciseMask","operands","declaration","customData","tailTokens","DxbcBooleanTestOpcodeNames","testBoolean","returnType","resinfoReturnType","resinfoReturnTypeName","syncFlags","syncFlagNames","end","_decodeDeclaration","_decodeOperandRun","resourceReference","dataClass","dataClassName","valueCount","immediateConstantBuffer","floatView","Float32Array","buffer","byteOffset","rows","component","uint32","float32","name","takeOperand","_decodeOperand","takeToken","failDeclaration","message","details","applyBindingRange","bindingRange","registerIndex","isSm51","globalFlags","refactoringAllowed","tempCount","accessPattern","sizeInVec4","samplerMode","samplerModeName","sampleCount","extensionStride","find","ext","threadGroupX","threadGroupY","threadGroupZ","globallyCoherent","byteCount","structureCount","interpolation","interpolationMode","interpolationModeName","nameToken","systemValue","systemValueName","indexRange","Array","from","subarray","depth","operandCursor","componentCountMode","selectionMode","swizzle","selected","immediateValues","slot","modifier","minPrecision","immediateCount","word","words"],"mappings":"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"}
1
+ {"version":3,"file":"decoder.js","sources":["../../../../../../src/resource/formats/dxbc/core/decoder.js"],"sourcesContent":["import { DxbcReadError } from \"./DxbcReadError.js\";\r\nimport {\r\n DXBC_OPCODE_CUSTOMDATA,\r\n DxbcBooleanTestOpcodeNames,\r\n DxbcOpcodeNames,\r\n dxbcIsDeclarationOpcode,\r\n dxbcOpcodeName\r\n} from \"./opcodes.js\";\r\n\r\nconst COMPONENTS = [ \"x\", \"y\", \"z\", \"w\" ];\r\n\r\n/**\r\n * Operand register-file names indexed by the operand-token type field.\r\n */\r\nexport const DxbcOperandTypeNames = Object.freeze([\r\n \"temp\", \"input\", \"output\", \"indexable_temp\", \"immediate32\", \"immediate64\",\r\n \"sampler\", \"resource\", \"constant_buffer\", \"immediate_constant_buffer\",\r\n \"label\", \"input_primitive_id\", \"output_depth\", \"null\", \"rasterizer\",\r\n \"output_coverage\", \"stream\", \"function_body\", \"function_table\", \"interface\",\r\n \"function_input\", \"function_output\", \"output_control_point_id\",\r\n \"input_fork_instance_id\", \"input_join_instance_id\", \"input_control_point\",\r\n \"output_control_point\", \"input_patch_constant\", \"input_domain_point\",\r\n \"this_pointer\", \"uav\", \"thread_group_shared_memory\", \"input_thread_id\",\r\n \"input_thread_group_id\", \"input_thread_id_in_group\", \"input_coverage_mask\",\r\n \"input_thread_id_in_group_flattened\", \"input_gs_instance_id\",\r\n \"output_depth_greater_equal\", \"output_depth_less_equal\", \"cycle_counter\"\r\n]);\r\n\r\n/**\r\n * Operand modifier names indexed by the extended-operand modifier field.\r\n */\r\nexport const DxbcOperandModifierNames = Object.freeze([ \"none\", \"neg\", \"abs\", \"absneg\" ]);\r\n\r\n/**\r\n * System-value names indexed by DXBC name-token values.\r\n */\r\nexport const DxbcSystemValueNames = Object.freeze([\r\n \"undefined\", \"position\", \"clip_distance\", \"cull_distance\",\r\n \"render_target_array_index\", \"viewport_array_index\", \"vertex_id\",\r\n \"primitive_id\", \"instance_id\", \"is_front_face\", \"sample_index\"\r\n]);\r\n\r\n/**\r\n * Resource dimension names indexed by declaration resource-dimension ids.\r\n */\r\nexport const DxbcResourceDimensionNames = Object.freeze([\r\n \"unknown\", \"buffer\", \"texture1d\", \"texture2d\", \"texture2dms\", \"texture3d\",\r\n \"texturecube\", \"texture1darray\", \"texture2darray\", \"texture2dmsarray\",\r\n \"texturecubearray\", \"raw_buffer\", \"structured_buffer\"\r\n]);\r\n\r\n/**\r\n * Resource return-type names indexed by return-type nibble values.\r\n */\r\nexport const DxbcResourceReturnTypeNames = Object.freeze([\r\n \"unknown\", \"unorm\", \"snorm\", \"sint\", \"uint\", \"float\", \"mixed\", \"double\",\r\n \"continued\"\r\n]);\r\n\r\nconst RESINFO_RETURN_TYPE_NAMES = [ \"float\", \"rcpfloat\", \"uint\" ];\r\nconst SAMPLER_MODE_NAMES = [ \"default\", \"comparison\", \"mono\" ];\r\nconst INTERPOLATION_MODE_NAMES = [\r\n \"undefined\", \"constant\", \"linear\", \"linear_centroid\", \"linear_noperspective\",\r\n \"linear_noperspective_centroid\", \"linear_sample\", \"linear_noperspective_sample\"\r\n];\r\nconst MIN_PRECISION_NAMES = [ \"default\", \"float_16\", \"float_2_8\", \"reserved\", \"sint_16\", \"uint_16\" ];\r\nconst CUSTOM_DATA_CLASS_NAMES = [\r\n \"comment\", \"debug_info\", \"opaque\", \"dcl_immediate_constant_buffer\",\r\n \"shader_message\"\r\n];\r\nconst SYNC_FLAG_NAMES = [\r\n \"threads_in_group\",\r\n \"thread_group_shared_memory\",\r\n \"thread_group_uav_memory\",\r\n \"global_uav_memory\"\r\n];\r\n\r\nconst SM51_RESOURCE_OPERAND_TYPES = new Set([ 6, 7, 8, 30 ]);\r\nconst SM51_UNBOUNDED_REGISTER = 0xffffffff;\r\n\r\nfunction signExtend4(value)\r\n{\r\n return (value & 0x8) ? value - 0x10 : value;\r\n}\r\n\r\nfunction maskToComponents(mask)\r\n{\r\n return COMPONENTS.filter((_, index) => (mask & (1 << index)) !== 0).join(\"\");\r\n}\r\n\r\n/**\r\n * Decodes an opcode-extension token (`sample_controls`, `resource_dimension`,\r\n * or `resource_return_type`).\r\n *\r\n * @param {number} token Extension token.\r\n * @returns {object} Decoded extension record.\r\n */\r\nfunction decodeOpcodeExtension(token)\r\n{\r\n const type = token & 0x3f;\r\n const out = { token, type };\r\n if (type === 1)\r\n {\r\n out.typeName = \"sample_controls\";\r\n out.sampleOffsets = {\r\n u: signExtend4((token >>> 9) & 0xf),\r\n v: signExtend4((token >>> 13) & 0xf),\r\n w: signExtend4((token >>> 17) & 0xf)\r\n };\r\n }\r\n else if (type === 2)\r\n {\r\n out.typeName = \"resource_dimension\";\r\n out.resourceDimension = (token >>> 6) & 0x1f;\r\n out.resourceDimensionName = DxbcResourceDimensionNames[out.resourceDimension] || \"unknown\";\r\n out.structureStride = (token >>> 11) & 0xfff;\r\n }\r\n else if (type === 3)\r\n {\r\n out.typeName = \"resource_return_type\";\r\n out.resourceReturnTypes = [ 0, 1, 2, 3 ].map((coord) => (token >>> (coord * 4 + 6)) & 0xf);\r\n }\r\n else\r\n {\r\n out.typeName = type === 0 ? \"empty\" : `extended_opcode_${type}`;\r\n }\r\n return out;\r\n}\r\n\r\n/**\r\n * Decodes a standalone resource return-type token (four nibbles from bit 0).\r\n *\r\n * @param {number} token Return-type token.\r\n * @returns {{token:number,returnTypes:number[],returnTypeNames:string[]}} Decoded record.\r\n */\r\nfunction decodeReturnTypeToken(token)\r\n{\r\n const returnTypes = [ 0, 1, 2, 3 ].map((coord) => (token >>> (coord * 4)) & 0xf);\r\n return {\r\n token,\r\n returnTypes,\r\n returnTypeNames: returnTypes.map((value) => DxbcResourceReturnTypeNames[value] || `return_type_${value}`)\r\n };\r\n}\r\n\r\nfunction decodeSm51BindingRange(operand, registerSpace, fail)\r\n{\r\n if (operand.indices.length !== 3)\r\n {\r\n throw fail(\"SM5.1 resource declaration must use a 3D binding-range operand\", {\r\n indexDimension: operand.indices.length\r\n });\r\n }\r\n\r\n const values = operand.indices.map((index) =>\r\n {\r\n if (index.representation !== 0 || index.values.length !== 1 || index.relative)\r\n {\r\n throw fail(\"SM5.1 binding-range indices must be immediate32 values\", {\r\n dimension: index.dimension,\r\n representation: index.representation\r\n });\r\n }\r\n return index.values[0];\r\n });\r\n const [ rangeId, lowerBound, upperBound ] = values;\r\n const unbounded = upperBound === SM51_UNBOUNDED_REGISTER;\r\n if (!unbounded && upperBound < lowerBound)\r\n {\r\n throw fail(\"SM5.1 binding range has an upper bound below its lower bound\", {\r\n rangeId,\r\n lowerBound,\r\n upperBound\r\n });\r\n }\r\n\r\n return {\r\n bindingModel: \"sm5.1-range\",\r\n rangeId,\r\n lowerBound,\r\n upperBound,\r\n unbounded,\r\n registerCount: unbounded ? null : upperBound - lowerBound + 1,\r\n registerSpace\r\n };\r\n}\r\n\r\nfunction decodeSm51ResourceReference(operand)\r\n{\r\n if (!SM51_RESOURCE_OPERAND_TYPES.has(operand.type) || operand.indices.length === 0)\r\n {\r\n return null;\r\n }\r\n\r\n const reference = {\r\n bindingModel: \"sm5.1-range\",\r\n rangeId: operand.indices[0]?.values[0] ?? null,\r\n nonUniform: operand.nonUniform,\r\n absoluteIndex: null,\r\n bufferIndex: null,\r\n vectorOffset: null\r\n };\r\n if (operand.type === 8)\r\n {\r\n reference.bufferIndex = operand.indices[1] || null;\r\n reference.vectorOffset = operand.indices[2] || null;\r\n }\r\n else\r\n {\r\n reference.absoluteIndex = operand.indices[1] || null;\r\n }\r\n return reference;\r\n}\r\n\r\nfunction decodeThreadGroupSharedMemoryRegister(operand, fail)\r\n{\r\n if (operand.typeName !== \"thread_group_shared_memory\")\r\n {\r\n throw fail(\"DXBC thread-group shared-memory declaration must use a thread-group shared-memory operand\", {\r\n operandType: operand.type,\r\n operandTypeName: operand.typeName\r\n });\r\n }\r\n if (operand.componentCount !== 0)\r\n {\r\n throw fail(\"DXBC thread-group shared-memory declaration operand must not select components\", {\r\n componentCount: operand.componentCount,\r\n selectionModeName: operand.selectionModeName\r\n });\r\n }\r\n if ((operand.token & 0xfff) !== 0\r\n || (operand.token & 0x7e000000) !== 0\r\n || (operand.token >>> 31) !== 0\r\n || operand.modifierName !== \"none\"\r\n || operand.minPrecisionName !== \"default\"\r\n || operand.nonUniform)\r\n {\r\n throw fail(\"DXBC thread-group shared-memory declaration operand must be unmodified\", {\r\n token: operand.token,\r\n modifierName: operand.modifierName,\r\n minPrecisionName: operand.minPrecisionName,\r\n nonUniform: operand.nonUniform\r\n });\r\n }\r\n if (operand.indices.length !== 1)\r\n {\r\n throw fail(\"DXBC thread-group shared-memory declaration must use a 1D register operand\", {\r\n indexDimension: operand.indices.length\r\n });\r\n }\r\n\r\n const index = operand.indices[0];\r\n if (index.representation !== 0 || index.values.length !== 1 || index.relative)\r\n {\r\n throw fail(\"DXBC thread-group shared-memory register index must be an immediate32 value\", {\r\n representation: index.representation\r\n });\r\n }\r\n if (operand.length !== 2)\r\n {\r\n throw fail(\"DXBC thread-group shared-memory declaration operand has an unsupported encoding\", {\r\n length: operand.length\r\n });\r\n }\r\n return index.values[0];\r\n}\r\n\r\nfunction requirePositiveDwordAligned(value, fieldName, fail)\r\n{\r\n if (value === 0 || (value & 0x3) !== 0)\r\n {\r\n throw fail(`DXBC thread-group shared-memory ${fieldName} must be a positive multiple of 4`, {\r\n [fieldName]: value\r\n });\r\n }\r\n return value;\r\n}\r\n\r\n/**\r\n * SM4/SM5 instruction-stream decoder over a `DxbcShaderProgram` token array.\r\n *\r\n * Executable instructions decode strictly: operands must consume the exact\r\n * instruction length or the decoder throws. Declarations decode the payloads\r\n * the vertex/pixel corpus uses and keep any remaining dwords as `tailTokens`\r\n * so unusual stages stay inspectable without failing the framing walk.\r\n */\r\nexport class DxbcInstructionDecoder\r\n{\r\n /**\r\n * Creates an empty instruction decoder; call a read entry point to decode a token stream.\r\n */\r\n constructor()\r\n {\r\n this.tokens = new Uint32Array(0);\r\n this.instructions = [];\r\n this.source = \"memory\";\r\n }\r\n\r\n /**\r\n * Decodes every instruction in a shader program token stream.\r\n *\r\n * @param {import(\"./DxbcShaderProgram.js\").DxbcShaderProgram} program Parsed `SHEX`/`SHDR` program.\r\n * @param {object} [options] Decode options.\r\n * @param {string} [options.source] Source name used in error details.\r\n * @returns {DxbcInstructionDecoder} This decoder.\r\n */\r\n Decode(program, options = {})\r\n {\r\n this.tokens = program.tokens;\r\n this.source = options.source || program.source || \"memory\";\r\n this.programType = program.programType;\r\n this.programTypeName = program.programTypeName;\r\n this.majorVersion = program.majorVersion;\r\n this.minorVersion = program.minorVersion;\r\n this.instructions = [];\r\n\r\n let position = 2;\r\n while (position < this.tokens.length)\r\n {\r\n const instruction = this._decodeInstruction(position);\r\n this.instructions.push(instruction);\r\n position += instruction.length;\r\n }\r\n return this;\r\n }\r\n\r\n /**\r\n * Counts decoded instructions per mnemonic.\r\n *\r\n * @returns {Map<string, number>} Opcode-name histogram.\r\n */\r\n opcodeHistogram()\r\n {\r\n const histogram = new Map();\r\n for (const instruction of this.instructions)\r\n {\r\n histogram.set(instruction.opcodeName, (histogram.get(instruction.opcodeName) || 0) + 1);\r\n }\r\n return histogram;\r\n }\r\n\r\n /**\r\n * Decodes one instruction starting at a token position.\r\n *\r\n * @param {number} position Token index of the instruction's first token.\r\n * @returns {object} Instruction record.\r\n * @private\r\n */\r\n _decodeInstruction(position)\r\n {\r\n const token0 = this.tokens[position];\r\n const opcode = token0 & 0x7ff;\r\n const opcodeName = dxbcOpcodeName(opcode);\r\n\r\n if (opcode >= DxbcOpcodeNames.length)\r\n {\r\n throw new DxbcReadError(\"Unknown DXBC opcode\", {\r\n source: this.source,\r\n offset: position,\r\n opcode\r\n });\r\n }\r\n\r\n if (opcode === DXBC_OPCODE_CUSTOMDATA)\r\n {\r\n return this._decodeCustomData(position, token0);\r\n }\r\n\r\n const length = (token0 >>> 24) & 0x7f;\r\n if (length < 1 || position + length > this.tokens.length)\r\n {\r\n throw new DxbcReadError(\"DXBC instruction length lies outside the program\", {\r\n source: this.source,\r\n offset: position,\r\n opcode,\r\n opcodeName,\r\n length,\r\n programLength: this.tokens.length\r\n });\r\n }\r\n\r\n const extensions = [];\r\n let cursor = position + 1;\r\n let chainToken = token0;\r\n while ((chainToken >>> 31) === 1)\r\n {\r\n if (cursor >= position + length)\r\n {\r\n throw new DxbcReadError(\"DXBC extended-opcode chain overruns the instruction\", {\r\n source: this.source,\r\n offset: position,\r\n opcodeName\r\n });\r\n }\r\n chainToken = this.tokens[cursor];\r\n extensions.push(decodeOpcodeExtension(chainToken));\r\n cursor += 1;\r\n }\r\n\r\n const instruction = {\r\n offset: position,\r\n opcode,\r\n opcodeName,\r\n length,\r\n token0,\r\n isDeclaration: dxbcIsDeclarationOpcode(opcode),\r\n saturate: opcodeName === \"sync\" ? false : (token0 & 0x00002000) !== 0,\r\n preciseMask: maskToComponents((token0 >>> 19) & 0xf),\r\n extensions,\r\n operands: [],\r\n declaration: null,\r\n customData: null,\r\n tailTokens: []\r\n };\r\n\r\n if (DxbcBooleanTestOpcodeNames.has(opcodeName))\r\n {\r\n instruction.testBoolean = ((token0 >>> 18) & 1) === 0 ? \"zero\" : \"nonzero\";\r\n }\r\n if (opcodeName === \"resinfo\")\r\n {\r\n const returnType = (token0 >>> 11) & 0x3;\r\n instruction.resinfoReturnType = returnType;\r\n instruction.resinfoReturnTypeName = RESINFO_RETURN_TYPE_NAMES[returnType] || `return_type_${returnType}`;\r\n }\r\n if (opcodeName === \"sync\")\r\n {\r\n instruction.syncFlags = (token0 >>> 11) & 0xff;\r\n instruction.syncFlagNames = SYNC_FLAG_NAMES.filter((_, index) =>\r\n (instruction.syncFlags & (1 << index)) !== 0);\r\n }\r\n\r\n const end = position + length;\r\n if (instruction.isDeclaration)\r\n {\r\n this._decodeDeclaration(instruction, cursor, end);\r\n }\r\n else if (opcodeName === \"sync\")\r\n {\r\n if (instruction.extensions.length\r\n || cursor !== end\r\n || (token0 & 0x00f80000) !== 0)\r\n {\r\n throw new DxbcReadError(\"DXBC sync instruction must not contain extensions, operands, or reserved controls\", {\r\n source: this.source,\r\n offset: instruction.offset,\r\n opcodeName\r\n });\r\n }\r\n }\r\n else\r\n {\r\n instruction.operands = this._decodeOperandRun(cursor, end, instruction);\r\n if (this.majorVersion === 5 && this.minorVersion >= 1)\r\n {\r\n for (const operand of instruction.operands)\r\n {\r\n const resourceReference = decodeSm51ResourceReference(operand);\r\n if (resourceReference) operand.resourceReference = resourceReference;\r\n }\r\n }\r\n }\r\n return instruction;\r\n }\r\n\r\n /**\r\n * Decodes a custom-data block, including immediate constant buffers.\r\n *\r\n * @param {number} position Token index of the custom-data token.\r\n * @param {number} token0 Custom-data opcode token.\r\n * @returns {object} Instruction record.\r\n * @private\r\n */\r\n _decodeCustomData(position, token0)\r\n {\r\n if (position + 1 >= this.tokens.length)\r\n {\r\n throw new DxbcReadError(\"DXBC custom-data block is missing its length token\", {\r\n source: this.source,\r\n offset: position\r\n });\r\n }\r\n const length = this.tokens[position + 1];\r\n if (length < 2 || position + length > this.tokens.length)\r\n {\r\n throw new DxbcReadError(\"DXBC custom-data length lies outside the program\", {\r\n source: this.source,\r\n offset: position,\r\n length,\r\n programLength: this.tokens.length\r\n });\r\n }\r\n\r\n const dataClass = token0 >>> 11;\r\n const customData = {\r\n dataClass,\r\n dataClassName: CUSTOM_DATA_CLASS_NAMES[dataClass] || `custom_data_${dataClass}`,\r\n valueCount: length - 2,\r\n immediateConstantBuffer: null\r\n };\r\n\r\n if (dataClass === 3)\r\n {\r\n if ((length - 2) % 4 !== 0)\r\n {\r\n throw new DxbcReadError(\"DXBC immediate constant buffer is not vec4-aligned\", {\r\n source: this.source,\r\n offset: position,\r\n length\r\n });\r\n }\r\n const floatView = new Float32Array(this.tokens.buffer, this.tokens.byteOffset, this.tokens.length);\r\n const rows = [];\r\n for (let index = position + 2; index < position + length; index += 4)\r\n {\r\n rows.push([ 0, 1, 2, 3 ].map((component) => ({\r\n uint32: this.tokens[index + component],\r\n float32: floatView[index + component]\r\n })));\r\n }\r\n customData.immediateConstantBuffer = rows;\r\n }\r\n\r\n return {\r\n offset: position,\r\n opcode: DXBC_OPCODE_CUSTOMDATA,\r\n opcodeName: \"customdata\",\r\n length,\r\n token0,\r\n isDeclaration: true,\r\n saturate: false,\r\n preciseMask: \"\",\r\n extensions: [],\r\n operands: [],\r\n declaration: null,\r\n customData,\r\n tailTokens: []\r\n };\r\n }\r\n\r\n /**\r\n * Decodes declaration payloads for the opcodes the WebGL corpus exercises,\r\n * keeping unconsumed dwords as raw tail tokens.\r\n *\r\n * @param {object} instruction Instruction record being filled.\r\n * @param {number} cursor Token index after the opcode and extension tokens.\r\n * @param {number} end Exclusive token index of the instruction end.\r\n * @private\r\n */\r\n _decodeDeclaration(instruction, cursor, end)\r\n {\r\n const token0 = instruction.token0;\r\n const name = instruction.opcodeName;\r\n const declaration = {};\r\n instruction.declaration = declaration;\r\n\r\n const takeOperand = () =>\r\n {\r\n const operand = this._decodeOperand(cursor, end, instruction);\r\n instruction.operands.push(operand);\r\n cursor += operand.length;\r\n return operand;\r\n };\r\n const takeToken = () =>\r\n {\r\n if (cursor >= end)\r\n {\r\n throw new DxbcReadError(\"DXBC declaration payload is truncated\", {\r\n source: this.source,\r\n offset: instruction.offset,\r\n opcodeName: name\r\n });\r\n }\r\n const value = this.tokens[cursor];\r\n cursor += 1;\r\n return value;\r\n };\r\n const failDeclaration = (message, details = {}) => new DxbcReadError(message, {\r\n source: this.source,\r\n offset: instruction.offset,\r\n opcodeName: name,\r\n ...details\r\n });\r\n const applyBindingRange = (operand, registerSpace) =>\r\n {\r\n const bindingRange = decodeSm51BindingRange(operand, registerSpace, failDeclaration);\r\n declaration.bindingModel = bindingRange.bindingModel;\r\n declaration.bindingRange = bindingRange;\r\n declaration.registerIndex = bindingRange.lowerBound;\r\n };\r\n const isSm51 = this.majorVersion === 5 && this.minorVersion >= 1;\r\n\r\n switch (name)\r\n {\r\n case \"dcl_global_flags\":\r\n // Kept unshifted (bits 11-23) so values compare directly against the\r\n // GLOBAL_FLAG_* constants in HLSLcc's tokens.h.\r\n declaration.globalFlags = token0 & 0x00fff800;\r\n declaration.refactoringAllowed = (token0 & (1 << 11)) !== 0;\r\n break;\r\n case \"dcl_temps\":\r\n declaration.tempCount = takeToken();\r\n break;\r\n case \"dcl_indexable_temp\":\r\n declaration.registerIndex = takeToken();\r\n declaration.registerCount = takeToken();\r\n declaration.componentCount = takeToken();\r\n break;\r\n case \"dcl_constant_buffer\": {\r\n declaration.accessPattern = ((token0 >>> 11) & 1) === 0 ? \"immediate_indexed\" : \"dynamic_indexed\";\r\n const operand = takeOperand();\r\n if (isSm51)\r\n {\r\n declaration.sizeInVec4 = takeToken();\r\n applyBindingRange(operand, takeToken());\r\n }\r\n else\r\n {\r\n declaration.registerIndex = operand.indices[0]?.values[0] ?? null;\r\n declaration.sizeInVec4 = operand.indices[1]?.values[0] ?? null;\r\n }\r\n break;\r\n }\r\n case \"dcl_sampler\": {\r\n const samplerMode = (token0 >>> 11) & 0x3;\r\n declaration.samplerMode = samplerMode;\r\n declaration.samplerModeName = SAMPLER_MODE_NAMES[samplerMode] || `sampler_mode_${samplerMode}`;\r\n const operand = takeOperand();\r\n if (isSm51) applyBindingRange(operand, takeToken());\r\n else declaration.registerIndex = operand.registerIndex;\r\n break;\r\n }\r\n case \"dcl_resource\": {\r\n const dimension = (token0 >>> 11) & 0x1f;\r\n declaration.resourceDimension = dimension;\r\n declaration.resourceDimensionName = DxbcResourceDimensionNames[dimension] || `dimension_${dimension}`;\r\n declaration.sampleCount = (token0 >>> 16) & 0x7f;\r\n const operand = takeOperand();\r\n declaration.returnType = decodeReturnTypeToken(takeToken());\r\n if (isSm51) applyBindingRange(operand, takeToken());\r\n else declaration.registerIndex = operand.registerIndex;\r\n break;\r\n }\r\n case \"dcl_resource_raw\": {\r\n const operand = takeOperand();\r\n if (isSm51) applyBindingRange(operand, takeToken());\r\n else declaration.registerIndex = operand.registerIndex;\r\n break;\r\n }\r\n case \"dcl_resource_structured\": {\r\n const operand = takeOperand();\r\n // Corpus reality: the byte stride is a trailing dword after the operand\r\n // (48 for BoneTransforms float4x3 rows, 4 for uint index lists). The\r\n // extended-opcode RESOURCE_DIM stride is a fork-added fallback only.\r\n const extensionStride = instruction.extensions.find((ext) => ext.typeName === \"resource_dimension\");\r\n declaration.structureStride = cursor < end ? takeToken() : (extensionStride?.structureStride ?? null);\r\n if (isSm51) applyBindingRange(operand, takeToken());\r\n else declaration.registerIndex = operand.registerIndex;\r\n break;\r\n }\r\n case \"dcl_input\": {\r\n const operand = takeOperand();\r\n declaration.registerIndex = operand.registerIndex;\r\n // Compute-stage pseudo-inputs (thread id / thread group id / thread id\r\n // in group / flattened thread id in group) are distinguished purely by\r\n // the operand's own type field, not by register index — surface it so\r\n // the emitter can branch without re-decoding the operand.\r\n declaration.operandType = operand.type;\r\n declaration.operandTypeName = operand.typeName;\r\n break;\r\n }\r\n case \"dcl_output\":\r\n declaration.registerIndex = takeOperand().registerIndex;\r\n break;\r\n case \"dcl_thread_group\":\r\n // Three raw dwords, no operand (`decode.cpp` OPCODE_DCL_THREAD_GROUP:\r\n // pui32Token[1..3] are the X/Y/Z workgroup sizes).\r\n declaration.threadGroupX = takeToken();\r\n declaration.threadGroupY = takeToken();\r\n declaration.threadGroupZ = takeToken();\r\n break;\r\n case \"dcl_unordered_access_view_typed\": {\r\n // Same dimension-bits layout as `dcl_resource` (bits 11-15); bit 16 is\r\n // the globally-coherent access flag here rather than an MS sample count.\r\n const dimension = (token0 >>> 11) & 0x1f;\r\n declaration.resourceDimension = dimension;\r\n declaration.resourceDimensionName = DxbcResourceDimensionNames[dimension] || `dimension_${dimension}`;\r\n declaration.globallyCoherent = (token0 & 0x00010000) !== 0;\r\n const operand = takeOperand();\r\n declaration.returnType = decodeReturnTypeToken(takeToken());\r\n if (isSm51) applyBindingRange(operand, takeToken());\r\n else declaration.registerIndex = operand.registerIndex;\r\n break;\r\n }\r\n case \"dcl_unordered_access_view_raw\": {\r\n const operand = takeOperand();\r\n declaration.globallyCoherent = (token0 & 0x00010000) !== 0;\r\n if (isSm51) applyBindingRange(operand, takeToken());\r\n else declaration.registerIndex = operand.registerIndex;\r\n break;\r\n }\r\n case \"dcl_unordered_access_view_structured\": {\r\n const operand = takeOperand();\r\n declaration.globallyCoherent = (token0 & 0x00010000) !== 0;\r\n declaration.structureStride = takeToken();\r\n if (isSm51) applyBindingRange(operand, takeToken());\r\n else declaration.registerIndex = operand.registerIndex;\r\n break;\r\n }\r\n case \"dcl_thread_group_shared_memory_raw\": {\r\n const operand = takeOperand();\r\n declaration.registerIndex = decodeThreadGroupSharedMemoryRegister(operand, failDeclaration);\r\n declaration.byteCount = requirePositiveDwordAligned(takeToken(), \"byteCount\", failDeclaration);\r\n break;\r\n }\r\n case \"dcl_thread_group_shared_memory_structured\": {\r\n const operand = takeOperand();\r\n declaration.registerIndex = decodeThreadGroupSharedMemoryRegister(operand, failDeclaration);\r\n declaration.structureStride = requirePositiveDwordAligned(takeToken(), \"structureStride\", failDeclaration);\r\n declaration.structureCount = takeToken();\r\n if (declaration.structureCount === 0)\r\n {\r\n throw failDeclaration(\"DXBC thread-group shared-memory structureCount must be positive\");\r\n }\r\n break;\r\n }\r\n case \"dcl_input_ps\": {\r\n const interpolation = (token0 >>> 11) & 0xf;\r\n declaration.interpolationMode = interpolation;\r\n declaration.interpolationModeName = INTERPOLATION_MODE_NAMES[interpolation] || `interpolation_${interpolation}`;\r\n declaration.registerIndex = takeOperand().registerIndex;\r\n break;\r\n }\r\n case \"dcl_input_sgv\":\r\n case \"dcl_input_siv\":\r\n case \"dcl_output_sgv\":\r\n case \"dcl_output_siv\":\r\n case \"dcl_input_ps_sgv\":\r\n case \"dcl_input_ps_siv\": {\r\n if (name === \"dcl_input_ps_siv\")\r\n {\r\n const interpolation = (token0 >>> 11) & 0xf;\r\n declaration.interpolationMode = interpolation;\r\n declaration.interpolationModeName = INTERPOLATION_MODE_NAMES[interpolation] || `interpolation_${interpolation}`;\r\n }\r\n declaration.registerIndex = takeOperand().registerIndex;\r\n const nameToken = takeToken();\r\n declaration.systemValue = nameToken & 0xffff;\r\n declaration.systemValueName = DxbcSystemValueNames[declaration.systemValue] || `name_${declaration.systemValue}`;\r\n break;\r\n }\r\n case \"dcl_index_range\":\r\n declaration.registerIndex = takeOperand().registerIndex;\r\n declaration.indexRange = takeToken();\r\n break;\r\n default:\r\n instruction.declaration = null;\r\n break;\r\n }\r\n\r\n if (cursor < end)\r\n {\r\n instruction.tailTokens = Array.from(this.tokens.subarray(cursor, end));\r\n }\r\n }\r\n\r\n /**\r\n * Decodes a run of operands that must consume the region exactly.\r\n *\r\n * @param {number} cursor Token index of the first operand.\r\n * @param {number} end Exclusive token index of the instruction end.\r\n * @param {object} instruction Instruction record used in error details.\r\n * @returns {object[]} Decoded operands.\r\n * @private\r\n */\r\n _decodeOperandRun(cursor, end, instruction)\r\n {\r\n const operands = [];\r\n while (cursor < end)\r\n {\r\n const operand = this._decodeOperand(cursor, end, instruction);\r\n operands.push(operand);\r\n cursor += operand.length;\r\n }\r\n if (cursor !== end)\r\n {\r\n throw new DxbcReadError(\"DXBC operands overran the instruction length\", {\r\n source: this.source,\r\n offset: instruction.offset,\r\n opcodeName: instruction.opcodeName\r\n });\r\n }\r\n return operands;\r\n }\r\n\r\n /**\r\n * Decodes one operand, including extension tokens, register indices,\r\n * relative-index nested operands, and immediate values.\r\n *\r\n * @param {number} cursor Token index of the operand token.\r\n * @param {number} end Exclusive token index of the instruction end.\r\n * @param {object} instruction Instruction record used in error details.\r\n * @param {number} [depth] Relative-operand nesting depth.\r\n * @returns {object} Decoded operand with its consumed token `length`.\r\n * @private\r\n */\r\n _decodeOperand(cursor, end, instruction, depth = 0)\r\n {\r\n const fail = (message, details = {}) => new DxbcReadError(message, {\r\n source: this.source,\r\n offset: instruction.offset,\r\n opcodeName: instruction.opcodeName,\r\n operandCursor: cursor,\r\n ...details\r\n });\r\n\r\n if (cursor >= end)\r\n {\r\n throw fail(\"DXBC operand lies outside the instruction\");\r\n }\r\n if (depth > 4)\r\n {\r\n throw fail(\"DXBC relative operand nesting is too deep\");\r\n }\r\n\r\n const token = this.tokens[cursor];\r\n const type = (token >>> 12) & 0xff;\r\n const componentCountMode = token & 0x3;\r\n const selectionMode = (token >>> 2) & 0x3;\r\n const operand = {\r\n token,\r\n type,\r\n typeName: DxbcOperandTypeNames[type] || `operand_type_${type}`,\r\n componentCount: componentCountMode === 0 ? 0 : (componentCountMode === 1 ? 1 : 4),\r\n selectionModeName: \"none\",\r\n mask: \"\",\r\n swizzle: \"\",\r\n selected: \"\",\r\n modifierName: \"none\",\r\n minPrecisionName: \"default\",\r\n nonUniform: false,\r\n registerIndex: null,\r\n indices: [],\r\n immediateValues: [],\r\n length: 1\r\n };\r\n if (componentCountMode === 3)\r\n {\r\n throw fail(\"DXBC N-component operands are not supported\", { token });\r\n }\r\n\r\n if (operand.componentCount === 4)\r\n {\r\n if (selectionMode === 0)\r\n {\r\n operand.selectionModeName = \"mask\";\r\n operand.mask = maskToComponents((token >>> 4) & 0xf);\r\n }\r\n else if (selectionMode === 1)\r\n {\r\n operand.selectionModeName = \"swizzle\";\r\n operand.swizzle = [ 0, 1, 2, 3 ]\r\n .map((slot) => COMPONENTS[(token >>> (4 + slot * 2)) & 0x3])\r\n .join(\"\");\r\n }\r\n else if (selectionMode === 2)\r\n {\r\n operand.selectionModeName = \"select1\";\r\n operand.selected = COMPONENTS[(token >>> 4) & 0x3];\r\n }\r\n }\r\n\r\n let chainToken = token;\r\n while ((chainToken >>> 31) === 1)\r\n {\r\n if (cursor + operand.length >= end)\r\n {\r\n throw fail(\"DXBC extended-operand chain overruns the instruction\");\r\n }\r\n chainToken = this.tokens[cursor + operand.length];\r\n operand.length += 1;\r\n if ((chainToken & 0x3f) === 1)\r\n {\r\n const modifier = (chainToken >>> 6) & 0xff;\r\n const minPrecision = (chainToken >>> 14) & 0x7;\r\n operand.modifierName = DxbcOperandModifierNames[modifier] || `modifier_${modifier}`;\r\n operand.minPrecisionName = MIN_PRECISION_NAMES[minPrecision] || `min_precision_${minPrecision}`;\r\n operand.nonUniform = ((chainToken >>> 17) & 1) !== 0;\r\n }\r\n }\r\n\r\n const indexDimension = (token >>> 20) & 0x3;\r\n for (let dimension = 0; dimension < indexDimension; dimension += 1)\r\n {\r\n const representation = (token >>> (22 + dimension * 3)) & 0x7;\r\n const index = { dimension, representation, values: [], relative: null };\r\n const immediateCount = representation === 1 || representation === 4 ? 2 : (representation === 2 ? 0 : 1);\r\n\r\n for (let word = 0; word < immediateCount; word += 1)\r\n {\r\n if (cursor + operand.length >= end)\r\n {\r\n throw fail(\"DXBC operand index lies outside the instruction\", { dimension, representation });\r\n }\r\n index.values.push(this.tokens[cursor + operand.length]);\r\n operand.length += 1;\r\n }\r\n if (representation >= 2 && representation <= 4)\r\n {\r\n const relative = this._decodeOperand(cursor + operand.length, end, instruction, depth + 1);\r\n index.relative = relative;\r\n operand.length += relative.length;\r\n }\r\n else if (representation > 4)\r\n {\r\n throw fail(\"Unknown DXBC operand index representation\", { dimension, representation });\r\n }\r\n\r\n if (dimension === 0 && index.values.length > 0)\r\n {\r\n operand.registerIndex = index.values[0];\r\n }\r\n operand.indices.push(index);\r\n }\r\n\r\n if (type === 4 || type === 5)\r\n {\r\n const words = operand.componentCount * (type === 5 ? 2 : 1);\r\n if (cursor + operand.length + words > end)\r\n {\r\n throw fail(\"DXBC immediate values lie outside the instruction\");\r\n }\r\n const floatView = new Float32Array(this.tokens.buffer, this.tokens.byteOffset, this.tokens.length);\r\n for (let word = 0; word < words; word += 1)\r\n {\r\n operand.immediateValues.push({\r\n uint32: this.tokens[cursor + operand.length + word],\r\n float32: type === 4 ? floatView[cursor + operand.length + word] : null\r\n });\r\n }\r\n operand.length += words;\r\n }\r\n\r\n return operand;\r\n }\r\n}\r\n"],"names":["COMPONENTS","DxbcOperandTypeNames","Object","freeze","DxbcOperandModifierNames","DxbcSystemValueNames","DxbcResourceDimensionNames","DxbcResourceReturnTypeNames","RESINFO_RETURN_TYPE_NAMES","SAMPLER_MODE_NAMES","INTERPOLATION_MODE_NAMES","MIN_PRECISION_NAMES","CUSTOM_DATA_CLASS_NAMES","SYNC_FLAG_NAMES","SM51_RESOURCE_OPERAND_TYPES","Set","SM51_UNBOUNDED_REGISTER","signExtend4","value","maskToComponents","mask","filter","_","index","join","decodeOpcodeExtension","token","type","out","typeName","sampleOffsets","u","v","w","resourceDimension","resourceDimensionName","structureStride","resourceReturnTypes","map","coord","decodeReturnTypeToken","returnTypes","returnTypeNames","decodeSm51BindingRange","operand","registerSpace","fail","indices","length","indexDimension","values","representation","relative","dimension","rangeId","lowerBound","upperBound","unbounded","bindingModel","registerCount","decodeSm51ResourceReference","has","reference","nonUniform","absoluteIndex","bufferIndex","vectorOffset","decodeThreadGroupSharedMemoryRegister","operandType","operandTypeName","componentCount","selectionModeName","modifierName","minPrecisionName","requirePositiveDwordAligned","fieldName","DxbcInstructionDecoder","constructor","tokens","Uint32Array","instructions","source","Decode","program","options","programType","programTypeName","majorVersion","minorVersion","position","instruction","_decodeInstruction","push","opcodeHistogram","histogram","Map","set","opcodeName","get","token0","opcode","dxbcOpcodeName","DxbcOpcodeNames","DxbcReadError","offset","DXBC_OPCODE_CUSTOMDATA","_decodeCustomData","programLength","extensions","cursor","chainToken","isDeclaration","dxbcIsDeclarationOpcode","saturate","preciseMask","operands","declaration","customData","tailTokens","DxbcBooleanTestOpcodeNames","testBoolean","returnType","resinfoReturnType","resinfoReturnTypeName","syncFlags","syncFlagNames","end","_decodeDeclaration","_decodeOperandRun","resourceReference","dataClass","dataClassName","valueCount","immediateConstantBuffer","floatView","Float32Array","buffer","byteOffset","rows","component","uint32","float32","name","takeOperand","_decodeOperand","takeToken","failDeclaration","message","details","applyBindingRange","bindingRange","registerIndex","isSm51","globalFlags","refactoringAllowed","tempCount","accessPattern","sizeInVec4","samplerMode","samplerModeName","sampleCount","extensionStride","find","ext","threadGroupX","threadGroupY","threadGroupZ","globallyCoherent","byteCount","structureCount","interpolation","interpolationMode","interpolationModeName","nameToken","systemValue","systemValueName","indexRange","Array","from","subarray","depth","operandCursor","componentCountMode","selectionMode","swizzle","selected","immediateValues","slot","modifier","minPrecision","immediateCount","word","words"],"mappings":"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"}
@@ -1,8 +1,8 @@
1
1
  import { toJsonWithCollections } from '../../../format/jsonPolicies.js';
2
2
  import { asUint8Array } from '#utils/bytes';
3
- import { DxbcContainer } from './container.js';
4
- import { DxbcSignatureChunk } from './signature.js';
5
- import { DxbcShaderProgram } from './program.js';
3
+ import { DxbcContainer } from './DxbcContainer.js';
4
+ import { DxbcSignatureChunk } from './DxbcSignatureChunk.js';
5
+ import { DxbcShaderProgram } from './DxbcShaderProgram.js';
6
6
  import { DxbcInstructionDecoder } from './decoder.js';
7
7
 
8
8
  const OUTPUT_JSON = "json";