@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,7 +1,6 @@
1
1
  import { CjsSchema } from '#schema';
2
2
  import { Tr2MsaaDesc, ALResult, Tr2ALMemoryType } from '#trinityal';
3
3
  import { TextureType, Tr2GpuUsage, Tr2CpuUsage, HasFlag, PixelFormat } from '#consts/render-context';
4
- import { CarbonPixelFormatToWebGpu, SrgbSiblingOf } from '../../global/consts/webgpu/textureFormats.js';
5
4
  import { RenderContextALOf } from '../renderContextAL.js';
6
5
 
7
6
  // Source: trinity/trinityal/include/Tr2TextureAL.h
@@ -62,7 +61,7 @@ class CjsWebgpuTextureAL {
62
61
  *
63
62
  * @param {object} desc A `Tr2BitmapDimensions`.
64
63
  * @param {object} options `{ gpuUsage, cpuUsage, msaa, initialData }`;
65
- * `initialData` is an array of `{ sysMem, sysMemPitch, sysMemSlicePitch }`
64
+ * `initialData` is an array of `Tr2SubresourceData`
66
65
  * indexed `mip + layer * mipCount`, as Carbon's is.
67
66
  * @param {object} renderContext The render context, Trinity's or the AL.
68
67
  * @returns {number} An `ALResult` value.
@@ -88,13 +87,13 @@ class CjsWebgpuTextureAL {
88
87
  // write that arrives with no pixels samples black forever. Refused.
89
88
  const writable = HasFlag(gpuUsage, Tr2GpuUsage.RENDER_TARGET) || HasFlag(gpuUsage, Tr2GpuUsage.UNORDERED_ACCESS) || HasFlag(gpuUsage, Tr2GpuUsage.DEPTH_STENCIL) || HasFlag(cpuUsage, Tr2CpuUsage.WRITE);
90
89
  if (!writable && !initialData) return ALResult.E_INVALIDARG;
91
- const format = CarbonPixelFormatToWebGpu[desc.GetFormat()] ?? null;
90
+ const format = al.m_utils.GetGPUTextureFormat(desc.GetFormat());
92
91
  if (!format) return ALResult.E_INVALIDARG;
93
92
  const webgpu = al.GetWebgpu();
94
93
  if (!webgpu) return ALResult.E_INVALIDCALL;
95
94
  const device = webgpu.GetDevice();
96
95
  const usageFlags = webgpu.GetTextureUsage();
97
- const srgbFormat = SrgbSiblingOf(format);
96
+ const srgbFormat = al.m_utils.GetSRGBViewFormat(format);
98
97
  const mipCount = Math.max(1, desc.GetTrueMipCount());
99
98
  const layers = type === TextureType.TEX_TYPE_3D ? Math.max(1, desc.GetDepth()) : Math.max(1, desc.GetArraySize());
100
99
  let usage = usageFlags.TEXTURE_BINDING | usageFlags.COPY_DST;
@@ -136,10 +135,10 @@ class CjsWebgpuTextureAL {
136
135
  for (let layer = 0; layer < layerCount; layer += 1) {
137
136
  for (let mip = 0; mip < mipCount; mip += 1) {
138
137
  const subresource = initialData[mip + layer * mipCount];
139
- if (!subresource || !subresource.sysMem) continue;
140
- const bytes = subresource.sysMem;
141
- const pitch = subresource.sysMemPitch;
142
- const slicePitch = subresource.sysMemSlicePitch || bytes.byteLength;
138
+ if (!subresource || !subresource.m_sysMem) continue;
139
+ const bytes = subresource.m_sysMem;
140
+ const pitch = subresource.m_sysMemPitch;
141
+ const slicePitch = subresource.m_sysMemSlicePitch || bytes.byteLength;
143
142
  const depth = type === TextureType.TEX_TYPE_3D ? Math.max(1, desc.GetMipDepth(mip)) : 1;
144
143
  queue.writeTexture({
145
144
  texture: this.m_texture,
@@ -290,18 +289,81 @@ class CjsWebgpuTextureAL {
290
289
  return ALResult.E_FAIL;
291
290
  }
292
291
 
293
- /** Carbon's immutable texture cannot be mapped for writing either. */
294
- MapForWriting(_region, _renderContext) {
295
- return {
292
+ /** The CPU copy a write mapping hands out; kept between maps for WRITE_OFTEN. */
293
+ _mappedData = null;
294
+
295
+ /** The subresource the current write mapping covers, or null when unmapped. */
296
+ _mappedRegion = null;
297
+
298
+ /**
299
+ * Hands out memory for writing one subresource, Carbon's `MapForWriting`,
300
+ * with the stub's checks (`Tr2TextureALStub.MapForWriting`).
301
+ *
302
+ * WebGPU has no mappable texture memory, so the memory is a CPU copy of the
303
+ * mip, uploaded by `UnmapForWriting` with `queue.writeTexture` - the shape
304
+ * this backend's constant buffers already use. The copy starts zeroed, not
305
+ * with the texture's contents, because WebGPU cannot read a texture back
306
+ * synchronously; so a region with a box is refused rather than letting the
307
+ * upload overwrite the texels outside it. `Tr2DataTextureManager` maps the
308
+ * whole of subresource 0.
309
+ *
310
+ * @param {object} region A `Tr2TextureSubresource`.
311
+ * @param {object} renderContext The render context, Trinity's or the AL.
312
+ * @returns {{result: number, data: Uint8Array|null, pitch: number}} The mapping.
313
+ */
314
+ MapForWriting(region, renderContext) {
315
+ if (!HasFlag(this.m_cpuUsage, Tr2CpuUsage.WRITE)) return {
316
+ result: ALResult.E_INVALIDCALL,
317
+ data: null,
318
+ pitch: 0
319
+ };
320
+ const al = RenderContextALOf(renderContext);
321
+ if (!this.IsValid() || !al || !al.IsValid()) return {
296
322
  result: ALResult.E_FAIL,
297
323
  data: null,
298
324
  pitch: 0
299
325
  };
326
+ if (!region.IsValidForBitmap(this.m_desc) || !region.IsSingleSubresource() || region.HasBox()) {
327
+ return {
328
+ result: ALResult.E_INVALIDARG,
329
+ data: null,
330
+ pitch: 0
331
+ };
332
+ }
333
+ const mip = region.m_startMipLevel;
334
+ const pitch = this.m_desc.GetMipPitch(mip);
335
+ const size = pitch * this.m_desc.GetMipHeight(mip);
336
+ if (size === 0) return {
337
+ result: ALResult.E_FAIL,
338
+ data: null,
339
+ pitch: 0
340
+ };
341
+ if (this._mappedData === null || this._mappedData.length !== size) this._mappedData = new Uint8Array(size);
342
+ this._mappedRegion = region;
343
+ return {
344
+ result: ALResult.S_OK,
345
+ data: this._mappedData,
346
+ pitch
347
+ };
300
348
  }
301
349
 
302
- /** Paired with `MapForWriting`, which this backend refuses. */
303
- UnmapForWriting(_renderContext) {
304
- return ALResult.E_FAIL;
350
+ /**
351
+ * Uploads what was written into the mapping, Carbon's `UnmapForWriting`.
352
+ * The CPU copy is kept for the next map only when the texture was created
353
+ * `WRITE_OFTEN`, as the stub keeps its buffer.
354
+ *
355
+ * @param {object} renderContext The render context, Trinity's or the AL.
356
+ * @returns {number} An `ALResult` value.
357
+ */
358
+ UnmapForWriting(renderContext) {
359
+ if (this._mappedRegion === null) return ALResult.E_INVALIDCALL;
360
+ const region = this._mappedRegion;
361
+ const mip = region.m_startMipLevel;
362
+ const pitch = this.m_desc.GetMipPitch(mip);
363
+ const result = this.UpdateSubresource(region, this._mappedData, pitch, pitch * this.m_desc.GetMipHeight(mip), renderContext);
364
+ this._mappedRegion = null;
365
+ if (!HasFlag(this.m_cpuUsage, Tr2CpuUsage.WRITE_OFTEN)) this._mappedData = null;
366
+ return result;
305
367
  }
306
368
 
307
369
  /**
@@ -373,6 +435,8 @@ class CjsWebgpuTextureAL {
373
435
  this.m_texture?.destroy?.();
374
436
  this.m_texture = null;
375
437
  this.m_views = new Map();
438
+ this._mappedData = null;
439
+ this._mappedRegion = null;
376
440
  this.m_desc = null;
377
441
  this.m_format = null;
378
442
  this.m_srgbFormat = null;
@@ -1 +1 @@
1
- {"version":3,"file":"CjsWebgpuTextureAL.js","sources":["../../../../src/trinityal/webgpu/CjsWebgpuTextureAL.js"],"sourcesContent":["// Source: trinity/trinityal/include/Tr2TextureAL.h\n// trinity/trinityal/metal/Tr2TextureALMetal.mm\n// trinity/trinityal/stub/Tr2TextureALStub.cpp\n//\n// A `Tr2TextureAL` holding a real `GPUTexture`.\n//\n// CREATED WITH ITS DATA, NEVER UPDATED INTO. Carbon's texture resource creates\n// its texture from the decoded bitmap with one `Tr2SubresourceData` per\n// (mip, layer), indexed `mip + layer * mipCount`\n// (`Tr2ImageIOHelpers.cpp:104-128`), and Metal uploads them one\n// `replaceRegion` per (slice, mip) (`Tr2TextureALMetal.mm:140-268`). This does\n// the same with one `writeTexture` per subresource.\n//\n// THE sRGB VIEW IS A FORMAT-REINTERPRETING VIEW, as Metal's is: `MetalContext.mm:342-357`\n// makes `newTextureViewWithPixelFormat:` of the sRGB sibling for RGBA8, BGRA8,\n// BC1, BC2, BC3 and BC7, and `GetSRGBViewMetalTexture()` is what a\n// `COLOR_SPACE_SRGB` SRV binds. WebGPU needs the sibling declared in\n// `viewFormats` at creation, so it is.\n//\n// FIELDS ARE PUBLIC AND CARBON-NAMED, for the reason recorded on `CjsWebgpuShaderAL`.\nimport { CjsSchema } from \"#schema\";\nimport { ALResult, Tr2ALMemoryType, Tr2MsaaDesc } from \"#trinityal\";\nimport { PixelFormat, TextureType, Tr2CpuUsage, Tr2GpuUsage, HasFlag } from \"#consts/render-context\";\nimport { CarbonPixelFormatToWebGpu, SrgbSiblingOf } from \"../../global/consts/webgpu/textureFormats.js\";\nimport { RenderContextALOf } from \"../renderContextAL.js\";\n\nconst NO_HEAP_INDEX = 0xffffffff;\n\n/** Carbon texture type to WebGPU's view dimension for the texture as a whole. */\nconst VIEW_DIMENSION_OF_TYPE = Object.freeze({\n [TextureType.TEX_TYPE_2D]: \"2d\",\n [TextureType.TEX_TYPE_CUBE]: \"cube\",\n [TextureType.TEX_TYPE_3D]: \"3d\"\n});\n\n\n/**\n * A `Tr2TextureAL` backed by a WebGPU `GPUTexture`, created with all of its data.\n */\nexport class CjsWebgpuTextureAL\n{\n /** m_desc, a `Tr2BitmapDimensions`. */\n m_desc = null;\n\n m_msaa = new Tr2MsaaDesc();\n\n m_gpuUsage = Tr2GpuUsage.NONE;\n\n m_cpuUsage = Tr2CpuUsage.NONE;\n\n /** The `GPUTexture`, or null before Create. */\n m_texture = null;\n\n /** The `GPUTextureFormat` it was created with. */\n m_format = null;\n\n /** The sRGB sibling format, when the format has one and a view of it exists. */\n m_srgbFormat = null;\n\n /** Views by `dimension:colorSpace`, made on first request. */\n m_views = new Map();\n\n m_webgpu = null;\n\n m_name = \"\";\n\n /**\n * Creates the texture and uploads its initial data.\n *\n * @param {object} desc A `Tr2BitmapDimensions`.\n * @param {object} options `{ gpuUsage, cpuUsage, msaa, initialData }`;\n * `initialData` is an array of `{ sysMem, sysMemPitch, sysMemSlicePitch }`\n * indexed `mip + layer * mipCount`, as Carbon's is.\n * @param {object} renderContext The render context, Trinity's or the AL.\n * @returns {number} An `ALResult` value.\n */\n Create(desc, options, renderContext)\n {\n this.Destroy();\n\n const { gpuUsage = Tr2GpuUsage.NONE, cpuUsage = Tr2CpuUsage.NONE, msaa = new Tr2MsaaDesc(), initialData = null } = options ?? {};\n const al = RenderContextALOf(renderContext);\n\n if (!al || !al.IsValid()) return ALResult.E_FAIL;\n if (!desc || desc.GetWidth() === 0 || desc.GetHeight() === 0) return ALResult.E_INVALIDARG;\n if (msaa.samples > 1) return ALResult.E_INVALIDARG;\n\n const type = desc.GetType();\n const dimension = VIEW_DIMENSION_OF_TYPE[type];\n\n if (!dimension) return ALResult.E_INVALIDARG;\n if (type === TextureType.TEX_TYPE_CUBE && desc.GetArraySize() % 6 !== 0) return ALResult.E_INVALIDARG;\n\n // Carbon's own rule (the stub's last check): a texture nothing can ever\n // write that arrives with no pixels samples black forever. Refused.\n const writable = HasFlag(gpuUsage, Tr2GpuUsage.RENDER_TARGET) || HasFlag(gpuUsage, Tr2GpuUsage.UNORDERED_ACCESS)\n || HasFlag(gpuUsage, Tr2GpuUsage.DEPTH_STENCIL) || HasFlag(cpuUsage, Tr2CpuUsage.WRITE);\n\n if (!writable && !initialData) return ALResult.E_INVALIDARG;\n\n const format = CarbonPixelFormatToWebGpu[desc.GetFormat()] ?? null;\n\n if (!format) return ALResult.E_INVALIDARG;\n\n const webgpu = al.GetWebgpu();\n if (!webgpu) return ALResult.E_INVALIDCALL;\n\n const device = webgpu.GetDevice();\n const usageFlags = webgpu.GetTextureUsage();\n const srgbFormat = SrgbSiblingOf(format);\n const mipCount = Math.max(1, desc.GetTrueMipCount());\n const layers = type === TextureType.TEX_TYPE_3D ? Math.max(1, desc.GetDepth()) : Math.max(1, desc.GetArraySize());\n let usage = usageFlags.TEXTURE_BINDING | usageFlags.COPY_DST;\n\n if (HasFlag(gpuUsage, Tr2GpuUsage.RENDER_TARGET) || HasFlag(gpuUsage, Tr2GpuUsage.DEPTH_STENCIL))\n {\n usage |= usageFlags.RENDER_ATTACHMENT ?? 0;\n }\n\n this.m_texture = device.createTexture({\n label: this.m_name || \"Tr2TextureAL\",\n size: { width: desc.GetWidth(), height: desc.GetHeight(), depthOrArrayLayers: layers },\n mipLevelCount: mipCount,\n sampleCount: 1,\n dimension: type === TextureType.TEX_TYPE_3D ? \"3d\" : \"2d\",\n format,\n usage,\n ...(srgbFormat ? { viewFormats: [ srgbFormat ] } : {})\n });\n this.m_format = format;\n this.m_srgbFormat = srgbFormat;\n this.m_desc = desc;\n this.m_msaa = msaa;\n this.m_gpuUsage = gpuUsage;\n this.m_cpuUsage = cpuUsage;\n this.m_webgpu = webgpu;\n\n if (initialData) this._Upload(initialData, mipCount, type);\n\n return ALResult.S_OK;\n }\n\n /** One `writeTexture` per subresource, Carbon's `mip + layer * mipCount` order. */\n _Upload(initialData, mipCount, type)\n {\n const desc = this.m_desc;\n const queue = this.m_webgpu.GetDevice().queue;\n const layerCount = type === TextureType.TEX_TYPE_3D ? 1 : Math.max(1, desc.GetArraySize());\n\n for (let layer = 0; layer < layerCount; layer += 1)\n {\n for (let mip = 0; mip < mipCount; mip += 1)\n {\n const subresource = initialData[mip + layer * mipCount];\n\n if (!subresource || !subresource.sysMem) continue;\n\n const bytes = subresource.sysMem;\n const pitch = subresource.sysMemPitch;\n const slicePitch = subresource.sysMemSlicePitch || bytes.byteLength;\n const depth = type === TextureType.TEX_TYPE_3D ? Math.max(1, desc.GetMipDepth(mip)) : 1;\n\n queue.writeTexture(\n { texture: this.m_texture, mipLevel: mip, origin: { x: 0, y: 0, z: layer } },\n bytes,\n { offset: 0, bytesPerRow: pitch, rowsPerImage: pitch ? Math.max(1, Math.floor(slicePitch / pitch)) : undefined },\n { width: desc.GetMipWidth(mip), height: desc.GetMipHeight(mip), depthOrArrayLayers: depth }\n );\n }\n }\n }\n\n /**\n * The view a resource set binds: linear or sRGB, in the layout's dimension.\n *\n * Metal's `GetMetalTexture()` / `GetSRGBViewMetalTexture()`\n * (`Tr2TextureALMetal.h:49-54`), with the dimension added because a WebGPU\n * view must name it and a cube texture is legitimately bound as a 2d-array.\n *\n * @param {string} [viewDimension] A `GPUTextureViewDimension`.\n * @param {number} [colorSpace] A `Tr2ColorSpace`; non-zero means sRGB.\n * @returns {object|null} A `GPUTextureView`, or null before Create.\n */\n GetDeviceTextureView(viewDimension = VIEW_DIMENSION_OF_TYPE[this.m_desc?.GetType()] ?? \"2d\", colorSpace = 0)\n {\n if (!this.m_texture) return null;\n\n const srgb = colorSpace !== 0 && this.m_srgbFormat !== null;\n const key = `${viewDimension}:${srgb ? \"srgb\" : \"linear\"}`;\n let view = this.m_views.get(key) ?? null;\n\n if (!view)\n {\n view = this.m_texture.createView({\n label: `${this.m_name || \"Tr2TextureAL\"} ${key}`,\n dimension: viewDimension,\n ...(srgb ? { format: this.m_srgbFormat } : {})\n });\n this.m_views.set(key, view);\n }\n\n return view;\n }\n\n /** The `GPUTexture`; Metal's `GetMetalTexture` under this backend's name. */\n GetDeviceTexture()\n {\n return this.m_texture;\n }\n\n /** Whether the texture holds a `GPUTexture`. */\n IsValid()\n {\n return this.m_texture !== null;\n }\n\n /** Shared textures need a native handle WebGPU does not expose; always fails. */\n OpenShared()\n {\n return ALResult.E_FAIL;\n }\n\n /** The `Tr2BitmapDimensions` this texture was created from, or null. */\n GetDesc()\n {\n return this.m_desc;\n }\n\n /** The multisample description; this backend creates single-sampled textures. */\n GetMsaaDesc()\n {\n return this.m_msaa;\n }\n\n /** The `Tr2GpuUsage` flags it was created with. */\n GetGpuUsage()\n {\n return this.m_gpuUsage;\n }\n\n /** The `Tr2CpuUsage` flags it was created with. */\n GetCpuUsage()\n {\n return this.m_cpuUsage;\n }\n\n /** Width in texels of mip zero, or zero before Create. */\n GetWidth()\n {\n return this.m_desc ? this.m_desc.GetWidth() : 0;\n }\n\n /** Height in texels of mip zero, or zero before Create. */\n GetHeight()\n {\n return this.m_desc ? this.m_desc.GetHeight() : 0;\n }\n\n /** Depth in texels of mip zero, which is one unless the texture is 3D. */\n GetDepth()\n {\n return this.m_desc ? this.m_desc.GetDepth() : 0;\n }\n\n /** The mip count requested at creation, which may be zero for a full chain. */\n GetMipCount()\n {\n return this.m_desc ? this.m_desc.GetMipCount() : 0;\n }\n\n /** The mip count actually created, with a requested zero resolved. */\n GetTrueMipCount()\n {\n return this.m_desc ? this.m_desc.GetTrueMipCount() : 0;\n }\n\n /** The Carbon `PixelFormat`, or `PIXEL_FORMAT_UNKNOWN` before Create. */\n GetFormat()\n {\n return this.m_desc ? this.m_desc.GetFormat() : PixelFormat.PIXEL_FORMAT_UNKNOWN;\n }\n\n /** The Carbon `TextureType`, or `TEX_TYPE_INVALID` before Create. */\n GetType()\n {\n return this.m_desc ? this.m_desc.GetType() : TextureType.TEX_TYPE_INVALID;\n }\n\n /** The layer count, which for a cube counts its six faces. */\n GetArraySize()\n {\n return this.m_desc ? this.m_desc.GetArraySize() : 0;\n }\n\n /**\n * The byte size of one mip across all layers.\n *\n * @param {number} level The mip level.\n * @returns {number} Its size in bytes, or zero before Create.\n */\n GetMipSize(level)\n {\n return this.m_desc ? this.m_desc.GetMipSize(level) : 0;\n }\n\n /** Reading back needs a staging buffer and an await; refused by name. */\n MapForReading(_region, _synchronize, _renderContext)\n {\n return { result: ALResult.E_FAIL, data: null, pitch: 0 };\n }\n\n /** Paired with `MapForReading`, which this backend refuses. */\n UnmapForReading(_renderContext)\n {\n return ALResult.E_FAIL;\n }\n\n /** Carbon's immutable texture cannot be mapped for writing either. */\n MapForWriting(_region, _renderContext)\n {\n return { result: ALResult.E_FAIL, data: null, pitch: 0 };\n }\n\n /** Paired with `MapForWriting`, which this backend refuses. */\n UnmapForWriting(_renderContext)\n {\n return ALResult.E_FAIL;\n }\n\n /**\n * Replaces one mip of one slice, Carbon's `UpdateSubresource`.\n *\n * @param {object} region A `Tr2TextureSubresource` naming one mip and slice.\n * @param {ArrayBufferView} source The texels.\n * @param {number} pitch Bytes per row.\n * @param {number} slicePitch Bytes per slice.\n * @returns {number} An `ALResult` value.\n */\n UpdateSubresource(region, source, pitch, slicePitch, _renderContext)\n {\n if (!this.IsValid()) return ALResult.E_INVALIDCALL;\n if (!region || !source) return ALResult.E_INVALIDARG;\n\n const mip = region.m_startMipLevel ?? 0;\n const layer = region.m_startFace ?? 0;\n\n this.m_webgpu.GetDevice().queue.writeTexture(\n { texture: this.m_texture, mipLevel: mip, origin: { x: 0, y: 0, z: layer } },\n source,\n { offset: 0, bytesPerRow: pitch, rowsPerImage: pitch ? Math.max(1, Math.floor((slicePitch || source.byteLength) / pitch)) : undefined },\n { width: this.m_desc.GetMipWidth(mip), height: this.m_desc.GetMipHeight(mip), depthOrArrayLayers: 1 }\n );\n\n return ALResult.S_OK;\n }\n\n /** Needs a command encoder the AL is not handed here; refused by name. */\n CopySubresourceRegion()\n {\n return ALResult.E_FAIL;\n }\n\n /** WebGPU has no mip generator; a full chain is uploaded at creation instead. */\n GenerateMipMaps()\n {\n return ALResult.E_FAIL;\n }\n\n /** Multisample resolve, which this backend has no multisampled textures for. */\n Resolve()\n {\n return ALResult.E_FAIL;\n }\n\n /** The native shared handle, which WebGPU does not expose. */\n GetSharedHandle()\n {\n return null;\n }\n\n /** The descriptor-heap slot, which only the D3D12 backend has. */\n GetSrvIndexInHeap()\n {\n return NO_HEAP_INDEX;\n }\n\n /** The descriptor-heap slot, which only the D3D12 backend has. */\n GetUavIndexInHeap()\n {\n return NO_HEAP_INDEX;\n }\n\n /** Releases the `GPUTexture` and its views, leaving the AL invalid. */\n Destroy()\n {\n this.m_texture?.destroy?.();\n this.m_texture = null;\n this.m_views = new Map();\n this.m_desc = null;\n this.m_format = null;\n this.m_srgbFormat = null;\n this.m_webgpu = null;\n this.m_gpuUsage = Tr2GpuUsage.NONE;\n this.m_cpuUsage = Tr2CpuUsage.NONE;\n }\n\n /** Where the texture lives, which for this backend is always video memory. */\n GetMemoryClass()\n {\n return Tr2ALMemoryType.AL_MEMORY_VIDEO;\n }\n\n /**\n * Fills in what this AL knows for a memory report.\n *\n * @param {object} description The description to fill in.\n * @returns {object} The same description.\n */\n Describe(description)\n {\n if (!description) return description;\n\n description.memoryClass = this.GetMemoryClass();\n\n return description;\n }\n\n /**\n * Names the texture, which reaches the `GPUTexture` label for debugging.\n *\n * @param {string} name The name.\n * @returns {number} An `ALResult` value.\n */\n SetName(name)\n {\n this.m_name = String(name ?? \"\");\n\n if (this.m_texture) this.m_texture.label = this.m_name;\n\n return ALResult.S_OK;\n }\n\n /** The name given by `SetName`. */\n GetName()\n {\n return this.m_name;\n }\n}\n\n// DECLARED AS A CALL, NOT A DECORATOR, for the reason recorded in\n// Tr2BitmapDimensions.js: the layer is imported straight from source by its\n// tests and raw Node cannot parse decorator syntax.\n//\n// The donor is NAMED rather than left to be derived from this class's name.\n// Carbon calls every backend's class the same thing and carries the backend in\n// the FILE name, because only one backend compiles at a time; we ship them\n// together, so the backend moves onto the class name. That divergence is the\n// author's to declare, never a checker's to guess.\nCjsSchema.define(CjsWebgpuTextureAL, { className: \"CjsWebgpuTextureAL\", carbon: \"Tr2TextureAL\" });\n"],"names":["NO_HEAP_INDEX","VIEW_DIMENSION_OF_TYPE","Object","freeze","TextureType","TEX_TYPE_2D","TEX_TYPE_CUBE","TEX_TYPE_3D","CjsWebgpuTextureAL","m_desc","m_msaa","Tr2MsaaDesc","m_gpuUsage","Tr2GpuUsage","NONE","m_cpuUsage","Tr2CpuUsage","m_texture","m_format","m_srgbFormat","m_views","Map","m_webgpu","m_name","Create","desc","options","renderContext","Destroy","gpuUsage","cpuUsage","msaa","initialData","al","RenderContextALOf","IsValid","ALResult","E_FAIL","GetWidth","GetHeight","E_INVALIDARG","samples","type","GetType","dimension","GetArraySize","writable","HasFlag","RENDER_TARGET","UNORDERED_ACCESS","DEPTH_STENCIL","WRITE","format","CarbonPixelFormatToWebGpu","GetFormat","webgpu","GetWebgpu","E_INVALIDCALL","device","GetDevice","usageFlags","GetTextureUsage","srgbFormat","SrgbSiblingOf","mipCount","Math","max","GetTrueMipCount","layers","GetDepth","usage","TEXTURE_BINDING","COPY_DST","RENDER_ATTACHMENT","createTexture","label","size","width","height","depthOrArrayLayers","mipLevelCount","sampleCount","viewFormats","_Upload","S_OK","queue","layerCount","layer","mip","subresource","sysMem","bytes","pitch","sysMemPitch","slicePitch","sysMemSlicePitch","byteLength","depth","GetMipDepth","writeTexture","texture","mipLevel","origin","x","y","z","offset","bytesPerRow","rowsPerImage","floor","undefined","GetMipWidth","GetMipHeight","GetDeviceTextureView","viewDimension","colorSpace","srgb","key","view","get","createView","set","GetDeviceTexture","OpenShared","GetDesc","GetMsaaDesc","GetGpuUsage","GetCpuUsage","GetMipCount","PixelFormat","PIXEL_FORMAT_UNKNOWN","TEX_TYPE_INVALID","GetMipSize","level","MapForReading","_region","_synchronize","_renderContext","result","data","UnmapForReading","MapForWriting","UnmapForWriting","UpdateSubresource","region","source","m_startMipLevel","m_startFace","CopySubresourceRegion","GenerateMipMaps","Resolve","GetSharedHandle","GetSrvIndexInHeap","GetUavIndexInHeap","destroy","GetMemoryClass","Tr2ALMemoryType","AL_MEMORY_VIDEO","Describe","description","memoryClass","SetName","name","String","GetName","CjsSchema","define","className","carbon"],"mappings":"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"}
1
+ {"version":3,"file":"CjsWebgpuTextureAL.js","sources":["../../../../src/trinityal/webgpu/CjsWebgpuTextureAL.js"],"sourcesContent":["// Source: trinity/trinityal/include/Tr2TextureAL.h\n// trinity/trinityal/metal/Tr2TextureALMetal.mm\n// trinity/trinityal/stub/Tr2TextureALStub.cpp\n//\n// A `Tr2TextureAL` holding a real `GPUTexture`.\n//\n// CREATED WITH ITS DATA, NEVER UPDATED INTO. Carbon's texture resource creates\n// its texture from the decoded bitmap with one `Tr2SubresourceData` per\n// (mip, layer), indexed `mip + layer * mipCount`\n// (`Tr2ImageIOHelpers.cpp:104-128`), and Metal uploads them one\n// `replaceRegion` per (slice, mip) (`Tr2TextureALMetal.mm:140-268`). This does\n// the same with one `writeTexture` per subresource.\n//\n// THE sRGB VIEW IS A FORMAT-REINTERPRETING VIEW, as Metal's is: `MetalContext.mm:342-357`\n// makes `newTextureViewWithPixelFormat:` of the sRGB sibling for RGBA8, BGRA8,\n// BC1, BC2, BC3 and BC7, and `GetSRGBViewMetalTexture()` is what a\n// `COLOR_SPACE_SRGB` SRV binds. WebGPU needs the sibling declared in\n// `viewFormats` at creation, so it is.\n//\n// FIELDS ARE PUBLIC AND CARBON-NAMED, for the reason recorded on `CjsWebgpuShaderAL`.\nimport { CjsSchema } from \"#schema\";\nimport { ALResult, Tr2ALMemoryType, Tr2MsaaDesc } from \"#trinityal\";\nimport { PixelFormat, TextureType, Tr2CpuUsage, Tr2GpuUsage, HasFlag } from \"#consts/render-context\";\nimport { RenderContextALOf } from \"../renderContextAL.js\";\n\nconst NO_HEAP_INDEX = 0xffffffff;\n\n/** Carbon texture type to WebGPU's view dimension for the texture as a whole. */\nconst VIEW_DIMENSION_OF_TYPE = Object.freeze({\n [TextureType.TEX_TYPE_2D]: \"2d\",\n [TextureType.TEX_TYPE_CUBE]: \"cube\",\n [TextureType.TEX_TYPE_3D]: \"3d\"\n});\n\n\n/**\n * A `Tr2TextureAL` backed by a WebGPU `GPUTexture`, created with all of its data.\n */\nexport class CjsWebgpuTextureAL\n{\n /** m_desc, a `Tr2BitmapDimensions`. */\n m_desc = null;\n\n m_msaa = new Tr2MsaaDesc();\n\n m_gpuUsage = Tr2GpuUsage.NONE;\n\n m_cpuUsage = Tr2CpuUsage.NONE;\n\n /** The `GPUTexture`, or null before Create. */\n m_texture = null;\n\n /** The `GPUTextureFormat` it was created with. */\n m_format = null;\n\n /** The sRGB sibling format, when the format has one and a view of it exists. */\n m_srgbFormat = null;\n\n /** Views by `dimension:colorSpace`, made on first request. */\n m_views = new Map();\n\n m_webgpu = null;\n\n m_name = \"\";\n\n /**\n * Creates the texture and uploads its initial data.\n *\n * @param {object} desc A `Tr2BitmapDimensions`.\n * @param {object} options `{ gpuUsage, cpuUsage, msaa, initialData }`;\n * `initialData` is an array of `Tr2SubresourceData`\n * indexed `mip + layer * mipCount`, as Carbon's is.\n * @param {object} renderContext The render context, Trinity's or the AL.\n * @returns {number} An `ALResult` value.\n */\n Create(desc, options, renderContext)\n {\n this.Destroy();\n\n const { gpuUsage = Tr2GpuUsage.NONE, cpuUsage = Tr2CpuUsage.NONE, msaa = new Tr2MsaaDesc(), initialData = null } = options ?? {};\n const al = RenderContextALOf(renderContext);\n\n if (!al || !al.IsValid()) return ALResult.E_FAIL;\n if (!desc || desc.GetWidth() === 0 || desc.GetHeight() === 0) return ALResult.E_INVALIDARG;\n if (msaa.samples > 1) return ALResult.E_INVALIDARG;\n\n const type = desc.GetType();\n const dimension = VIEW_DIMENSION_OF_TYPE[type];\n\n if (!dimension) return ALResult.E_INVALIDARG;\n if (type === TextureType.TEX_TYPE_CUBE && desc.GetArraySize() % 6 !== 0) return ALResult.E_INVALIDARG;\n\n // Carbon's own rule (the stub's last check): a texture nothing can ever\n // write that arrives with no pixels samples black forever. Refused.\n const writable = HasFlag(gpuUsage, Tr2GpuUsage.RENDER_TARGET) || HasFlag(gpuUsage, Tr2GpuUsage.UNORDERED_ACCESS)\n || HasFlag(gpuUsage, Tr2GpuUsage.DEPTH_STENCIL) || HasFlag(cpuUsage, Tr2CpuUsage.WRITE);\n\n if (!writable && !initialData) return ALResult.E_INVALIDARG;\n\n const format = al.m_utils.GetGPUTextureFormat(desc.GetFormat());\n\n if (!format) return ALResult.E_INVALIDARG;\n\n const webgpu = al.GetWebgpu();\n if (!webgpu) return ALResult.E_INVALIDCALL;\n\n const device = webgpu.GetDevice();\n const usageFlags = webgpu.GetTextureUsage();\n const srgbFormat = al.m_utils.GetSRGBViewFormat(format);\n const mipCount = Math.max(1, desc.GetTrueMipCount());\n const layers = type === TextureType.TEX_TYPE_3D ? Math.max(1, desc.GetDepth()) : Math.max(1, desc.GetArraySize());\n let usage = usageFlags.TEXTURE_BINDING | usageFlags.COPY_DST;\n\n if (HasFlag(gpuUsage, Tr2GpuUsage.RENDER_TARGET) || HasFlag(gpuUsage, Tr2GpuUsage.DEPTH_STENCIL))\n {\n usage |= usageFlags.RENDER_ATTACHMENT ?? 0;\n }\n\n this.m_texture = device.createTexture({\n label: this.m_name || \"Tr2TextureAL\",\n size: { width: desc.GetWidth(), height: desc.GetHeight(), depthOrArrayLayers: layers },\n mipLevelCount: mipCount,\n sampleCount: 1,\n dimension: type === TextureType.TEX_TYPE_3D ? \"3d\" : \"2d\",\n format,\n usage,\n ...(srgbFormat ? { viewFormats: [ srgbFormat ] } : {})\n });\n this.m_format = format;\n this.m_srgbFormat = srgbFormat;\n this.m_desc = desc;\n this.m_msaa = msaa;\n this.m_gpuUsage = gpuUsage;\n this.m_cpuUsage = cpuUsage;\n this.m_webgpu = webgpu;\n\n if (initialData) this._Upload(initialData, mipCount, type);\n\n return ALResult.S_OK;\n }\n\n /** One `writeTexture` per subresource, Carbon's `mip + layer * mipCount` order. */\n _Upload(initialData, mipCount, type)\n {\n const desc = this.m_desc;\n const queue = this.m_webgpu.GetDevice().queue;\n const layerCount = type === TextureType.TEX_TYPE_3D ? 1 : Math.max(1, desc.GetArraySize());\n\n for (let layer = 0; layer < layerCount; layer += 1)\n {\n for (let mip = 0; mip < mipCount; mip += 1)\n {\n const subresource = initialData[mip + layer * mipCount];\n\n if (!subresource || !subresource.m_sysMem) continue;\n\n const bytes = subresource.m_sysMem;\n const pitch = subresource.m_sysMemPitch;\n const slicePitch = subresource.m_sysMemSlicePitch || bytes.byteLength;\n const depth = type === TextureType.TEX_TYPE_3D ? Math.max(1, desc.GetMipDepth(mip)) : 1;\n\n queue.writeTexture(\n { texture: this.m_texture, mipLevel: mip, origin: { x: 0, y: 0, z: layer } },\n bytes,\n { offset: 0, bytesPerRow: pitch, rowsPerImage: pitch ? Math.max(1, Math.floor(slicePitch / pitch)) : undefined },\n { width: desc.GetMipWidth(mip), height: desc.GetMipHeight(mip), depthOrArrayLayers: depth }\n );\n }\n }\n }\n\n /**\n * The view a resource set binds: linear or sRGB, in the layout's dimension.\n *\n * Metal's `GetMetalTexture()` / `GetSRGBViewMetalTexture()`\n * (`Tr2TextureALMetal.h:49-54`), with the dimension added because a WebGPU\n * view must name it and a cube texture is legitimately bound as a 2d-array.\n *\n * @param {string} [viewDimension] A `GPUTextureViewDimension`.\n * @param {number} [colorSpace] A `Tr2ColorSpace`; non-zero means sRGB.\n * @returns {object|null} A `GPUTextureView`, or null before Create.\n */\n GetDeviceTextureView(viewDimension = VIEW_DIMENSION_OF_TYPE[this.m_desc?.GetType()] ?? \"2d\", colorSpace = 0)\n {\n if (!this.m_texture) return null;\n\n const srgb = colorSpace !== 0 && this.m_srgbFormat !== null;\n const key = `${viewDimension}:${srgb ? \"srgb\" : \"linear\"}`;\n let view = this.m_views.get(key) ?? null;\n\n if (!view)\n {\n view = this.m_texture.createView({\n label: `${this.m_name || \"Tr2TextureAL\"} ${key}`,\n dimension: viewDimension,\n ...(srgb ? { format: this.m_srgbFormat } : {})\n });\n this.m_views.set(key, view);\n }\n\n return view;\n }\n\n /** The `GPUTexture`; Metal's `GetMetalTexture` under this backend's name. */\n GetDeviceTexture()\n {\n return this.m_texture;\n }\n\n /** Whether the texture holds a `GPUTexture`. */\n IsValid()\n {\n return this.m_texture !== null;\n }\n\n /** Shared textures need a native handle WebGPU does not expose; always fails. */\n OpenShared()\n {\n return ALResult.E_FAIL;\n }\n\n /** The `Tr2BitmapDimensions` this texture was created from, or null. */\n GetDesc()\n {\n return this.m_desc;\n }\n\n /** The multisample description; this backend creates single-sampled textures. */\n GetMsaaDesc()\n {\n return this.m_msaa;\n }\n\n /** The `Tr2GpuUsage` flags it was created with. */\n GetGpuUsage()\n {\n return this.m_gpuUsage;\n }\n\n /** The `Tr2CpuUsage` flags it was created with. */\n GetCpuUsage()\n {\n return this.m_cpuUsage;\n }\n\n /** Width in texels of mip zero, or zero before Create. */\n GetWidth()\n {\n return this.m_desc ? this.m_desc.GetWidth() : 0;\n }\n\n /** Height in texels of mip zero, or zero before Create. */\n GetHeight()\n {\n return this.m_desc ? this.m_desc.GetHeight() : 0;\n }\n\n /** Depth in texels of mip zero, which is one unless the texture is 3D. */\n GetDepth()\n {\n return this.m_desc ? this.m_desc.GetDepth() : 0;\n }\n\n /** The mip count requested at creation, which may be zero for a full chain. */\n GetMipCount()\n {\n return this.m_desc ? this.m_desc.GetMipCount() : 0;\n }\n\n /** The mip count actually created, with a requested zero resolved. */\n GetTrueMipCount()\n {\n return this.m_desc ? this.m_desc.GetTrueMipCount() : 0;\n }\n\n /** The Carbon `PixelFormat`, or `PIXEL_FORMAT_UNKNOWN` before Create. */\n GetFormat()\n {\n return this.m_desc ? this.m_desc.GetFormat() : PixelFormat.PIXEL_FORMAT_UNKNOWN;\n }\n\n /** The Carbon `TextureType`, or `TEX_TYPE_INVALID` before Create. */\n GetType()\n {\n return this.m_desc ? this.m_desc.GetType() : TextureType.TEX_TYPE_INVALID;\n }\n\n /** The layer count, which for a cube counts its six faces. */\n GetArraySize()\n {\n return this.m_desc ? this.m_desc.GetArraySize() : 0;\n }\n\n /**\n * The byte size of one mip across all layers.\n *\n * @param {number} level The mip level.\n * @returns {number} Its size in bytes, or zero before Create.\n */\n GetMipSize(level)\n {\n return this.m_desc ? this.m_desc.GetMipSize(level) : 0;\n }\n\n /** Reading back needs a staging buffer and an await; refused by name. */\n MapForReading(_region, _synchronize, _renderContext)\n {\n return { result: ALResult.E_FAIL, data: null, pitch: 0 };\n }\n\n /** Paired with `MapForReading`, which this backend refuses. */\n UnmapForReading(_renderContext)\n {\n return ALResult.E_FAIL;\n }\n\n /** The CPU copy a write mapping hands out; kept between maps for WRITE_OFTEN. */\n _mappedData = null;\n\n /** The subresource the current write mapping covers, or null when unmapped. */\n _mappedRegion = null;\n\n /**\n * Hands out memory for writing one subresource, Carbon's `MapForWriting`,\n * with the stub's checks (`Tr2TextureALStub.MapForWriting`).\n *\n * WebGPU has no mappable texture memory, so the memory is a CPU copy of the\n * mip, uploaded by `UnmapForWriting` with `queue.writeTexture` - the shape\n * this backend's constant buffers already use. The copy starts zeroed, not\n * with the texture's contents, because WebGPU cannot read a texture back\n * synchronously; so a region with a box is refused rather than letting the\n * upload overwrite the texels outside it. `Tr2DataTextureManager` maps the\n * whole of subresource 0.\n *\n * @param {object} region A `Tr2TextureSubresource`.\n * @param {object} renderContext The render context, Trinity's or the AL.\n * @returns {{result: number, data: Uint8Array|null, pitch: number}} The mapping.\n */\n MapForWriting(region, renderContext)\n {\n if (!HasFlag(this.m_cpuUsage, Tr2CpuUsage.WRITE)) return { result: ALResult.E_INVALIDCALL, data: null, pitch: 0 };\n\n const al = RenderContextALOf(renderContext);\n\n if (!this.IsValid() || !al || !al.IsValid()) return { result: ALResult.E_FAIL, data: null, pitch: 0 };\n if (!region.IsValidForBitmap(this.m_desc) || !region.IsSingleSubresource() || region.HasBox())\n {\n return { result: ALResult.E_INVALIDARG, data: null, pitch: 0 };\n }\n\n const mip = region.m_startMipLevel;\n const pitch = this.m_desc.GetMipPitch(mip);\n const size = pitch * this.m_desc.GetMipHeight(mip);\n\n if (size === 0) return { result: ALResult.E_FAIL, data: null, pitch: 0 };\n if (this._mappedData === null || this._mappedData.length !== size) this._mappedData = new Uint8Array(size);\n\n this._mappedRegion = region;\n\n return { result: ALResult.S_OK, data: this._mappedData, pitch };\n }\n\n /**\n * Uploads what was written into the mapping, Carbon's `UnmapForWriting`.\n * The CPU copy is kept for the next map only when the texture was created\n * `WRITE_OFTEN`, as the stub keeps its buffer.\n *\n * @param {object} renderContext The render context, Trinity's or the AL.\n * @returns {number} An `ALResult` value.\n */\n UnmapForWriting(renderContext)\n {\n if (this._mappedRegion === null) return ALResult.E_INVALIDCALL;\n\n const region = this._mappedRegion;\n const mip = region.m_startMipLevel;\n const pitch = this.m_desc.GetMipPitch(mip);\n const result = this.UpdateSubresource(region, this._mappedData, pitch, pitch * this.m_desc.GetMipHeight(mip), renderContext);\n\n this._mappedRegion = null;\n if (!HasFlag(this.m_cpuUsage, Tr2CpuUsage.WRITE_OFTEN)) this._mappedData = null;\n\n return result;\n }\n\n /**\n * Replaces one mip of one slice, Carbon's `UpdateSubresource`.\n *\n * @param {object} region A `Tr2TextureSubresource` naming one mip and slice.\n * @param {ArrayBufferView} source The texels.\n * @param {number} pitch Bytes per row.\n * @param {number} slicePitch Bytes per slice.\n * @returns {number} An `ALResult` value.\n */\n UpdateSubresource(region, source, pitch, slicePitch, _renderContext)\n {\n if (!this.IsValid()) return ALResult.E_INVALIDCALL;\n if (!region || !source) return ALResult.E_INVALIDARG;\n\n const mip = region.m_startMipLevel ?? 0;\n const layer = region.m_startFace ?? 0;\n\n this.m_webgpu.GetDevice().queue.writeTexture(\n { texture: this.m_texture, mipLevel: mip, origin: { x: 0, y: 0, z: layer } },\n source,\n { offset: 0, bytesPerRow: pitch, rowsPerImage: pitch ? Math.max(1, Math.floor((slicePitch || source.byteLength) / pitch)) : undefined },\n { width: this.m_desc.GetMipWidth(mip), height: this.m_desc.GetMipHeight(mip), depthOrArrayLayers: 1 }\n );\n\n return ALResult.S_OK;\n }\n\n /** Needs a command encoder the AL is not handed here; refused by name. */\n CopySubresourceRegion()\n {\n return ALResult.E_FAIL;\n }\n\n /** WebGPU has no mip generator; a full chain is uploaded at creation instead. */\n GenerateMipMaps()\n {\n return ALResult.E_FAIL;\n }\n\n /** Multisample resolve, which this backend has no multisampled textures for. */\n Resolve()\n {\n return ALResult.E_FAIL;\n }\n\n /** The native shared handle, which WebGPU does not expose. */\n GetSharedHandle()\n {\n return null;\n }\n\n /** The descriptor-heap slot, which only the D3D12 backend has. */\n GetSrvIndexInHeap()\n {\n return NO_HEAP_INDEX;\n }\n\n /** The descriptor-heap slot, which only the D3D12 backend has. */\n GetUavIndexInHeap()\n {\n return NO_HEAP_INDEX;\n }\n\n /** Releases the `GPUTexture` and its views, leaving the AL invalid. */\n Destroy()\n {\n this.m_texture?.destroy?.();\n this.m_texture = null;\n this.m_views = new Map();\n this._mappedData = null;\n this._mappedRegion = null;\n this.m_desc = null;\n this.m_format = null;\n this.m_srgbFormat = null;\n this.m_webgpu = null;\n this.m_gpuUsage = Tr2GpuUsage.NONE;\n this.m_cpuUsage = Tr2CpuUsage.NONE;\n }\n\n /** Where the texture lives, which for this backend is always video memory. */\n GetMemoryClass()\n {\n return Tr2ALMemoryType.AL_MEMORY_VIDEO;\n }\n\n /**\n * Fills in what this AL knows for a memory report.\n *\n * @param {object} description The description to fill in.\n * @returns {object} The same description.\n */\n Describe(description)\n {\n if (!description) return description;\n\n description.memoryClass = this.GetMemoryClass();\n\n return description;\n }\n\n /**\n * Names the texture, which reaches the `GPUTexture` label for debugging.\n *\n * @param {string} name The name.\n * @returns {number} An `ALResult` value.\n */\n SetName(name)\n {\n this.m_name = String(name ?? \"\");\n\n if (this.m_texture) this.m_texture.label = this.m_name;\n\n return ALResult.S_OK;\n }\n\n /** The name given by `SetName`. */\n GetName()\n {\n return this.m_name;\n }\n}\n\n// DECLARED AS A CALL, NOT A DECORATOR, for the reason recorded in\n// Tr2BitmapDimensions.js: the layer is imported straight from source by its\n// tests and raw Node cannot parse decorator syntax.\n//\n// The donor is NAMED rather than left to be derived from this class's name.\n// Carbon calls every backend's class the same thing and carries the backend in\n// the FILE name, because only one backend compiles at a time; we ship them\n// together, so the backend moves onto the class name. That divergence is the\n// author's to declare, never a checker's to guess.\nCjsSchema.define(CjsWebgpuTextureAL, { className: \"CjsWebgpuTextureAL\", carbon: \"Tr2TextureAL\" });\n"],"names":["NO_HEAP_INDEX","VIEW_DIMENSION_OF_TYPE","Object","freeze","TextureType","TEX_TYPE_2D","TEX_TYPE_CUBE","TEX_TYPE_3D","CjsWebgpuTextureAL","m_desc","m_msaa","Tr2MsaaDesc","m_gpuUsage","Tr2GpuUsage","NONE","m_cpuUsage","Tr2CpuUsage","m_texture","m_format","m_srgbFormat","m_views","Map","m_webgpu","m_name","Create","desc","options","renderContext","Destroy","gpuUsage","cpuUsage","msaa","initialData","al","RenderContextALOf","IsValid","ALResult","E_FAIL","GetWidth","GetHeight","E_INVALIDARG","samples","type","GetType","dimension","GetArraySize","writable","HasFlag","RENDER_TARGET","UNORDERED_ACCESS","DEPTH_STENCIL","WRITE","format","m_utils","GetGPUTextureFormat","GetFormat","webgpu","GetWebgpu","E_INVALIDCALL","device","GetDevice","usageFlags","GetTextureUsage","srgbFormat","GetSRGBViewFormat","mipCount","Math","max","GetTrueMipCount","layers","GetDepth","usage","TEXTURE_BINDING","COPY_DST","RENDER_ATTACHMENT","createTexture","label","size","width","height","depthOrArrayLayers","mipLevelCount","sampleCount","viewFormats","_Upload","S_OK","queue","layerCount","layer","mip","subresource","m_sysMem","bytes","pitch","m_sysMemPitch","slicePitch","m_sysMemSlicePitch","byteLength","depth","GetMipDepth","writeTexture","texture","mipLevel","origin","x","y","z","offset","bytesPerRow","rowsPerImage","floor","undefined","GetMipWidth","GetMipHeight","GetDeviceTextureView","viewDimension","colorSpace","srgb","key","view","get","createView","set","GetDeviceTexture","OpenShared","GetDesc","GetMsaaDesc","GetGpuUsage","GetCpuUsage","GetMipCount","PixelFormat","PIXEL_FORMAT_UNKNOWN","TEX_TYPE_INVALID","GetMipSize","level","MapForReading","_region","_synchronize","_renderContext","result","data","UnmapForReading","_mappedData","_mappedRegion","MapForWriting","region","IsValidForBitmap","IsSingleSubresource","HasBox","m_startMipLevel","GetMipPitch","length","Uint8Array","UnmapForWriting","UpdateSubresource","WRITE_OFTEN","source","m_startFace","CopySubresourceRegion","GenerateMipMaps","Resolve","GetSharedHandle","GetSrvIndexInHeap","GetUavIndexInHeap","destroy","GetMemoryClass","Tr2ALMemoryType","AL_MEMORY_VIDEO","Describe","description","memoryClass","SetName","name","String","GetName","CjsSchema","define","className","carbon"],"mappings":"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"}
@@ -0,0 +1,94 @@
1
+ import { CjsSchema } from '#schema';
2
+ import { PixelFormat } from '#consts/render-context';
3
+
4
+ // Source: trinity/trinityal/metal/MetalUtils.h
5
+ // trinity/trinityal/metal/MetalUtils.mm:12-133, 353-357
6
+ //
7
+ // The WebGPU backend's translation tables, modelled on Metal's. Carbon's
8
+ // Metal backend owns one `MetalUtils` on its context (`MetalContext.h:34`)
9
+ // and reaches it as `metalContext->m_utils->GetMTLPixelFormat(...)`. Our
10
+ // render context plays `MetalContext`'s part, so it owns this one as
11
+ // `m_utils`. D3D needs no such table: Carbon's pixel format values are DXGI's.
12
+ //
13
+ // Only the pixel format table is ported so far. Metal's other translations
14
+ // (vertex format, texture type, cull mode, blend, compare, stencil, colour
15
+ // write) belong here as they are needed.
16
+ const {
17
+ PIXEL_FORMAT_SENTINEL
18
+ } = PixelFormat;
19
+
20
+ /**
21
+ * Carbon's pixel format to the `GPUTextureFormat` a texture is created with.
22
+ *
23
+ * Metal's table (`MetalUtils.mm:12-121`), entry for entry. Where Metal has a
24
+ * format that core WebGPU does not (16-bit unorm/snorm, A8, the packed-stencil
25
+ * depth format behind an optional feature), the entry is absent, which is
26
+ * Metal's `MTLPixelFormatInvalid`: the texture is refused.
27
+ *
28
+ * One entry differs from Metal on purpose. Metal maps `D24_UNORM_S8_UINT` to
29
+ * `Depth32Float` because Apple GPUs lack a 24-bit depth format; WebGPU has
30
+ * `depth24plus-stencil8` in core, which keeps the stencil.
31
+ */
32
+ const PIXEL_FORMATS = [[PixelFormat.PIXEL_FORMAT_R32G32B32A32_FLOAT, "rgba32float"], [PixelFormat.PIXEL_FORMAT_R32G32B32A32_UINT, "rgba32uint"], [PixelFormat.PIXEL_FORMAT_R32G32B32A32_SINT, "rgba32sint"], [PixelFormat.PIXEL_FORMAT_R16G16B16A16_FLOAT, "rgba16float"], [PixelFormat.PIXEL_FORMAT_R16G16B16A16_UINT, "rgba16uint"], [PixelFormat.PIXEL_FORMAT_R16G16B16A16_SINT, "rgba16sint"], [PixelFormat.PIXEL_FORMAT_R32G32_FLOAT, "rg32float"], [PixelFormat.PIXEL_FORMAT_R32G32_UINT, "rg32uint"], [PixelFormat.PIXEL_FORMAT_R32G32_SINT, "rg32sint"], [PixelFormat.PIXEL_FORMAT_R10G10B10A2_UNORM, "rgb10a2unorm"], [PixelFormat.PIXEL_FORMAT_R10G10B10A2_UINT, "rgb10a2uint"], [PixelFormat.PIXEL_FORMAT_R11G11B10_FLOAT, "rg11b10ufloat"], [PixelFormat.PIXEL_FORMAT_R8G8B8A8_UNORM, "rgba8unorm"], [PixelFormat.PIXEL_FORMAT_R8G8B8A8_UNORM_SRGB, "rgba8unorm-srgb"], [PixelFormat.PIXEL_FORMAT_R8G8B8A8_UINT, "rgba8uint"], [PixelFormat.PIXEL_FORMAT_R8G8B8A8_SNORM, "rgba8snorm"], [PixelFormat.PIXEL_FORMAT_R8G8B8A8_SINT, "rgba8sint"], [PixelFormat.PIXEL_FORMAT_R16G16_FLOAT, "rg16float"], [PixelFormat.PIXEL_FORMAT_R16G16_UINT, "rg16uint"], [PixelFormat.PIXEL_FORMAT_R16G16_SINT, "rg16sint"], [PixelFormat.PIXEL_FORMAT_D32_FLOAT, "depth32float"], [PixelFormat.PIXEL_FORMAT_R32_FLOAT, "r32float"], [PixelFormat.PIXEL_FORMAT_R32_UINT, "r32uint"], [PixelFormat.PIXEL_FORMAT_R32_SINT, "r32sint"], [PixelFormat.PIXEL_FORMAT_D24_UNORM_S8_UINT, "depth24plus-stencil8"], [PixelFormat.PIXEL_FORMAT_R8G8_UNORM, "rg8unorm"], [PixelFormat.PIXEL_FORMAT_R8G8_UINT, "rg8uint"], [PixelFormat.PIXEL_FORMAT_R8G8_SNORM, "rg8snorm"], [PixelFormat.PIXEL_FORMAT_R8G8_SINT, "rg8sint"], [PixelFormat.PIXEL_FORMAT_R16_FLOAT, "r16float"], [PixelFormat.PIXEL_FORMAT_D16_UNORM, "depth16unorm"], [PixelFormat.PIXEL_FORMAT_R16_UINT, "r16uint"], [PixelFormat.PIXEL_FORMAT_R16_SINT, "r16sint"], [PixelFormat.PIXEL_FORMAT_R8_UNORM, "r8unorm"], [PixelFormat.PIXEL_FORMAT_R8_UINT, "r8uint"], [PixelFormat.PIXEL_FORMAT_R8_SNORM, "r8snorm"], [PixelFormat.PIXEL_FORMAT_R8_SINT, "r8sint"], [PixelFormat.PIXEL_FORMAT_R9G9B9E5_SHAREDEXP, "rgb9e5ufloat"], [PixelFormat.PIXEL_FORMAT_BC1_UNORM, "bc1-rgba-unorm"], [PixelFormat.PIXEL_FORMAT_BC1_UNORM_SRGB, "bc1-rgba-unorm-srgb"], [PixelFormat.PIXEL_FORMAT_BC2_UNORM, "bc2-rgba-unorm"], [PixelFormat.PIXEL_FORMAT_BC2_UNORM_SRGB, "bc2-rgba-unorm-srgb"], [PixelFormat.PIXEL_FORMAT_BC3_UNORM, "bc3-rgba-unorm"], [PixelFormat.PIXEL_FORMAT_BC3_UNORM_SRGB, "bc3-rgba-unorm-srgb"], [PixelFormat.PIXEL_FORMAT_BC4_UNORM, "bc4-r-unorm"], [PixelFormat.PIXEL_FORMAT_BC4_SNORM, "bc4-r-snorm"], [PixelFormat.PIXEL_FORMAT_BC5_UNORM, "bc5-rg-unorm"], [PixelFormat.PIXEL_FORMAT_BC5_SNORM, "bc5-rg-snorm"], [PixelFormat.PIXEL_FORMAT_B8G8R8A8_UNORM, "bgra8unorm"],
33
+ // BGRX has no WebGPU format any more than a Metal one; Metal reads it as
34
+ // BGRA and ignores the fourth byte, and so does this.
35
+ [PixelFormat.PIXEL_FORMAT_B8G8R8X8_UNORM, "bgra8unorm"], [PixelFormat.PIXEL_FORMAT_B8G8R8A8_TYPELESS, "bgra8unorm"], [PixelFormat.PIXEL_FORMAT_B8G8R8A8_UNORM_SRGB, "bgra8unorm-srgb"], [PixelFormat.PIXEL_FORMAT_B8G8R8X8_TYPELESS, "bgra8unorm"], [PixelFormat.PIXEL_FORMAT_B8G8R8X8_UNORM_SRGB, "bgra8unorm-srgb"], [PixelFormat.PIXEL_FORMAT_BC6H_UF16, "bc6h-rgb-ufloat"], [PixelFormat.PIXEL_FORMAT_BC6H_SF16, "bc6h-rgb-float"], [PixelFormat.PIXEL_FORMAT_BC7_UNORM, "bc7-rgba-unorm"], [PixelFormat.PIXEL_FORMAT_BC7_UNORM_SRGB, "bc7-rgba-unorm-srgb"]];
36
+
37
+ /**
38
+ * The linear formats Metal makes an sRGB view of, and the view's format
39
+ * (`MetalContext.mm:342-357`, where Metal adds one to the format).
40
+ */
41
+ const SRGB_VIEW_FORMATS = new Map([["rgba8unorm", "rgba8unorm-srgb"], ["bgra8unorm", "bgra8unorm-srgb"], ["bc1-rgba-unorm", "bc1-rgba-unorm-srgb"], ["bc2-rgba-unorm", "bc2-rgba-unorm-srgb"], ["bc3-rgba-unorm", "bc3-rgba-unorm-srgb"], ["bc7-rgba-unorm", "bc7-rgba-unorm-srgb"]]);
42
+
43
+ /** The WebGPU backend's counterpart of Metal's `MetalUtils`. */
44
+ class CjsWebgpuUtils {
45
+ /** Carbon's pixel format to `GPUTextureFormat`, indexed by format; null is refused. */
46
+ _pixelFormatConversionTable = new Array(PIXEL_FORMAT_SENTINEL).fill(null);
47
+
48
+ /** Builds the tables, as `MetalUtils::MetalUtils` does (`MetalUtils.mm:353-357`). */
49
+ constructor() {
50
+ this.SetupPixelFormatConversionTable();
51
+ }
52
+
53
+ /**
54
+ * The `GPUTextureFormat` for a Carbon pixel format, as
55
+ * `MetalUtils::GetMTLPixelFormat` (`MetalUtils.mm:124-133`).
56
+ *
57
+ * @param {number} pixelFormat A Carbon `PixelFormat`.
58
+ * @returns {string|null} The format, or null when WebGPU has none.
59
+ */
60
+ GetGPUTextureFormat(pixelFormat) {
61
+ return pixelFormat >= 0 && pixelFormat < PIXEL_FORMAT_SENTINEL ? this._pixelFormatConversionTable[pixelFormat] : null;
62
+ }
63
+
64
+ /**
65
+ * The format of a texture's sRGB view, the format half of
66
+ * `MetalContext::CreateSRGBViewOfMetalTexture` (`MetalContext.mm:342-357`).
67
+ * WebGPU must list a view format when the texture is created, so the format
68
+ * is needed before any view exists.
69
+ *
70
+ * @param {string} format A linear `GPUTextureFormat`.
71
+ * @returns {string|null} The sRGB view format, or null when there is none.
72
+ */
73
+ GetSRGBViewFormat(format) {
74
+ return SRGB_VIEW_FORMATS.get(format) ?? null;
75
+ }
76
+
77
+ /** Fills the pixel format table (`MetalUtils.mm:12-121`). */
78
+ SetupPixelFormatConversionTable() {
79
+ this._pixelFormatConversionTable.fill(null);
80
+ for (const [pixelFormat, format] of PIXEL_FORMATS) {
81
+ this._pixelFormatConversionTable[pixelFormat] = format;
82
+ }
83
+ }
84
+ }
85
+
86
+ // Declared as a call, as the other AL classes are: the layer is imported
87
+ // straight from source by its tests.
88
+ CjsSchema.define(CjsWebgpuUtils, {
89
+ className: "CjsWebgpuUtils",
90
+ modelledOn: "MetalUtils"
91
+ });
92
+
93
+ export { CjsWebgpuUtils };
94
+ //# sourceMappingURL=CjsWebgpuUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CjsWebgpuUtils.js","sources":["../../../../../src/trinityal/webgpu/core/CjsWebgpuUtils.js"],"sourcesContent":["// Source: trinity/trinityal/metal/MetalUtils.h\n// trinity/trinityal/metal/MetalUtils.mm:12-133, 353-357\n//\n// The WebGPU backend's translation tables, modelled on Metal's. Carbon's\n// Metal backend owns one `MetalUtils` on its context (`MetalContext.h:34`)\n// and reaches it as `metalContext->m_utils->GetMTLPixelFormat(...)`. Our\n// render context plays `MetalContext`'s part, so it owns this one as\n// `m_utils`. D3D needs no such table: Carbon's pixel format values are DXGI's.\n//\n// Only the pixel format table is ported so far. Metal's other translations\n// (vertex format, texture type, cull mode, blend, compare, stencil, colour\n// write) belong here as they are needed.\nimport { CjsSchema } from \"#schema\";\nimport { PixelFormat } from \"#consts/render-context\";\n\nconst { PIXEL_FORMAT_SENTINEL } = PixelFormat;\n\n/**\n * Carbon's pixel format to the `GPUTextureFormat` a texture is created with.\n *\n * Metal's table (`MetalUtils.mm:12-121`), entry for entry. Where Metal has a\n * format that core WebGPU does not (16-bit unorm/snorm, A8, the packed-stencil\n * depth format behind an optional feature), the entry is absent, which is\n * Metal's `MTLPixelFormatInvalid`: the texture is refused.\n *\n * One entry differs from Metal on purpose. Metal maps `D24_UNORM_S8_UINT` to\n * `Depth32Float` because Apple GPUs lack a 24-bit depth format; WebGPU has\n * `depth24plus-stencil8` in core, which keeps the stencil.\n */\nconst PIXEL_FORMATS = [\n [ PixelFormat.PIXEL_FORMAT_R32G32B32A32_FLOAT, \"rgba32float\" ],\n [ PixelFormat.PIXEL_FORMAT_R32G32B32A32_UINT, \"rgba32uint\" ],\n [ PixelFormat.PIXEL_FORMAT_R32G32B32A32_SINT, \"rgba32sint\" ],\n [ PixelFormat.PIXEL_FORMAT_R16G16B16A16_FLOAT, \"rgba16float\" ],\n [ PixelFormat.PIXEL_FORMAT_R16G16B16A16_UINT, \"rgba16uint\" ],\n [ PixelFormat.PIXEL_FORMAT_R16G16B16A16_SINT, \"rgba16sint\" ],\n [ PixelFormat.PIXEL_FORMAT_R32G32_FLOAT, \"rg32float\" ],\n [ PixelFormat.PIXEL_FORMAT_R32G32_UINT, \"rg32uint\" ],\n [ PixelFormat.PIXEL_FORMAT_R32G32_SINT, \"rg32sint\" ],\n [ PixelFormat.PIXEL_FORMAT_R10G10B10A2_UNORM, \"rgb10a2unorm\" ],\n [ PixelFormat.PIXEL_FORMAT_R10G10B10A2_UINT, \"rgb10a2uint\" ],\n [ PixelFormat.PIXEL_FORMAT_R11G11B10_FLOAT, \"rg11b10ufloat\" ],\n [ PixelFormat.PIXEL_FORMAT_R8G8B8A8_UNORM, \"rgba8unorm\" ],\n [ PixelFormat.PIXEL_FORMAT_R8G8B8A8_UNORM_SRGB, \"rgba8unorm-srgb\" ],\n [ PixelFormat.PIXEL_FORMAT_R8G8B8A8_UINT, \"rgba8uint\" ],\n [ PixelFormat.PIXEL_FORMAT_R8G8B8A8_SNORM, \"rgba8snorm\" ],\n [ PixelFormat.PIXEL_FORMAT_R8G8B8A8_SINT, \"rgba8sint\" ],\n [ PixelFormat.PIXEL_FORMAT_R16G16_FLOAT, \"rg16float\" ],\n [ PixelFormat.PIXEL_FORMAT_R16G16_UINT, \"rg16uint\" ],\n [ PixelFormat.PIXEL_FORMAT_R16G16_SINT, \"rg16sint\" ],\n [ PixelFormat.PIXEL_FORMAT_D32_FLOAT, \"depth32float\" ],\n [ PixelFormat.PIXEL_FORMAT_R32_FLOAT, \"r32float\" ],\n [ PixelFormat.PIXEL_FORMAT_R32_UINT, \"r32uint\" ],\n [ PixelFormat.PIXEL_FORMAT_R32_SINT, \"r32sint\" ],\n [ PixelFormat.PIXEL_FORMAT_D24_UNORM_S8_UINT, \"depth24plus-stencil8\" ],\n [ PixelFormat.PIXEL_FORMAT_R8G8_UNORM, \"rg8unorm\" ],\n [ PixelFormat.PIXEL_FORMAT_R8G8_UINT, \"rg8uint\" ],\n [ PixelFormat.PIXEL_FORMAT_R8G8_SNORM, \"rg8snorm\" ],\n [ PixelFormat.PIXEL_FORMAT_R8G8_SINT, \"rg8sint\" ],\n [ PixelFormat.PIXEL_FORMAT_R16_FLOAT, \"r16float\" ],\n [ PixelFormat.PIXEL_FORMAT_D16_UNORM, \"depth16unorm\" ],\n [ PixelFormat.PIXEL_FORMAT_R16_UINT, \"r16uint\" ],\n [ PixelFormat.PIXEL_FORMAT_R16_SINT, \"r16sint\" ],\n [ PixelFormat.PIXEL_FORMAT_R8_UNORM, \"r8unorm\" ],\n [ PixelFormat.PIXEL_FORMAT_R8_UINT, \"r8uint\" ],\n [ PixelFormat.PIXEL_FORMAT_R8_SNORM, \"r8snorm\" ],\n [ PixelFormat.PIXEL_FORMAT_R8_SINT, \"r8sint\" ],\n [ PixelFormat.PIXEL_FORMAT_R9G9B9E5_SHAREDEXP, \"rgb9e5ufloat\" ],\n [ PixelFormat.PIXEL_FORMAT_BC1_UNORM, \"bc1-rgba-unorm\" ],\n [ PixelFormat.PIXEL_FORMAT_BC1_UNORM_SRGB, \"bc1-rgba-unorm-srgb\" ],\n [ PixelFormat.PIXEL_FORMAT_BC2_UNORM, \"bc2-rgba-unorm\" ],\n [ PixelFormat.PIXEL_FORMAT_BC2_UNORM_SRGB, \"bc2-rgba-unorm-srgb\" ],\n [ PixelFormat.PIXEL_FORMAT_BC3_UNORM, \"bc3-rgba-unorm\" ],\n [ PixelFormat.PIXEL_FORMAT_BC3_UNORM_SRGB, \"bc3-rgba-unorm-srgb\" ],\n [ PixelFormat.PIXEL_FORMAT_BC4_UNORM, \"bc4-r-unorm\" ],\n [ PixelFormat.PIXEL_FORMAT_BC4_SNORM, \"bc4-r-snorm\" ],\n [ PixelFormat.PIXEL_FORMAT_BC5_UNORM, \"bc5-rg-unorm\" ],\n [ PixelFormat.PIXEL_FORMAT_BC5_SNORM, \"bc5-rg-snorm\" ],\n [ PixelFormat.PIXEL_FORMAT_B8G8R8A8_UNORM, \"bgra8unorm\" ],\n // BGRX has no WebGPU format any more than a Metal one; Metal reads it as\n // BGRA and ignores the fourth byte, and so does this.\n [ PixelFormat.PIXEL_FORMAT_B8G8R8X8_UNORM, \"bgra8unorm\" ],\n [ PixelFormat.PIXEL_FORMAT_B8G8R8A8_TYPELESS, \"bgra8unorm\" ],\n [ PixelFormat.PIXEL_FORMAT_B8G8R8A8_UNORM_SRGB, \"bgra8unorm-srgb\" ],\n [ PixelFormat.PIXEL_FORMAT_B8G8R8X8_TYPELESS, \"bgra8unorm\" ],\n [ PixelFormat.PIXEL_FORMAT_B8G8R8X8_UNORM_SRGB, \"bgra8unorm-srgb\" ],\n [ PixelFormat.PIXEL_FORMAT_BC6H_UF16, \"bc6h-rgb-ufloat\" ],\n [ PixelFormat.PIXEL_FORMAT_BC6H_SF16, \"bc6h-rgb-float\" ],\n [ PixelFormat.PIXEL_FORMAT_BC7_UNORM, \"bc7-rgba-unorm\" ],\n [ PixelFormat.PIXEL_FORMAT_BC7_UNORM_SRGB, \"bc7-rgba-unorm-srgb\" ]\n];\n\n/**\n * The linear formats Metal makes an sRGB view of, and the view's format\n * (`MetalContext.mm:342-357`, where Metal adds one to the format).\n */\nconst SRGB_VIEW_FORMATS = new Map([\n [ \"rgba8unorm\", \"rgba8unorm-srgb\" ],\n [ \"bgra8unorm\", \"bgra8unorm-srgb\" ],\n [ \"bc1-rgba-unorm\", \"bc1-rgba-unorm-srgb\" ],\n [ \"bc2-rgba-unorm\", \"bc2-rgba-unorm-srgb\" ],\n [ \"bc3-rgba-unorm\", \"bc3-rgba-unorm-srgb\" ],\n [ \"bc7-rgba-unorm\", \"bc7-rgba-unorm-srgb\" ]\n]);\n\n/** The WebGPU backend's counterpart of Metal's `MetalUtils`. */\nexport class CjsWebgpuUtils\n{\n\n /** Carbon's pixel format to `GPUTextureFormat`, indexed by format; null is refused. */\n _pixelFormatConversionTable = new Array(PIXEL_FORMAT_SENTINEL).fill(null);\n\n /** Builds the tables, as `MetalUtils::MetalUtils` does (`MetalUtils.mm:353-357`). */\n constructor()\n {\n this.SetupPixelFormatConversionTable();\n }\n\n /**\n * The `GPUTextureFormat` for a Carbon pixel format, as\n * `MetalUtils::GetMTLPixelFormat` (`MetalUtils.mm:124-133`).\n *\n * @param {number} pixelFormat A Carbon `PixelFormat`.\n * @returns {string|null} The format, or null when WebGPU has none.\n */\n GetGPUTextureFormat(pixelFormat)\n {\n return pixelFormat >= 0 && pixelFormat < PIXEL_FORMAT_SENTINEL\n ? this._pixelFormatConversionTable[pixelFormat]\n : null;\n }\n\n /**\n * The format of a texture's sRGB view, the format half of\n * `MetalContext::CreateSRGBViewOfMetalTexture` (`MetalContext.mm:342-357`).\n * WebGPU must list a view format when the texture is created, so the format\n * is needed before any view exists.\n *\n * @param {string} format A linear `GPUTextureFormat`.\n * @returns {string|null} The sRGB view format, or null when there is none.\n */\n GetSRGBViewFormat(format)\n {\n return SRGB_VIEW_FORMATS.get(format) ?? null;\n }\n\n /** Fills the pixel format table (`MetalUtils.mm:12-121`). */\n SetupPixelFormatConversionTable()\n {\n this._pixelFormatConversionTable.fill(null);\n\n for (const [ pixelFormat, format ] of PIXEL_FORMATS)\n {\n this._pixelFormatConversionTable[pixelFormat] = format;\n }\n }\n\n}\n\n// Declared as a call, as the other AL classes are: the layer is imported\n// straight from source by its tests.\nCjsSchema.define(CjsWebgpuUtils, { className: \"CjsWebgpuUtils\", modelledOn: \"MetalUtils\" });\n"],"names":["PIXEL_FORMAT_SENTINEL","PixelFormat","PIXEL_FORMATS","PIXEL_FORMAT_R32G32B32A32_FLOAT","PIXEL_FORMAT_R32G32B32A32_UINT","PIXEL_FORMAT_R32G32B32A32_SINT","PIXEL_FORMAT_R16G16B16A16_FLOAT","PIXEL_FORMAT_R16G16B16A16_UINT","PIXEL_FORMAT_R16G16B16A16_SINT","PIXEL_FORMAT_R32G32_FLOAT","PIXEL_FORMAT_R32G32_UINT","PIXEL_FORMAT_R32G32_SINT","PIXEL_FORMAT_R10G10B10A2_UNORM","PIXEL_FORMAT_R10G10B10A2_UINT","PIXEL_FORMAT_R11G11B10_FLOAT","PIXEL_FORMAT_R8G8B8A8_UNORM","PIXEL_FORMAT_R8G8B8A8_UNORM_SRGB","PIXEL_FORMAT_R8G8B8A8_UINT","PIXEL_FORMAT_R8G8B8A8_SNORM","PIXEL_FORMAT_R8G8B8A8_SINT","PIXEL_FORMAT_R16G16_FLOAT","PIXEL_FORMAT_R16G16_UINT","PIXEL_FORMAT_R16G16_SINT","PIXEL_FORMAT_D32_FLOAT","PIXEL_FORMAT_R32_FLOAT","PIXEL_FORMAT_R32_UINT","PIXEL_FORMAT_R32_SINT","PIXEL_FORMAT_D24_UNORM_S8_UINT","PIXEL_FORMAT_R8G8_UNORM","PIXEL_FORMAT_R8G8_UINT","PIXEL_FORMAT_R8G8_SNORM","PIXEL_FORMAT_R8G8_SINT","PIXEL_FORMAT_R16_FLOAT","PIXEL_FORMAT_D16_UNORM","PIXEL_FORMAT_R16_UINT","PIXEL_FORMAT_R16_SINT","PIXEL_FORMAT_R8_UNORM","PIXEL_FORMAT_R8_UINT","PIXEL_FORMAT_R8_SNORM","PIXEL_FORMAT_R8_SINT","PIXEL_FORMAT_R9G9B9E5_SHAREDEXP","PIXEL_FORMAT_BC1_UNORM","PIXEL_FORMAT_BC1_UNORM_SRGB","PIXEL_FORMAT_BC2_UNORM","PIXEL_FORMAT_BC2_UNORM_SRGB","PIXEL_FORMAT_BC3_UNORM","PIXEL_FORMAT_BC3_UNORM_SRGB","PIXEL_FORMAT_BC4_UNORM","PIXEL_FORMAT_BC4_SNORM","PIXEL_FORMAT_BC5_UNORM","PIXEL_FORMAT_BC5_SNORM","PIXEL_FORMAT_B8G8R8A8_UNORM","PIXEL_FORMAT_B8G8R8X8_UNORM","PIXEL_FORMAT_B8G8R8A8_TYPELESS","PIXEL_FORMAT_B8G8R8A8_UNORM_SRGB","PIXEL_FORMAT_B8G8R8X8_TYPELESS","PIXEL_FORMAT_B8G8R8X8_UNORM_SRGB","PIXEL_FORMAT_BC6H_UF16","PIXEL_FORMAT_BC6H_SF16","PIXEL_FORMAT_BC7_UNORM","PIXEL_FORMAT_BC7_UNORM_SRGB","SRGB_VIEW_FORMATS","Map","CjsWebgpuUtils","_pixelFormatConversionTable","Array","fill","constructor","SetupPixelFormatConversionTable","GetGPUTextureFormat","pixelFormat","GetSRGBViewFormat","format","get","CjsSchema","define","className","modelledOn"],"mappings":"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"}
@@ -3,6 +3,7 @@ export { CjsWebgpuRenderTarget } from './core/CjsWebgpuRenderTarget.js';
3
3
  export { CjsWebgpuTrinityBatchDispatcher } from './core/CjsWebgpuTrinityBatchDispatcher.js';
4
4
  export { CjsWebgpuTrinityBatchResolver } from './core/CjsWebgpuTrinityBatchResolver.js';
5
5
  export { CjsWebgpuTextureSource } from './core/CjsWebgpuTextureSource.js';
6
+ export { CjsWebgpuUtils } from './core/CjsWebgpuUtils.js';
6
7
  export { CjsWebgpuTrinityPassEncoder } from './core/CjsWebgpuTrinityPassEncoder.js';
7
8
  export { CarbonSamplerDescriptor, EMULATED_ADDRESS_MODES, IsEmulatedAddressMode } from './core/samplerDescriptor.js';
8
9
  export { CjsWebgpuSamplerSource } from './core/CjsWebgpuSamplerSource.js';
@@ -1 +1 @@
1
- {"version":3,"file":"internal.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"internal.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;"}
@@ -125,6 +125,96 @@ The paths service a browser can answer: res-file-index existence, with the verbs
125
125
  - Visibility: Public
126
126
  - Kind: CarbonEngineJS
127
127
 
128
+ <!-- class:BitmapDimensions -->
129
+ ## `BitmapDimensions`
130
+
131
+ Texture type, format, size and mip layout, with the mip arithmetic every create, map and copy is described in; the abstraction layer exports it as `Tr2BitmapDimensions`, Carbon's own alias.
132
+
133
+ - Export: `@carbonenginejs/runtime/imageio`
134
+ - Source: `src/global/imageio/BitmapDimensions.js`
135
+ - Visibility: Public
136
+ - Kind: Carbon
137
+
138
+ <!-- class:HostBitmap -->
139
+ ## `HostBitmap`
140
+
141
+ A texture description and its CPU bytes: create, lay out, convert, filter and sample images between a reader and a texture upload, with Carbon's own quirks kept.
142
+
143
+ - Export: `@carbonenginejs/runtime/imageio`
144
+ - Source: `src/global/imageio/HostBitmap.js`
145
+ - Visibility: Public
146
+ - Kind: Faithful Carbon port
147
+
148
+ <!-- class:ImageUtility -->
149
+ ## `ImageUtility`
150
+
151
+ Single-pixel reads from BGRA, BGRX, R8, BC1 and BC3 data as packed 0xAARRGGBB, including two reproduced Carbon BC3 bugs.
152
+
153
+ - Export: `@carbonenginejs/runtime/imageio`
154
+ - Source: `src/global/imageio/ImageUtility.js`
155
+ - Visibility: Public
156
+ - Kind: Faithful Carbon port
157
+
158
+ <!-- class:ImageIOResult -->
159
+ ## `ImageIOResult`
160
+
161
+ An image operation's outcome: one of Carbon's fifteen ImageIO codes and an optional message.
162
+
163
+ - Export: `@carbonenginejs/runtime/imageio`
164
+ - Source: `src/global/imageio/ImageIOResult.js`
165
+ - Visibility: Public
166
+ - Kind: Faithful Carbon port
167
+
168
+ <!-- class:LoadParameters -->
169
+ ## `LoadParameters`
170
+
171
+ What an image read is asked for: the file name that picks the handler, mip skip and mip cap, and an optional requested pixel format the format converts to.
172
+
173
+ - Export: `@carbonenginejs/runtime/imageio`
174
+ - Source: `src/global/imageio/LoadParameters.js`
175
+ - Visibility: Public
176
+ - Kind: Adapted Carbon concept
177
+
178
+ <!-- class:Cutout -->
179
+ ## `Cutout`
180
+
181
+ The normalized sub-rectangle an image file can declare; the whole image by default.
182
+
183
+ - Export: `@carbonenginejs/runtime/imageio`
184
+ - Source: `src/global/imageio/Cutout.js`
185
+ - Visibility: Public
186
+ - Kind: Faithful Carbon port
187
+
188
+ <!-- class:Metadata -->
189
+ ## `Metadata`
190
+
191
+ What an image file carries besides its pixels: the cutout and key/value strings.
192
+
193
+ - Export: `@carbonenginejs/runtime/imageio`
194
+ - Source: `src/global/imageio/Metadata.js`
195
+ - Visibility: Public
196
+ - Kind: Faithful Carbon port
197
+
198
+ <!-- class:BlueClasses -->
199
+ ## `BlueClasses`
200
+
201
+ The class registry `blue.classes` holds: registration and creation by class name over the same constructor table the schema fills, so one layer can build a class another owns without importing it.
202
+
203
+ - Export: `@carbonenginejs/runtime/blue`
204
+ - Source: `src/global/blue/BlueClasses.js`
205
+ - Visibility: Public
206
+ - Kind: Adapted Carbon concept
207
+
208
+ <!-- class:IBlueClasses -->
209
+ ## `IBlueClasses`
210
+
211
+ Class registration, lookup and creation by name, as consumers see Carbon's class registry.
212
+
213
+ - Export: `@carbonenginejs/runtime/blue`
214
+ - Source: `src/global/blue/IBlueClasses.js`
215
+ - Visibility: Public
216
+ - Kind: Faithful Carbon port
217
+
128
218
  <!-- class:IBluePaths -->
129
219
  ## `IBluePaths`
130
220
 
@@ -76,9 +76,9 @@ a declared output is verified only through its normal asynchronous read path.
76
76
 
77
77
  Format subpaths must remain importable from authored source, so they return
78
78
  plain report objects and never import decorated model code. A resource-layer
79
- consumer that needs persistence or model metadata calls
80
- `CjsResourceProbe.from(report)`. The model exposes `canUseSelected()` and
81
- `canUse(output)` without changing the format-layer contract.
79
+ consumer that wants every field typed and defaulted calls
80
+ `CjsResourceProbe.from(report)`, a plain record exposing `canUseSelected()`
81
+ and `canUse(output)` without changing the format-layer contract.
82
82
 
83
83
  ## Routing rule
84
84
 
@@ -13,7 +13,7 @@ direct `src/` loading with a syntax error at the decorator, not the offending
13
13
  import.
14
14
 
15
15
  The practical consequence is that `inspect()`, `getSupport()`, and
16
- `verifySupport()` return plain objects rather than constructing a decorated
16
+ `verifySupport()` return plain objects rather than constructing a
17
17
  `CjsResourceProbe`. `CjsResourceProbe.from()` is the optional resource-layer
18
18
  normalization boundary. `is()` remains the boolean-only synchronous routing
19
19
  predicate. See [format capabilities](../concepts/format-capabilities.md).
@@ -105,6 +105,36 @@ Shared output and hydration backend for Blue persistence readers that owns commo
105
105
  - Visibility: Internal
106
106
  - Kind: Internal implementation class
107
107
 
108
+ <!-- class:ImageIO -->
109
+ ## `ImageIO`
110
+
111
+ Carbon's image-handler registry: picks an image format by extension and reads into, or saves from, a HostBitmap.
112
+
113
+ - Export: `@carbonenginejs/runtime/resource/imageio`
114
+ - Source: `src/resource/imageio/ImageIO.js`
115
+ - Visibility: Public
116
+ - Kind: Faithful Carbon port
117
+
118
+ <!-- class:CjsImageFormat -->
119
+ ## `CjsImageFormat`
120
+
121
+ The base of every image format: gives each one Carbon's handler table as Format.carbon and converts a native read to a requested pixel format.
122
+
123
+ - Export: `@carbonenginejs/runtime/resource/format`
124
+ - Source: `src/resource/format/CjsImageFormat.js`
125
+ - Visibility: Public
126
+ - Kind: Original CarbonEngineJS class
127
+
128
+ <!-- class:CjsGeometryFormat -->
129
+ ## `CjsGeometryFormat`
130
+
131
+ The base of every geometry format (gr2, cmf, fbx, obj, stl, gltf): the geometry media type and the node-class registry (`SetClasses`, `SetClass`, `GetClass`, `HasClass`) that hydrates a read into caller-supplied constructors.
132
+
133
+ - Export: `@carbonenginejs/runtime/resource/format`
134
+ - Source: `src/resource/format/CjsGeometryFormat.js`
135
+ - Visibility: Public
136
+ - Kind: Original CarbonEngineJS class
137
+
108
138
  <!-- class:CjsFormat -->
109
139
  ## `CjsFormat`
110
140
 
@@ -248,7 +278,7 @@ Builder for a Carbon compiled-effect container.
248
278
  <!-- class:CjsResourceProbe -->
249
279
  ## `CjsResourceProbe`
250
280
 
251
- Optional decorated resource-layer model for a plain format support report. It records recognition, the selected output, advisory or verified support, declared output capabilities, metadata, warnings, and structured errors, and exposes `canUseSelected()` and `canUse(output)`.
281
+ Optional plain record normalizing a format support report. It records recognition, the selected output, advisory or verified support, declared output capabilities, metadata, warnings, and structured errors, and exposes `canUseSelected()` and `canUse(output)`.
252
282
 
253
283
  - Export: `@carbonenginejs/runtime/resource`
254
284
  - Source: `src/resource/format/CjsResourceProbe.js`