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

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