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