@luma.gl/shadertools 8.5.15 → 8.5.16

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 (174) hide show
  1. package/dist/dist.js +25 -25
  2. package/dist/dist.min.js +1 -1
  3. package/dist/es5/bundle.js.map +1 -1
  4. package/dist/es5/index.js +10 -10
  5. package/dist/es5/index.js.map +1 -1
  6. package/dist/es5/lib/assemble-shaders.js +6 -2
  7. package/dist/es5/lib/assemble-shaders.js.map +1 -1
  8. package/dist/es5/lib/constants.js +1 -1
  9. package/dist/es5/lib/constants.js.map +1 -1
  10. package/dist/es5/lib/filters/prop-types.js.map +1 -1
  11. package/dist/es5/lib/inject-shader.js +2 -2
  12. package/dist/es5/lib/inject-shader.js.map +1 -1
  13. package/dist/es5/lib/platform-defines.js.map +1 -1
  14. package/dist/es5/lib/resolve-modules.js +2 -2
  15. package/dist/es5/lib/resolve-modules.js.map +1 -1
  16. package/dist/es5/lib/shader-module.js +1 -1
  17. package/dist/es5/lib/shader-module.js.map +1 -1
  18. package/dist/es5/lib/transpile-shader.js +1 -1
  19. package/dist/es5/lib/transpile-shader.js.map +1 -1
  20. package/dist/es5/modules/dirlight/dirlight.js.map +1 -1
  21. package/dist/es5/modules/fp32/fp32.js.map +1 -1
  22. package/dist/es5/modules/fp64/fp64-arithmetic.glsl.js.map +1 -1
  23. package/dist/es5/modules/fp64/fp64-functions.glsl.js.map +1 -1
  24. package/dist/es5/modules/fp64/fp64-utils.js +1 -1
  25. package/dist/es5/modules/fp64/fp64-utils.js.map +1 -1
  26. package/dist/es5/modules/fp64/fp64.js +6 -5
  27. package/dist/es5/modules/fp64/fp64.js.map +1 -1
  28. package/dist/es5/modules/fxaa/fxaa.js.map +1 -1
  29. package/dist/es5/modules/geometry/geometry.js.map +1 -1
  30. package/dist/es5/modules/image-adjust-filters/brightnesscontrast.js.map +1 -1
  31. package/dist/es5/modules/image-adjust-filters/denoise.js.map +1 -1
  32. package/dist/es5/modules/image-adjust-filters/huesaturation.js.map +1 -1
  33. package/dist/es5/modules/image-adjust-filters/noise.js.map +1 -1
  34. package/dist/es5/modules/image-adjust-filters/sepia.js.map +1 -1
  35. package/dist/es5/modules/image-adjust-filters/vibrance.js.map +1 -1
  36. package/dist/es5/modules/image-adjust-filters/vignette.js.map +1 -1
  37. package/dist/es5/modules/image-blur-filters/tiltshift.js.map +1 -1
  38. package/dist/es5/modules/image-blur-filters/triangleblur.js.map +1 -1
  39. package/dist/es5/modules/image-blur-filters/zoomblur.js.map +1 -1
  40. package/dist/es5/modules/image-fun-filters/colorhalftone.js.map +1 -1
  41. package/dist/es5/modules/image-fun-filters/dotscreen.js.map +1 -1
  42. package/dist/es5/modules/image-fun-filters/edgework.js.map +1 -1
  43. package/dist/es5/modules/image-fun-filters/hexagonalpixelate.js.map +1 -1
  44. package/dist/es5/modules/image-fun-filters/ink.js.map +1 -1
  45. package/dist/es5/modules/image-fun-filters/magnify.js.map +1 -1
  46. package/dist/es5/modules/image-warp-filters/bulgepinch.js.map +1 -1
  47. package/dist/es5/modules/image-warp-filters/swirl.js.map +1 -1
  48. package/dist/es5/modules/image-warp-filters/warp.js.map +1 -1
  49. package/dist/es5/modules/index.js +62 -62
  50. package/dist/es5/modules/index.js.map +1 -1
  51. package/dist/es5/modules/lights/lights.glsl.js.map +1 -1
  52. package/dist/es5/modules/lights/lights.js +1 -1
  53. package/dist/es5/modules/lights/lights.js.map +1 -1
  54. package/dist/es5/modules/module-injectors.js +1 -1
  55. package/dist/es5/modules/module-injectors.js.map +1 -1
  56. package/dist/es5/modules/pbr/pbr-fragment.glsl.js.map +1 -1
  57. package/dist/es5/modules/pbr/pbr-vertex.glsl.js.map +1 -1
  58. package/dist/es5/modules/pbr/pbr.js.map +1 -1
  59. package/dist/es5/modules/phong-lighting/phong-lighting.glsl.js.map +1 -1
  60. package/dist/es5/modules/phong-lighting/phong-lighting.js.map +1 -1
  61. package/dist/es5/modules/picking/picking.js.map +1 -1
  62. package/dist/es5/modules/project/project.js.map +1 -1
  63. package/dist/es5/modules/transform/transform.js.map +1 -1
  64. package/dist/es5/modules/utils/random.js.map +1 -1
  65. package/dist/es5/utils/assert.js.map +1 -1
  66. package/dist/es5/utils/index.js.map +1 -1
  67. package/dist/es5/utils/is-old-ie.js.map +1 -1
  68. package/dist/es5/utils/shader-utils.js +3 -3
  69. package/dist/es5/utils/shader-utils.js.map +1 -1
  70. package/dist/es5/utils/webgl-info.js +2 -2
  71. package/dist/es5/utils/webgl-info.js.map +1 -1
  72. package/dist/esm/bundle.js.map +1 -1
  73. package/dist/esm/index.js.map +1 -1
  74. package/dist/esm/lib/assemble-shaders.js +38 -51
  75. package/dist/esm/lib/assemble-shaders.js.map +1 -1
  76. package/dist/esm/lib/constants.js.map +1 -1
  77. package/dist/esm/lib/filters/prop-types.js.map +1 -1
  78. package/dist/esm/lib/inject-shader.js +4 -3
  79. package/dist/esm/lib/inject-shader.js.map +1 -1
  80. package/dist/esm/lib/platform-defines.js +9 -80
  81. package/dist/esm/lib/platform-defines.js.map +1 -1
  82. package/dist/esm/lib/resolve-modules.js +9 -7
  83. package/dist/esm/lib/resolve-modules.js.map +1 -1
  84. package/dist/esm/lib/shader-module.js +20 -23
  85. package/dist/esm/lib/shader-module.js.map +1 -1
  86. package/dist/esm/lib/transpile-shader.js +5 -5
  87. package/dist/esm/lib/transpile-shader.js.map +1 -1
  88. package/dist/esm/modules/dirlight/dirlight.js +3 -9
  89. package/dist/esm/modules/dirlight/dirlight.js.map +1 -1
  90. package/dist/esm/modules/fp32/fp32.js +1 -148
  91. package/dist/esm/modules/fp32/fp32.js.map +1 -1
  92. package/dist/esm/modules/fp64/fp64-arithmetic.glsl.js +1 -143
  93. package/dist/esm/modules/fp64/fp64-arithmetic.glsl.js.map +1 -1
  94. package/dist/esm/modules/fp64/fp64-functions.glsl.js +1 -630
  95. package/dist/esm/modules/fp64/fp64-functions.glsl.js.map +1 -1
  96. package/dist/esm/modules/fp64/fp64-utils.js +3 -1
  97. package/dist/esm/modules/fp64/fp64-utils.js.map +1 -1
  98. package/dist/esm/modules/fp64/fp64.js.map +1 -1
  99. package/dist/esm/modules/fxaa/fxaa.js +1 -535
  100. package/dist/esm/modules/fxaa/fxaa.js.map +1 -1
  101. package/dist/esm/modules/geometry/geometry.js +2 -28
  102. package/dist/esm/modules/geometry/geometry.js.map +1 -1
  103. package/dist/esm/modules/image-adjust-filters/brightnesscontrast.js +1 -18
  104. package/dist/esm/modules/image-adjust-filters/brightnesscontrast.js.map +1 -1
  105. package/dist/esm/modules/image-adjust-filters/denoise.js +1 -22
  106. package/dist/esm/modules/image-adjust-filters/denoise.js.map +1 -1
  107. package/dist/esm/modules/image-adjust-filters/huesaturation.js +1 -28
  108. package/dist/esm/modules/image-adjust-filters/huesaturation.js.map +1 -1
  109. package/dist/esm/modules/image-adjust-filters/noise.js +1 -19
  110. package/dist/esm/modules/image-adjust-filters/noise.js.map +1 -1
  111. package/dist/esm/modules/image-adjust-filters/sepia.js +1 -20
  112. package/dist/esm/modules/image-adjust-filters/sepia.js.map +1 -1
  113. package/dist/esm/modules/image-adjust-filters/vibrance.js +1 -15
  114. package/dist/esm/modules/image-adjust-filters/vibrance.js.map +1 -1
  115. package/dist/esm/modules/image-adjust-filters/vignette.js +1 -14
  116. package/dist/esm/modules/image-adjust-filters/vignette.js.map +1 -1
  117. package/dist/esm/modules/image-blur-filters/tiltshift.js +1 -37
  118. package/dist/esm/modules/image-blur-filters/tiltshift.js.map +1 -1
  119. package/dist/esm/modules/image-blur-filters/triangleblur.js +1 -27
  120. package/dist/esm/modules/image-blur-filters/triangleblur.js.map +1 -1
  121. package/dist/esm/modules/image-blur-filters/zoomblur.js +1 -26
  122. package/dist/esm/modules/image-blur-filters/zoomblur.js.map +1 -1
  123. package/dist/esm/modules/image-fun-filters/colorhalftone.js +1 -34
  124. package/dist/esm/modules/image-fun-filters/colorhalftone.js.map +1 -1
  125. package/dist/esm/modules/image-fun-filters/dotscreen.js +1 -22
  126. package/dist/esm/modules/image-fun-filters/dotscreen.js.map +1 -1
  127. package/dist/esm/modules/image-fun-filters/edgework.js +1 -50
  128. package/dist/esm/modules/image-fun-filters/edgework.js.map +1 -1
  129. package/dist/esm/modules/image-fun-filters/hexagonalpixelate.js +1 -42
  130. package/dist/esm/modules/image-fun-filters/hexagonalpixelate.js.map +1 -1
  131. package/dist/esm/modules/image-fun-filters/ink.js +1 -27
  132. package/dist/esm/modules/image-fun-filters/ink.js.map +1 -1
  133. package/dist/esm/modules/image-fun-filters/magnify.js +1 -20
  134. package/dist/esm/modules/image-fun-filters/magnify.js.map +1 -1
  135. package/dist/esm/modules/image-warp-filters/bulgepinch.js +1 -27
  136. package/dist/esm/modules/image-warp-filters/bulgepinch.js.map +1 -1
  137. package/dist/esm/modules/image-warp-filters/swirl.js +1 -29
  138. package/dist/esm/modules/image-warp-filters/swirl.js.map +1 -1
  139. package/dist/esm/modules/image-warp-filters/warp.js +1 -11
  140. package/dist/esm/modules/image-warp-filters/warp.js.map +1 -1
  141. package/dist/esm/modules/index.js.map +1 -1
  142. package/dist/esm/modules/lights/lights.glsl.js +1 -34
  143. package/dist/esm/modules/lights/lights.glsl.js.map +1 -1
  144. package/dist/esm/modules/lights/lights.js +19 -15
  145. package/dist/esm/modules/lights/lights.js.map +1 -1
  146. package/dist/esm/modules/module-injectors.js +2 -27
  147. package/dist/esm/modules/module-injectors.js.map +1 -1
  148. package/dist/esm/modules/pbr/pbr-fragment.glsl.js +1 -351
  149. package/dist/esm/modules/pbr/pbr-fragment.glsl.js.map +1 -1
  150. package/dist/esm/modules/pbr/pbr-vertex.glsl.js +1 -39
  151. package/dist/esm/modules/pbr/pbr-vertex.glsl.js.map +1 -1
  152. package/dist/esm/modules/pbr/pbr.js.map +1 -1
  153. package/dist/esm/modules/phong-lighting/phong-lighting.glsl.js +1 -75
  154. package/dist/esm/modules/phong-lighting/phong-lighting.glsl.js.map +1 -1
  155. package/dist/esm/modules/phong-lighting/phong-lighting.js +3 -1
  156. package/dist/esm/modules/phong-lighting/phong-lighting.js.map +1 -1
  157. package/dist/esm/modules/picking/picking.js +4 -87
  158. package/dist/esm/modules/picking/picking.js.map +1 -1
  159. package/dist/esm/modules/project/project.js +6 -69
  160. package/dist/esm/modules/project/project.js.map +1 -1
  161. package/dist/esm/modules/transform/transform.js +1 -28
  162. package/dist/esm/modules/transform/transform.js.map +1 -1
  163. package/dist/esm/modules/utils/random.js +1 -5
  164. package/dist/esm/modules/utils/random.js.map +1 -1
  165. package/dist/esm/utils/assert.js.map +1 -1
  166. package/dist/esm/utils/index.js.map +1 -1
  167. package/dist/esm/utils/is-old-ie.js +2 -1
  168. package/dist/esm/utils/is-old-ie.js.map +1 -1
  169. package/dist/esm/utils/shader-utils.js +11 -24
  170. package/dist/esm/utils/shader-utils.js.map +1 -1
  171. package/dist/esm/utils/webgl-info.js +3 -2
  172. package/dist/esm/utils/webgl-info.js.map +1 -1
  173. package/package.json +2 -2
  174. package/src/.DS_Store +0 -0
@@ -1,631 +1,2 @@
1
- export default `\
2
- const vec2 E_FP64 = vec2(2.7182817459106445e+00, 8.254840366817007e-08);
3
- const vec2 LOG2_FP64 = vec2(0.6931471824645996e+00, -1.9046542121259336e-09);
4
- const vec2 PI_FP64 = vec2(3.1415927410125732, -8.742278012618954e-8);
5
- const vec2 TWO_PI_FP64 = vec2(6.2831854820251465, -1.7484556025237907e-7);
6
- const vec2 PI_2_FP64 = vec2(1.5707963705062866, -4.371139006309477e-8);
7
- const vec2 PI_4_FP64 = vec2(0.7853981852531433, -2.1855695031547384e-8);
8
- const vec2 PI_16_FP64 = vec2(0.19634954631328583, -5.463923757886846e-9);
9
- const vec2 PI_16_2_FP64 = vec2(0.39269909262657166, -1.0927847515773692e-8);
10
- const vec2 PI_16_3_FP64 = vec2(0.5890486240386963, -1.4906100798128818e-9);
11
- const vec2 PI_180_FP64 = vec2(0.01745329238474369, 1.3519960498364902e-10);
12
-
13
- const vec2 SIN_TABLE_0_FP64 = vec2(0.19509032368659973, -1.6704714833615242e-9);
14
- const vec2 SIN_TABLE_1_FP64 = vec2(0.3826834261417389, 6.22335089017767e-9);
15
- const vec2 SIN_TABLE_2_FP64 = vec2(0.5555702447891235, -1.1769521357507529e-8);
16
- const vec2 SIN_TABLE_3_FP64 = vec2(0.7071067690849304, 1.2101617041793133e-8);
17
-
18
- const vec2 COS_TABLE_0_FP64 = vec2(0.9807852506637573, 2.9739473106360492e-8);
19
- const vec2 COS_TABLE_1_FP64 = vec2(0.9238795042037964, 2.8307490351764386e-8);
20
- const vec2 COS_TABLE_2_FP64 = vec2(0.8314695954322815, 1.6870263741530778e-8);
21
- const vec2 COS_TABLE_3_FP64 = vec2(0.7071067690849304, 1.2101617152815436e-8);
22
-
23
- const vec2 INVERSE_FACTORIAL_3_FP64 = vec2(1.666666716337204e-01, -4.967053879312289e-09);
24
- const vec2 INVERSE_FACTORIAL_4_FP64 = vec2(4.16666679084301e-02, -1.2417634698280722e-09);
25
- const vec2 INVERSE_FACTORIAL_5_FP64 = vec2(8.333333767950535e-03, -4.34617203337595e-10);
26
- const vec2 INVERSE_FACTORIAL_6_FP64 = vec2(1.3888889225199819e-03, -3.3631094437103215e-11);
27
- const vec2 INVERSE_FACTORIAL_7_FP64 = vec2(1.9841270113829523e-04, -2.725596874933456e-12);
28
- const vec2 INVERSE_FACTORIAL_8_FP64 = vec2(2.4801587642286904e-05, -3.406996025904184e-13);
29
- const vec2 INVERSE_FACTORIAL_9_FP64 = vec2(2.75573188446287533e-06, 3.7935713937038186e-14);
30
- const vec2 INVERSE_FACTORIAL_10_FP64 = vec2(2.755731998149713e-07, -7.575112367869873e-15);
31
-
32
- float nint(float d) {
33
- if (d == floor(d)) return d;
34
- return floor(d + 0.5);
35
- }
36
-
37
- vec2 nint_fp64(vec2 a) {
38
- float hi = nint(a.x);
39
- float lo;
40
- vec2 tmp;
41
- if (hi == a.x) {
42
- lo = nint(a.y);
43
- tmp = quickTwoSum(hi, lo);
44
- } else {
45
- lo = 0.0;
46
- if (abs(hi - a.x) == 0.5 && a.y < 0.0) {
47
- hi -= 1.0;
48
- }
49
- tmp = vec2(hi, lo);
50
- }
51
- return tmp;
52
- }
53
-
54
- vec2 exp_fp64(vec2 a) {
55
-
56
- const int k_power = 4;
57
- const float k = 16.0;
58
-
59
- const float inv_k = 1.0 / k;
60
-
61
- if (a.x <= -88.0) return vec2(0.0, 0.0);
62
- if (a.x >= 88.0) return vec2(1.0 / 0.0, 1.0 / 0.0);
63
- if (a.x == 0.0 && a.y == 0.0) return vec2(1.0, 0.0);
64
- if (a.x == 1.0 && a.y == 0.0) return E_FP64;
65
-
66
- float m = floor(a.x / LOG2_FP64.x + 0.5);
67
- vec2 r = sub_fp64(a, mul_fp64(LOG2_FP64, vec2(m, 0.0))) * inv_k;
68
- vec2 s, t, p;
69
-
70
- p = mul_fp64(r, r);
71
- s = sum_fp64(r, p * 0.5);
72
- p = mul_fp64(p, r);
73
- t = mul_fp64(p, INVERSE_FACTORIAL_3_FP64);
74
-
75
- s = sum_fp64(s, t);
76
- p = mul_fp64(p, r);
77
- t = mul_fp64(p, INVERSE_FACTORIAL_4_FP64);
78
-
79
- s = sum_fp64(s, t);
80
- p = mul_fp64(p, r);
81
- t = mul_fp64(p, INVERSE_FACTORIAL_5_FP64);
82
-
83
-
84
-
85
-
86
-
87
-
88
- s = sum_fp64(s, t);
89
- for (int i = 0; i < k_power; i++) {
90
- s = sum_fp64(s * 2.0, mul_fp64(s, s));
91
- }
92
-
93
- #if defined(NVIDIA_FP64_WORKAROUND) || defined(INTEL_FP64_WORKAROUND)
94
- s = sum_fp64(s, vec2(ONE, 0.0));
95
- #else
96
- s = sum_fp64(s, vec2(1.0, 0.0));
97
- #endif
98
-
99
- return s * pow(2.0, m);
100
- }
101
-
102
- vec2 log_fp64(vec2 a)
103
- {
104
- if (a.x == 1.0 && a.y == 0.0) return vec2(0.0, 0.0);
105
- if (a.x <= 0.0) return vec2(0.0 / 0.0, 0.0 / 0.0);
106
- vec2 x = vec2(log(a.x), 0.0);
107
- vec2 s;
108
- #if defined(NVIDIA_FP64_WORKAROUND) || defined(INTEL_FP64_WORKAROUND)
109
- s = vec2(ONE, 0.0);
110
- #else
111
- s = vec2(1.0, 0.0);
112
- #endif
113
-
114
- x = sub_fp64(sum_fp64(x, mul_fp64(a, exp_fp64(-x))), s);
115
- return x;
116
- }
117
-
118
- vec2 sin_taylor_fp64(vec2 a) {
119
- vec2 r, s, t, x;
120
-
121
- if (a.x == 0.0 && a.y == 0.0) {
122
- return vec2(0.0, 0.0);
123
- }
124
-
125
- x = -mul_fp64(a, a);
126
- s = a;
127
- r = a;
128
-
129
- r = mul_fp64(r, x);
130
- t = mul_fp64(r, INVERSE_FACTORIAL_3_FP64);
131
- s = sum_fp64(s, t);
132
-
133
- r = mul_fp64(r, x);
134
- t = mul_fp64(r, INVERSE_FACTORIAL_5_FP64);
135
- s = sum_fp64(s, t);
136
-
137
-
138
-
139
-
140
-
141
-
142
- return s;
143
- }
144
-
145
- vec2 cos_taylor_fp64(vec2 a) {
146
- vec2 r, s, t, x;
147
-
148
- if (a.x == 0.0 && a.y == 0.0) {
149
- return vec2(1.0, 0.0);
150
- }
151
-
152
- x = -mul_fp64(a, a);
153
- r = x;
154
- s = sum_fp64(vec2(1.0, 0.0), r * 0.5);
155
-
156
- r = mul_fp64(r, x);
157
- t = mul_fp64(r, INVERSE_FACTORIAL_4_FP64);
158
- s = sum_fp64(s, t);
159
-
160
- r = mul_fp64(r, x);
161
- t = mul_fp64(r, INVERSE_FACTORIAL_6_FP64);
162
- s = sum_fp64(s, t);
163
-
164
-
165
-
166
-
167
-
168
-
169
- return s;
170
- }
171
-
172
- void sincos_taylor_fp64(vec2 a, out vec2 sin_t, out vec2 cos_t) {
173
- if (a.x == 0.0 && a.y == 0.0) {
174
- sin_t = vec2(0.0, 0.0);
175
- cos_t = vec2(1.0, 0.0);
176
- }
177
-
178
- sin_t = sin_taylor_fp64(a);
179
- cos_t = sqrt_fp64(sub_fp64(vec2(1.0, 0.0), mul_fp64(sin_t, sin_t)));
180
- }
181
-
182
- vec2 sin_fp64(vec2 a) {
183
- if (a.x == 0.0 && a.y == 0.0) {
184
- return vec2(0.0, 0.0);
185
- }
186
- vec2 z = nint_fp64(div_fp64(a, TWO_PI_FP64));
187
- vec2 r = sub_fp64(a, mul_fp64(TWO_PI_FP64, z));
188
-
189
- vec2 t;
190
- float q = floor(r.x / PI_2_FP64.x + 0.5);
191
- int j = int(q);
192
-
193
- if (j < -2 || j > 2) {
194
- return vec2(0.0 / 0.0, 0.0 / 0.0);
195
- }
196
-
197
- t = sub_fp64(r, mul_fp64(PI_2_FP64, vec2(q, 0.0)));
198
-
199
- q = floor(t.x / PI_16_FP64.x + 0.5);
200
- int k = int(q);
201
-
202
- if (k == 0) {
203
- if (j == 0) {
204
- return sin_taylor_fp64(t);
205
- } else if (j == 1) {
206
- return cos_taylor_fp64(t);
207
- } else if (j == -1) {
208
- return -cos_taylor_fp64(t);
209
- } else {
210
- return -sin_taylor_fp64(t);
211
- }
212
- }
213
-
214
- int abs_k = int(abs(float(k)));
215
-
216
- if (abs_k > 4) {
217
- return vec2(0.0 / 0.0, 0.0 / 0.0);
218
- } else {
219
- t = sub_fp64(t, mul_fp64(PI_16_FP64, vec2(q, 0.0)));
220
- }
221
-
222
- vec2 u = vec2(0.0, 0.0);
223
- vec2 v = vec2(0.0, 0.0);
224
-
225
- #if defined(NVIDIA_FP64_WORKAROUND) || defined(INTEL_FP64_WORKAROUND)
226
- if (abs(float(abs_k) - 1.0) < 0.5) {
227
- u = COS_TABLE_0_FP64;
228
- v = SIN_TABLE_0_FP64;
229
- } else if (abs(float(abs_k) - 2.0) < 0.5) {
230
- u = COS_TABLE_1_FP64;
231
- v = SIN_TABLE_1_FP64;
232
- } else if (abs(float(abs_k) - 3.0) < 0.5) {
233
- u = COS_TABLE_2_FP64;
234
- v = SIN_TABLE_2_FP64;
235
- } else if (abs(float(abs_k) - 4.0) < 0.5) {
236
- u = COS_TABLE_3_FP64;
237
- v = SIN_TABLE_3_FP64;
238
- }
239
- #else
240
- if (abs_k == 1) {
241
- u = COS_TABLE_0_FP64;
242
- v = SIN_TABLE_0_FP64;
243
- } else if (abs_k == 2) {
244
- u = COS_TABLE_1_FP64;
245
- v = SIN_TABLE_1_FP64;
246
- } else if (abs_k == 3) {
247
- u = COS_TABLE_2_FP64;
248
- v = SIN_TABLE_2_FP64;
249
- } else if (abs_k == 4) {
250
- u = COS_TABLE_3_FP64;
251
- v = SIN_TABLE_3_FP64;
252
- }
253
- #endif
254
-
255
- vec2 sin_t, cos_t;
256
- sincos_taylor_fp64(t, sin_t, cos_t);
257
-
258
-
259
-
260
- vec2 result = vec2(0.0, 0.0);
261
- if (j == 0) {
262
- if (k > 0) {
263
- result = sum_fp64(mul_fp64(u, sin_t), mul_fp64(v, cos_t));
264
- } else {
265
- result = sub_fp64(mul_fp64(u, sin_t), mul_fp64(v, cos_t));
266
- }
267
- } else if (j == 1) {
268
- if (k > 0) {
269
- result = sub_fp64(mul_fp64(u, cos_t), mul_fp64(v, sin_t));
270
- } else {
271
- result = sum_fp64(mul_fp64(u, cos_t), mul_fp64(v, sin_t));
272
- }
273
- } else if (j == -1) {
274
- if (k > 0) {
275
- result = sub_fp64(mul_fp64(v, sin_t), mul_fp64(u, cos_t));
276
- } else {
277
- result = -sum_fp64(mul_fp64(v, sin_t), mul_fp64(u, cos_t));
278
- }
279
- } else {
280
- if (k > 0) {
281
- result = -sum_fp64(mul_fp64(u, sin_t), mul_fp64(v, cos_t));
282
- } else {
283
- result = sub_fp64(mul_fp64(v, cos_t), mul_fp64(u, sin_t));
284
- }
285
- }
286
-
287
- return result;
288
- }
289
-
290
- vec2 cos_fp64(vec2 a) {
291
- if (a.x == 0.0 && a.y == 0.0) {
292
- return vec2(1.0, 0.0);
293
- }
294
- vec2 z = nint_fp64(div_fp64(a, TWO_PI_FP64));
295
- vec2 r = sub_fp64(a, mul_fp64(TWO_PI_FP64, z));
296
-
297
- vec2 t;
298
- float q = floor(r.x / PI_2_FP64.x + 0.5);
299
- int j = int(q);
300
-
301
- if (j < -2 || j > 2) {
302
- return vec2(0.0 / 0.0, 0.0 / 0.0);
303
- }
304
-
305
- t = sub_fp64(r, mul_fp64(PI_2_FP64, vec2(q, 0.0)));
306
-
307
- q = floor(t.x / PI_16_FP64.x + 0.5);
308
- int k = int(q);
309
-
310
- if (k == 0) {
311
- if (j == 0) {
312
- return cos_taylor_fp64(t);
313
- } else if (j == 1) {
314
- return -sin_taylor_fp64(t);
315
- } else if (j == -1) {
316
- return sin_taylor_fp64(t);
317
- } else {
318
- return -cos_taylor_fp64(t);
319
- }
320
- }
321
-
322
- int abs_k = int(abs(float(k)));
323
-
324
- if (abs_k > 4) {
325
- return vec2(0.0 / 0.0, 0.0 / 0.0);
326
- } else {
327
- t = sub_fp64(t, mul_fp64(PI_16_FP64, vec2(q, 0.0)));
328
- }
329
-
330
- vec2 u = vec2(0.0, 0.0);
331
- vec2 v = vec2(0.0, 0.0);
332
-
333
- #if defined(NVIDIA_FP64_WORKAROUND) || defined(INTEL_FP64_WORKAROUND)
334
- if (abs(float(abs_k) - 1.0) < 0.5) {
335
- u = COS_TABLE_0_FP64;
336
- v = SIN_TABLE_0_FP64;
337
- } else if (abs(float(abs_k) - 2.0) < 0.5) {
338
- u = COS_TABLE_1_FP64;
339
- v = SIN_TABLE_1_FP64;
340
- } else if (abs(float(abs_k) - 3.0) < 0.5) {
341
- u = COS_TABLE_2_FP64;
342
- v = SIN_TABLE_2_FP64;
343
- } else if (abs(float(abs_k) - 4.0) < 0.5) {
344
- u = COS_TABLE_3_FP64;
345
- v = SIN_TABLE_3_FP64;
346
- }
347
- #else
348
- if (abs_k == 1) {
349
- u = COS_TABLE_0_FP64;
350
- v = SIN_TABLE_0_FP64;
351
- } else if (abs_k == 2) {
352
- u = COS_TABLE_1_FP64;
353
- v = SIN_TABLE_1_FP64;
354
- } else if (abs_k == 3) {
355
- u = COS_TABLE_2_FP64;
356
- v = SIN_TABLE_2_FP64;
357
- } else if (abs_k == 4) {
358
- u = COS_TABLE_3_FP64;
359
- v = SIN_TABLE_3_FP64;
360
- }
361
- #endif
362
-
363
- vec2 sin_t, cos_t;
364
- sincos_taylor_fp64(t, sin_t, cos_t);
365
-
366
- vec2 result = vec2(0.0, 0.0);
367
- if (j == 0) {
368
- if (k > 0) {
369
- result = sub_fp64(mul_fp64(u, cos_t), mul_fp64(v, sin_t));
370
- } else {
371
- result = sum_fp64(mul_fp64(u, cos_t), mul_fp64(v, sin_t));
372
- }
373
- } else if (j == 1) {
374
- if (k > 0) {
375
- result = -sum_fp64(mul_fp64(u, sin_t), mul_fp64(v, cos_t));
376
- } else {
377
- result = sub_fp64(mul_fp64(v, cos_t), mul_fp64(u, sin_t));
378
- }
379
- } else if (j == -1) {
380
- if (k > 0) {
381
- result = sum_fp64(mul_fp64(u, sin_t), mul_fp64(v, cos_t));
382
- } else {
383
- result = sub_fp64(mul_fp64(u, sin_t), mul_fp64(v, cos_t));
384
- }
385
- } else {
386
- if (k > 0) {
387
- result = sub_fp64(mul_fp64(v, sin_t), mul_fp64(u, cos_t));
388
- } else {
389
- result = -sum_fp64(mul_fp64(u, cos_t), mul_fp64(v, sin_t));
390
- }
391
- }
392
-
393
- return result;
394
- }
395
-
396
- vec2 tan_fp64(vec2 a) {
397
- vec2 sin_a;
398
- vec2 cos_a;
399
-
400
- if (a.x == 0.0 && a.y == 0.0) {
401
- return vec2(0.0, 0.0);
402
- }
403
- vec2 z = nint_fp64(div_fp64(a, TWO_PI_FP64));
404
- vec2 r = sub_fp64(a, mul_fp64(TWO_PI_FP64, z));
405
-
406
- vec2 t;
407
- float q = floor(r.x / PI_2_FP64.x + 0.5);
408
- int j = int(q);
409
-
410
-
411
- if (j < -2 || j > 2) {
412
- return vec2(0.0 / 0.0, 0.0 / 0.0);
413
- }
414
-
415
- t = sub_fp64(r, mul_fp64(PI_2_FP64, vec2(q, 0.0)));
416
-
417
- q = floor(t.x / PI_16_FP64.x + 0.5);
418
- int k = int(q);
419
- int abs_k = int(abs(float(k)));
420
-
421
- if (abs_k > 4) {
422
- return vec2(0.0 / 0.0, 0.0 / 0.0);
423
- } else {
424
- t = sub_fp64(t, mul_fp64(PI_16_FP64, vec2(q, 0.0)));
425
- }
426
-
427
-
428
- vec2 u = vec2(0.0, 0.0);
429
- vec2 v = vec2(0.0, 0.0);
430
-
431
- vec2 sin_t, cos_t;
432
- vec2 s, c;
433
- sincos_taylor_fp64(t, sin_t, cos_t);
434
-
435
- if (k == 0) {
436
- s = sin_t;
437
- c = cos_t;
438
- } else {
439
- #if defined(NVIDIA_FP64_WORKAROUND) || defined(INTEL_FP64_WORKAROUND)
440
- if (abs(float(abs_k) - 1.0) < 0.5) {
441
- u = COS_TABLE_0_FP64;
442
- v = SIN_TABLE_0_FP64;
443
- } else if (abs(float(abs_k) - 2.0) < 0.5) {
444
- u = COS_TABLE_1_FP64;
445
- v = SIN_TABLE_1_FP64;
446
- } else if (abs(float(abs_k) - 3.0) < 0.5) {
447
- u = COS_TABLE_2_FP64;
448
- v = SIN_TABLE_2_FP64;
449
- } else if (abs(float(abs_k) - 4.0) < 0.5) {
450
- u = COS_TABLE_3_FP64;
451
- v = SIN_TABLE_3_FP64;
452
- }
453
- #else
454
- if (abs_k == 1) {
455
- u = COS_TABLE_0_FP64;
456
- v = SIN_TABLE_0_FP64;
457
- } else if (abs_k == 2) {
458
- u = COS_TABLE_1_FP64;
459
- v = SIN_TABLE_1_FP64;
460
- } else if (abs_k == 3) {
461
- u = COS_TABLE_2_FP64;
462
- v = SIN_TABLE_2_FP64;
463
- } else if (abs_k == 4) {
464
- u = COS_TABLE_3_FP64;
465
- v = SIN_TABLE_3_FP64;
466
- }
467
- #endif
468
- if (k > 0) {
469
- s = sum_fp64(mul_fp64(u, sin_t), mul_fp64(v, cos_t));
470
- c = sub_fp64(mul_fp64(u, cos_t), mul_fp64(v, sin_t));
471
- } else {
472
- s = sub_fp64(mul_fp64(u, sin_t), mul_fp64(v, cos_t));
473
- c = sum_fp64(mul_fp64(u, cos_t), mul_fp64(v, sin_t));
474
- }
475
- }
476
-
477
- if (j == 0) {
478
- sin_a = s;
479
- cos_a = c;
480
- } else if (j == 1) {
481
- sin_a = c;
482
- cos_a = -s;
483
- } else if (j == -1) {
484
- sin_a = -c;
485
- cos_a = s;
486
- } else {
487
- sin_a = -s;
488
- cos_a = -c;
489
- }
490
- return div_fp64(sin_a, cos_a);
491
- }
492
-
493
- vec2 radians_fp64(vec2 degree) {
494
- return mul_fp64(degree, PI_180_FP64);
495
- }
496
-
497
- vec2 mix_fp64(vec2 a, vec2 b, float x) {
498
- vec2 range = sub_fp64(b, a);
499
- return sum_fp64(a, mul_fp64(range, vec2(x, 0.0)));
500
- }
501
-
502
- void vec2_sum_fp64(vec2 a[2], vec2 b[2], out vec2 out_val[2]) {
503
- out_val[0] = sum_fp64(a[0], b[0]);
504
- out_val[1] = sum_fp64(a[1], b[1]);
505
- }
506
-
507
- void vec2_sub_fp64(vec2 a[2], vec2 b[2], out vec2 out_val[2]) {
508
- out_val[0] = sub_fp64(a[0], b[0]);
509
- out_val[1] = sub_fp64(a[1], b[1]);
510
- }
511
-
512
- void vec2_mul_fp64(vec2 a[2], vec2 b[2], out vec2 out_val[2]) {
513
- out_val[0] = mul_fp64(a[0], b[0]);
514
- out_val[1] = mul_fp64(a[1], b[1]);
515
- }
516
-
517
- void vec2_div_fp64(vec2 a[2], vec2 b[2], out vec2 out_val[2]) {
518
- out_val[0] = div_fp64(a[0], b[0]);
519
- out_val[1] = div_fp64(a[1], b[1]);
520
- }
521
-
522
- void vec2_mix_fp64(vec2 x[2], vec2 y[2], float a, out vec2 out_val[2]) {
523
- vec2 range[2];
524
- vec2_sub_fp64(y, x, range);
525
- vec2 portion[2];
526
- portion[0] = range[0] * a;
527
- portion[1] = range[1] * a;
528
- vec2_sum_fp64(x, portion, out_val);
529
- }
530
-
531
- vec2 vec2_length_fp64(vec2 x[2]) {
532
- return sqrt_fp64(sum_fp64(mul_fp64(x[0], x[0]), mul_fp64(x[1], x[1])));
533
- }
534
-
535
- void vec2_normalize_fp64(vec2 x[2], out vec2 out_val[2]) {
536
- vec2 length = vec2_length_fp64(x);
537
- vec2 length_vec2[2];
538
- length_vec2[0] = length;
539
- length_vec2[1] = length;
540
-
541
- vec2_div_fp64(x, length_vec2, out_val);
542
- }
543
-
544
- vec2 vec2_distance_fp64(vec2 x[2], vec2 y[2]) {
545
- vec2 diff[2];
546
- vec2_sub_fp64(x, y, diff);
547
- return vec2_length_fp64(diff);
548
- }
549
-
550
- vec2 vec2_dot_fp64(vec2 a[2], vec2 b[2]) {
551
- vec2 v[2];
552
-
553
- v[0] = mul_fp64(a[0], b[0]);
554
- v[1] = mul_fp64(a[1], b[1]);
555
-
556
- return sum_fp64(v[0], v[1]);
557
- }
558
- void vec3_sub_fp64(vec2 a[3], vec2 b[3], out vec2 out_val[3]) {
559
- for (int i = 0; i < 3; i++) {
560
- out_val[i] = sum_fp64(a[i], b[i]);
561
- }
562
- }
563
-
564
- void vec3_sum_fp64(vec2 a[3], vec2 b[3], out vec2 out_val[3]) {
565
- for (int i = 0; i < 3; i++) {
566
- out_val[i] = sum_fp64(a[i], b[i]);
567
- }
568
- }
569
-
570
- vec2 vec3_length_fp64(vec2 x[3]) {
571
- return sqrt_fp64(sum_fp64(sum_fp64(mul_fp64(x[0], x[0]), mul_fp64(x[1], x[1])),
572
- mul_fp64(x[2], x[2])));
573
- }
574
-
575
- vec2 vec3_distance_fp64(vec2 x[3], vec2 y[3]) {
576
- vec2 diff[3];
577
- vec3_sub_fp64(x, y, diff);
578
- return vec3_length_fp64(diff);
579
- }
580
- void vec4_fp64(vec4 a, out vec2 out_val[4]) {
581
- out_val[0].x = a[0];
582
- out_val[0].y = 0.0;
583
-
584
- out_val[1].x = a[1];
585
- out_val[1].y = 0.0;
586
-
587
- out_val[2].x = a[2];
588
- out_val[2].y = 0.0;
589
-
590
- out_val[3].x = a[3];
591
- out_val[3].y = 0.0;
592
- }
593
-
594
- void vec4_scalar_mul_fp64(vec2 a[4], vec2 b, out vec2 out_val[4]) {
595
- out_val[0] = mul_fp64(a[0], b);
596
- out_val[1] = mul_fp64(a[1], b);
597
- out_val[2] = mul_fp64(a[2], b);
598
- out_val[3] = mul_fp64(a[3], b);
599
- }
600
-
601
- void vec4_sum_fp64(vec2 a[4], vec2 b[4], out vec2 out_val[4]) {
602
- for (int i = 0; i < 4; i++) {
603
- out_val[i] = sum_fp64(a[i], b[i]);
604
- }
605
- }
606
-
607
- void vec4_dot_fp64(vec2 a[4], vec2 b[4], out vec2 out_val) {
608
- vec2 v[4];
609
-
610
- v[0] = mul_fp64(a[0], b[0]);
611
- v[1] = mul_fp64(a[1], b[1]);
612
- v[2] = mul_fp64(a[2], b[2]);
613
- v[3] = mul_fp64(a[3], b[3]);
614
-
615
- out_val = sum_fp64(sum_fp64(v[0], v[1]), sum_fp64(v[2], v[3]));
616
- }
617
-
618
- void mat4_vec4_mul_fp64(vec2 b[16], vec2 a[4], out vec2 out_val[4]) {
619
- vec2 tmp[4];
620
-
621
- for (int i = 0; i < 4; i++)
622
- {
623
- for (int j = 0; j < 4; j++)
624
- {
625
- tmp[j] = b[j + i * 4];
626
- }
627
- vec4_dot_fp64(a, tmp, out_val[i]);
628
- }
629
- }
630
- `;
1
+ export default "const vec2 E_FP64 = vec2(2.7182817459106445e+00, 8.254840366817007e-08);\nconst vec2 LOG2_FP64 = vec2(0.6931471824645996e+00, -1.9046542121259336e-09);\nconst vec2 PI_FP64 = vec2(3.1415927410125732, -8.742278012618954e-8);\nconst vec2 TWO_PI_FP64 = vec2(6.2831854820251465, -1.7484556025237907e-7);\nconst vec2 PI_2_FP64 = vec2(1.5707963705062866, -4.371139006309477e-8);\nconst vec2 PI_4_FP64 = vec2(0.7853981852531433, -2.1855695031547384e-8);\nconst vec2 PI_16_FP64 = vec2(0.19634954631328583, -5.463923757886846e-9);\nconst vec2 PI_16_2_FP64 = vec2(0.39269909262657166, -1.0927847515773692e-8);\nconst vec2 PI_16_3_FP64 = vec2(0.5890486240386963, -1.4906100798128818e-9);\nconst vec2 PI_180_FP64 = vec2(0.01745329238474369, 1.3519960498364902e-10);\n\nconst vec2 SIN_TABLE_0_FP64 = vec2(0.19509032368659973, -1.6704714833615242e-9);\nconst vec2 SIN_TABLE_1_FP64 = vec2(0.3826834261417389, 6.22335089017767e-9);\nconst vec2 SIN_TABLE_2_FP64 = vec2(0.5555702447891235, -1.1769521357507529e-8);\nconst vec2 SIN_TABLE_3_FP64 = vec2(0.7071067690849304, 1.2101617041793133e-8);\n\nconst vec2 COS_TABLE_0_FP64 = vec2(0.9807852506637573, 2.9739473106360492e-8);\nconst vec2 COS_TABLE_1_FP64 = vec2(0.9238795042037964, 2.8307490351764386e-8);\nconst vec2 COS_TABLE_2_FP64 = vec2(0.8314695954322815, 1.6870263741530778e-8);\nconst vec2 COS_TABLE_3_FP64 = vec2(0.7071067690849304, 1.2101617152815436e-8);\n\nconst vec2 INVERSE_FACTORIAL_3_FP64 = vec2(1.666666716337204e-01, -4.967053879312289e-09);\nconst vec2 INVERSE_FACTORIAL_4_FP64 = vec2(4.16666679084301e-02, -1.2417634698280722e-09);\nconst vec2 INVERSE_FACTORIAL_5_FP64 = vec2(8.333333767950535e-03, -4.34617203337595e-10);\nconst vec2 INVERSE_FACTORIAL_6_FP64 = vec2(1.3888889225199819e-03, -3.3631094437103215e-11);\nconst vec2 INVERSE_FACTORIAL_7_FP64 = vec2(1.9841270113829523e-04, -2.725596874933456e-12);\nconst vec2 INVERSE_FACTORIAL_8_FP64 = vec2(2.4801587642286904e-05, -3.406996025904184e-13);\nconst vec2 INVERSE_FACTORIAL_9_FP64 = vec2(2.75573188446287533e-06, 3.7935713937038186e-14);\nconst vec2 INVERSE_FACTORIAL_10_FP64 = vec2(2.755731998149713e-07, -7.575112367869873e-15);\n\nfloat nint(float d) {\n if (d == floor(d)) return d;\n return floor(d + 0.5);\n}\n\nvec2 nint_fp64(vec2 a) {\n float hi = nint(a.x);\n float lo;\n vec2 tmp;\n if (hi == a.x) {\n lo = nint(a.y);\n tmp = quickTwoSum(hi, lo);\n } else {\n lo = 0.0;\n if (abs(hi - a.x) == 0.5 && a.y < 0.0) {\n hi -= 1.0;\n }\n tmp = vec2(hi, lo);\n }\n return tmp;\n}\n\nvec2 exp_fp64(vec2 a) {\n\n const int k_power = 4;\n const float k = 16.0;\n\n const float inv_k = 1.0 / k;\n\n if (a.x <= -88.0) return vec2(0.0, 0.0);\n if (a.x >= 88.0) return vec2(1.0 / 0.0, 1.0 / 0.0);\n if (a.x == 0.0 && a.y == 0.0) return vec2(1.0, 0.0);\n if (a.x == 1.0 && a.y == 0.0) return E_FP64;\n\n float m = floor(a.x / LOG2_FP64.x + 0.5);\n vec2 r = sub_fp64(a, mul_fp64(LOG2_FP64, vec2(m, 0.0))) * inv_k;\n vec2 s, t, p;\n\n p = mul_fp64(r, r);\n s = sum_fp64(r, p * 0.5);\n p = mul_fp64(p, r);\n t = mul_fp64(p, INVERSE_FACTORIAL_3_FP64);\n\n s = sum_fp64(s, t);\n p = mul_fp64(p, r);\n t = mul_fp64(p, INVERSE_FACTORIAL_4_FP64);\n\n s = sum_fp64(s, t);\n p = mul_fp64(p, r);\n t = mul_fp64(p, INVERSE_FACTORIAL_5_FP64);\n\n\n\n\n\n\n s = sum_fp64(s, t);\n for (int i = 0; i < k_power; i++) {\n s = sum_fp64(s * 2.0, mul_fp64(s, s));\n }\n\n#if defined(NVIDIA_FP64_WORKAROUND) || defined(INTEL_FP64_WORKAROUND)\n s = sum_fp64(s, vec2(ONE, 0.0));\n#else\n s = sum_fp64(s, vec2(1.0, 0.0));\n#endif\n\n return s * pow(2.0, m);\n}\n\nvec2 log_fp64(vec2 a)\n{\n if (a.x == 1.0 && a.y == 0.0) return vec2(0.0, 0.0);\n if (a.x <= 0.0) return vec2(0.0 / 0.0, 0.0 / 0.0);\n vec2 x = vec2(log(a.x), 0.0);\n vec2 s;\n#if defined(NVIDIA_FP64_WORKAROUND) || defined(INTEL_FP64_WORKAROUND)\n s = vec2(ONE, 0.0);\n#else\n s = vec2(1.0, 0.0);\n#endif\n\n x = sub_fp64(sum_fp64(x, mul_fp64(a, exp_fp64(-x))), s);\n return x;\n}\n\nvec2 sin_taylor_fp64(vec2 a) {\n vec2 r, s, t, x;\n\n if (a.x == 0.0 && a.y == 0.0) {\n return vec2(0.0, 0.0);\n }\n\n x = -mul_fp64(a, a);\n s = a;\n r = a;\n\n r = mul_fp64(r, x);\n t = mul_fp64(r, INVERSE_FACTORIAL_3_FP64);\n s = sum_fp64(s, t);\n\n r = mul_fp64(r, x);\n t = mul_fp64(r, INVERSE_FACTORIAL_5_FP64);\n s = sum_fp64(s, t);\n\n\n\n\n\n\n return s;\n}\n\nvec2 cos_taylor_fp64(vec2 a) {\n vec2 r, s, t, x;\n\n if (a.x == 0.0 && a.y == 0.0) {\n return vec2(1.0, 0.0);\n }\n\n x = -mul_fp64(a, a);\n r = x;\n s = sum_fp64(vec2(1.0, 0.0), r * 0.5);\n\n r = mul_fp64(r, x);\n t = mul_fp64(r, INVERSE_FACTORIAL_4_FP64);\n s = sum_fp64(s, t);\n\n r = mul_fp64(r, x);\n t = mul_fp64(r, INVERSE_FACTORIAL_6_FP64);\n s = sum_fp64(s, t);\n\n\n\n\n\n\n return s;\n}\n\nvoid sincos_taylor_fp64(vec2 a, out vec2 sin_t, out vec2 cos_t) {\n if (a.x == 0.0 && a.y == 0.0) {\n sin_t = vec2(0.0, 0.0);\n cos_t = vec2(1.0, 0.0);\n }\n\n sin_t = sin_taylor_fp64(a);\n cos_t = sqrt_fp64(sub_fp64(vec2(1.0, 0.0), mul_fp64(sin_t, sin_t)));\n}\n\nvec2 sin_fp64(vec2 a) {\n if (a.x == 0.0 && a.y == 0.0) {\n return vec2(0.0, 0.0);\n }\n vec2 z = nint_fp64(div_fp64(a, TWO_PI_FP64));\n vec2 r = sub_fp64(a, mul_fp64(TWO_PI_FP64, z));\n\n vec2 t;\n float q = floor(r.x / PI_2_FP64.x + 0.5);\n int j = int(q);\n\n if (j < -2 || j > 2) {\n return vec2(0.0 / 0.0, 0.0 / 0.0);\n }\n\n t = sub_fp64(r, mul_fp64(PI_2_FP64, vec2(q, 0.0)));\n\n q = floor(t.x / PI_16_FP64.x + 0.5);\n int k = int(q);\n\n if (k == 0) {\n if (j == 0) {\n return sin_taylor_fp64(t);\n } else if (j == 1) {\n return cos_taylor_fp64(t);\n } else if (j == -1) {\n return -cos_taylor_fp64(t);\n } else {\n return -sin_taylor_fp64(t);\n }\n }\n\n int abs_k = int(abs(float(k)));\n\n if (abs_k > 4) {\n return vec2(0.0 / 0.0, 0.0 / 0.0);\n } else {\n t = sub_fp64(t, mul_fp64(PI_16_FP64, vec2(q, 0.0)));\n }\n\n vec2 u = vec2(0.0, 0.0);\n vec2 v = vec2(0.0, 0.0);\n\n#if defined(NVIDIA_FP64_WORKAROUND) || defined(INTEL_FP64_WORKAROUND)\n if (abs(float(abs_k) - 1.0) < 0.5) {\n u = COS_TABLE_0_FP64;\n v = SIN_TABLE_0_FP64;\n } else if (abs(float(abs_k) - 2.0) < 0.5) {\n u = COS_TABLE_1_FP64;\n v = SIN_TABLE_1_FP64;\n } else if (abs(float(abs_k) - 3.0) < 0.5) {\n u = COS_TABLE_2_FP64;\n v = SIN_TABLE_2_FP64;\n } else if (abs(float(abs_k) - 4.0) < 0.5) {\n u = COS_TABLE_3_FP64;\n v = SIN_TABLE_3_FP64;\n }\n#else\n if (abs_k == 1) {\n u = COS_TABLE_0_FP64;\n v = SIN_TABLE_0_FP64;\n } else if (abs_k == 2) {\n u = COS_TABLE_1_FP64;\n v = SIN_TABLE_1_FP64;\n } else if (abs_k == 3) {\n u = COS_TABLE_2_FP64;\n v = SIN_TABLE_2_FP64;\n } else if (abs_k == 4) {\n u = COS_TABLE_3_FP64;\n v = SIN_TABLE_3_FP64;\n }\n#endif\n\n vec2 sin_t, cos_t;\n sincos_taylor_fp64(t, sin_t, cos_t);\n\n\n\n vec2 result = vec2(0.0, 0.0);\n if (j == 0) {\n if (k > 0) {\n result = sum_fp64(mul_fp64(u, sin_t), mul_fp64(v, cos_t));\n } else {\n result = sub_fp64(mul_fp64(u, sin_t), mul_fp64(v, cos_t));\n }\n } else if (j == 1) {\n if (k > 0) {\n result = sub_fp64(mul_fp64(u, cos_t), mul_fp64(v, sin_t));\n } else {\n result = sum_fp64(mul_fp64(u, cos_t), mul_fp64(v, sin_t));\n }\n } else if (j == -1) {\n if (k > 0) {\n result = sub_fp64(mul_fp64(v, sin_t), mul_fp64(u, cos_t));\n } else {\n result = -sum_fp64(mul_fp64(v, sin_t), mul_fp64(u, cos_t));\n }\n } else {\n if (k > 0) {\n result = -sum_fp64(mul_fp64(u, sin_t), mul_fp64(v, cos_t));\n } else {\n result = sub_fp64(mul_fp64(v, cos_t), mul_fp64(u, sin_t));\n }\n }\n\n return result;\n}\n\nvec2 cos_fp64(vec2 a) {\n if (a.x == 0.0 && a.y == 0.0) {\n return vec2(1.0, 0.0);\n }\n vec2 z = nint_fp64(div_fp64(a, TWO_PI_FP64));\n vec2 r = sub_fp64(a, mul_fp64(TWO_PI_FP64, z));\n\n vec2 t;\n float q = floor(r.x / PI_2_FP64.x + 0.5);\n int j = int(q);\n\n if (j < -2 || j > 2) {\n return vec2(0.0 / 0.0, 0.0 / 0.0);\n }\n\n t = sub_fp64(r, mul_fp64(PI_2_FP64, vec2(q, 0.0)));\n\n q = floor(t.x / PI_16_FP64.x + 0.5);\n int k = int(q);\n\n if (k == 0) {\n if (j == 0) {\n return cos_taylor_fp64(t);\n } else if (j == 1) {\n return -sin_taylor_fp64(t);\n } else if (j == -1) {\n return sin_taylor_fp64(t);\n } else {\n return -cos_taylor_fp64(t);\n }\n }\n\n int abs_k = int(abs(float(k)));\n\n if (abs_k > 4) {\n return vec2(0.0 / 0.0, 0.0 / 0.0);\n } else {\n t = sub_fp64(t, mul_fp64(PI_16_FP64, vec2(q, 0.0)));\n }\n\n vec2 u = vec2(0.0, 0.0);\n vec2 v = vec2(0.0, 0.0);\n\n#if defined(NVIDIA_FP64_WORKAROUND) || defined(INTEL_FP64_WORKAROUND)\n if (abs(float(abs_k) - 1.0) < 0.5) {\n u = COS_TABLE_0_FP64;\n v = SIN_TABLE_0_FP64;\n } else if (abs(float(abs_k) - 2.0) < 0.5) {\n u = COS_TABLE_1_FP64;\n v = SIN_TABLE_1_FP64;\n } else if (abs(float(abs_k) - 3.0) < 0.5) {\n u = COS_TABLE_2_FP64;\n v = SIN_TABLE_2_FP64;\n } else if (abs(float(abs_k) - 4.0) < 0.5) {\n u = COS_TABLE_3_FP64;\n v = SIN_TABLE_3_FP64;\n }\n#else\n if (abs_k == 1) {\n u = COS_TABLE_0_FP64;\n v = SIN_TABLE_0_FP64;\n } else if (abs_k == 2) {\n u = COS_TABLE_1_FP64;\n v = SIN_TABLE_1_FP64;\n } else if (abs_k == 3) {\n u = COS_TABLE_2_FP64;\n v = SIN_TABLE_2_FP64;\n } else if (abs_k == 4) {\n u = COS_TABLE_3_FP64;\n v = SIN_TABLE_3_FP64;\n }\n#endif\n\n vec2 sin_t, cos_t;\n sincos_taylor_fp64(t, sin_t, cos_t);\n\n vec2 result = vec2(0.0, 0.0);\n if (j == 0) {\n if (k > 0) {\n result = sub_fp64(mul_fp64(u, cos_t), mul_fp64(v, sin_t));\n } else {\n result = sum_fp64(mul_fp64(u, cos_t), mul_fp64(v, sin_t));\n }\n } else if (j == 1) {\n if (k > 0) {\n result = -sum_fp64(mul_fp64(u, sin_t), mul_fp64(v, cos_t));\n } else {\n result = sub_fp64(mul_fp64(v, cos_t), mul_fp64(u, sin_t));\n }\n } else if (j == -1) {\n if (k > 0) {\n result = sum_fp64(mul_fp64(u, sin_t), mul_fp64(v, cos_t));\n } else {\n result = sub_fp64(mul_fp64(u, sin_t), mul_fp64(v, cos_t));\n }\n } else {\n if (k > 0) {\n result = sub_fp64(mul_fp64(v, sin_t), mul_fp64(u, cos_t));\n } else {\n result = -sum_fp64(mul_fp64(u, cos_t), mul_fp64(v, sin_t));\n }\n }\n\n return result;\n}\n\nvec2 tan_fp64(vec2 a) {\n vec2 sin_a;\n vec2 cos_a;\n\n if (a.x == 0.0 && a.y == 0.0) {\n return vec2(0.0, 0.0);\n }\n vec2 z = nint_fp64(div_fp64(a, TWO_PI_FP64));\n vec2 r = sub_fp64(a, mul_fp64(TWO_PI_FP64, z));\n\n vec2 t;\n float q = floor(r.x / PI_2_FP64.x + 0.5);\n int j = int(q);\n\n\n if (j < -2 || j > 2) {\n return vec2(0.0 / 0.0, 0.0 / 0.0);\n }\n\n t = sub_fp64(r, mul_fp64(PI_2_FP64, vec2(q, 0.0)));\n\n q = floor(t.x / PI_16_FP64.x + 0.5);\n int k = int(q);\n int abs_k = int(abs(float(k)));\n\n if (abs_k > 4) {\n return vec2(0.0 / 0.0, 0.0 / 0.0);\n } else {\n t = sub_fp64(t, mul_fp64(PI_16_FP64, vec2(q, 0.0)));\n }\n\n\n vec2 u = vec2(0.0, 0.0);\n vec2 v = vec2(0.0, 0.0);\n\n vec2 sin_t, cos_t;\n vec2 s, c;\n sincos_taylor_fp64(t, sin_t, cos_t);\n\n if (k == 0) {\n s = sin_t;\n c = cos_t;\n } else {\n#if defined(NVIDIA_FP64_WORKAROUND) || defined(INTEL_FP64_WORKAROUND)\n if (abs(float(abs_k) - 1.0) < 0.5) {\n u = COS_TABLE_0_FP64;\n v = SIN_TABLE_0_FP64;\n } else if (abs(float(abs_k) - 2.0) < 0.5) {\n u = COS_TABLE_1_FP64;\n v = SIN_TABLE_1_FP64;\n } else if (abs(float(abs_k) - 3.0) < 0.5) {\n u = COS_TABLE_2_FP64;\n v = SIN_TABLE_2_FP64;\n } else if (abs(float(abs_k) - 4.0) < 0.5) {\n u = COS_TABLE_3_FP64;\n v = SIN_TABLE_3_FP64;\n }\n#else\n if (abs_k == 1) {\n u = COS_TABLE_0_FP64;\n v = SIN_TABLE_0_FP64;\n } else if (abs_k == 2) {\n u = COS_TABLE_1_FP64;\n v = SIN_TABLE_1_FP64;\n } else if (abs_k == 3) {\n u = COS_TABLE_2_FP64;\n v = SIN_TABLE_2_FP64;\n } else if (abs_k == 4) {\n u = COS_TABLE_3_FP64;\n v = SIN_TABLE_3_FP64;\n }\n#endif\n if (k > 0) {\n s = sum_fp64(mul_fp64(u, sin_t), mul_fp64(v, cos_t));\n c = sub_fp64(mul_fp64(u, cos_t), mul_fp64(v, sin_t));\n } else {\n s = sub_fp64(mul_fp64(u, sin_t), mul_fp64(v, cos_t));\n c = sum_fp64(mul_fp64(u, cos_t), mul_fp64(v, sin_t));\n }\n }\n\n if (j == 0) {\n sin_a = s;\n cos_a = c;\n } else if (j == 1) {\n sin_a = c;\n cos_a = -s;\n } else if (j == -1) {\n sin_a = -c;\n cos_a = s;\n } else {\n sin_a = -s;\n cos_a = -c;\n }\n return div_fp64(sin_a, cos_a);\n}\n\nvec2 radians_fp64(vec2 degree) {\n return mul_fp64(degree, PI_180_FP64);\n}\n\nvec2 mix_fp64(vec2 a, vec2 b, float x) {\n vec2 range = sub_fp64(b, a);\n return sum_fp64(a, mul_fp64(range, vec2(x, 0.0)));\n}\n\nvoid vec2_sum_fp64(vec2 a[2], vec2 b[2], out vec2 out_val[2]) {\n out_val[0] = sum_fp64(a[0], b[0]);\n out_val[1] = sum_fp64(a[1], b[1]);\n}\n\nvoid vec2_sub_fp64(vec2 a[2], vec2 b[2], out vec2 out_val[2]) {\n out_val[0] = sub_fp64(a[0], b[0]);\n out_val[1] = sub_fp64(a[1], b[1]);\n}\n\nvoid vec2_mul_fp64(vec2 a[2], vec2 b[2], out vec2 out_val[2]) {\n out_val[0] = mul_fp64(a[0], b[0]);\n out_val[1] = mul_fp64(a[1], b[1]);\n}\n\nvoid vec2_div_fp64(vec2 a[2], vec2 b[2], out vec2 out_val[2]) {\n out_val[0] = div_fp64(a[0], b[0]);\n out_val[1] = div_fp64(a[1], b[1]);\n}\n\nvoid vec2_mix_fp64(vec2 x[2], vec2 y[2], float a, out vec2 out_val[2]) {\n vec2 range[2];\n vec2_sub_fp64(y, x, range);\n vec2 portion[2];\n portion[0] = range[0] * a;\n portion[1] = range[1] * a;\n vec2_sum_fp64(x, portion, out_val);\n}\n\nvec2 vec2_length_fp64(vec2 x[2]) {\n return sqrt_fp64(sum_fp64(mul_fp64(x[0], x[0]), mul_fp64(x[1], x[1])));\n}\n\nvoid vec2_normalize_fp64(vec2 x[2], out vec2 out_val[2]) {\n vec2 length = vec2_length_fp64(x);\n vec2 length_vec2[2];\n length_vec2[0] = length;\n length_vec2[1] = length;\n\n vec2_div_fp64(x, length_vec2, out_val);\n}\n\nvec2 vec2_distance_fp64(vec2 x[2], vec2 y[2]) {\n vec2 diff[2];\n vec2_sub_fp64(x, y, diff);\n return vec2_length_fp64(diff);\n}\n\nvec2 vec2_dot_fp64(vec2 a[2], vec2 b[2]) {\n vec2 v[2];\n\n v[0] = mul_fp64(a[0], b[0]);\n v[1] = mul_fp64(a[1], b[1]);\n\n return sum_fp64(v[0], v[1]);\n}\nvoid vec3_sub_fp64(vec2 a[3], vec2 b[3], out vec2 out_val[3]) {\n for (int i = 0; i < 3; i++) {\n out_val[i] = sum_fp64(a[i], b[i]);\n }\n}\n\nvoid vec3_sum_fp64(vec2 a[3], vec2 b[3], out vec2 out_val[3]) {\n for (int i = 0; i < 3; i++) {\n out_val[i] = sum_fp64(a[i], b[i]);\n }\n}\n\nvec2 vec3_length_fp64(vec2 x[3]) {\n return sqrt_fp64(sum_fp64(sum_fp64(mul_fp64(x[0], x[0]), mul_fp64(x[1], x[1])),\n mul_fp64(x[2], x[2])));\n}\n\nvec2 vec3_distance_fp64(vec2 x[3], vec2 y[3]) {\n vec2 diff[3];\n vec3_sub_fp64(x, y, diff);\n return vec3_length_fp64(diff);\n}\nvoid vec4_fp64(vec4 a, out vec2 out_val[4]) {\n out_val[0].x = a[0];\n out_val[0].y = 0.0;\n\n out_val[1].x = a[1];\n out_val[1].y = 0.0;\n\n out_val[2].x = a[2];\n out_val[2].y = 0.0;\n\n out_val[3].x = a[3];\n out_val[3].y = 0.0;\n}\n\nvoid vec4_scalar_mul_fp64(vec2 a[4], vec2 b, out vec2 out_val[4]) {\n out_val[0] = mul_fp64(a[0], b);\n out_val[1] = mul_fp64(a[1], b);\n out_val[2] = mul_fp64(a[2], b);\n out_val[3] = mul_fp64(a[3], b);\n}\n\nvoid vec4_sum_fp64(vec2 a[4], vec2 b[4], out vec2 out_val[4]) {\n for (int i = 0; i < 4; i++) {\n out_val[i] = sum_fp64(a[i], b[i]);\n }\n}\n\nvoid vec4_dot_fp64(vec2 a[4], vec2 b[4], out vec2 out_val) {\n vec2 v[4];\n\n v[0] = mul_fp64(a[0], b[0]);\n v[1] = mul_fp64(a[1], b[1]);\n v[2] = mul_fp64(a[2], b[2]);\n v[3] = mul_fp64(a[3], b[3]);\n\n out_val = sum_fp64(sum_fp64(v[0], v[1]), sum_fp64(v[2], v[3]));\n}\n\nvoid mat4_vec4_mul_fp64(vec2 b[16], vec2 a[4], out vec2 out_val[4]) {\n vec2 tmp[4];\n\n for (int i = 0; i < 4; i++)\n {\n for (int j = 0; j < 4; j++)\n {\n tmp[j] = b[j + i * 4];\n }\n vec4_dot_fp64(a, tmp, out_val[i]);\n }\n}\n";
631
2
  //# sourceMappingURL=fp64-functions.glsl.js.map