@luma.gl/shaders 0.0.0-stage → 10.0.0-alpha.6

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 (693) hide show
  1. package/LICENSE +38 -0
  2. package/README.md +25 -2
  3. package/dist/dist.dev.js +19686 -0
  4. package/dist/dist.min.js +12180 -0
  5. package/dist/glsl.cjs +33 -0
  6. package/dist/glsl.cjs.map +6 -0
  7. package/dist/glsl.d.ts +6 -0
  8. package/dist/glsl.d.ts.map +1 -0
  9. package/dist/glsl.js +7 -0
  10. package/dist/glsl.js.map +1 -0
  11. package/dist/index.cjs +243 -0
  12. package/dist/index.cjs.map +6 -0
  13. package/dist/index.d.ts +91 -0
  14. package/dist/index.d.ts.map +1 -0
  15. package/dist/index.js +65 -0
  16. package/dist/index.js.map +1 -0
  17. package/dist/lib/color/normalize-byte-colors.cjs +50 -0
  18. package/dist/lib/color/normalize-byte-colors.d.ts +23 -0
  19. package/dist/lib/color/normalize-byte-colors.d.ts.map +1 -0
  20. package/dist/lib/color/normalize-byte-colors.js +42 -0
  21. package/dist/lib/color/normalize-byte-colors.js.map +1 -0
  22. package/dist/lib/filters/prop-types.cjs +90 -0
  23. package/dist/lib/filters/prop-types.d.ts +44 -0
  24. package/dist/lib/filters/prop-types.d.ts.map +1 -0
  25. package/dist/lib/filters/prop-types.js +96 -0
  26. package/dist/lib/filters/prop-types.js.map +1 -0
  27. package/dist/lib/glsl-shader-assembler.cjs +50 -0
  28. package/dist/lib/glsl-shader-assembler.d.ts +19 -0
  29. package/dist/lib/glsl-shader-assembler.d.ts.map +1 -0
  30. package/dist/lib/glsl-shader-assembler.js +29 -0
  31. package/dist/lib/glsl-shader-assembler.js.map +1 -0
  32. package/dist/lib/glsl-utils/get-shader-info.cjs +52 -0
  33. package/dist/lib/glsl-utils/get-shader-info.d.ts +9 -0
  34. package/dist/lib/glsl-utils/get-shader-info.d.ts.map +1 -0
  35. package/dist/lib/glsl-utils/get-shader-info.js +33 -0
  36. package/dist/lib/glsl-utils/get-shader-info.js.map +1 -0
  37. package/dist/lib/glsl-utils/shader-utils.cjs +126 -0
  38. package/dist/lib/glsl-utils/shader-utils.d.ts +23 -0
  39. package/dist/lib/glsl-utils/shader-utils.d.ts.map +1 -0
  40. package/dist/lib/glsl-utils/shader-utils.js +92 -0
  41. package/dist/lib/glsl-utils/shader-utils.js.map +1 -0
  42. package/dist/lib/preprocessor/preprocessor.cjs +107 -0
  43. package/dist/lib/preprocessor/preprocessor.d.ts +15 -0
  44. package/dist/lib/preprocessor/preprocessor.d.ts.map +1 -0
  45. package/dist/lib/preprocessor/preprocessor.js +99 -0
  46. package/dist/lib/preprocessor/preprocessor.js.map +1 -0
  47. package/dist/lib/shader-assembler-base.cjs +133 -0
  48. package/dist/lib/shader-assembler-base.d.ts +52 -0
  49. package/dist/lib/shader-assembler-base.d.ts.map +1 -0
  50. package/dist/lib/shader-assembler-base.js +128 -0
  51. package/dist/lib/shader-assembler-base.js.map +1 -0
  52. package/dist/lib/shader-assembler.cjs +33 -0
  53. package/dist/lib/shader-assembler.d.ts +4 -0
  54. package/dist/lib/shader-assembler.d.ts.map +1 -0
  55. package/dist/lib/shader-assembler.js +7 -0
  56. package/dist/lib/shader-assembler.js.map +1 -0
  57. package/dist/lib/shader-assembly/assemble-glsl-shaders.cjs +200 -0
  58. package/dist/lib/shader-assembly/assemble-glsl-shaders.d.ts +69 -0
  59. package/dist/lib/shader-assembly/assemble-glsl-shaders.d.ts.map +1 -0
  60. package/dist/lib/shader-assembly/assemble-glsl-shaders.js +221 -0
  61. package/dist/lib/shader-assembly/assemble-glsl-shaders.js.map +1 -0
  62. package/dist/lib/shader-assembly/assemble-shaders.cjs +42 -0
  63. package/dist/lib/shader-assembly/assemble-shaders.d.ts +10 -0
  64. package/dist/lib/shader-assembly/assemble-shaders.d.ts.map +1 -0
  65. package/dist/lib/shader-assembly/assemble-shaders.js +10 -0
  66. package/dist/lib/shader-assembly/assemble-shaders.js.map +1 -0
  67. package/dist/lib/shader-assembly/assemble-wgsl-shaders.cjs +501 -0
  68. package/dist/lib/shader-assembly/assemble-wgsl-shaders.d.ts +71 -0
  69. package/dist/lib/shader-assembly/assemble-wgsl-shaders.d.ts.map +1 -0
  70. package/dist/lib/shader-assembly/assemble-wgsl-shaders.js +473 -0
  71. package/dist/lib/shader-assembly/assemble-wgsl-shaders.js.map +1 -0
  72. package/dist/lib/shader-assembly/platform-defines.cjs +79 -0
  73. package/dist/lib/shader-assembly/platform-defines.d.ts +4 -0
  74. package/dist/lib/shader-assembly/platform-defines.d.ts.map +1 -0
  75. package/dist/lib/shader-assembly/platform-defines.js +52 -0
  76. package/dist/lib/shader-assembly/platform-defines.js.map +1 -0
  77. package/dist/lib/shader-assembly/platform-info.cjs +15 -0
  78. package/dist/lib/shader-assembly/platform-info.d.ts +20 -0
  79. package/dist/lib/shader-assembly/platform-info.d.ts.map +1 -0
  80. package/dist/lib/shader-assembly/platform-info.js +5 -0
  81. package/dist/lib/shader-assembly/platform-info.js.map +1 -0
  82. package/dist/lib/shader-assembly/shader-assembly-shared.cjs +96 -0
  83. package/dist/lib/shader-assembly/shader-assembly-shared.d.ts +16 -0
  84. package/dist/lib/shader-assembly/shader-assembly-shared.d.ts.map +1 -0
  85. package/dist/lib/shader-assembly/shader-assembly-shared.js +79 -0
  86. package/dist/lib/shader-assembly/shader-assembly-shared.js.map +1 -0
  87. package/dist/lib/shader-assembly/shader-assembly-types.cjs +15 -0
  88. package/dist/lib/shader-assembly/shader-assembly-types.d.ts +128 -0
  89. package/dist/lib/shader-assembly/shader-assembly-types.d.ts.map +1 -0
  90. package/dist/lib/shader-assembly/shader-assembly-types.js +5 -0
  91. package/dist/lib/shader-assembly/shader-assembly-types.js.map +1 -0
  92. package/dist/lib/shader-assembly/shader-hooks.cjs +103 -0
  93. package/dist/lib/shader-assembly/shader-hooks.d.ts +45 -0
  94. package/dist/lib/shader-assembly/shader-hooks.d.ts.map +1 -0
  95. package/dist/lib/shader-assembly/shader-hooks.js +84 -0
  96. package/dist/lib/shader-assembly/shader-hooks.js.map +1 -0
  97. package/dist/lib/shader-assembly/shader-injections.cjs +180 -0
  98. package/dist/lib/shader-assembly/shader-injections.d.ts +34 -0
  99. package/dist/lib/shader-assembly/shader-injections.d.ts.map +1 -0
  100. package/dist/lib/shader-assembly/shader-injections.js +183 -0
  101. package/dist/lib/shader-assembly/shader-injections.js.map +1 -0
  102. package/dist/lib/shader-assembly/shader-plugin-varyings.cjs +417 -0
  103. package/dist/lib/shader-assembly/shader-plugin-varyings.d.ts +15 -0
  104. package/dist/lib/shader-assembly/shader-plugin-varyings.d.ts.map +1 -0
  105. package/dist/lib/shader-assembly/shader-plugin-varyings.js +412 -0
  106. package/dist/lib/shader-assembly/shader-plugin-varyings.js.map +1 -0
  107. package/dist/lib/shader-assembly/shader-plugin-vertex-inputs.cjs +254 -0
  108. package/dist/lib/shader-assembly/shader-plugin-vertex-inputs.d.ts +12 -0
  109. package/dist/lib/shader-assembly/shader-plugin-vertex-inputs.d.ts.map +1 -0
  110. package/dist/lib/shader-assembly/shader-plugin-vertex-inputs.js +237 -0
  111. package/dist/lib/shader-assembly/shader-plugin-vertex-inputs.js.map +1 -0
  112. package/dist/lib/shader-assembly/wgsl-binding-debug.cjs +166 -0
  113. package/dist/lib/shader-assembly/wgsl-binding-debug.d.ts +37 -0
  114. package/dist/lib/shader-assembly/wgsl-binding-debug.d.ts.map +1 -0
  115. package/dist/lib/shader-assembly/wgsl-binding-debug.js +144 -0
  116. package/dist/lib/shader-assembly/wgsl-binding-debug.js.map +1 -0
  117. package/dist/lib/shader-assembly/wgsl-binding-scan.cjs +184 -0
  118. package/dist/lib/shader-assembly/wgsl-binding-scan.d.ts +19 -0
  119. package/dist/lib/shader-assembly/wgsl-binding-scan.d.ts.map +1 -0
  120. package/dist/lib/shader-assembly/wgsl-binding-scan.js +151 -0
  121. package/dist/lib/shader-assembly/wgsl-binding-scan.js.map +1 -0
  122. package/dist/lib/shader-assembly/wgsl-interface-scan.cjs +502 -0
  123. package/dist/lib/shader-assembly/wgsl-interface-scan.d.ts +14 -0
  124. package/dist/lib/shader-assembly/wgsl-interface-scan.d.ts.map +1 -0
  125. package/dist/lib/shader-assembly/wgsl-interface-scan.js +498 -0
  126. package/dist/lib/shader-assembly/wgsl-interface-scan.js.map +1 -0
  127. package/dist/lib/shader-generator/generate-shader.cjs +36 -0
  128. package/dist/lib/shader-generator/generate-shader.d.ts +8 -0
  129. package/dist/lib/shader-generator/generate-shader.d.ts.map +1 -0
  130. package/dist/lib/shader-generator/generate-shader.js +15 -0
  131. package/dist/lib/shader-generator/generate-shader.js.map +1 -0
  132. package/dist/lib/shader-generator/glsl/generate-glsl.cjs +94 -0
  133. package/dist/lib/shader-generator/glsl/generate-glsl.d.ts +7 -0
  134. package/dist/lib/shader-generator/glsl/generate-glsl.d.ts.map +1 -0
  135. package/dist/lib/shader-generator/glsl/generate-glsl.js +79 -0
  136. package/dist/lib/shader-generator/glsl/generate-glsl.js.map +1 -0
  137. package/dist/lib/shader-generator/utils/capitalize.cjs +29 -0
  138. package/dist/lib/shader-generator/utils/capitalize.d.ts +7 -0
  139. package/dist/lib/shader-generator/utils/capitalize.d.ts.map +1 -0
  140. package/dist/lib/shader-generator/utils/capitalize.js +12 -0
  141. package/dist/lib/shader-generator/utils/capitalize.js.map +1 -0
  142. package/dist/lib/shader-generator/wgsl/generate-wgsl.cjs +46 -0
  143. package/dist/lib/shader-generator/wgsl/generate-wgsl.d.ts +7 -0
  144. package/dist/lib/shader-generator/wgsl/generate-wgsl.d.ts.map +1 -0
  145. package/dist/lib/shader-generator/wgsl/generate-wgsl.js +23 -0
  146. package/dist/lib/shader-generator/wgsl/generate-wgsl.js.map +1 -0
  147. package/dist/lib/shader-module/composite-shader-pass.cjs +15 -0
  148. package/dist/lib/shader-module/composite-shader-pass.d.ts +41 -0
  149. package/dist/lib/shader-module/composite-shader-pass.d.ts.map +1 -0
  150. package/dist/lib/shader-module/composite-shader-pass.js +5 -0
  151. package/dist/lib/shader-module/composite-shader-pass.js.map +1 -0
  152. package/dist/lib/shader-module/shader-module-dependencies.cjs +83 -0
  153. package/dist/lib/shader-module/shader-module-dependencies.d.ts +39 -0
  154. package/dist/lib/shader-module/shader-module-dependencies.d.ts.map +1 -0
  155. package/dist/lib/shader-module/shader-module-dependencies.js +103 -0
  156. package/dist/lib/shader-module/shader-module-dependencies.js.map +1 -0
  157. package/dist/lib/shader-module/shader-module-uniform-layout.cjs +224 -0
  158. package/dist/lib/shader-module/shader-module-uniform-layout.d.ts +91 -0
  159. package/dist/lib/shader-module/shader-module-uniform-layout.d.ts.map +1 -0
  160. package/dist/lib/shader-module/shader-module-uniform-layout.js +253 -0
  161. package/dist/lib/shader-module/shader-module-uniform-layout.js.map +1 -0
  162. package/dist/lib/shader-module/shader-module.cjs +105 -0
  163. package/dist/lib/shader-module/shader-module.d.ts +98 -0
  164. package/dist/lib/shader-module/shader-module.d.ts.map +1 -0
  165. package/dist/lib/shader-module/shader-module.js +104 -0
  166. package/dist/lib/shader-module/shader-module.js.map +1 -0
  167. package/dist/lib/shader-module/shader-pass.cjs +15 -0
  168. package/dist/lib/shader-module/shader-pass.d.ts +48 -0
  169. package/dist/lib/shader-module/shader-pass.d.ts.map +1 -0
  170. package/dist/lib/shader-module/shader-pass.js +5 -0
  171. package/dist/lib/shader-module/shader-pass.js.map +1 -0
  172. package/dist/lib/shader-plugin.cjs +117 -0
  173. package/dist/lib/shader-plugin.d.ts +68 -0
  174. package/dist/lib/shader-plugin.d.ts.map +1 -0
  175. package/dist/lib/shader-plugin.js +98 -0
  176. package/dist/lib/shader-plugin.js.map +1 -0
  177. package/dist/lib/shader-transpiler/shader-transpiler.cjs +15 -0
  178. package/dist/lib/shader-transpiler/shader-transpiler.d.ts +27 -0
  179. package/dist/lib/shader-transpiler/shader-transpiler.d.ts.map +1 -0
  180. package/dist/lib/shader-transpiler/shader-transpiler.js +5 -0
  181. package/dist/lib/shader-transpiler/shader-transpiler.js.map +1 -0
  182. package/dist/lib/shader-transpiler/transpile-glsl-shader.cjs +71 -0
  183. package/dist/lib/shader-transpiler/transpile-glsl-shader.d.ts +9 -0
  184. package/dist/lib/shader-transpiler/transpile-glsl-shader.d.ts.map +1 -0
  185. package/dist/lib/shader-transpiler/transpile-glsl-shader.js +69 -0
  186. package/dist/lib/shader-transpiler/transpile-glsl-shader.js.map +1 -0
  187. package/dist/lib/utils/assert.cjs +34 -0
  188. package/dist/lib/utils/assert.d.ts +2 -0
  189. package/dist/lib/utils/assert.d.ts.map +1 -0
  190. package/dist/lib/utils/assert.js +13 -0
  191. package/dist/lib/utils/assert.js.map +1 -0
  192. package/dist/lib/utils/uniform-types.cjs +15 -0
  193. package/dist/lib/utils/uniform-types.d.ts +18 -0
  194. package/dist/lib/utils/uniform-types.d.ts.map +1 -0
  195. package/dist/lib/utils/uniform-types.js +5 -0
  196. package/dist/lib/utils/uniform-types.js.map +1 -0
  197. package/dist/lib/wgsl-shader-assembler.cjs +99 -0
  198. package/dist/lib/wgsl-shader-assembler.d.ts +34 -0
  199. package/dist/lib/wgsl-shader-assembler.d.ts.map +1 -0
  200. package/dist/lib/wgsl-shader-assembler.js +84 -0
  201. package/dist/lib/wgsl-shader-assembler.js.map +1 -0
  202. package/dist/module-injectors.cjs +59 -0
  203. package/dist/module-injectors.d.ts +3 -0
  204. package/dist/module-injectors.d.ts.map +1 -0
  205. package/dist/module-injectors.js +31 -0
  206. package/dist/module-injectors.js.map +1 -0
  207. package/dist/modules/color/float-colors.cjs +275 -0
  208. package/dist/modules/color/float-colors.d.ts +132 -0
  209. package/dist/modules/color/float-colors.d.ts.map +1 -0
  210. package/dist/modules/color/float-colors.js +248 -0
  211. package/dist/modules/color/float-colors.js.map +1 -0
  212. package/dist/modules/engine/clip/clip.cjs +152 -0
  213. package/dist/modules/engine/clip/clip.d.ts +12 -0
  214. package/dist/modules/engine/clip/clip.d.ts.map +1 -0
  215. package/dist/modules/engine/clip/clip.js +129 -0
  216. package/dist/modules/engine/clip/clip.js.map +1 -0
  217. package/dist/modules/engine/filter/filter.cjs +111 -0
  218. package/dist/modules/engine/filter/filter.d.ts +12 -0
  219. package/dist/modules/engine/filter/filter.d.ts.map +1 -0
  220. package/dist/modules/engine/filter/filter.js +88 -0
  221. package/dist/modules/engine/filter/filter.js.map +1 -0
  222. package/dist/modules/engine/geometry/geometry.cjs +63 -0
  223. package/dist/modules/engine/geometry/geometry.d.ts +9 -0
  224. package/dist/modules/engine/geometry/geometry.d.ts.map +1 -0
  225. package/dist/modules/engine/geometry/geometry.js +42 -0
  226. package/dist/modules/engine/geometry/geometry.js.map +1 -0
  227. package/dist/modules/engine/gpu-animation/gpu-animation.cjs +255 -0
  228. package/dist/modules/engine/gpu-animation/gpu-animation.d.ts +34 -0
  229. package/dist/modules/engine/gpu-animation/gpu-animation.d.ts.map +1 -0
  230. package/dist/modules/engine/gpu-animation/gpu-animation.js +228 -0
  231. package/dist/modules/engine/gpu-animation/gpu-animation.js.map +1 -0
  232. package/dist/modules/engine/picking/picking.cjs +210 -0
  233. package/dist/modules/engine/picking/picking.d.ts +77 -0
  234. package/dist/modules/engine/picking/picking.d.ts.map +1 -0
  235. package/dist/modules/engine/picking/picking.js +198 -0
  236. package/dist/modules/engine/picking/picking.js.map +1 -0
  237. package/dist/modules/engine/project/project.cjs +138 -0
  238. package/dist/modules/engine/project/project.d.ts +39 -0
  239. package/dist/modules/engine/project/project.d.ts.map +1 -0
  240. package/dist/modules/engine/project/project.js +129 -0
  241. package/dist/modules/engine/project/project.js.map +1 -0
  242. package/dist/modules/engine/skin/skin.cjs +212 -0
  243. package/dist/modules/engine/skin/skin.d.ts +52 -0
  244. package/dist/modules/engine/skin/skin.d.ts.map +1 -0
  245. package/dist/modules/engine/skin/skin.js +179 -0
  246. package/dist/modules/engine/skin/skin.js.map +1 -0
  247. package/dist/modules/engine/transform/transform.cjs +72 -0
  248. package/dist/modules/engine/transform/transform.d.ts +6 -0
  249. package/dist/modules/engine/transform/transform.d.ts.map +1 -0
  250. package/dist/modules/engine/transform/transform.js +49 -0
  251. package/dist/modules/engine/transform/transform.js.map +1 -0
  252. package/dist/modules/geometry/path-dash/path-dash.cjs +93 -0
  253. package/dist/modules/geometry/path-dash/path-dash.d.ts +10 -0
  254. package/dist/modules/geometry/path-dash/path-dash.d.ts.map +1 -0
  255. package/dist/modules/geometry/path-dash/path-dash.js +66 -0
  256. package/dist/modules/geometry/path-dash/path-dash.js.map +1 -0
  257. package/dist/modules/geometry/pattern-fill/pattern-fill-shaders.cjs +117 -0
  258. package/dist/modules/geometry/pattern-fill/pattern-fill-shaders.d.ts +3 -0
  259. package/dist/modules/geometry/pattern-fill/pattern-fill-shaders.d.ts.map +1 -0
  260. package/dist/modules/geometry/pattern-fill/pattern-fill-shaders.js +87 -0
  261. package/dist/modules/geometry/pattern-fill/pattern-fill-shaders.js.map +1 -0
  262. package/dist/modules/geometry/pattern-fill/pattern-fill.cjs +64 -0
  263. package/dist/modules/geometry/pattern-fill/pattern-fill.d.ts +14 -0
  264. package/dist/modules/geometry/pattern-fill/pattern-fill.d.ts.map +1 -0
  265. package/dist/modules/geometry/pattern-fill/pattern-fill.js +43 -0
  266. package/dist/modules/geometry/pattern-fill/pattern-fill.js.map +1 -0
  267. package/dist/modules/geometry/point-glow/point-glow.cjs +104 -0
  268. package/dist/modules/geometry/point-glow/point-glow.d.ts +11 -0
  269. package/dist/modules/geometry/point-glow/point-glow.d.ts.map +1 -0
  270. package/dist/modules/geometry/point-glow/point-glow.js +77 -0
  271. package/dist/modules/geometry/point-glow/point-glow.js.map +1 -0
  272. package/dist/modules/geometry/precipitation/precipitation.cjs +122 -0
  273. package/dist/modules/geometry/precipitation/precipitation.d.ts +40 -0
  274. package/dist/modules/geometry/precipitation/precipitation.d.ts.map +1 -0
  275. package/dist/modules/geometry/precipitation/precipitation.js +95 -0
  276. package/dist/modules/geometry/precipitation/precipitation.js.map +1 -0
  277. package/dist/modules/geometry/sketch-stroke/sketch-stroke.cjs +158 -0
  278. package/dist/modules/geometry/sketch-stroke/sketch-stroke.d.ts +60 -0
  279. package/dist/modules/geometry/sketch-stroke/sketch-stroke.d.ts.map +1 -0
  280. package/dist/modules/geometry/sketch-stroke/sketch-stroke.js +137 -0
  281. package/dist/modules/geometry/sketch-stroke/sketch-stroke.js.map +1 -0
  282. package/dist/modules/geospatial/dggs/dggs-wgsl.cjs +2304 -0
  283. package/dist/modules/geospatial/dggs/dggs-wgsl.d.ts +3 -0
  284. package/dist/modules/geospatial/dggs/dggs-wgsl.d.ts.map +1 -0
  285. package/dist/modules/geospatial/dggs/dggs-wgsl.js +2283 -0
  286. package/dist/modules/geospatial/dggs/dggs-wgsl.js.map +1 -0
  287. package/dist/modules/geospatial/dggs/dggs.cjs +31 -0
  288. package/dist/modules/geospatial/dggs/dggs.d.ts +6 -0
  289. package/dist/modules/geospatial/dggs/dggs.d.ts.map +1 -0
  290. package/dist/modules/geospatial/dggs/dggs.js +10 -0
  291. package/dist/modules/geospatial/dggs/dggs.js.map +1 -0
  292. package/dist/modules/lighting/area-lighting/area-light-types.cjs +68 -0
  293. package/dist/modules/lighting/area-lighting/area-light-types.d.ts +34 -0
  294. package/dist/modules/lighting/area-lighting/area-light-types.d.ts.map +1 -0
  295. package/dist/modules/lighting/area-lighting/area-light-types.js +40 -0
  296. package/dist/modules/lighting/area-lighting/area-light-types.js.map +1 -0
  297. package/dist/modules/lighting/area-lighting/area-lighting-shaders.cjs +101 -0
  298. package/dist/modules/lighting/area-lighting/area-lighting-shaders.d.ts +3 -0
  299. package/dist/modules/lighting/area-lighting/area-lighting-shaders.d.ts.map +1 -0
  300. package/dist/modules/lighting/area-lighting/area-lighting-shaders.js +71 -0
  301. package/dist/modules/lighting/area-lighting/area-lighting-shaders.js.map +1 -0
  302. package/dist/modules/lighting/area-lighting/area-lighting.cjs +62 -0
  303. package/dist/modules/lighting/area-lighting/area-lighting.d.ts +89 -0
  304. package/dist/modules/lighting/area-lighting/area-lighting.d.ts.map +1 -0
  305. package/dist/modules/lighting/area-lighting/area-lighting.js +41 -0
  306. package/dist/modules/lighting/area-lighting/area-lighting.js.map +1 -0
  307. package/dist/modules/lighting/area-lighting/ltc-shaders.cjs +192 -0
  308. package/dist/modules/lighting/area-lighting/ltc-shaders.d.ts +3 -0
  309. package/dist/modules/lighting/area-lighting/ltc-shaders.d.ts.map +1 -0
  310. package/dist/modules/lighting/area-lighting/ltc-shaders.js +162 -0
  311. package/dist/modules/lighting/area-lighting/ltc-shaders.js.map +1 -0
  312. package/dist/modules/lighting/atmosphere/atmosphere.cjs +253 -0
  313. package/dist/modules/lighting/atmosphere/atmosphere.d.ts +45 -0
  314. package/dist/modules/lighting/atmosphere/atmosphere.d.ts.map +1 -0
  315. package/dist/modules/lighting/atmosphere/atmosphere.js +228 -0
  316. package/dist/modules/lighting/atmosphere/atmosphere.js.map +1 -0
  317. package/dist/modules/lighting/clouds/clouds.cjs +216 -0
  318. package/dist/modules/lighting/clouds/clouds.d.ts +58 -0
  319. package/dist/modules/lighting/clouds/clouds.d.ts.map +1 -0
  320. package/dist/modules/lighting/clouds/clouds.js +192 -0
  321. package/dist/modules/lighting/clouds/clouds.js.map +1 -0
  322. package/dist/modules/lighting/firefly/firefly.cjs +74 -0
  323. package/dist/modules/lighting/firefly/firefly.d.ts +36 -0
  324. package/dist/modules/lighting/firefly/firefly.d.ts.map +1 -0
  325. package/dist/modules/lighting/firefly/firefly.js +53 -0
  326. package/dist/modules/lighting/firefly/firefly.js.map +1 -0
  327. package/dist/modules/lighting/globe-clouds/globe-clouds.cjs +143 -0
  328. package/dist/modules/lighting/globe-clouds/globe-clouds.d.ts +53 -0
  329. package/dist/modules/lighting/globe-clouds/globe-clouds.d.ts.map +1 -0
  330. package/dist/modules/lighting/globe-clouds/globe-clouds.js +119 -0
  331. package/dist/modules/lighting/globe-clouds/globe-clouds.js.map +1 -0
  332. package/dist/modules/lighting/gouraud-material/gouraud-material.cjs +61 -0
  333. package/dist/modules/lighting/gouraud-material/gouraud-material.d.ts +12 -0
  334. package/dist/modules/lighting/gouraud-material/gouraud-material.d.ts.map +1 -0
  335. package/dist/modules/lighting/gouraud-material/gouraud-material.js +40 -0
  336. package/dist/modules/lighting/gouraud-material/gouraud-material.js.map +1 -0
  337. package/dist/modules/lighting/height-fog/height-fog-functions.cjs +139 -0
  338. package/dist/modules/lighting/height-fog/height-fog-functions.d.ts +14 -0
  339. package/dist/modules/lighting/height-fog/height-fog-functions.d.ts.map +1 -0
  340. package/dist/modules/lighting/height-fog/height-fog-functions.js +114 -0
  341. package/dist/modules/lighting/height-fog/height-fog-functions.js.map +1 -0
  342. package/dist/modules/lighting/height-fog/height-fog.cjs +104 -0
  343. package/dist/modules/lighting/height-fog/height-fog.d.ts +60 -0
  344. package/dist/modules/lighting/height-fog/height-fog.d.ts.map +1 -0
  345. package/dist/modules/lighting/height-fog/height-fog.js +77 -0
  346. package/dist/modules/lighting/height-fog/height-fog.js.map +1 -0
  347. package/dist/modules/lighting/ibl/ibl.cjs +63 -0
  348. package/dist/modules/lighting/ibl/ibl.d.ts +25 -0
  349. package/dist/modules/lighting/ibl/ibl.d.ts.map +1 -0
  350. package/dist/modules/lighting/ibl/ibl.js +33 -0
  351. package/dist/modules/lighting/ibl/ibl.js.map +1 -0
  352. package/dist/modules/lighting/lambert-material/lambert-material.cjs +54 -0
  353. package/dist/modules/lighting/lambert-material/lambert-material.d.ts +10 -0
  354. package/dist/modules/lighting/lambert-material/lambert-material.d.ts.map +1 -0
  355. package/dist/modules/lighting/lambert-material/lambert-material.js +33 -0
  356. package/dist/modules/lighting/lambert-material/lambert-material.js.map +1 -0
  357. package/dist/modules/lighting/lambert-material/lambert-shaders-glsl.cjs +88 -0
  358. package/dist/modules/lighting/lambert-material/lambert-shaders-glsl.d.ts +3 -0
  359. package/dist/modules/lighting/lambert-material/lambert-shaders-glsl.d.ts.map +1 -0
  360. package/dist/modules/lighting/lambert-material/lambert-shaders-glsl.js +60 -0
  361. package/dist/modules/lighting/lambert-material/lambert-shaders-glsl.js.map +1 -0
  362. package/dist/modules/lighting/lambert-material/lambert-shaders-wgsl.cjs +97 -0
  363. package/dist/modules/lighting/lambert-material/lambert-shaders-wgsl.d.ts +2 -0
  364. package/dist/modules/lighting/lambert-material/lambert-shaders-wgsl.d.ts.map +1 -0
  365. package/dist/modules/lighting/lambert-material/lambert-shaders-wgsl.js +73 -0
  366. package/dist/modules/lighting/lambert-material/lambert-shaders-wgsl.js.map +1 -0
  367. package/dist/modules/lighting/lights/lighting-glsl.cjs +116 -0
  368. package/dist/modules/lighting/lights/lighting-glsl.d.ts +2 -0
  369. package/dist/modules/lighting/lights/lighting-glsl.d.ts.map +1 -0
  370. package/dist/modules/lighting/lights/lighting-glsl.js +92 -0
  371. package/dist/modules/lighting/lights/lighting-glsl.js.map +1 -0
  372. package/dist/modules/lighting/lights/lighting-wgsl.cjs +115 -0
  373. package/dist/modules/lighting/lights/lighting-wgsl.d.ts +2 -0
  374. package/dist/modules/lighting/lights/lighting-wgsl.d.ts.map +1 -0
  375. package/dist/modules/lighting/lights/lighting-wgsl.js +91 -0
  376. package/dist/modules/lighting/lights/lighting-wgsl.js.map +1 -0
  377. package/dist/modules/lighting/lights/lighting.cjs +210 -0
  378. package/dist/modules/lighting/lights/lighting.d.ts +163 -0
  379. package/dist/modules/lighting/lights/lighting.d.ts.map +1 -0
  380. package/dist/modules/lighting/lights/lighting.js +208 -0
  381. package/dist/modules/lighting/lights/lighting.js.map +1 -0
  382. package/dist/modules/lighting/no-material/dirlight.cjs +112 -0
  383. package/dist/modules/lighting/no-material/dirlight.d.ts +33 -0
  384. package/dist/modules/lighting/no-material/dirlight.d.ts.map +1 -0
  385. package/dist/modules/lighting/no-material/dirlight.js +86 -0
  386. package/dist/modules/lighting/no-material/dirlight.js.map +1 -0
  387. package/dist/modules/lighting/pbr-material/pbr-material-glsl.cjs +1767 -0
  388. package/dist/modules/lighting/pbr-material/pbr-material-glsl.d.ts +3 -0
  389. package/dist/modules/lighting/pbr-material/pbr-material-glsl.d.ts.map +1 -0
  390. package/dist/modules/lighting/pbr-material/pbr-material-glsl.js +1745 -0
  391. package/dist/modules/lighting/pbr-material/pbr-material-glsl.js.map +1 -0
  392. package/dist/modules/lighting/pbr-material/pbr-material-wgsl.cjs +2062 -0
  393. package/dist/modules/lighting/pbr-material/pbr-material-wgsl.d.ts +3 -0
  394. package/dist/modules/lighting/pbr-material/pbr-material-wgsl.d.ts.map +1 -0
  395. package/dist/modules/lighting/pbr-material/pbr-material-wgsl.js +2040 -0
  396. package/dist/modules/lighting/pbr-material/pbr-material-wgsl.js.map +1 -0
  397. package/dist/modules/lighting/pbr-material/pbr-material.cjs +315 -0
  398. package/dist/modules/lighting/pbr-material/pbr-material.d.ts +516 -0
  399. package/dist/modules/lighting/pbr-material/pbr-material.d.ts.map +1 -0
  400. package/dist/modules/lighting/pbr-material/pbr-material.js +292 -0
  401. package/dist/modules/lighting/pbr-material/pbr-material.js.map +1 -0
  402. package/dist/modules/lighting/pbr-material/pbr-projection.cjs +63 -0
  403. package/dist/modules/lighting/pbr-material/pbr-projection.d.ts +10 -0
  404. package/dist/modules/lighting/pbr-material/pbr-projection.d.ts.map +1 -0
  405. package/dist/modules/lighting/pbr-material/pbr-projection.js +37 -0
  406. package/dist/modules/lighting/pbr-material/pbr-projection.js.map +1 -0
  407. package/dist/modules/lighting/pbr-material/pbr-scene.cjs +109 -0
  408. package/dist/modules/lighting/pbr-material/pbr-scene.d.ts +52 -0
  409. package/dist/modules/lighting/pbr-material/pbr-scene.d.ts.map +1 -0
  410. package/dist/modules/lighting/pbr-material/pbr-scene.js +83 -0
  411. package/dist/modules/lighting/pbr-material/pbr-scene.js.map +1 -0
  412. package/dist/modules/lighting/phong-material/phong-material.cjs +61 -0
  413. package/dist/modules/lighting/phong-material/phong-material.d.ts +13 -0
  414. package/dist/modules/lighting/phong-material/phong-material.d.ts.map +1 -0
  415. package/dist/modules/lighting/phong-material/phong-material.js +40 -0
  416. package/dist/modules/lighting/phong-material/phong-material.js.map +1 -0
  417. package/dist/modules/lighting/phong-material/phong-shaders-glsl.cjs +100 -0
  418. package/dist/modules/lighting/phong-material/phong-shaders-glsl.d.ts +3 -0
  419. package/dist/modules/lighting/phong-material/phong-shaders-glsl.d.ts.map +1 -0
  420. package/dist/modules/lighting/phong-material/phong-shaders-glsl.js +72 -0
  421. package/dist/modules/lighting/phong-material/phong-shaders-glsl.js.map +1 -0
  422. package/dist/modules/lighting/phong-material/phong-shaders-wgsl.cjs +153 -0
  423. package/dist/modules/lighting/phong-material/phong-shaders-wgsl.d.ts +2 -0
  424. package/dist/modules/lighting/phong-material/phong-shaders-wgsl.d.ts.map +1 -0
  425. package/dist/modules/lighting/phong-material/phong-shaders-wgsl.js +129 -0
  426. package/dist/modules/lighting/phong-material/phong-shaders-wgsl.js.map +1 -0
  427. package/dist/modules/lighting/surface-weather/surface-weather.cjs +199 -0
  428. package/dist/modules/lighting/surface-weather/surface-weather.d.ts +54 -0
  429. package/dist/modules/lighting/surface-weather/surface-weather.d.ts.map +1 -0
  430. package/dist/modules/lighting/surface-weather/surface-weather.js +175 -0
  431. package/dist/modules/lighting/surface-weather/surface-weather.js.map +1 -0
  432. package/dist/modules/lighting/water-material/river-water-material.cjs +56 -0
  433. package/dist/modules/lighting/water-material/river-water-material.d.ts +21 -0
  434. package/dist/modules/lighting/water-material/river-water-material.d.ts.map +1 -0
  435. package/dist/modules/lighting/water-material/river-water-material.js +36 -0
  436. package/dist/modules/lighting/water-material/river-water-material.js.map +1 -0
  437. package/dist/modules/lighting/water-material/river-water-shaders.cjs +261 -0
  438. package/dist/modules/lighting/water-material/river-water-shaders.d.ts +3 -0
  439. package/dist/modules/lighting/water-material/river-water-shaders.d.ts.map +1 -0
  440. package/dist/modules/lighting/water-material/river-water-shaders.js +233 -0
  441. package/dist/modules/lighting/water-material/river-water-shaders.js.map +1 -0
  442. package/dist/modules/lighting/water-material/water-material.cjs +188 -0
  443. package/dist/modules/lighting/water-material/water-material.d.ts +28 -0
  444. package/dist/modules/lighting/water-material/water-material.d.ts.map +1 -0
  445. package/dist/modules/lighting/water-material/water-material.js +179 -0
  446. package/dist/modules/lighting/water-material/water-material.js.map +1 -0
  447. package/dist/modules/lighting/water-material/water-shaders-glsl.cjs +260 -0
  448. package/dist/modules/lighting/water-material/water-shaders-glsl.d.ts +3 -0
  449. package/dist/modules/lighting/water-material/water-shaders-glsl.d.ts.map +1 -0
  450. package/dist/modules/lighting/water-material/water-shaders-glsl.js +232 -0
  451. package/dist/modules/lighting/water-material/water-shaders-glsl.js.map +1 -0
  452. package/dist/modules/lighting/water-material/water-shaders-wgsl.cjs +254 -0
  453. package/dist/modules/lighting/water-material/water-shaders-wgsl.d.ts +2 -0
  454. package/dist/modules/lighting/water-material/water-shaders-wgsl.d.ts.map +1 -0
  455. package/dist/modules/lighting/water-material/water-shaders-wgsl.js +230 -0
  456. package/dist/modules/lighting/water-material/water-shaders-wgsl.js.map +1 -0
  457. package/dist/modules/math/fp16/fp16-utils.cjs +112 -0
  458. package/dist/modules/math/fp16/fp16-utils.d.ts +13 -0
  459. package/dist/modules/math/fp16/fp16-utils.d.ts.map +1 -0
  460. package/dist/modules/math/fp16/fp16-utils.js +118 -0
  461. package/dist/modules/math/fp16/fp16-utils.js.map +1 -0
  462. package/dist/modules/math/fp32/fp32.cjs +310 -0
  463. package/dist/modules/math/fp32/fp32.d.ts +9 -0
  464. package/dist/modules/math/fp32/fp32.d.ts.map +1 -0
  465. package/dist/modules/math/fp32/fp32.js +288 -0
  466. package/dist/modules/math/fp32/fp32.js.map +1 -0
  467. package/dist/modules/math/fp64/fp64-arithmetic-glsl.cjs +229 -0
  468. package/dist/modules/math/fp64/fp64-arithmetic-glsl.d.ts +2 -0
  469. package/dist/modules/math/fp64/fp64-arithmetic-glsl.d.ts.map +1 -0
  470. package/dist/modules/math/fp64/fp64-arithmetic-glsl.js +205 -0
  471. package/dist/modules/math/fp64/fp64-arithmetic-glsl.js.map +1 -0
  472. package/dist/modules/math/fp64/fp64-arithmetic-wgsl-hybrid.cjs +144 -0
  473. package/dist/modules/math/fp64/fp64-arithmetic-wgsl-hybrid.d.ts +10 -0
  474. package/dist/modules/math/fp64/fp64-arithmetic-wgsl-hybrid.d.ts.map +1 -0
  475. package/dist/modules/math/fp64/fp64-arithmetic-wgsl-hybrid.js +128 -0
  476. package/dist/modules/math/fp64/fp64-arithmetic-wgsl-hybrid.js.map +1 -0
  477. package/dist/modules/math/fp64/fp64-arithmetic-wgsl-integer.cjs +583 -0
  478. package/dist/modules/math/fp64/fp64-arithmetic-wgsl-integer.d.ts +11 -0
  479. package/dist/modules/math/fp64/fp64-arithmetic-wgsl-integer.d.ts.map +1 -0
  480. package/dist/modules/math/fp64/fp64-arithmetic-wgsl-integer.js +563 -0
  481. package/dist/modules/math/fp64/fp64-arithmetic-wgsl-integer.js.map +1 -0
  482. package/dist/modules/math/fp64/fp64-arithmetic-wgsl.cjs +946 -0
  483. package/dist/modules/math/fp64/fp64-arithmetic-wgsl.d.ts +3 -0
  484. package/dist/modules/math/fp64/fp64-arithmetic-wgsl.d.ts.map +1 -0
  485. package/dist/modules/math/fp64/fp64-arithmetic-wgsl.js +923 -0
  486. package/dist/modules/math/fp64/fp64-arithmetic-wgsl.js.map +1 -0
  487. package/dist/modules/math/fp64/fp64-functions-glsl.cjs +699 -0
  488. package/dist/modules/math/fp64/fp64-functions-glsl.d.ts +2 -0
  489. package/dist/modules/math/fp64/fp64-functions-glsl.d.ts.map +1 -0
  490. package/dist/modules/math/fp64/fp64-functions-glsl.js +675 -0
  491. package/dist/modules/math/fp64/fp64-functions-glsl.js.map +1 -0
  492. package/dist/modules/math/fp64/fp64-functions-wgsl.cjs +180 -0
  493. package/dist/modules/math/fp64/fp64-functions-wgsl.d.ts +3 -0
  494. package/dist/modules/math/fp64/fp64-functions-wgsl.d.ts.map +1 -0
  495. package/dist/modules/math/fp64/fp64-functions-wgsl.js +157 -0
  496. package/dist/modules/math/fp64/fp64-functions-wgsl.js.map +1 -0
  497. package/dist/modules/math/fp64/fp64-utils.cjs +50 -0
  498. package/dist/modules/math/fp64/fp64-utils.d.ts +22 -0
  499. package/dist/modules/math/fp64/fp64-utils.d.ts.map +1 -0
  500. package/dist/modules/math/fp64/fp64-utils.js +42 -0
  501. package/dist/modules/math/fp64/fp64-utils.js.map +1 -0
  502. package/dist/modules/math/fp64/fp64.cjs +68 -0
  503. package/dist/modules/math/fp64/fp64.d.ts +24 -0
  504. package/dist/modules/math/fp64/fp64.d.ts.map +1 -0
  505. package/dist/modules/math/fp64/fp64.js +46 -0
  506. package/dist/modules/math/fp64/fp64.js.map +1 -0
  507. package/dist/modules/math/random/random.cjs +46 -0
  508. package/dist/modules/math/random/random.d.ts +7 -0
  509. package/dist/modules/math/random/random.d.ts.map +1 -0
  510. package/dist/modules/math/random/random.js +21 -0
  511. package/dist/modules/math/random/random.js.map +1 -0
  512. package/dist/modules/math/value-noise/value-noise.cjs +95 -0
  513. package/dist/modules/math/value-noise/value-noise.d.ts +7 -0
  514. package/dist/modules/math/value-noise/value-noise.d.ts.map +1 -0
  515. package/dist/modules/math/value-noise/value-noise.js +68 -0
  516. package/dist/modules/math/value-noise/value-noise.js.map +1 -0
  517. package/dist/modules/volume/volume-raymarch.cjs +107 -0
  518. package/dist/modules/volume/volume-raymarch.d.ts +6 -0
  519. package/dist/modules/volume/volume-raymarch.d.ts.map +1 -0
  520. package/dist/modules/volume/volume-raymarch.js +84 -0
  521. package/dist/modules/volume/volume-raymarch.js.map +1 -0
  522. package/dist/types/align-to.cjs +38 -0
  523. package/dist/types/align-to.d.ts +3 -0
  524. package/dist/types/align-to.d.ts.map +1 -0
  525. package/dist/types/align-to.js +13 -0
  526. package/dist/types/align-to.js.map +1 -0
  527. package/dist/types/primitive-data-types.cjs +15 -0
  528. package/dist/types/primitive-data-types.d.ts +7 -0
  529. package/dist/types/primitive-data-types.d.ts.map +1 -0
  530. package/dist/types/primitive-data-types.js +5 -0
  531. package/dist/types/primitive-data-types.js.map +1 -0
  532. package/dist/types/sampler-props.cjs +15 -0
  533. package/dist/types/sampler-props.d.ts +26 -0
  534. package/dist/types/sampler-props.d.ts.map +1 -0
  535. package/dist/types/sampler-props.js +5 -0
  536. package/dist/types/sampler-props.js.map +1 -0
  537. package/dist/types/shader-block-layout.cjs +184 -0
  538. package/dist/types/shader-block-layout.d.ts +72 -0
  539. package/dist/types/shader-block-layout.d.ts.map +1 -0
  540. package/dist/types/shader-block-layout.js +209 -0
  541. package/dist/types/shader-block-layout.js.map +1 -0
  542. package/dist/types/shader-layout.cjs +15 -0
  543. package/dist/types/shader-layout.d.ts +178 -0
  544. package/dist/types/shader-layout.d.ts.map +1 -0
  545. package/dist/types/shader-layout.js +5 -0
  546. package/dist/types/shader-layout.js.map +1 -0
  547. package/dist/types/shader-type-decoder.cjs +240 -0
  548. package/dist/types/shader-type-decoder.d.ts +41 -0
  549. package/dist/types/shader-type-decoder.d.ts.map +1 -0
  550. package/dist/types/shader-type-decoder.js +210 -0
  551. package/dist/types/shader-type-decoder.js.map +1 -0
  552. package/dist/types/shader-types.cjs +15 -0
  553. package/dist/types/shader-types.d.ts +101 -0
  554. package/dist/types/shader-types.d.ts.map +1 -0
  555. package/dist/types/shader-types.js +30 -0
  556. package/dist/types/shader-types.js.map +1 -0
  557. package/dist/types/texture-formats.cjs +15 -0
  558. package/dist/types/texture-formats.d.ts +24 -0
  559. package/dist/types/texture-formats.d.ts.map +1 -0
  560. package/dist/types/texture-formats.js +5 -0
  561. package/dist/types/texture-formats.js.map +1 -0
  562. package/dist/types.cjs +42 -0
  563. package/dist/types.cjs.map +6 -0
  564. package/dist/types.d.ts +14 -0
  565. package/dist/types.d.ts.map +1 -0
  566. package/dist/types.js +12 -0
  567. package/dist/types.js.map +1 -0
  568. package/dist/wgsl.cjs +39 -0
  569. package/dist/wgsl.cjs.map +6 -0
  570. package/dist/wgsl.d.ts +8 -0
  571. package/dist/wgsl.d.ts.map +1 -0
  572. package/dist/wgsl.js +9 -0
  573. package/dist/wgsl.js.map +1 -0
  574. package/package.json +65 -4
  575. package/src/glsl.ts +13 -0
  576. package/src/index.ts +259 -0
  577. package/src/lib/color/normalize-byte-colors.ts +57 -0
  578. package/src/lib/filters/prop-types.ts +150 -0
  579. package/src/lib/glsl-shader-assembler.ts +39 -0
  580. package/src/lib/glsl-utils/get-shader-info.ts +42 -0
  581. package/src/lib/glsl-utils/shader-utils.ts +110 -0
  582. package/src/lib/preprocessor/preprocessor.ts +132 -0
  583. package/src/lib/shader-assembler-base.ts +170 -0
  584. package/src/lib/shader-assembler.ts +7 -0
  585. package/src/lib/shader-assembly/assemble-glsl-shaders.ts +305 -0
  586. package/src/lib/shader-assembly/assemble-shaders.ts +13 -0
  587. package/src/lib/shader-assembly/assemble-wgsl-shaders.ts +801 -0
  588. package/src/lib/shader-assembly/platform-defines.ts +58 -0
  589. package/src/lib/shader-assembly/platform-info.ts +23 -0
  590. package/src/lib/shader-assembly/shader-assembly-shared.ts +95 -0
  591. package/src/lib/shader-assembly/shader-assembly-types.ts +142 -0
  592. package/src/lib/shader-assembly/shader-hooks.ts +141 -0
  593. package/src/lib/shader-assembly/shader-injections.ts +250 -0
  594. package/src/lib/shader-assembly/shader-plugin-varyings.ts +524 -0
  595. package/src/lib/shader-assembly/shader-plugin-vertex-inputs.ts +279 -0
  596. package/src/lib/shader-assembly/wgsl-binding-debug.ts +227 -0
  597. package/src/lib/shader-assembly/wgsl-binding-scan.ts +228 -0
  598. package/src/lib/shader-assembly/wgsl-interface-scan.ts +676 -0
  599. package/src/lib/shader-generator/generate-shader.ts +27 -0
  600. package/src/lib/shader-generator/glsl/generate-glsl.ts +101 -0
  601. package/src/lib/shader-generator/utils/capitalize.ts +12 -0
  602. package/src/lib/shader-generator/wgsl/generate-wgsl.ts +40 -0
  603. package/src/lib/shader-module/composite-shader-pass.ts +47 -0
  604. package/src/lib/shader-module/shader-module-dependencies.ts +128 -0
  605. package/src/lib/shader-module/shader-module-uniform-layout.ts +420 -0
  606. package/src/lib/shader-module/shader-module.ts +244 -0
  607. package/src/lib/shader-module/shader-pass.ts +69 -0
  608. package/src/lib/shader-plugin.ts +214 -0
  609. package/src/lib/shader-transpiler/shader-transpiler.ts +34 -0
  610. package/src/lib/shader-transpiler/transpile-glsl-shader.ts +78 -0
  611. package/src/lib/utils/assert.ts +13 -0
  612. package/src/lib/utils/uniform-types.ts +89 -0
  613. package/src/lib/wgsl-shader-assembler.ts +122 -0
  614. package/src/module-injectors.ts +32 -0
  615. package/src/modules/color/float-colors.ts +334 -0
  616. package/src/modules/engine/clip/clip.ts +149 -0
  617. package/src/modules/engine/filter/filter.ts +107 -0
  618. package/src/modules/engine/geometry/geometry.ts +45 -0
  619. package/src/modules/engine/gpu-animation/gpu-animation.ts +244 -0
  620. package/src/modules/engine/picking/README.md +88 -0
  621. package/src/modules/engine/picking/picking.ts +252 -0
  622. package/src/modules/engine/project/project.ts +166 -0
  623. package/src/modules/engine/skin/skin.ts +233 -0
  624. package/src/modules/engine/transform/transform.ts +50 -0
  625. package/src/modules/geometry/path-dash/path-dash.ts +68 -0
  626. package/src/modules/geometry/pattern-fill/pattern-fill-shaders.ts +88 -0
  627. package/src/modules/geometry/pattern-fill/pattern-fill.ts +54 -0
  628. package/src/modules/geometry/point-glow/point-glow.ts +87 -0
  629. package/src/modules/geometry/precipitation/README.md +19 -0
  630. package/src/modules/geometry/precipitation/precipitation.ts +108 -0
  631. package/src/modules/geometry/sketch-stroke/sketch-stroke.ts +160 -0
  632. package/src/modules/geospatial/dggs/dggs-wgsl.ts +2284 -0
  633. package/src/modules/geospatial/dggs/dggs.ts +12 -0
  634. package/src/modules/lighting/area-lighting/area-light-types.ts +71 -0
  635. package/src/modules/lighting/area-lighting/area-lighting-shaders.ts +72 -0
  636. package/src/modules/lighting/area-lighting/area-lighting.ts +63 -0
  637. package/src/modules/lighting/area-lighting/ltc-shaders.ts +163 -0
  638. package/src/modules/lighting/atmosphere/README.md +25 -0
  639. package/src/modules/lighting/atmosphere/atmosphere.ts +246 -0
  640. package/src/modules/lighting/clouds/README.md +24 -0
  641. package/src/modules/lighting/clouds/clouds.ts +216 -0
  642. package/src/modules/lighting/firefly/firefly.ts +64 -0
  643. package/src/modules/lighting/globe-clouds/globe-clouds.ts +124 -0
  644. package/src/modules/lighting/gouraud-material/gouraud-material.ts +55 -0
  645. package/src/modules/lighting/height-fog/README.md +36 -0
  646. package/src/modules/lighting/height-fog/height-fog-functions.ts +116 -0
  647. package/src/modules/lighting/height-fog/height-fog.ts +96 -0
  648. package/src/modules/lighting/ibl/ibl.ts +43 -0
  649. package/src/modules/lighting/lambert-material/lambert-material.ts +42 -0
  650. package/src/modules/lighting/lambert-material/lambert-shaders-glsl.ts +61 -0
  651. package/src/modules/lighting/lambert-material/lambert-shaders-wgsl.ts +73 -0
  652. package/src/modules/lighting/lights/lighting-glsl.ts +92 -0
  653. package/src/modules/lighting/lights/lighting-wgsl.ts +91 -0
  654. package/src/modules/lighting/lights/lighting.ts +385 -0
  655. package/src/modules/lighting/no-material/dirlight.ts +101 -0
  656. package/src/modules/lighting/pbr-material/pbr-material-glsl.ts +1748 -0
  657. package/src/modules/lighting/pbr-material/pbr-material-wgsl.ts +2043 -0
  658. package/src/modules/lighting/pbr-material/pbr-material.ts +517 -0
  659. package/src/modules/lighting/pbr-material/pbr-projection.ts +50 -0
  660. package/src/modules/lighting/pbr-material/pbr-scene.ts +112 -0
  661. package/src/modules/lighting/phong-material/phong-material.ts +53 -0
  662. package/src/modules/lighting/phong-material/phong-shaders-glsl.ts +73 -0
  663. package/src/modules/lighting/phong-material/phong-shaders-wgsl.ts +129 -0
  664. package/src/modules/lighting/surface-weather/README.md +28 -0
  665. package/src/modules/lighting/surface-weather/surface-weather.ts +198 -0
  666. package/src/modules/lighting/water-material/river-water-material.ts +58 -0
  667. package/src/modules/lighting/water-material/river-water-shaders.ts +234 -0
  668. package/src/modules/lighting/water-material/water-material.ts +234 -0
  669. package/src/modules/lighting/water-material/water-shaders-glsl.ts +233 -0
  670. package/src/modules/lighting/water-material/water-shaders-wgsl.ts +230 -0
  671. package/src/modules/math/fp16/fp16-utils.ts +156 -0
  672. package/src/modules/math/fp32/fp32.ts +291 -0
  673. package/src/modules/math/fp64/fp64-arithmetic-glsl.ts +205 -0
  674. package/src/modules/math/fp64/fp64-arithmetic-wgsl-hybrid.ts +129 -0
  675. package/src/modules/math/fp64/fp64-arithmetic-wgsl-integer.ts +564 -0
  676. package/src/modules/math/fp64/fp64-arithmetic-wgsl.ts +924 -0
  677. package/src/modules/math/fp64/fp64-functions-glsl.ts +675 -0
  678. package/src/modules/math/fp64/fp64-functions-wgsl.ts +157 -0
  679. package/src/modules/math/fp64/fp64-utils.ts +46 -0
  680. package/src/modules/math/fp64/fp64.ts +64 -0
  681. package/src/modules/math/random/random.ts +25 -0
  682. package/src/modules/math/value-noise/value-noise.ts +70 -0
  683. package/src/modules/volume/volume-raymarch.ts +87 -0
  684. package/src/types/align-to.ts +13 -0
  685. package/src/types/primitive-data-types.ts +10 -0
  686. package/src/types/sampler-props.ts +39 -0
  687. package/src/types/shader-block-layout.ts +340 -0
  688. package/src/types/shader-layout.ts +208 -0
  689. package/src/types/shader-type-decoder.ts +285 -0
  690. package/src/types/shader-types.ts +207 -0
  691. package/src/types/texture-formats.ts +155 -0
  692. package/src/types.ts +48 -0
  693. package/src/wgsl.ts +23 -0
@@ -0,0 +1,923 @@
1
+ // luma.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // SPDX-FileCopyrightText: Copyright (c) vis.gl contributors
4
+ import { fp64arithmeticWGSLInteger } from "./fp64-arithmetic-wgsl-integer.js";
5
+ import { fp64arithmeticWGSLHybrid } from "./fp64-arithmetic-wgsl-hybrid.js";
6
+ /** WGSL source for fp64 arithmetic helpers and raw binary64 subtraction. */
7
+ export const fp64arithmeticWGSL = /* wgsl */ `\
8
+ struct Fp64ArithmeticUniforms {
9
+ ONE: f32,
10
+ SPLIT: f32,
11
+ };
12
+
13
+ @group(0) @binding(auto) var<uniform> fp64arithmetic : Fp64ArithmeticUniforms;
14
+
15
+ #ifndef LUMA_FP64_F32_INPUT_ONLY
16
+ struct Fp64Bits {
17
+ sign: u32,
18
+ exponent: i32,
19
+ significand: vec2u,
20
+ isZero: bool,
21
+ isInf: bool,
22
+ isNan: bool,
23
+ };
24
+ #endif
25
+
26
+ #ifndef LUMA_FP64_PREDICATE_ONLY
27
+ fn fp64_nan(seed: f32) -> f32 {
28
+ let nanBits = 0x7fc00000u | select(0u, 1u, seed < 0.0);
29
+ return bitcast<f32>(nanBits);
30
+ }
31
+ #endif
32
+
33
+ fn fp64_u64_is_zero(value: vec2u) -> bool {
34
+ return value.x == 0u && value.y == 0u;
35
+ }
36
+
37
+ fn fp64_u64_compare(a: vec2u, b: vec2u) -> i32 {
38
+ if (a.x != b.x) {
39
+ return select(-1, 1, a.x > b.x);
40
+ }
41
+ if (a.y != b.y) {
42
+ return select(-1, 1, a.y > b.y);
43
+ }
44
+ return 0;
45
+ }
46
+
47
+ fn fp64_u64_add(a: vec2u, b: vec2u) -> vec2u {
48
+ let low = a.y + b.y;
49
+ let carry = select(0u, 1u, low < a.y);
50
+ return vec2u(a.x + b.x + carry, low);
51
+ }
52
+
53
+ fn fp64_u64_sub(a: vec2u, b: vec2u) -> vec2u {
54
+ let borrow = select(0u, 1u, a.y < b.y);
55
+ return vec2u(a.x - b.x - borrow, a.y - b.y);
56
+ }
57
+
58
+ fn fp64_u64_shift_left(value: vec2u, shift: u32) -> vec2u {
59
+ if (shift == 0u) {
60
+ return value;
61
+ }
62
+ if (shift < 32u) {
63
+ return vec2u((value.x << shift) | (value.y >> (32u - shift)), value.y << shift);
64
+ }
65
+ if (shift == 32u) {
66
+ return vec2u(value.y, 0u);
67
+ }
68
+ if (shift < 64u) {
69
+ return vec2u(value.y << (shift - 32u), 0u);
70
+ }
71
+ return vec2u(0u);
72
+ }
73
+
74
+ fn fp64_u64_shift_right(value: vec2u, shift: u32) -> vec2u {
75
+ if (shift == 0u) {
76
+ return value;
77
+ }
78
+ if (shift < 32u) {
79
+ return vec2u(value.x >> shift, (value.y >> shift) | (value.x << (32u - shift)));
80
+ }
81
+ if (shift == 32u) {
82
+ return vec2u(0u, value.x);
83
+ }
84
+ if (shift < 64u) {
85
+ return vec2u(0u, value.x >> (shift - 32u));
86
+ }
87
+ return vec2u(0u);
88
+ }
89
+
90
+ fn fp64_u64_get_bit(value: vec2u, bitIndex: u32) -> bool {
91
+ if (bitIndex >= 64u) {
92
+ return false;
93
+ }
94
+ if (bitIndex >= 32u) {
95
+ return ((value.x >> (bitIndex - 32u)) & 1u) != 0u;
96
+ }
97
+ return ((value.y >> bitIndex) & 1u) != 0u;
98
+ }
99
+
100
+ fn fp64_u64_has_bits_below(value: vec2u, bitCount: u32) -> bool {
101
+ if (bitCount == 0u) {
102
+ return false;
103
+ }
104
+ if (bitCount >= 64u) {
105
+ return !fp64_u64_is_zero(value);
106
+ }
107
+ if (bitCount > 32u) {
108
+ let highBitCount = bitCount - 32u;
109
+ let highMask = (1u << highBitCount) - 1u;
110
+ return value.y != 0u || (value.x & highMask) != 0u;
111
+ }
112
+ if (bitCount == 32u) {
113
+ return value.y != 0u;
114
+ }
115
+ let lowMask = (1u << bitCount) - 1u;
116
+ return (value.y & lowMask) != 0u;
117
+ }
118
+
119
+ #ifndef LUMA_FP64_F32_INPUT_ONLY
120
+ fn fp64_u64_shift_right_sticky(value: vec2u, shift: u32) -> vec2u {
121
+ var shifted = fp64_u64_shift_right(value, shift);
122
+ if (fp64_u64_has_bits_below(value, shift)) {
123
+ shifted.y = shifted.y | 1u;
124
+ }
125
+ return shifted;
126
+ }
127
+ #endif
128
+
129
+ fn fp64_u64_count_leading_zeros(value: vec2u) -> u32 {
130
+ if (value.x != 0u) {
131
+ return countLeadingZeros(value.x);
132
+ }
133
+ return 32u + countLeadingZeros(value.y);
134
+ }
135
+
136
+ fn fp64_round_shift_right_to_u32(value: vec2u, shift: u32) -> u32 {
137
+ if (shift == 0u) {
138
+ return value.y;
139
+ }
140
+
141
+ let truncated = fp64_u64_shift_right(value, shift);
142
+ var rounded = truncated.y;
143
+ let guard = fp64_u64_get_bit(value, shift - 1u);
144
+ let hasTrailingBits = fp64_u64_has_bits_below(value, shift - 1u);
145
+ if (guard && (hasTrailingBits || (rounded & 1u) == 1u)) {
146
+ rounded = rounded + 1u;
147
+ }
148
+ return rounded;
149
+ }
150
+
151
+ #ifndef LUMA_FP64_F32_INPUT_ONLY
152
+ fn fp64_round_shift_right(value: vec2u, shift: u32) -> vec2u {
153
+ if (shift == 0u) {
154
+ return value;
155
+ }
156
+
157
+ var rounded = fp64_u64_shift_right(value, shift);
158
+ let guard = fp64_u64_get_bit(value, shift - 1u);
159
+ let hasTrailingBits = fp64_u64_has_bits_below(value, shift - 1u);
160
+ if (guard && (hasTrailingBits || (rounded.y & 1u) == 1u)) {
161
+ rounded = fp64_u64_add(rounded, vec2u(0u, 1u));
162
+ }
163
+ return rounded;
164
+ }
165
+ #endif
166
+
167
+ fn fp64_make_f32_bits_from_u64(sign: u32, significand: vec2u, baseExponent: i32) -> u32 {
168
+ if (fp64_u64_is_zero(significand)) {
169
+ return sign << 31u;
170
+ }
171
+
172
+ let leadingZeros = fp64_u64_count_leading_zeros(significand);
173
+ let mostSignificantBit = 63u - leadingZeros;
174
+ var exponent = baseExponent + i32(mostSignificantBit);
175
+
176
+ if (exponent > 127) {
177
+ return (sign << 31u) | 0x7f800000u;
178
+ }
179
+
180
+ if (exponent >= -126) {
181
+ let shift = i32(mostSignificantBit) - 23;
182
+ var significand24: u32;
183
+ if (shift > 0) {
184
+ significand24 = fp64_round_shift_right_to_u32(significand, u32(shift));
185
+ } else {
186
+ significand24 = fp64_u64_shift_left(significand, u32(-shift)).y;
187
+ }
188
+
189
+ if (significand24 >= 0x1000000u) {
190
+ significand24 = significand24 >> 1u;
191
+ exponent = exponent + 1;
192
+ if (exponent > 127) {
193
+ return (sign << 31u) | 0x7f800000u;
194
+ }
195
+ }
196
+
197
+ return (sign << 31u) | (u32(exponent + 127) << 23u) | (significand24 & 0x7fffffu);
198
+ }
199
+
200
+ let scaleExponent = baseExponent + 149;
201
+ var mantissa: u32;
202
+ if (scaleExponent >= 0) {
203
+ mantissa = fp64_u64_shift_left(significand, u32(scaleExponent)).y;
204
+ } else {
205
+ mantissa = fp64_round_shift_right_to_u32(significand, u32(-scaleExponent));
206
+ }
207
+
208
+ if (mantissa >= 0x800000u) {
209
+ return (sign << 31u) | 0x00800000u;
210
+ }
211
+ return (sign << 31u) | mantissa;
212
+ }
213
+
214
+ #ifndef LUMA_FP64_F32_INPUT_ONLY
215
+ fn fp64_decode_bits(bits: vec2u) -> Fp64Bits {
216
+ let sign = bits.x >> 31u;
217
+ let exponentBits = (bits.x >> 20u) & 0x7ffu;
218
+ let fractionHigh = bits.x & 0xfffffu;
219
+ let fractionLow = bits.y;
220
+ let fraction = vec2u(fractionHigh, fractionLow);
221
+
222
+ if (exponentBits == 0x7ffu) {
223
+ let isInf = fp64_u64_is_zero(fraction);
224
+ return Fp64Bits(sign, 0, vec2u(0u), false, isInf, !isInf);
225
+ }
226
+
227
+ if (exponentBits == 0u) {
228
+ let isZero = fp64_u64_is_zero(fraction);
229
+ return Fp64Bits(sign, -1022, fraction, isZero, false, false);
230
+ }
231
+
232
+ return Fp64Bits(sign, i32(exponentBits) - 1023, vec2u((1u << 20u) | fractionHigh, fractionLow), false, false, false);
233
+ }
234
+
235
+ fn fp64_finite_magnitude_compare(a: Fp64Bits, b: Fp64Bits) -> i32 {
236
+ if (a.exponent != b.exponent) {
237
+ return select(-1, 1, a.exponent > b.exponent);
238
+ }
239
+ return fp64_u64_compare(a.significand, b.significand);
240
+ }
241
+ #endif
242
+
243
+ #ifndef LUMA_FP64_F32_INPUT_ONLY
244
+ struct Fp64RawF32Bits {
245
+ sign: u32,
246
+ baseExponent: i32,
247
+ significand: u32,
248
+ isZero: bool,
249
+ isInf: bool,
250
+ isNan: bool,
251
+ };
252
+
253
+ // Decode an f32 as (-1)^sign * significand * 2^baseExponent. This shared
254
+ // integer representation lets normalization remain independent of the
255
+ // selected double-single arithmetic implementation.
256
+ fn fp64_decode_raw_f32_bits(bits: u32) -> Fp64RawF32Bits {
257
+ let sign = bits >> 31u;
258
+ let exponentBits = (bits >> 23u) & 0xffu;
259
+ let fraction = bits & 0x7fffffu;
260
+
261
+ if (exponentBits == 0xffu) {
262
+ return Fp64RawF32Bits(sign, 0, 0u, false, fraction == 0u, fraction != 0u);
263
+ }
264
+ if (exponentBits == 0u) {
265
+ return Fp64RawF32Bits(sign, -149, fraction, fraction == 0u, false, false);
266
+ }
267
+ return Fp64RawF32Bits(
268
+ sign,
269
+ i32(exponentBits) - 150,
270
+ 0x800000u | fraction,
271
+ false,
272
+ false,
273
+ false
274
+ );
275
+ }
276
+
277
+ fn fp64_raw_f32_magnitude_compare(aBits: u32, bBits: u32) -> i32 {
278
+ let aMagnitude = aBits & 0x7fffffffu;
279
+ let bMagnitude = bBits & 0x7fffffffu;
280
+ if (aMagnitude == bMagnitude) {
281
+ return 0;
282
+ }
283
+ return select(-1, 1, aMagnitude > bMagnitude);
284
+ }
285
+
286
+ fn fp64_make_raw_residual_f32_bits(
287
+ exactSign: u32,
288
+ exactMagnitude: vec2u,
289
+ exactBaseExponent: i32,
290
+ highBits: u32
291
+ ) -> u32 {
292
+ if (fp64_u64_is_zero(exactMagnitude)) {
293
+ return 0u;
294
+ }
295
+
296
+ let high = fp64_decode_raw_f32_bits(highBits);
297
+ if (high.isInf || high.isNan) {
298
+ return 0u;
299
+ }
300
+ if (high.isZero) {
301
+ return fp64_make_f32_bits_from_u64(exactSign, exactMagnitude, exactBaseExponent);
302
+ }
303
+
304
+ let commonBaseExponent = min(exactBaseExponent, high.baseExponent);
305
+ let exactShift = exactBaseExponent - commonBaseExponent;
306
+ let highShift = high.baseExponent - commonBaseExponent;
307
+ if (exactShift >= 64 || highShift >= 64) {
308
+ return 0u;
309
+ }
310
+
311
+ let exactAligned = fp64_u64_shift_left(exactMagnitude, u32(exactShift));
312
+ let highAligned = fp64_u64_shift_left(vec2u(0u, high.significand), u32(highShift));
313
+ let comparison = fp64_u64_compare(exactAligned, highAligned);
314
+ if (comparison == 0) {
315
+ return 0u;
316
+ }
317
+
318
+ var residualSign = exactSign;
319
+ var residualMagnitude: vec2u;
320
+ if (comparison > 0) {
321
+ residualMagnitude = fp64_u64_sub(exactAligned, highAligned);
322
+ } else {
323
+ residualSign = exactSign ^ 1u;
324
+ residualMagnitude = fp64_u64_sub(highAligned, exactAligned);
325
+ }
326
+ return fp64_make_f32_bits_from_u64(
327
+ residualSign,
328
+ residualMagnitude,
329
+ commonBaseExponent
330
+ );
331
+ }
332
+
333
+ fn fp64_split_raw_accumulator_bits(
334
+ sign: u32,
335
+ magnitude: vec2u,
336
+ baseExponent: i32
337
+ ) -> vec2u {
338
+ if (fp64_u64_is_zero(magnitude)) {
339
+ return vec2u(0u);
340
+ }
341
+ let highBits = fp64_make_f32_bits_from_u64(sign, magnitude, baseExponent);
342
+ let rawLowBits = fp64_make_raw_residual_f32_bits(sign, magnitude, baseExponent, highBits);
343
+ let lowBits = select(rawLowBits, 0u, (rawLowBits & 0x7fffffffu) == 0u);
344
+ if ((highBits & 0x7fffffffu) == 0u && (lowBits & 0x7fffffffu) == 0u) {
345
+ return vec2u(0u);
346
+ }
347
+ return vec2u(highBits, lowBits);
348
+ }
349
+ #endif
350
+
351
+ #ifndef LUMA_FP64_F32_INPUT_ONLY
352
+ // Round an arithmetic accumulator to binary64 before splitting it. The
353
+ // aligned add/subtract paths retain three guard bits plus a sticky bit, which
354
+ // is sufficient for round-to-nearest-even at the binary64 boundary.
355
+ fn fp64_split_binary64_accumulator_bits(
356
+ sign: u32,
357
+ magnitude: vec2u,
358
+ baseExponent: i32
359
+ ) -> vec2u {
360
+ if (fp64_u64_is_zero(magnitude)) {
361
+ return vec2u(0u);
362
+ }
363
+
364
+ let mostSignificantBit = 63u - fp64_u64_count_leading_zeros(magnitude);
365
+ let exponent = baseExponent + i32(mostSignificantBit);
366
+ if (exponent > 1023) {
367
+ return vec2u((sign << 31u) | 0x7f800000u, 0u);
368
+ }
369
+
370
+ var roundedMagnitude = magnitude;
371
+ var roundedBaseExponent = baseExponent;
372
+ if (exponent >= -1022) {
373
+ if (mostSignificantBit > 52u) {
374
+ let shift = mostSignificantBit - 52u;
375
+ roundedMagnitude = fp64_round_shift_right(magnitude, shift);
376
+ roundedBaseExponent = baseExponent + i32(shift);
377
+ }
378
+ } else {
379
+ let shift = -1074 - baseExponent;
380
+ if (shift > 0) {
381
+ roundedMagnitude = fp64_round_shift_right(magnitude, u32(shift));
382
+ roundedBaseExponent = -1074;
383
+ }
384
+ }
385
+
386
+ if (fp64_u64_is_zero(roundedMagnitude)) {
387
+ return vec2u(0u);
388
+ }
389
+ return fp64_split_raw_accumulator_bits(sign, roundedMagnitude, roundedBaseExponent);
390
+ }
391
+ #endif
392
+
393
+ #ifndef LUMA_FP64_PREDICATE_ONLY
394
+ fn fp64_add_raw_f32_bits(aBits: u32, bBits: u32) -> vec2u {
395
+ let a = fp64_decode_raw_f32_bits(aBits);
396
+ let b = fp64_decode_raw_f32_bits(bBits);
397
+
398
+ if (a.isNan || b.isNan) {
399
+ return vec2u(0x7fc00000u, 0u);
400
+ }
401
+ if (a.isInf || b.isInf) {
402
+ if (a.isInf && b.isInf && a.sign != b.sign) {
403
+ return vec2u(0x7fc00000u, 0u);
404
+ }
405
+ return select(vec2u(bBits, 0u), vec2u(aBits, 0u), a.isInf);
406
+ }
407
+ if (a.isZero && b.isZero) {
408
+ return vec2u(0u);
409
+ }
410
+ if (a.isZero) {
411
+ return vec2u(bBits, 0u);
412
+ }
413
+ if (b.isZero) {
414
+ return vec2u(aBits, 0u);
415
+ }
416
+
417
+ let exponentDifference = abs(a.baseExponent - b.baseExponent);
418
+ if (exponentDifference > 25) {
419
+ if (fp64_raw_f32_magnitude_compare(aBits, bBits) >= 0) {
420
+ return vec2u(aBits, bBits);
421
+ }
422
+ return vec2u(bBits, aBits);
423
+ }
424
+
425
+ let commonBaseExponent = min(a.baseExponent, b.baseExponent);
426
+ let aMagnitude = fp64_u64_shift_left(
427
+ vec2u(0u, a.significand),
428
+ u32(a.baseExponent - commonBaseExponent)
429
+ );
430
+ let bMagnitude = fp64_u64_shift_left(
431
+ vec2u(0u, b.significand),
432
+ u32(b.baseExponent - commonBaseExponent)
433
+ );
434
+
435
+ var resultSign = a.sign;
436
+ var resultMagnitude: vec2u;
437
+ if (a.sign == b.sign) {
438
+ resultMagnitude = fp64_u64_add(aMagnitude, bMagnitude);
439
+ } else {
440
+ let comparison = fp64_u64_compare(aMagnitude, bMagnitude);
441
+ if (comparison == 0) {
442
+ return vec2u(0u);
443
+ }
444
+ if (comparison > 0) {
445
+ resultMagnitude = fp64_u64_sub(aMagnitude, bMagnitude);
446
+ } else {
447
+ resultSign = b.sign;
448
+ resultMagnitude = fp64_u64_sub(bMagnitude, aMagnitude);
449
+ }
450
+ }
451
+
452
+ return fp64_split_raw_accumulator_bits(
453
+ resultSign,
454
+ resultMagnitude,
455
+ commonBaseExponent
456
+ );
457
+ }
458
+ #endif
459
+
460
+ #ifndef LUMA_FP64_F32_INPUT_ONLY
461
+ fn fp64_add_aligned_magnitudes_to_fp64_bits(
462
+ sign: u32,
463
+ larger: Fp64Bits,
464
+ smaller: Fp64Bits
465
+ ) -> vec2u {
466
+ let largeSignificand = fp64_u64_shift_left(larger.significand, 3u);
467
+ let smallSignificand = fp64_u64_shift_right_sticky(
468
+ fp64_u64_shift_left(smaller.significand, 3u),
469
+ u32(larger.exponent - smaller.exponent)
470
+ );
471
+ let resultSignificand = fp64_u64_add(largeSignificand, smallSignificand);
472
+ return fp64_split_binary64_accumulator_bits(
473
+ sign,
474
+ resultSignificand,
475
+ larger.exponent - 55
476
+ );
477
+ }
478
+
479
+ fn fp64_sub_aligned_magnitudes_to_fp64_bits(
480
+ sign: u32,
481
+ larger: Fp64Bits,
482
+ smaller: Fp64Bits
483
+ ) -> vec2u {
484
+ let largeSignificand = fp64_u64_shift_left(larger.significand, 3u);
485
+ let smallSignificand = fp64_u64_shift_right_sticky(
486
+ fp64_u64_shift_left(smaller.significand, 3u),
487
+ u32(larger.exponent - smaller.exponent)
488
+ );
489
+ let resultSignificand = fp64_u64_sub(largeSignificand, smallSignificand);
490
+ return fp64_split_binary64_accumulator_bits(
491
+ sign,
492
+ resultSignificand,
493
+ larger.exponent - 55
494
+ );
495
+ }
496
+
497
+ fn fp64_add_aligned_magnitudes_to_f32_bits(sign: u32, larger: Fp64Bits, smaller: Fp64Bits) -> u32 {
498
+ let largeSignificand = fp64_u64_shift_left(larger.significand, 3u);
499
+ let smallSignificand = fp64_u64_shift_right_sticky(
500
+ fp64_u64_shift_left(smaller.significand, 3u),
501
+ u32(larger.exponent - smaller.exponent)
502
+ );
503
+ let resultSignificand = fp64_u64_add(largeSignificand, smallSignificand);
504
+ return fp64_make_f32_bits_from_u64(sign, resultSignificand, larger.exponent - 55);
505
+ }
506
+
507
+ fn fp64_sub_aligned_magnitudes_to_f32_bits(sign: u32, larger: Fp64Bits, smaller: Fp64Bits) -> u32 {
508
+ let largeSignificand = fp64_u64_shift_left(larger.significand, 3u);
509
+ let smallSignificand = fp64_u64_shift_right_sticky(
510
+ fp64_u64_shift_left(smaller.significand, 3u),
511
+ u32(larger.exponent - smaller.exponent)
512
+ );
513
+ let resultSignificand = fp64_u64_sub(largeSignificand, smallSignificand);
514
+ return fp64_make_f32_bits_from_u64(sign, resultSignificand, larger.exponent - 55);
515
+ }
516
+
517
+ // Subtract two raw binary64 values and round the exact result once to f32.
518
+ // The input words are canonical high/low words: .x contains sign/exponent/high
519
+ // fraction bits, and .y contains the low 32 fraction bits.
520
+ fn sub_fp64u32_to_f32_bits(aBits: vec2u, bBits: vec2u) -> u32 {
521
+ let a = fp64_decode_bits(aBits);
522
+ let b = fp64_decode_bits(bBits);
523
+ let bSubtractionSign = b.sign ^ 1u;
524
+
525
+ if (a.isNan || b.isNan) {
526
+ return 0x7fc00000u;
527
+ }
528
+ if (a.isInf && b.isInf) {
529
+ if (a.sign == bSubtractionSign) {
530
+ return (a.sign << 31u) | 0x7f800000u;
531
+ }
532
+ return 0x7fc00000u;
533
+ }
534
+ if (a.isInf) {
535
+ return (a.sign << 31u) | 0x7f800000u;
536
+ }
537
+ if (b.isInf) {
538
+ return (bSubtractionSign << 31u) | 0x7f800000u;
539
+ }
540
+ if (a.isZero && b.isZero) {
541
+ return select(0u, 0x80000000u, a.sign == 1u && b.sign == 0u);
542
+ }
543
+
544
+ let magnitudeComparison = fp64_finite_magnitude_compare(a, b);
545
+ if (a.sign == bSubtractionSign) {
546
+ if (magnitudeComparison >= 0) {
547
+ return fp64_add_aligned_magnitudes_to_f32_bits(a.sign, a, b);
548
+ }
549
+ return fp64_add_aligned_magnitudes_to_f32_bits(a.sign, b, a);
550
+ }
551
+
552
+ if (magnitudeComparison == 0) {
553
+ return 0u;
554
+ }
555
+ if (magnitudeComparison > 0) {
556
+ return fp64_sub_aligned_magnitudes_to_f32_bits(a.sign, a, b);
557
+ }
558
+ return fp64_sub_aligned_magnitudes_to_f32_bits(bSubtractionSign, b, a);
559
+ }
560
+
561
+ fn sub_fp64u32_to_f32(aBits: vec2u, bBits: vec2u) -> f32 {
562
+ return bitcast<f32>(sub_fp64u32_to_f32_bits(aBits, bBits));
563
+ }
564
+
565
+ // Subtract two raw binary64 values, round once to binary64, then split the
566
+ // result into normalized f32 limbs. Finite results must fit within the f32
567
+ // exponent range; larger magnitudes map to infinity and smaller magnitudes
568
+ // map to zero. The input words use canonical high/low word order.
569
+ fn sub_fp64u32_to_fp64_bits(aBits: vec2u, bBits: vec2u) -> vec2u {
570
+ let a = fp64_decode_bits(aBits);
571
+ let b = fp64_decode_bits(bBits);
572
+ let bSubtractionSign = b.sign ^ 1u;
573
+
574
+ if (a.isNan || b.isNan) {
575
+ return vec2u(0x7fc00000u, 0u);
576
+ }
577
+ if (a.isInf && b.isInf) {
578
+ if (a.sign == bSubtractionSign) {
579
+ return vec2u((a.sign << 31u) | 0x7f800000u, 0u);
580
+ }
581
+ return vec2u(0x7fc00000u, 0u);
582
+ }
583
+ if (a.isInf) {
584
+ return vec2u((a.sign << 31u) | 0x7f800000u, 0u);
585
+ }
586
+ if (b.isInf) {
587
+ return vec2u((bSubtractionSign << 31u) | 0x7f800000u, 0u);
588
+ }
589
+ if (a.isZero && b.isZero) {
590
+ return vec2u(0u);
591
+ }
592
+
593
+ let magnitudeComparison = fp64_finite_magnitude_compare(a, b);
594
+ if (a.sign == bSubtractionSign) {
595
+ if (magnitudeComparison >= 0) {
596
+ return fp64_add_aligned_magnitudes_to_fp64_bits(a.sign, a, b);
597
+ }
598
+ return fp64_add_aligned_magnitudes_to_fp64_bits(a.sign, b, a);
599
+ }
600
+
601
+ if (magnitudeComparison == 0) {
602
+ return vec2u(0u);
603
+ }
604
+ if (magnitudeComparison > 0) {
605
+ return fp64_sub_aligned_magnitudes_to_fp64_bits(a.sign, a, b);
606
+ }
607
+ return fp64_sub_aligned_magnitudes_to_fp64_bits(bSubtractionSign, b, a);
608
+ }
609
+
610
+ fn sub_fp64u32_to_fp64(aBits: vec2u, bBits: vec2u) -> vec2f {
611
+ let resultBits = sub_fp64u32_to_fp64_bits(aBits, bBits);
612
+ return vec2f(bitcast<f32>(resultBits.x), bitcast<f32>(resultBits.y));
613
+ }
614
+ #endif
615
+
616
+ #ifndef LUMA_FP64_PREDICATE_ONLY
617
+ // Zero bits the compiler cannot prove are zero: the uniform ONE is 1.0 at runtime.
618
+ // Some WGSL backends compile with fast-math flags (e.g. Firefox WebGPU on Windows, where DXC
619
+ // runs without IEEE strictness). There, a float barrier such as \`x + ONE * 0.0\` folds away,
620
+ // and the error terms of the double-single transforms are re-associated and lost. An integer
621
+ // OR is opaque to floating-point simplification, and unlike XOR two nested barriers do not
622
+ // cancel. Each rounding step the transforms rely on gets its own barrier.
623
+ fn fp64_runtime_zero_bits() -> u32 {
624
+ return bitcast<u32>(fp64arithmetic.ONE) ^ 0x3f800000u;
625
+ }
626
+
627
+ fn fp64_runtime_zero() -> f32 {
628
+ return bitcast<f32>(fp64_runtime_zero_bits());
629
+ }
630
+
631
+ fn prevent_fp64_optimization(value: f32) -> f32 {
632
+ #ifdef LUMA_FP64_CODE_ELIMINATION_WORKAROUND
633
+ return bitcast<f32>(bitcast<u32>(value) | fp64_runtime_zero_bits());
634
+ #else
635
+ return value;
636
+ #endif
637
+ }
638
+ #endif
639
+
640
+ #ifdef LUMA_FP64_INTEGER_ARITHMETIC
641
+ ${fp64arithmeticWGSLInteger}
642
+ #else
643
+ #ifdef LUMA_FP64_HYBRID_ARITHMETIC
644
+ ${fp64arithmeticWGSLHybrid}
645
+ #else
646
+ fn split(a: f32) -> vec2f {
647
+ let splitValue = prevent_fp64_optimization(fp64arithmetic.SPLIT + fp64_runtime_zero());
648
+ let t = prevent_fp64_optimization(a * splitValue);
649
+ let temp = prevent_fp64_optimization(t - a);
650
+ let aHi = prevent_fp64_optimization(t - temp);
651
+ let aLo = prevent_fp64_optimization(a - aHi);
652
+ return vec2f(aHi, aLo);
653
+ }
654
+
655
+ fn split2(a: vec2f) -> vec2f {
656
+ var b = split(a.x);
657
+ b.y = prevent_fp64_optimization(b.y + a.y);
658
+ return b;
659
+ }
660
+
661
+ fn quickTwoSum(a: f32, b: f32) -> vec2f {
662
+ let sum = prevent_fp64_optimization(a + b);
663
+ let err = prevent_fp64_optimization(b - prevent_fp64_optimization(sum - a));
664
+ return vec2f(sum, err);
665
+ }
666
+
667
+ fn twoSum(a: f32, b: f32) -> vec2f {
668
+ let s = prevent_fp64_optimization(a + b);
669
+ let v = prevent_fp64_optimization(s - a);
670
+ let aErr = prevent_fp64_optimization(a - prevent_fp64_optimization(s - v));
671
+ let bErr = prevent_fp64_optimization(b - v);
672
+ let err = prevent_fp64_optimization(aErr + bErr);
673
+ return vec2f(s, err);
674
+ }
675
+
676
+ fn twoSub(a: f32, b: f32) -> vec2f {
677
+ let s = prevent_fp64_optimization(a - b);
678
+ let v = prevent_fp64_optimization(s - a);
679
+ let aErr = prevent_fp64_optimization(a - prevent_fp64_optimization(s - v));
680
+ let bErr = prevent_fp64_optimization(b + v);
681
+ let err = prevent_fp64_optimization(aErr - bErr);
682
+ return vec2f(s, err);
683
+ }
684
+
685
+ fn twoSqr(a: f32) -> vec2f {
686
+ let prod = prevent_fp64_optimization(a * a);
687
+ let aFp64 = split(a);
688
+ let highProduct = prevent_fp64_optimization(aFp64.x * aFp64.x);
689
+ let crossProduct = prevent_fp64_optimization(2.0 * aFp64.x * aFp64.y);
690
+ let lowProduct = prevent_fp64_optimization(aFp64.y * aFp64.y);
691
+ let highErr = prevent_fp64_optimization(highProduct - prod);
692
+ let err = prevent_fp64_optimization(
693
+ prevent_fp64_optimization(highErr + crossProduct) + lowProduct
694
+ );
695
+ return vec2f(prod, err);
696
+ }
697
+
698
+ fn twoProd(a: f32, b: f32) -> vec2f {
699
+ let prod = prevent_fp64_optimization(a * b);
700
+ let aFp64 = split(a);
701
+ let bFp64 = split(b);
702
+ let highProduct = prevent_fp64_optimization(aFp64.x * bFp64.x);
703
+ let crossProduct1 = prevent_fp64_optimization(aFp64.x * bFp64.y);
704
+ let crossProduct2 = prevent_fp64_optimization(aFp64.y * bFp64.x);
705
+ let lowProduct = prevent_fp64_optimization(aFp64.y * bFp64.y);
706
+ #ifdef LUMA_FP64_CODE_ELIMINATION_WORKAROUND
707
+ let err1 = (highProduct - prod) * fp64arithmetic.ONE;
708
+ let err2 = crossProduct1 * fp64arithmetic.ONE * fp64arithmetic.ONE;
709
+ let err3 = crossProduct2 * fp64arithmetic.ONE * fp64arithmetic.ONE * fp64arithmetic.ONE;
710
+ let err4 =
711
+ lowProduct *
712
+ fp64arithmetic.ONE *
713
+ fp64arithmetic.ONE *
714
+ fp64arithmetic.ONE *
715
+ fp64arithmetic.ONE;
716
+ #else
717
+ let err1 = highProduct - prod;
718
+ let err2 = crossProduct1;
719
+ let err3 = crossProduct2;
720
+ let err4 = lowProduct;
721
+ #endif
722
+ let err12InputA = prevent_fp64_optimization(err1);
723
+ let err12InputB = prevent_fp64_optimization(err2);
724
+ let err12 = prevent_fp64_optimization(err12InputA + err12InputB);
725
+ let err123InputA = prevent_fp64_optimization(err12);
726
+ let err123InputB = prevent_fp64_optimization(err3);
727
+ let err123 = prevent_fp64_optimization(err123InputA + err123InputB);
728
+ let err1234InputA = prevent_fp64_optimization(err123);
729
+ let err1234InputB = prevent_fp64_optimization(err4);
730
+ let err = prevent_fp64_optimization(err1234InputA + err1234InputB);
731
+ return vec2f(prod, err);
732
+ }
733
+
734
+ fn sum_fp64(a: vec2f, b: vec2f) -> vec2f {
735
+ var s = twoSum(a.x, b.x);
736
+ let t = twoSum(a.y, b.y);
737
+ s.y = prevent_fp64_optimization(s.y + t.x);
738
+ s = quickTwoSum(s.x, s.y);
739
+ s.y = prevent_fp64_optimization(s.y + t.y);
740
+ s = quickTwoSum(s.x, s.y);
741
+ return s;
742
+ }
743
+
744
+ fn sub_fp64(a: vec2f, b: vec2f) -> vec2f {
745
+ var s = twoSub(a.x, b.x);
746
+ let t = twoSub(a.y, b.y);
747
+ s.y = prevent_fp64_optimization(s.y + t.x);
748
+ s = quickTwoSum(s.x, s.y);
749
+ s.y = prevent_fp64_optimization(s.y + t.y);
750
+ s = quickTwoSum(s.x, s.y);
751
+ return s;
752
+ }
753
+
754
+ fn mul_fp64(a: vec2f, b: vec2f) -> vec2f {
755
+ var prod = twoProd(a.x, b.x);
756
+ let crossProduct1 = prevent_fp64_optimization(a.x * b.y);
757
+ prod.y = prevent_fp64_optimization(prod.y + crossProduct1);
758
+ #ifdef LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND
759
+ prod = split2(prod);
760
+ #endif
761
+ prod = quickTwoSum(prod.x, prod.y);
762
+ let crossProduct2 = prevent_fp64_optimization(a.y * b.x);
763
+ prod.y = prevent_fp64_optimization(prod.y + crossProduct2);
764
+ #ifdef LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND
765
+ prod = split2(prod);
766
+ #endif
767
+ prod = quickTwoSum(prod.x, prod.y);
768
+ return prod;
769
+ }
770
+
771
+ #ifndef LUMA_FP64_PREDICATE_ONLY
772
+ fn div_fp64(a: vec2f, b: vec2f) -> vec2f {
773
+ let xn = prevent_fp64_optimization(1.0 / b.x);
774
+ let yn = mul_fp64(a, vec2f(xn, fp64_runtime_zero()));
775
+ let diff = prevent_fp64_optimization(sub_fp64(a, mul_fp64(b, yn)).x);
776
+ let prod = twoProd(xn, diff);
777
+ return sum_fp64(yn, prod);
778
+ }
779
+
780
+ fn sqrt_fp64(a: vec2f) -> vec2f {
781
+ if (a.x == 0.0 && a.y == 0.0) {
782
+ return vec2f(0.0, 0.0);
783
+ }
784
+ if (a.x < 0.0) {
785
+ let nanValue = fp64_nan(a.x);
786
+ return vec2f(nanValue, nanValue);
787
+ }
788
+
789
+ let x = prevent_fp64_optimization(1.0 / sqrt(a.x));
790
+ let yn = prevent_fp64_optimization(a.x * x);
791
+ #ifdef LUMA_FP64_CODE_ELIMINATION_WORKAROUND
792
+ let ynSqr = twoSqr(yn) * fp64arithmetic.ONE;
793
+ #else
794
+ let ynSqr = twoSqr(yn);
795
+ #endif
796
+ let diff = prevent_fp64_optimization(sub_fp64(a, ynSqr).x);
797
+ let prod = twoProd(prevent_fp64_optimization(x * 0.5), diff);
798
+ #ifdef LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND
799
+ return sum_fp64(split(yn), prod);
800
+ #else
801
+ return sum_fp64(vec2f(yn, 0.0), prod);
802
+ #endif
803
+ }
804
+ #endif
805
+ #endif
806
+ #endif
807
+
808
+ #ifndef LUMA_FP64_PREDICATE_ONLY
809
+ fn fp64_f32_bits_is_nan(bits: u32) -> bool {
810
+ return (bits & 0x7fffffffu) > 0x7f800000u;
811
+ }
812
+
813
+ fn fp64_f32_bits_is_inf(bits: u32) -> bool {
814
+ return (bits & 0x7fffffffu) == 0x7f800000u;
815
+ }
816
+
817
+ fn fp64_compare_f32_bits(aBits: u32, bBits: u32) -> i32 {
818
+ let aMagnitude = aBits & 0x7fffffffu;
819
+ let bMagnitude = bBits & 0x7fffffffu;
820
+ if (aMagnitude == 0u && bMagnitude == 0u) {
821
+ return 0;
822
+ }
823
+ let aSign = aBits >> 31u;
824
+ let bSign = bBits >> 31u;
825
+ if (aSign != bSign) {
826
+ return select(1, -1, aSign == 1u);
827
+ }
828
+ if (aMagnitude == bMagnitude) {
829
+ return 0;
830
+ }
831
+ let magnitudeComparison = select(-1, 1, aMagnitude > bMagnitude);
832
+ return select(magnitudeComparison, -magnitudeComparison, aSign == 1u);
833
+ }
834
+
835
+ // Normalize an arbitrary pair of finite f32 limbs with integer accumulation.
836
+ // This is independent of LUMA_FP64_INTEGER_ARITHMETIC and canonicalizes every
837
+ // representation of zero to vec2f(+0.0, +0.0).
838
+ fn normalize_fp64(value: vec2f) -> vec2f {
839
+ let resultBits = fp64_add_raw_f32_bits(bitcast<u32>(value.x), bitcast<u32>(value.y));
840
+ return vec2f(bitcast<f32>(resultBits.x), bitcast<f32>(resultBits.y));
841
+ }
842
+
843
+ fn is_nan_fp64(value: vec2f) -> bool {
844
+ let normalized = normalize_fp64(value);
845
+ return fp64_f32_bits_is_nan(bitcast<u32>(normalized.x)) ||
846
+ fp64_f32_bits_is_nan(bitcast<u32>(normalized.y));
847
+ }
848
+
849
+ fn is_finite_fp64(value: vec2f) -> bool {
850
+ let normalized = normalize_fp64(value);
851
+ let highBits = bitcast<u32>(normalized.x);
852
+ let lowBits = bitcast<u32>(normalized.y);
853
+ return !fp64_f32_bits_is_nan(highBits) && !fp64_f32_bits_is_nan(lowBits) &&
854
+ !fp64_f32_bits_is_inf(highBits) && !fp64_f32_bits_is_inf(lowBits);
855
+ }
856
+
857
+ // Returns -1, 0, or 1. NaN is unordered and returns 0; call is_nan_fp64 or
858
+ // is_finite_fp64 first when 0 must mean a finite zero.
859
+ fn sign_fp64(value: vec2f) -> i32 {
860
+ let normalized = normalize_fp64(value);
861
+ let highBits = bitcast<u32>(normalized.x);
862
+ let lowBits = bitcast<u32>(normalized.y);
863
+ if (fp64_f32_bits_is_nan(highBits) || fp64_f32_bits_is_nan(lowBits)) {
864
+ return 0;
865
+ }
866
+ if ((highBits & 0x7fffffffu) != 0u) {
867
+ return select(1, -1, (highBits >> 31u) == 1u);
868
+ }
869
+ if ((lowBits & 0x7fffffffu) != 0u) {
870
+ return select(1, -1, (lowBits >> 31u) == 1u);
871
+ }
872
+ return 0;
873
+ }
874
+
875
+ // Compares double-single values and returns -1, 0, or 1. NaN is unordered
876
+ // and returns 0; callers that require equality semantics must first check
877
+ // is_nan_fp64 or is_finite_fp64.
878
+ fn compare_fp64(a: vec2f, b: vec2f) -> i32 {
879
+ let normalizedA = normalize_fp64(a);
880
+ let normalizedB = normalize_fp64(b);
881
+ let aHighBits = bitcast<u32>(normalizedA.x);
882
+ let aLowBits = bitcast<u32>(normalizedA.y);
883
+ let bHighBits = bitcast<u32>(normalizedB.x);
884
+ let bLowBits = bitcast<u32>(normalizedB.y);
885
+ if (fp64_f32_bits_is_nan(aHighBits) || fp64_f32_bits_is_nan(aLowBits) ||
886
+ fp64_f32_bits_is_nan(bHighBits) || fp64_f32_bits_is_nan(bLowBits)) {
887
+ return 0;
888
+ }
889
+ let highComparison = fp64_compare_f32_bits(aHighBits, bHighBits);
890
+ if (highComparison != 0) {
891
+ return highComparison;
892
+ }
893
+ return fp64_compare_f32_bits(aLowBits, bLowBits);
894
+ }
895
+
896
+ // Scale by 2^exponent under either arithmetic. The classic path repacks each limb with
897
+ // integer operations and no floating-point arithmetic, so hardware that flushes subnormal
898
+ // results cannot zero a subnormal limb. Its result has the value of the integer path's,
899
+ // which also renormalizes the limbs; that renormalization would flush them here.
900
+ fn fp64_scale_fp64(value: vec2f, exponent: i32) -> vec2f {
901
+ #ifdef LUMA_FP64_INTEGER_ARITHMETIC
902
+ return fp64_scale_fp64_integer(value, exponent);
903
+ #else
904
+ let high = fp64_decode_raw_f32_bits(bitcast<u32>(value.x));
905
+ let low = fp64_decode_raw_f32_bits(bitcast<u32>(value.y));
906
+ var scaledHigh = value.x;
907
+ if (!(high.isZero || high.isInf || high.isNan)) {
908
+ scaledHigh = bitcast<f32>(
909
+ fp64_make_f32_bits_from_u64(high.sign, vec2u(0u, high.significand), high.baseExponent + exponent)
910
+ );
911
+ }
912
+ var scaledLow = value.y;
913
+ if (!(low.isZero || low.isInf || low.isNan)) {
914
+ scaledLow = bitcast<f32>(
915
+ fp64_make_f32_bits_from_u64(low.sign, vec2u(0u, low.significand), low.baseExponent + exponent)
916
+ );
917
+ }
918
+ return vec2f(scaledHigh, scaledLow);
919
+ #endif
920
+ }
921
+ #endif
922
+ `;
923
+ //# sourceMappingURL=fp64-arithmetic-wgsl.js.map