@deck.gl/extensions 9.0.0-beta.6 → 9.0.0-beta.8

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.
package/dist/dist.dev.js CHANGED
@@ -1392,9 +1392,6 @@ void main() {
1392
1392
  // src/fp64/fp64-extension.ts
1393
1393
  var import_core6 = __toESM(require_core(), 1);
1394
1394
 
1395
- // ../../node_modules/@luma.gl/shadertools/dist/lib/glsl-utils/highlight.js
1396
- var glsl2 = (x) => `${x}`;
1397
-
1398
1395
  // ../../node_modules/@luma.gl/shadertools/dist/modules-webgl1/math/fp64/fp64-utils.js
1399
1396
  function fp64ify(a, out = [], startIndex = 0) {
1400
1397
  const hiPart = Math.fround(a);
@@ -1418,177 +1415,142 @@ void main() {
1418
1415
  }
1419
1416
 
1420
1417
  // ../../node_modules/@luma.gl/shadertools/dist/modules-webgl1/math/fp64/fp64-arithmetic-glsl.js
1421
- var fp64arithmeticShader = glsl2`\
1422
- uniform float ONE;
1423
-
1424
- /*
1425
- About LUMA_FP64_CODE_ELIMINATION_WORKAROUND
1426
-
1427
- The purpose of this workaround is to prevent shader compilers from
1428
- optimizing away necessary arithmetic operations by swapping their sequences
1429
- or transform the equation to some 'equivalent' form.
1430
-
1431
- The method is to multiply an artifical variable, ONE, which will be known to
1432
- the compiler to be 1 only at runtime. The whole expression is then represented
1433
- as a polynomial with respective to ONE. In the coefficients of all terms, only one a
1434
- and one b should appear
1435
-
1436
- err = (a + b) * ONE^6 - a * ONE^5 - (a + b) * ONE^4 + a * ONE^3 - b - (a + b) * ONE^2 + a * ONE
1437
- */
1438
-
1439
- // Divide float number to high and low floats to extend fraction bits
1418
+ var fp64arithmeticShader = `uniform float ONE;
1440
1419
  vec2 split(float a) {
1441
- const float SPLIT = 4097.0;
1442
- float t = a * SPLIT;
1420
+ const float SPLIT = 4097.0;
1421
+ float t = a * SPLIT;
1443
1422
  #if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)
1444
- float a_hi = t * ONE - (t - a);
1445
- float a_lo = a * ONE - a_hi;
1423
+ float a_hi = t * ONE - (t - a);
1424
+ float a_lo = a * ONE - a_hi;
1446
1425
  #else
1447
- float a_hi = t - (t - a);
1448
- float a_lo = a - a_hi;
1426
+ float a_hi = t - (t - a);
1427
+ float a_lo = a - a_hi;
1449
1428
  #endif
1450
- return vec2(a_hi, a_lo);
1429
+ return vec2(a_hi, a_lo);
1451
1430
  }
1452
-
1453
- // Divide float number again when high float uses too many fraction bits
1454
1431
  vec2 split2(vec2 a) {
1455
- vec2 b = split(a.x);
1456
- b.y += a.y;
1457
- return b;
1432
+ vec2 b = split(a.x);
1433
+ b.y += a.y;
1434
+ return b;
1458
1435
  }
1459
-
1460
- // Special sum operation when a > b
1461
1436
  vec2 quickTwoSum(float a, float b) {
1462
1437
  #if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)
1463
- float sum = (a + b) * ONE;
1464
- float err = b - (sum - a) * ONE;
1438
+ float sum = (a + b) * ONE;
1439
+ float err = b - (sum - a) * ONE;
1465
1440
  #else
1466
- float sum = a + b;
1467
- float err = b - (sum - a);
1441
+ float sum = a + b;
1442
+ float err = b - (sum - a);
1468
1443
  #endif
1469
- return vec2(sum, err);
1444
+ return vec2(sum, err);
1470
1445
  }
1471
-
1472
- // General sum operation
1473
1446
  vec2 twoSum(float a, float b) {
1474
- float s = (a + b);
1447
+ float s = (a + b);
1475
1448
  #if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)
1476
- float v = (s * ONE - a) * ONE;
1477
- float err = (a - (s - v) * ONE) * ONE * ONE * ONE + (b - v);
1449
+ float v = (s * ONE - a) * ONE;
1450
+ float err = (a - (s - v) * ONE) * ONE * ONE * ONE + (b - v);
1478
1451
  #else
1479
- float v = s - a;
1480
- float err = (a - (s - v)) + (b - v);
1452
+ float v = s - a;
1453
+ float err = (a - (s - v)) + (b - v);
1481
1454
  #endif
1482
- return vec2(s, err);
1455
+ return vec2(s, err);
1483
1456
  }
1484
-
1485
1457
  vec2 twoSub(float a, float b) {
1486
- float s = (a - b);
1458
+ float s = (a - b);
1487
1459
  #if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)
1488
- float v = (s * ONE - a) * ONE;
1489
- float err = (a - (s - v) * ONE) * ONE * ONE * ONE - (b + v);
1460
+ float v = (s * ONE - a) * ONE;
1461
+ float err = (a - (s - v) * ONE) * ONE * ONE * ONE - (b + v);
1490
1462
  #else
1491
- float v = s - a;
1492
- float err = (a - (s - v)) - (b + v);
1463
+ float v = s - a;
1464
+ float err = (a - (s - v)) - (b + v);
1493
1465
  #endif
1494
- return vec2(s, err);
1466
+ return vec2(s, err);
1495
1467
  }
1496
-
1497
1468
  vec2 twoSqr(float a) {
1498
- float prod = a * a;
1499
- vec2 a_fp64 = split(a);
1469
+ float prod = a * a;
1470
+ vec2 a_fp64 = split(a);
1500
1471
  #if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)
1501
- float err = ((a_fp64.x * a_fp64.x - prod) * ONE + 2.0 * a_fp64.x *
1502
- a_fp64.y * ONE * ONE) + a_fp64.y * a_fp64.y * ONE * ONE * ONE;
1472
+ float err = ((a_fp64.x * a_fp64.x - prod) * ONE + 2.0 * a_fp64.x *
1473
+ a_fp64.y * ONE * ONE) + a_fp64.y * a_fp64.y * ONE * ONE * ONE;
1503
1474
  #else
1504
- float err = ((a_fp64.x * a_fp64.x - prod) + 2.0 * a_fp64.x * a_fp64.y) + a_fp64.y * a_fp64.y;
1475
+ float err = ((a_fp64.x * a_fp64.x - prod) + 2.0 * a_fp64.x * a_fp64.y) + a_fp64.y * a_fp64.y;
1505
1476
  #endif
1506
- return vec2(prod, err);
1477
+ return vec2(prod, err);
1507
1478
  }
1508
-
1509
1479
  vec2 twoProd(float a, float b) {
1510
- float prod = a * b;
1511
- vec2 a_fp64 = split(a);
1512
- vec2 b_fp64 = split(b);
1513
- float err = ((a_fp64.x * b_fp64.x - prod) + a_fp64.x * b_fp64.y +
1514
- a_fp64.y * b_fp64.x) + a_fp64.y * b_fp64.y;
1515
- return vec2(prod, err);
1480
+ float prod = a * b;
1481
+ vec2 a_fp64 = split(a);
1482
+ vec2 b_fp64 = split(b);
1483
+ float err = ((a_fp64.x * b_fp64.x - prod) + a_fp64.x * b_fp64.y +
1484
+ a_fp64.y * b_fp64.x) + a_fp64.y * b_fp64.y;
1485
+ return vec2(prod, err);
1516
1486
  }
1517
-
1518
1487
  vec2 sum_fp64(vec2 a, vec2 b) {
1519
- vec2 s, t;
1520
- s = twoSum(a.x, b.x);
1521
- t = twoSum(a.y, b.y);
1522
- s.y += t.x;
1523
- s = quickTwoSum(s.x, s.y);
1524
- s.y += t.y;
1525
- s = quickTwoSum(s.x, s.y);
1526
- return s;
1488
+ vec2 s, t;
1489
+ s = twoSum(a.x, b.x);
1490
+ t = twoSum(a.y, b.y);
1491
+ s.y += t.x;
1492
+ s = quickTwoSum(s.x, s.y);
1493
+ s.y += t.y;
1494
+ s = quickTwoSum(s.x, s.y);
1495
+ return s;
1527
1496
  }
1528
-
1529
1497
  vec2 sub_fp64(vec2 a, vec2 b) {
1530
- vec2 s, t;
1531
- s = twoSub(a.x, b.x);
1532
- t = twoSub(a.y, b.y);
1533
- s.y += t.x;
1534
- s = quickTwoSum(s.x, s.y);
1535
- s.y += t.y;
1536
- s = quickTwoSum(s.x, s.y);
1537
- return s;
1498
+ vec2 s, t;
1499
+ s = twoSub(a.x, b.x);
1500
+ t = twoSub(a.y, b.y);
1501
+ s.y += t.x;
1502
+ s = quickTwoSum(s.x, s.y);
1503
+ s.y += t.y;
1504
+ s = quickTwoSum(s.x, s.y);
1505
+ return s;
1538
1506
  }
1539
-
1540
1507
  vec2 mul_fp64(vec2 a, vec2 b) {
1541
- vec2 prod = twoProd(a.x, b.x);
1542
- // y component is for the error
1543
- prod.y += a.x * b.y;
1508
+ vec2 prod = twoProd(a.x, b.x);
1509
+ prod.y += a.x * b.y;
1544
1510
  #if defined(LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND)
1545
- prod = split2(prod);
1511
+ prod = split2(prod);
1546
1512
  #endif
1547
- prod = quickTwoSum(prod.x, prod.y);
1548
- prod.y += a.y * b.x;
1513
+ prod = quickTwoSum(prod.x, prod.y);
1514
+ prod.y += a.y * b.x;
1549
1515
  #if defined(LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND)
1550
- prod = split2(prod);
1516
+ prod = split2(prod);
1551
1517
  #endif
1552
- prod = quickTwoSum(prod.x, prod.y);
1553
- return prod;
1518
+ prod = quickTwoSum(prod.x, prod.y);
1519
+ return prod;
1554
1520
  }
1555
-
1556
1521
  vec2 div_fp64(vec2 a, vec2 b) {
1557
- float xn = 1.0 / b.x;
1522
+ float xn = 1.0 / b.x;
1558
1523
  #if defined(LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND)
1559
- vec2 yn = mul_fp64(a, vec2(xn, 0));
1524
+ vec2 yn = mul_fp64(a, vec2(xn, 0));
1560
1525
  #else
1561
- vec2 yn = a * xn;
1526
+ vec2 yn = a * xn;
1562
1527
  #endif
1563
- float diff = (sub_fp64(a, mul_fp64(b, yn))).x;
1564
- vec2 prod = twoProd(xn, diff);
1565
- return sum_fp64(yn, prod);
1528
+ float diff = (sub_fp64(a, mul_fp64(b, yn))).x;
1529
+ vec2 prod = twoProd(xn, diff);
1530
+ return sum_fp64(yn, prod);
1566
1531
  }
1567
-
1568
1532
  vec2 sqrt_fp64(vec2 a) {
1569
- if (a.x == 0.0 && a.y == 0.0) return vec2(0.0, 0.0);
1570
- if (a.x < 0.0) return vec2(0.0 / 0.0, 0.0 / 0.0);
1571
-
1572
- float x = 1.0 / sqrt(a.x);
1573
- float yn = a.x * x;
1533
+ if (a.x == 0.0 && a.y == 0.0) return vec2(0.0, 0.0);
1534
+ if (a.x < 0.0) return vec2(0.0 / 0.0, 0.0 / 0.0);
1535
+ float x = 1.0 / sqrt(a.x);
1536
+ float yn = a.x * x;
1574
1537
  #if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)
1575
- vec2 yn_sqr = twoSqr(yn) * ONE;
1538
+ vec2 yn_sqr = twoSqr(yn) * ONE;
1576
1539
  #else
1577
- vec2 yn_sqr = twoSqr(yn);
1540
+ vec2 yn_sqr = twoSqr(yn);
1578
1541
  #endif
1579
- float diff = sub_fp64(a, yn_sqr).x;
1580
- vec2 prod = twoProd(x * 0.5, diff);
1542
+ float diff = sub_fp64(a, yn_sqr).x;
1543
+ vec2 prod = twoProd(x * 0.5, diff);
1581
1544
  #if defined(LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND)
1582
- return sum_fp64(split(yn), prod);
1545
+ return sum_fp64(split(yn), prod);
1583
1546
  #else
1584
- return sum_fp64(vec2(yn, 0.0), prod);
1547
+ return sum_fp64(vec2(yn, 0.0), prod);
1585
1548
  #endif
1586
1549
  }
1587
1550
  `;
1588
1551
 
1589
1552
  // ../../node_modules/@luma.gl/shadertools/dist/modules-webgl1/math/fp64/fp64-functions-glsl.js
1590
- var fp64functionShader = glsl2`\
1591
- const vec2 E_FP64 = vec2(2.7182817459106445e+00, 8.254840366817007e-08);
1553
+ var fp64functionShader = `const vec2 E_FP64 = vec2(2.7182817459106445e+00, 8.254840366817007e-08);
1592
1554
  const vec2 LOG2_FP64 = vec2(0.6931471824645996e+00, -1.9046542121259336e-09);
1593
1555
  const vec2 PI_FP64 = vec2(3.1415927410125732, -8.742278012618954e-8);
1594
1556
  const vec2 TWO_PI_FP64 = vec2(6.2831854820251465, -1.7484556025237907e-7);
@@ -1598,664 +1560,508 @@ const vec2 PI_16_FP64 = vec2(0.19634954631328583, -5.463923757886846e-9);
1598
1560
  const vec2 PI_16_2_FP64 = vec2(0.39269909262657166, -1.0927847515773692e-8);
1599
1561
  const vec2 PI_16_3_FP64 = vec2(0.5890486240386963, -1.4906100798128818e-9);
1600
1562
  const vec2 PI_180_FP64 = vec2(0.01745329238474369, 1.3519960498364902e-10);
1601
-
1602
1563
  const vec2 SIN_TABLE_0_FP64 = vec2(0.19509032368659973, -1.6704714833615242e-9);
1603
1564
  const vec2 SIN_TABLE_1_FP64 = vec2(0.3826834261417389, 6.22335089017767e-9);
1604
1565
  const vec2 SIN_TABLE_2_FP64 = vec2(0.5555702447891235, -1.1769521357507529e-8);
1605
1566
  const vec2 SIN_TABLE_3_FP64 = vec2(0.7071067690849304, 1.2101617041793133e-8);
1606
-
1607
1567
  const vec2 COS_TABLE_0_FP64 = vec2(0.9807852506637573, 2.9739473106360492e-8);
1608
1568
  const vec2 COS_TABLE_1_FP64 = vec2(0.9238795042037964, 2.8307490351764386e-8);
1609
1569
  const vec2 COS_TABLE_2_FP64 = vec2(0.8314695954322815, 1.6870263741530778e-8);
1610
1570
  const vec2 COS_TABLE_3_FP64 = vec2(0.7071067690849304, 1.2101617152815436e-8);
1611
-
1612
- const vec2 INVERSE_FACTORIAL_3_FP64 = vec2(1.666666716337204e-01, -4.967053879312289e-09); // 1/3!
1613
- const vec2 INVERSE_FACTORIAL_4_FP64 = vec2(4.16666679084301e-02, -1.2417634698280722e-09); // 1/4!
1614
- const vec2 INVERSE_FACTORIAL_5_FP64 = vec2(8.333333767950535e-03, -4.34617203337595e-10); // 1/5!
1615
- const vec2 INVERSE_FACTORIAL_6_FP64 = vec2(1.3888889225199819e-03, -3.3631094437103215e-11); // 1/6!
1616
- const vec2 INVERSE_FACTORIAL_7_FP64 = vec2(1.9841270113829523e-04, -2.725596874933456e-12); // 1/7!
1617
- const vec2 INVERSE_FACTORIAL_8_FP64 = vec2(2.4801587642286904e-05, -3.406996025904184e-13); // 1/8!
1618
- const vec2 INVERSE_FACTORIAL_9_FP64 = vec2(2.75573188446287533e-06, 3.7935713937038186e-14); // 1/9!
1619
- const vec2 INVERSE_FACTORIAL_10_FP64 = vec2(2.755731998149713e-07, -7.575112367869873e-15); // 1/10!
1620
-
1571
+ const vec2 INVERSE_FACTORIAL_3_FP64 = vec2(1.666666716337204e-01, -4.967053879312289e-09);
1572
+ const vec2 INVERSE_FACTORIAL_4_FP64 = vec2(4.16666679084301e-02, -1.2417634698280722e-09);
1573
+ const vec2 INVERSE_FACTORIAL_5_FP64 = vec2(8.333333767950535e-03, -4.34617203337595e-10);
1574
+ const vec2 INVERSE_FACTORIAL_6_FP64 = vec2(1.3888889225199819e-03, -3.3631094437103215e-11);
1575
+ const vec2 INVERSE_FACTORIAL_7_FP64 = vec2(1.9841270113829523e-04, -2.725596874933456e-12);
1576
+ const vec2 INVERSE_FACTORIAL_8_FP64 = vec2(2.4801587642286904e-05, -3.406996025904184e-13);
1577
+ const vec2 INVERSE_FACTORIAL_9_FP64 = vec2(2.75573188446287533e-06, 3.7935713937038186e-14);
1578
+ const vec2 INVERSE_FACTORIAL_10_FP64 = vec2(2.755731998149713e-07, -7.575112367869873e-15);
1621
1579
  float nint(float d) {
1622
- if (d == floor(d)) return d;
1623
- return floor(d + 0.5);
1580
+ if (d == floor(d)) return d;
1581
+ return floor(d + 0.5);
1624
1582
  }
1625
-
1626
1583
  vec2 nint_fp64(vec2 a) {
1627
- float hi = nint(a.x);
1628
- float lo;
1629
- vec2 tmp;
1630
- if (hi == a.x) {
1631
- lo = nint(a.y);
1632
- tmp = quickTwoSum(hi, lo);
1633
- } else {
1634
- lo = 0.0;
1635
- if (abs(hi - a.x) == 0.5 && a.y < 0.0) {
1636
- hi -= 1.0;
1637
- }
1638
- tmp = vec2(hi, lo);
1639
- }
1640
- return tmp;
1584
+ float hi = nint(a.x);
1585
+ float lo;
1586
+ vec2 tmp;
1587
+ if (hi == a.x) {
1588
+ lo = nint(a.y);
1589
+ tmp = quickTwoSum(hi, lo);
1590
+ } else {
1591
+ lo = 0.0;
1592
+ if (abs(hi - a.x) == 0.5 && a.y < 0.0) {
1593
+ hi -= 1.0;
1594
+ }
1595
+ tmp = vec2(hi, lo);
1596
+ }
1597
+ return tmp;
1641
1598
  }
1642
-
1643
- /* k_power controls how much range reduction we would like to have
1644
- Range reduction uses the following method:
1645
- assume a = k_power * r + m * log(2), k and m being integers.
1646
- Set k_power = 4 (we can choose other k to trade accuracy with performance.
1647
- we only need to calculate exp(r) and using exp(a) = 2^m * exp(r)^k_power;
1648
- */
1649
-
1650
1599
  vec2 exp_fp64(vec2 a) {
1651
- // We need to make sure these two numbers match
1652
- // as bit-wise shift is not available in GLSL 1.0
1653
- const int k_power = 4;
1654
- const float k = 16.0;
1655
-
1656
- const float inv_k = 1.0 / k;
1657
-
1658
- if (a.x <= -88.0) return vec2(0.0, 0.0);
1659
- if (a.x >= 88.0) return vec2(1.0 / 0.0, 1.0 / 0.0);
1660
- if (a.x == 0.0 && a.y == 0.0) return vec2(1.0, 0.0);
1661
- if (a.x == 1.0 && a.y == 0.0) return E_FP64;
1662
-
1663
- float m = floor(a.x / LOG2_FP64.x + 0.5);
1664
- vec2 r = sub_fp64(a, mul_fp64(LOG2_FP64, vec2(m, 0.0))) * inv_k;
1665
- vec2 s, t, p;
1666
-
1667
- p = mul_fp64(r, r);
1668
- s = sum_fp64(r, p * 0.5);
1669
- p = mul_fp64(p, r);
1670
- t = mul_fp64(p, INVERSE_FACTORIAL_3_FP64);
1671
-
1672
- s = sum_fp64(s, t);
1673
- p = mul_fp64(p, r);
1674
- t = mul_fp64(p, INVERSE_FACTORIAL_4_FP64);
1675
-
1676
- s = sum_fp64(s, t);
1677
- p = mul_fp64(p, r);
1678
- t = mul_fp64(p, INVERSE_FACTORIAL_5_FP64);
1679
-
1680
- // s = sum_fp64(s, t);
1681
- // p = mul_fp64(p, r);
1682
- // t = mul_fp64(p, INVERSE_FACTORIAL_6_FP64);
1683
-
1684
- // s = sum_fp64(s, t);
1685
- // p = mul_fp64(p, r);
1686
- // t = mul_fp64(p, INVERSE_FACTORIAL_7_FP64);
1687
-
1688
- s = sum_fp64(s, t);
1689
-
1690
-
1691
- // At this point, s = exp(r) - 1; but after following 4 recursions, we will get exp(r) ^ 512 - 1.
1692
- for (int i = 0; i < k_power; i++) {
1693
- s = sum_fp64(s * 2.0, mul_fp64(s, s));
1694
- }
1695
-
1600
+ const int k_power = 4;
1601
+ const float k = 16.0;
1602
+ const float inv_k = 1.0 / k;
1603
+ if (a.x <= -88.0) return vec2(0.0, 0.0);
1604
+ if (a.x >= 88.0) return vec2(1.0 / 0.0, 1.0 / 0.0);
1605
+ if (a.x == 0.0 && a.y == 0.0) return vec2(1.0, 0.0);
1606
+ if (a.x == 1.0 && a.y == 0.0) return E_FP64;
1607
+ float m = floor(a.x / LOG2_FP64.x + 0.5);
1608
+ vec2 r = sub_fp64(a, mul_fp64(LOG2_FP64, vec2(m, 0.0))) * inv_k;
1609
+ vec2 s, t, p;
1610
+ p = mul_fp64(r, r);
1611
+ s = sum_fp64(r, p * 0.5);
1612
+ p = mul_fp64(p, r);
1613
+ t = mul_fp64(p, INVERSE_FACTORIAL_3_FP64);
1614
+ s = sum_fp64(s, t);
1615
+ p = mul_fp64(p, r);
1616
+ t = mul_fp64(p, INVERSE_FACTORIAL_4_FP64);
1617
+ s = sum_fp64(s, t);
1618
+ p = mul_fp64(p, r);
1619
+ t = mul_fp64(p, INVERSE_FACTORIAL_5_FP64);
1620
+ s = sum_fp64(s, t);
1621
+ for (int i = 0; i < k_power; i++) {
1622
+ s = sum_fp64(s * 2.0, mul_fp64(s, s));
1623
+ }
1696
1624
  #if defined(NVIDIA_FP64_WORKAROUND) || defined(INTEL_FP64_WORKAROUND)
1697
- s = sum_fp64(s, vec2(ONE, 0.0));
1625
+ s = sum_fp64(s, vec2(ONE, 0.0));
1698
1626
  #else
1699
- s = sum_fp64(s, vec2(1.0, 0.0));
1627
+ s = sum_fp64(s, vec2(1.0, 0.0));
1700
1628
  #endif
1701
-
1702
- return s * pow(2.0, m);
1703
- // return r;
1629
+ return s * pow(2.0, m);
1704
1630
  }
1705
-
1706
1631
  vec2 log_fp64(vec2 a)
1707
1632
  {
1708
- if (a.x == 1.0 && a.y == 0.0) return vec2(0.0, 0.0);
1709
- if (a.x <= 0.0) return vec2(0.0 / 0.0, 0.0 / 0.0);
1710
- vec2 x = vec2(log(a.x), 0.0);
1711
- vec2 s;
1633
+ if (a.x == 1.0 && a.y == 0.0) return vec2(0.0, 0.0);
1634
+ if (a.x <= 0.0) return vec2(0.0 / 0.0, 0.0 / 0.0);
1635
+ vec2 x = vec2(log(a.x), 0.0);
1636
+ vec2 s;
1712
1637
  #if defined(NVIDIA_FP64_WORKAROUND) || defined(INTEL_FP64_WORKAROUND)
1713
- s = vec2(ONE, 0.0);
1638
+ s = vec2(ONE, 0.0);
1714
1639
  #else
1715
- s = vec2(1.0, 0.0);
1640
+ s = vec2(1.0, 0.0);
1716
1641
  #endif
1717
-
1718
- x = sub_fp64(sum_fp64(x, mul_fp64(a, exp_fp64(-x))), s);
1719
- return x;
1642
+ x = sub_fp64(sum_fp64(x, mul_fp64(a, exp_fp64(-x))), s);
1643
+ return x;
1720
1644
  }
1721
-
1722
1645
  vec2 sin_taylor_fp64(vec2 a) {
1723
- vec2 r, s, t, x;
1724
-
1725
- if (a.x == 0.0 && a.y == 0.0) {
1726
- return vec2(0.0, 0.0);
1727
- }
1728
-
1729
- x = -mul_fp64(a, a);
1730
- s = a;
1731
- r = a;
1732
-
1733
- r = mul_fp64(r, x);
1734
- t = mul_fp64(r, INVERSE_FACTORIAL_3_FP64);
1735
- s = sum_fp64(s, t);
1736
-
1737
- r = mul_fp64(r, x);
1738
- t = mul_fp64(r, INVERSE_FACTORIAL_5_FP64);
1739
- s = sum_fp64(s, t);
1740
-
1741
- /* keep the following commented code in case we need them
1742
- for extra accuracy from the Taylor expansion*/
1743
-
1744
- // r = mul_fp64(r, x);
1745
- // t = mul_fp64(r, INVERSE_FACTORIAL_7_FP64);
1746
- // s = sum_fp64(s, t);
1747
-
1748
- // r = mul_fp64(r, x);
1749
- // t = mul_fp64(r, INVERSE_FACTORIAL_9_FP64);
1750
- // s = sum_fp64(s, t);
1751
-
1752
- return s;
1646
+ vec2 r, s, t, x;
1647
+ if (a.x == 0.0 && a.y == 0.0) {
1648
+ return vec2(0.0, 0.0);
1649
+ }
1650
+ x = -mul_fp64(a, a);
1651
+ s = a;
1652
+ r = a;
1653
+ r = mul_fp64(r, x);
1654
+ t = mul_fp64(r, INVERSE_FACTORIAL_3_FP64);
1655
+ s = sum_fp64(s, t);
1656
+ r = mul_fp64(r, x);
1657
+ t = mul_fp64(r, INVERSE_FACTORIAL_5_FP64);
1658
+ s = sum_fp64(s, t);
1659
+ return s;
1753
1660
  }
1754
-
1755
1661
  vec2 cos_taylor_fp64(vec2 a) {
1756
- vec2 r, s, t, x;
1757
-
1758
- if (a.x == 0.0 && a.y == 0.0) {
1759
- return vec2(1.0, 0.0);
1760
- }
1761
-
1762
- x = -mul_fp64(a, a);
1763
- r = x;
1764
- s = sum_fp64(vec2(1.0, 0.0), r * 0.5);
1765
-
1766
- r = mul_fp64(r, x);
1767
- t = mul_fp64(r, INVERSE_FACTORIAL_4_FP64);
1768
- s = sum_fp64(s, t);
1769
-
1770
- r = mul_fp64(r, x);
1771
- t = mul_fp64(r, INVERSE_FACTORIAL_6_FP64);
1772
- s = sum_fp64(s, t);
1773
-
1774
- /* keep the following commented code in case we need them
1775
- for extra accuracy from the Taylor expansion*/
1776
-
1777
- // r = mul_fp64(r, x);
1778
- // t = mul_fp64(r, INVERSE_FACTORIAL_8_FP64);
1779
- // s = sum_fp64(s, t);
1780
-
1781
- // r = mul_fp64(r, x);
1782
- // t = mul_fp64(r, INVERSE_FACTORIAL_10_FP64);
1783
- // s = sum_fp64(s, t);
1784
-
1785
- return s;
1662
+ vec2 r, s, t, x;
1663
+ if (a.x == 0.0 && a.y == 0.0) {
1664
+ return vec2(1.0, 0.0);
1665
+ }
1666
+ x = -mul_fp64(a, a);
1667
+ r = x;
1668
+ s = sum_fp64(vec2(1.0, 0.0), r * 0.5);
1669
+ r = mul_fp64(r, x);
1670
+ t = mul_fp64(r, INVERSE_FACTORIAL_4_FP64);
1671
+ s = sum_fp64(s, t);
1672
+ r = mul_fp64(r, x);
1673
+ t = mul_fp64(r, INVERSE_FACTORIAL_6_FP64);
1674
+ s = sum_fp64(s, t);
1675
+ return s;
1786
1676
  }
1787
-
1788
1677
  void sincos_taylor_fp64(vec2 a, out vec2 sin_t, out vec2 cos_t) {
1789
- if (a.x == 0.0 && a.y == 0.0) {
1790
- sin_t = vec2(0.0, 0.0);
1791
- cos_t = vec2(1.0, 0.0);
1792
- }
1793
-
1794
- sin_t = sin_taylor_fp64(a);
1795
- cos_t = sqrt_fp64(sub_fp64(vec2(1.0, 0.0), mul_fp64(sin_t, sin_t)));
1678
+ if (a.x == 0.0 && a.y == 0.0) {
1679
+ sin_t = vec2(0.0, 0.0);
1680
+ cos_t = vec2(1.0, 0.0);
1681
+ }
1682
+ sin_t = sin_taylor_fp64(a);
1683
+ cos_t = sqrt_fp64(sub_fp64(vec2(1.0, 0.0), mul_fp64(sin_t, sin_t)));
1796
1684
  }
1797
-
1798
1685
  vec2 sin_fp64(vec2 a) {
1799
- if (a.x == 0.0 && a.y == 0.0) {
1800
- return vec2(0.0, 0.0);
1801
- }
1802
-
1803
- // 2pi range reduction
1804
- vec2 z = nint_fp64(div_fp64(a, TWO_PI_FP64));
1805
- vec2 r = sub_fp64(a, mul_fp64(TWO_PI_FP64, z));
1806
-
1807
- vec2 t;
1808
- float q = floor(r.x / PI_2_FP64.x + 0.5);
1809
- int j = int(q);
1810
-
1811
- if (j < -2 || j > 2) {
1812
- return vec2(0.0 / 0.0, 0.0 / 0.0);
1813
- }
1814
-
1815
- t = sub_fp64(r, mul_fp64(PI_2_FP64, vec2(q, 0.0)));
1816
-
1817
- q = floor(t.x / PI_16_FP64.x + 0.5);
1818
- int k = int(q);
1819
-
1820
- if (k == 0) {
1821
- if (j == 0) {
1822
- return sin_taylor_fp64(t);
1823
- } else if (j == 1) {
1824
- return cos_taylor_fp64(t);
1825
- } else if (j == -1) {
1826
- return -cos_taylor_fp64(t);
1827
- } else {
1828
- return -sin_taylor_fp64(t);
1829
- }
1830
- }
1831
-
1832
- int abs_k = int(abs(float(k)));
1833
-
1834
- if (abs_k > 4) {
1835
- return vec2(0.0 / 0.0, 0.0 / 0.0);
1836
- } else {
1837
- t = sub_fp64(t, mul_fp64(PI_16_FP64, vec2(q, 0.0)));
1838
- }
1839
-
1840
- vec2 u = vec2(0.0, 0.0);
1841
- vec2 v = vec2(0.0, 0.0);
1842
-
1686
+ if (a.x == 0.0 && a.y == 0.0) {
1687
+ return vec2(0.0, 0.0);
1688
+ }
1689
+ vec2 z = nint_fp64(div_fp64(a, TWO_PI_FP64));
1690
+ vec2 r = sub_fp64(a, mul_fp64(TWO_PI_FP64, z));
1691
+ vec2 t;
1692
+ float q = floor(r.x / PI_2_FP64.x + 0.5);
1693
+ int j = int(q);
1694
+ if (j < -2 || j > 2) {
1695
+ return vec2(0.0 / 0.0, 0.0 / 0.0);
1696
+ }
1697
+ t = sub_fp64(r, mul_fp64(PI_2_FP64, vec2(q, 0.0)));
1698
+ q = floor(t.x / PI_16_FP64.x + 0.5);
1699
+ int k = int(q);
1700
+ if (k == 0) {
1701
+ if (j == 0) {
1702
+ return sin_taylor_fp64(t);
1703
+ } else if (j == 1) {
1704
+ return cos_taylor_fp64(t);
1705
+ } else if (j == -1) {
1706
+ return -cos_taylor_fp64(t);
1707
+ } else {
1708
+ return -sin_taylor_fp64(t);
1709
+ }
1710
+ }
1711
+ int abs_k = int(abs(float(k)));
1712
+ if (abs_k > 4) {
1713
+ return vec2(0.0 / 0.0, 0.0 / 0.0);
1714
+ } else {
1715
+ t = sub_fp64(t, mul_fp64(PI_16_FP64, vec2(q, 0.0)));
1716
+ }
1717
+ vec2 u = vec2(0.0, 0.0);
1718
+ vec2 v = vec2(0.0, 0.0);
1843
1719
  #if defined(NVIDIA_FP64_WORKAROUND) || defined(INTEL_FP64_WORKAROUND)
1844
- if (abs(float(abs_k) - 1.0) < 0.5) {
1845
- u = COS_TABLE_0_FP64;
1846
- v = SIN_TABLE_0_FP64;
1847
- } else if (abs(float(abs_k) - 2.0) < 0.5) {
1848
- u = COS_TABLE_1_FP64;
1849
- v = SIN_TABLE_1_FP64;
1850
- } else if (abs(float(abs_k) - 3.0) < 0.5) {
1851
- u = COS_TABLE_2_FP64;
1852
- v = SIN_TABLE_2_FP64;
1853
- } else if (abs(float(abs_k) - 4.0) < 0.5) {
1854
- u = COS_TABLE_3_FP64;
1855
- v = SIN_TABLE_3_FP64;
1856
- }
1720
+ if (abs(float(abs_k) - 1.0) < 0.5) {
1721
+ u = COS_TABLE_0_FP64;
1722
+ v = SIN_TABLE_0_FP64;
1723
+ } else if (abs(float(abs_k) - 2.0) < 0.5) {
1724
+ u = COS_TABLE_1_FP64;
1725
+ v = SIN_TABLE_1_FP64;
1726
+ } else if (abs(float(abs_k) - 3.0) < 0.5) {
1727
+ u = COS_TABLE_2_FP64;
1728
+ v = SIN_TABLE_2_FP64;
1729
+ } else if (abs(float(abs_k) - 4.0) < 0.5) {
1730
+ u = COS_TABLE_3_FP64;
1731
+ v = SIN_TABLE_3_FP64;
1732
+ }
1857
1733
  #else
1858
- if (abs_k == 1) {
1859
- u = COS_TABLE_0_FP64;
1860
- v = SIN_TABLE_0_FP64;
1861
- } else if (abs_k == 2) {
1862
- u = COS_TABLE_1_FP64;
1863
- v = SIN_TABLE_1_FP64;
1864
- } else if (abs_k == 3) {
1865
- u = COS_TABLE_2_FP64;
1866
- v = SIN_TABLE_2_FP64;
1867
- } else if (abs_k == 4) {
1868
- u = COS_TABLE_3_FP64;
1869
- v = SIN_TABLE_3_FP64;
1870
- }
1734
+ if (abs_k == 1) {
1735
+ u = COS_TABLE_0_FP64;
1736
+ v = SIN_TABLE_0_FP64;
1737
+ } else if (abs_k == 2) {
1738
+ u = COS_TABLE_1_FP64;
1739
+ v = SIN_TABLE_1_FP64;
1740
+ } else if (abs_k == 3) {
1741
+ u = COS_TABLE_2_FP64;
1742
+ v = SIN_TABLE_2_FP64;
1743
+ } else if (abs_k == 4) {
1744
+ u = COS_TABLE_3_FP64;
1745
+ v = SIN_TABLE_3_FP64;
1746
+ }
1871
1747
  #endif
1872
-
1873
- vec2 sin_t, cos_t;
1874
- sincos_taylor_fp64(t, sin_t, cos_t);
1875
-
1876
-
1877
-
1878
- vec2 result = vec2(0.0, 0.0);
1879
- if (j == 0) {
1880
- if (k > 0) {
1881
- result = sum_fp64(mul_fp64(u, sin_t), mul_fp64(v, cos_t));
1882
- } else {
1883
- result = sub_fp64(mul_fp64(u, sin_t), mul_fp64(v, cos_t));
1884
- }
1885
- } else if (j == 1) {
1886
- if (k > 0) {
1887
- result = sub_fp64(mul_fp64(u, cos_t), mul_fp64(v, sin_t));
1888
- } else {
1889
- result = sum_fp64(mul_fp64(u, cos_t), mul_fp64(v, sin_t));
1890
- }
1891
- } else if (j == -1) {
1892
- if (k > 0) {
1893
- result = sub_fp64(mul_fp64(v, sin_t), mul_fp64(u, cos_t));
1894
- } else {
1895
- result = -sum_fp64(mul_fp64(v, sin_t), mul_fp64(u, cos_t));
1896
- }
1897
- } else {
1898
- if (k > 0) {
1899
- result = -sum_fp64(mul_fp64(u, sin_t), mul_fp64(v, cos_t));
1900
- } else {
1901
- result = sub_fp64(mul_fp64(v, cos_t), mul_fp64(u, sin_t));
1902
- }
1903
- }
1904
-
1905
- return result;
1748
+ vec2 sin_t, cos_t;
1749
+ sincos_taylor_fp64(t, sin_t, cos_t);
1750
+ vec2 result = vec2(0.0, 0.0);
1751
+ if (j == 0) {
1752
+ if (k > 0) {
1753
+ result = sum_fp64(mul_fp64(u, sin_t), mul_fp64(v, cos_t));
1754
+ } else {
1755
+ result = sub_fp64(mul_fp64(u, sin_t), mul_fp64(v, cos_t));
1756
+ }
1757
+ } else if (j == 1) {
1758
+ if (k > 0) {
1759
+ result = sub_fp64(mul_fp64(u, cos_t), mul_fp64(v, sin_t));
1760
+ } else {
1761
+ result = sum_fp64(mul_fp64(u, cos_t), mul_fp64(v, sin_t));
1762
+ }
1763
+ } else if (j == -1) {
1764
+ if (k > 0) {
1765
+ result = sub_fp64(mul_fp64(v, sin_t), mul_fp64(u, cos_t));
1766
+ } else {
1767
+ result = -sum_fp64(mul_fp64(v, sin_t), mul_fp64(u, cos_t));
1768
+ }
1769
+ } else {
1770
+ if (k > 0) {
1771
+ result = -sum_fp64(mul_fp64(u, sin_t), mul_fp64(v, cos_t));
1772
+ } else {
1773
+ result = sub_fp64(mul_fp64(v, cos_t), mul_fp64(u, sin_t));
1774
+ }
1775
+ }
1776
+ return result;
1906
1777
  }
1907
-
1908
1778
  vec2 cos_fp64(vec2 a) {
1909
- if (a.x == 0.0 && a.y == 0.0) {
1910
- return vec2(1.0, 0.0);
1911
- }
1912
-
1913
- // 2pi range reduction
1914
- vec2 z = nint_fp64(div_fp64(a, TWO_PI_FP64));
1915
- vec2 r = sub_fp64(a, mul_fp64(TWO_PI_FP64, z));
1916
-
1917
- vec2 t;
1918
- float q = floor(r.x / PI_2_FP64.x + 0.5);
1919
- int j = int(q);
1920
-
1921
- if (j < -2 || j > 2) {
1922
- return vec2(0.0 / 0.0, 0.0 / 0.0);
1923
- }
1924
-
1925
- t = sub_fp64(r, mul_fp64(PI_2_FP64, vec2(q, 0.0)));
1926
-
1927
- q = floor(t.x / PI_16_FP64.x + 0.5);
1928
- int k = int(q);
1929
-
1930
- if (k == 0) {
1931
- if (j == 0) {
1932
- return cos_taylor_fp64(t);
1933
- } else if (j == 1) {
1934
- return -sin_taylor_fp64(t);
1935
- } else if (j == -1) {
1936
- return sin_taylor_fp64(t);
1937
- } else {
1938
- return -cos_taylor_fp64(t);
1939
- }
1940
- }
1941
-
1942
- int abs_k = int(abs(float(k)));
1943
-
1944
- if (abs_k > 4) {
1945
- return vec2(0.0 / 0.0, 0.0 / 0.0);
1946
- } else {
1947
- t = sub_fp64(t, mul_fp64(PI_16_FP64, vec2(q, 0.0)));
1948
- }
1949
-
1950
- vec2 u = vec2(0.0, 0.0);
1951
- vec2 v = vec2(0.0, 0.0);
1952
-
1779
+ if (a.x == 0.0 && a.y == 0.0) {
1780
+ return vec2(1.0, 0.0);
1781
+ }
1782
+ vec2 z = nint_fp64(div_fp64(a, TWO_PI_FP64));
1783
+ vec2 r = sub_fp64(a, mul_fp64(TWO_PI_FP64, z));
1784
+ vec2 t;
1785
+ float q = floor(r.x / PI_2_FP64.x + 0.5);
1786
+ int j = int(q);
1787
+ if (j < -2 || j > 2) {
1788
+ return vec2(0.0 / 0.0, 0.0 / 0.0);
1789
+ }
1790
+ t = sub_fp64(r, mul_fp64(PI_2_FP64, vec2(q, 0.0)));
1791
+ q = floor(t.x / PI_16_FP64.x + 0.5);
1792
+ int k = int(q);
1793
+ if (k == 0) {
1794
+ if (j == 0) {
1795
+ return cos_taylor_fp64(t);
1796
+ } else if (j == 1) {
1797
+ return -sin_taylor_fp64(t);
1798
+ } else if (j == -1) {
1799
+ return sin_taylor_fp64(t);
1800
+ } else {
1801
+ return -cos_taylor_fp64(t);
1802
+ }
1803
+ }
1804
+ int abs_k = int(abs(float(k)));
1805
+ if (abs_k > 4) {
1806
+ return vec2(0.0 / 0.0, 0.0 / 0.0);
1807
+ } else {
1808
+ t = sub_fp64(t, mul_fp64(PI_16_FP64, vec2(q, 0.0)));
1809
+ }
1810
+ vec2 u = vec2(0.0, 0.0);
1811
+ vec2 v = vec2(0.0, 0.0);
1953
1812
  #if defined(NVIDIA_FP64_WORKAROUND) || defined(INTEL_FP64_WORKAROUND)
1954
- if (abs(float(abs_k) - 1.0) < 0.5) {
1955
- u = COS_TABLE_0_FP64;
1956
- v = SIN_TABLE_0_FP64;
1957
- } else if (abs(float(abs_k) - 2.0) < 0.5) {
1958
- u = COS_TABLE_1_FP64;
1959
- v = SIN_TABLE_1_FP64;
1960
- } else if (abs(float(abs_k) - 3.0) < 0.5) {
1961
- u = COS_TABLE_2_FP64;
1962
- v = SIN_TABLE_2_FP64;
1963
- } else if (abs(float(abs_k) - 4.0) < 0.5) {
1964
- u = COS_TABLE_3_FP64;
1965
- v = SIN_TABLE_3_FP64;
1966
- }
1813
+ if (abs(float(abs_k) - 1.0) < 0.5) {
1814
+ u = COS_TABLE_0_FP64;
1815
+ v = SIN_TABLE_0_FP64;
1816
+ } else if (abs(float(abs_k) - 2.0) < 0.5) {
1817
+ u = COS_TABLE_1_FP64;
1818
+ v = SIN_TABLE_1_FP64;
1819
+ } else if (abs(float(abs_k) - 3.0) < 0.5) {
1820
+ u = COS_TABLE_2_FP64;
1821
+ v = SIN_TABLE_2_FP64;
1822
+ } else if (abs(float(abs_k) - 4.0) < 0.5) {
1823
+ u = COS_TABLE_3_FP64;
1824
+ v = SIN_TABLE_3_FP64;
1825
+ }
1967
1826
  #else
1968
- if (abs_k == 1) {
1969
- u = COS_TABLE_0_FP64;
1970
- v = SIN_TABLE_0_FP64;
1971
- } else if (abs_k == 2) {
1972
- u = COS_TABLE_1_FP64;
1973
- v = SIN_TABLE_1_FP64;
1974
- } else if (abs_k == 3) {
1975
- u = COS_TABLE_2_FP64;
1976
- v = SIN_TABLE_2_FP64;
1977
- } else if (abs_k == 4) {
1978
- u = COS_TABLE_3_FP64;
1979
- v = SIN_TABLE_3_FP64;
1980
- }
1827
+ if (abs_k == 1) {
1828
+ u = COS_TABLE_0_FP64;
1829
+ v = SIN_TABLE_0_FP64;
1830
+ } else if (abs_k == 2) {
1831
+ u = COS_TABLE_1_FP64;
1832
+ v = SIN_TABLE_1_FP64;
1833
+ } else if (abs_k == 3) {
1834
+ u = COS_TABLE_2_FP64;
1835
+ v = SIN_TABLE_2_FP64;
1836
+ } else if (abs_k == 4) {
1837
+ u = COS_TABLE_3_FP64;
1838
+ v = SIN_TABLE_3_FP64;
1839
+ }
1981
1840
  #endif
1982
-
1983
- vec2 sin_t, cos_t;
1984
- sincos_taylor_fp64(t, sin_t, cos_t);
1985
-
1986
- vec2 result = vec2(0.0, 0.0);
1987
- if (j == 0) {
1988
- if (k > 0) {
1989
- result = sub_fp64(mul_fp64(u, cos_t), mul_fp64(v, sin_t));
1990
- } else {
1991
- result = sum_fp64(mul_fp64(u, cos_t), mul_fp64(v, sin_t));
1992
- }
1993
- } else if (j == 1) {
1994
- if (k > 0) {
1995
- result = -sum_fp64(mul_fp64(u, sin_t), mul_fp64(v, cos_t));
1996
- } else {
1997
- result = sub_fp64(mul_fp64(v, cos_t), mul_fp64(u, sin_t));
1998
- }
1999
- } else if (j == -1) {
2000
- if (k > 0) {
2001
- result = sum_fp64(mul_fp64(u, sin_t), mul_fp64(v, cos_t));
2002
- } else {
2003
- result = sub_fp64(mul_fp64(u, sin_t), mul_fp64(v, cos_t));
2004
- }
2005
- } else {
2006
- if (k > 0) {
2007
- result = sub_fp64(mul_fp64(v, sin_t), mul_fp64(u, cos_t));
2008
- } else {
2009
- result = -sum_fp64(mul_fp64(u, cos_t), mul_fp64(v, sin_t));
2010
- }
2011
- }
2012
-
2013
- return result;
1841
+ vec2 sin_t, cos_t;
1842
+ sincos_taylor_fp64(t, sin_t, cos_t);
1843
+ vec2 result = vec2(0.0, 0.0);
1844
+ if (j == 0) {
1845
+ if (k > 0) {
1846
+ result = sub_fp64(mul_fp64(u, cos_t), mul_fp64(v, sin_t));
1847
+ } else {
1848
+ result = sum_fp64(mul_fp64(u, cos_t), mul_fp64(v, sin_t));
1849
+ }
1850
+ } else if (j == 1) {
1851
+ if (k > 0) {
1852
+ result = -sum_fp64(mul_fp64(u, sin_t), mul_fp64(v, cos_t));
1853
+ } else {
1854
+ result = sub_fp64(mul_fp64(v, cos_t), mul_fp64(u, sin_t));
1855
+ }
1856
+ } else if (j == -1) {
1857
+ if (k > 0) {
1858
+ result = sum_fp64(mul_fp64(u, sin_t), mul_fp64(v, cos_t));
1859
+ } else {
1860
+ result = sub_fp64(mul_fp64(u, sin_t), mul_fp64(v, cos_t));
1861
+ }
1862
+ } else {
1863
+ if (k > 0) {
1864
+ result = sub_fp64(mul_fp64(v, sin_t), mul_fp64(u, cos_t));
1865
+ } else {
1866
+ result = -sum_fp64(mul_fp64(u, cos_t), mul_fp64(v, sin_t));
1867
+ }
1868
+ }
1869
+ return result;
2014
1870
  }
2015
-
2016
1871
  vec2 tan_fp64(vec2 a) {
2017
- vec2 sin_a;
2018
- vec2 cos_a;
2019
-
2020
- if (a.x == 0.0 && a.y == 0.0) {
2021
- return vec2(0.0, 0.0);
2022
- }
2023
-
2024
- // 2pi range reduction
2025
- vec2 z = nint_fp64(div_fp64(a, TWO_PI_FP64));
2026
- vec2 r = sub_fp64(a, mul_fp64(TWO_PI_FP64, z));
2027
-
2028
- vec2 t;
2029
- float q = floor(r.x / PI_2_FP64.x + 0.5);
2030
- int j = int(q);
2031
-
2032
-
2033
- if (j < -2 || j > 2) {
2034
- return vec2(0.0 / 0.0, 0.0 / 0.0);
2035
- }
2036
-
2037
- t = sub_fp64(r, mul_fp64(PI_2_FP64, vec2(q, 0.0)));
2038
-
2039
- q = floor(t.x / PI_16_FP64.x + 0.5);
2040
- int k = int(q);
2041
- int abs_k = int(abs(float(k)));
2042
-
2043
- // We just can't get PI/16 * 3.0 very accurately.
2044
- // so let's just store it
2045
- if (abs_k > 4) {
2046
- return vec2(0.0 / 0.0, 0.0 / 0.0);
2047
- } else {
2048
- t = sub_fp64(t, mul_fp64(PI_16_FP64, vec2(q, 0.0)));
2049
- }
2050
-
2051
-
2052
- vec2 u = vec2(0.0, 0.0);
2053
- vec2 v = vec2(0.0, 0.0);
2054
-
2055
- vec2 sin_t, cos_t;
2056
- vec2 s, c;
2057
- sincos_taylor_fp64(t, sin_t, cos_t);
2058
-
2059
- if (k == 0) {
2060
- s = sin_t;
2061
- c = cos_t;
2062
- } else {
1872
+ vec2 sin_a;
1873
+ vec2 cos_a;
1874
+ if (a.x == 0.0 && a.y == 0.0) {
1875
+ return vec2(0.0, 0.0);
1876
+ }
1877
+ vec2 z = nint_fp64(div_fp64(a, TWO_PI_FP64));
1878
+ vec2 r = sub_fp64(a, mul_fp64(TWO_PI_FP64, z));
1879
+ vec2 t;
1880
+ float q = floor(r.x / PI_2_FP64.x + 0.5);
1881
+ int j = int(q);
1882
+ if (j < -2 || j > 2) {
1883
+ return vec2(0.0 / 0.0, 0.0 / 0.0);
1884
+ }
1885
+ t = sub_fp64(r, mul_fp64(PI_2_FP64, vec2(q, 0.0)));
1886
+ q = floor(t.x / PI_16_FP64.x + 0.5);
1887
+ int k = int(q);
1888
+ int abs_k = int(abs(float(k)));
1889
+ if (abs_k > 4) {
1890
+ return vec2(0.0 / 0.0, 0.0 / 0.0);
1891
+ } else {
1892
+ t = sub_fp64(t, mul_fp64(PI_16_FP64, vec2(q, 0.0)));
1893
+ }
1894
+ vec2 u = vec2(0.0, 0.0);
1895
+ vec2 v = vec2(0.0, 0.0);
1896
+ vec2 sin_t, cos_t;
1897
+ vec2 s, c;
1898
+ sincos_taylor_fp64(t, sin_t, cos_t);
1899
+ if (k == 0) {
1900
+ s = sin_t;
1901
+ c = cos_t;
1902
+ } else {
2063
1903
  #if defined(NVIDIA_FP64_WORKAROUND) || defined(INTEL_FP64_WORKAROUND)
2064
- if (abs(float(abs_k) - 1.0) < 0.5) {
2065
- u = COS_TABLE_0_FP64;
2066
- v = SIN_TABLE_0_FP64;
2067
- } else if (abs(float(abs_k) - 2.0) < 0.5) {
2068
- u = COS_TABLE_1_FP64;
2069
- v = SIN_TABLE_1_FP64;
2070
- } else if (abs(float(abs_k) - 3.0) < 0.5) {
2071
- u = COS_TABLE_2_FP64;
2072
- v = SIN_TABLE_2_FP64;
2073
- } else if (abs(float(abs_k) - 4.0) < 0.5) {
2074
- u = COS_TABLE_3_FP64;
2075
- v = SIN_TABLE_3_FP64;
2076
- }
1904
+ if (abs(float(abs_k) - 1.0) < 0.5) {
1905
+ u = COS_TABLE_0_FP64;
1906
+ v = SIN_TABLE_0_FP64;
1907
+ } else if (abs(float(abs_k) - 2.0) < 0.5) {
1908
+ u = COS_TABLE_1_FP64;
1909
+ v = SIN_TABLE_1_FP64;
1910
+ } else if (abs(float(abs_k) - 3.0) < 0.5) {
1911
+ u = COS_TABLE_2_FP64;
1912
+ v = SIN_TABLE_2_FP64;
1913
+ } else if (abs(float(abs_k) - 4.0) < 0.5) {
1914
+ u = COS_TABLE_3_FP64;
1915
+ v = SIN_TABLE_3_FP64;
1916
+ }
2077
1917
  #else
2078
- if (abs_k == 1) {
2079
- u = COS_TABLE_0_FP64;
2080
- v = SIN_TABLE_0_FP64;
2081
- } else if (abs_k == 2) {
2082
- u = COS_TABLE_1_FP64;
2083
- v = SIN_TABLE_1_FP64;
2084
- } else if (abs_k == 3) {
2085
- u = COS_TABLE_2_FP64;
2086
- v = SIN_TABLE_2_FP64;
2087
- } else if (abs_k == 4) {
2088
- u = COS_TABLE_3_FP64;
2089
- v = SIN_TABLE_3_FP64;
2090
- }
1918
+ if (abs_k == 1) {
1919
+ u = COS_TABLE_0_FP64;
1920
+ v = SIN_TABLE_0_FP64;
1921
+ } else if (abs_k == 2) {
1922
+ u = COS_TABLE_1_FP64;
1923
+ v = SIN_TABLE_1_FP64;
1924
+ } else if (abs_k == 3) {
1925
+ u = COS_TABLE_2_FP64;
1926
+ v = SIN_TABLE_2_FP64;
1927
+ } else if (abs_k == 4) {
1928
+ u = COS_TABLE_3_FP64;
1929
+ v = SIN_TABLE_3_FP64;
1930
+ }
2091
1931
  #endif
2092
- if (k > 0) {
2093
- s = sum_fp64(mul_fp64(u, sin_t), mul_fp64(v, cos_t));
2094
- c = sub_fp64(mul_fp64(u, cos_t), mul_fp64(v, sin_t));
2095
- } else {
2096
- s = sub_fp64(mul_fp64(u, sin_t), mul_fp64(v, cos_t));
2097
- c = sum_fp64(mul_fp64(u, cos_t), mul_fp64(v, sin_t));
2098
- }
2099
- }
2100
-
2101
- if (j == 0) {
2102
- sin_a = s;
2103
- cos_a = c;
2104
- } else if (j == 1) {
2105
- sin_a = c;
2106
- cos_a = -s;
2107
- } else if (j == -1) {
2108
- sin_a = -c;
2109
- cos_a = s;
2110
- } else {
2111
- sin_a = -s;
2112
- cos_a = -c;
2113
- }
2114
- return div_fp64(sin_a, cos_a);
1932
+ if (k > 0) {
1933
+ s = sum_fp64(mul_fp64(u, sin_t), mul_fp64(v, cos_t));
1934
+ c = sub_fp64(mul_fp64(u, cos_t), mul_fp64(v, sin_t));
1935
+ } else {
1936
+ s = sub_fp64(mul_fp64(u, sin_t), mul_fp64(v, cos_t));
1937
+ c = sum_fp64(mul_fp64(u, cos_t), mul_fp64(v, sin_t));
1938
+ }
1939
+ }
1940
+ if (j == 0) {
1941
+ sin_a = s;
1942
+ cos_a = c;
1943
+ } else if (j == 1) {
1944
+ sin_a = c;
1945
+ cos_a = -s;
1946
+ } else if (j == -1) {
1947
+ sin_a = -c;
1948
+ cos_a = s;
1949
+ } else {
1950
+ sin_a = -s;
1951
+ cos_a = -c;
1952
+ }
1953
+ return div_fp64(sin_a, cos_a);
2115
1954
  }
2116
-
2117
1955
  vec2 radians_fp64(vec2 degree) {
2118
- return mul_fp64(degree, PI_180_FP64);
1956
+ return mul_fp64(degree, PI_180_FP64);
2119
1957
  }
2120
-
2121
1958
  vec2 mix_fp64(vec2 a, vec2 b, float x) {
2122
- vec2 range = sub_fp64(b, a);
2123
- return sum_fp64(a, mul_fp64(range, vec2(x, 0.0)));
1959
+ vec2 range = sub_fp64(b, a);
1960
+ return sum_fp64(a, mul_fp64(range, vec2(x, 0.0)));
2124
1961
  }
2125
-
2126
- // Vector functions
2127
- // vec2 functions
2128
1962
  void vec2_sum_fp64(vec2 a[2], vec2 b[2], out vec2 out_val[2]) {
2129
- out_val[0] = sum_fp64(a[0], b[0]);
2130
- out_val[1] = sum_fp64(a[1], b[1]);
1963
+ out_val[0] = sum_fp64(a[0], b[0]);
1964
+ out_val[1] = sum_fp64(a[1], b[1]);
2131
1965
  }
2132
-
2133
1966
  void vec2_sub_fp64(vec2 a[2], vec2 b[2], out vec2 out_val[2]) {
2134
- out_val[0] = sub_fp64(a[0], b[0]);
2135
- out_val[1] = sub_fp64(a[1], b[1]);
1967
+ out_val[0] = sub_fp64(a[0], b[0]);
1968
+ out_val[1] = sub_fp64(a[1], b[1]);
2136
1969
  }
2137
-
2138
1970
  void vec2_mul_fp64(vec2 a[2], vec2 b[2], out vec2 out_val[2]) {
2139
- out_val[0] = mul_fp64(a[0], b[0]);
2140
- out_val[1] = mul_fp64(a[1], b[1]);
1971
+ out_val[0] = mul_fp64(a[0], b[0]);
1972
+ out_val[1] = mul_fp64(a[1], b[1]);
2141
1973
  }
2142
-
2143
1974
  void vec2_div_fp64(vec2 a[2], vec2 b[2], out vec2 out_val[2]) {
2144
- out_val[0] = div_fp64(a[0], b[0]);
2145
- out_val[1] = div_fp64(a[1], b[1]);
1975
+ out_val[0] = div_fp64(a[0], b[0]);
1976
+ out_val[1] = div_fp64(a[1], b[1]);
2146
1977
  }
2147
-
2148
1978
  void vec2_mix_fp64(vec2 x[2], vec2 y[2], float a, out vec2 out_val[2]) {
2149
- vec2 range[2];
2150
- vec2_sub_fp64(y, x, range);
2151
- vec2 portion[2];
2152
- portion[0] = range[0] * a;
2153
- portion[1] = range[1] * a;
2154
- vec2_sum_fp64(x, portion, out_val);
1979
+ vec2 range[2];
1980
+ vec2_sub_fp64(y, x, range);
1981
+ vec2 portion[2];
1982
+ portion[0] = range[0] * a;
1983
+ portion[1] = range[1] * a;
1984
+ vec2_sum_fp64(x, portion, out_val);
2155
1985
  }
2156
-
2157
1986
  vec2 vec2_length_fp64(vec2 x[2]) {
2158
- return sqrt_fp64(sum_fp64(mul_fp64(x[0], x[0]), mul_fp64(x[1], x[1])));
1987
+ return sqrt_fp64(sum_fp64(mul_fp64(x[0], x[0]), mul_fp64(x[1], x[1])));
2159
1988
  }
2160
-
2161
1989
  void vec2_normalize_fp64(vec2 x[2], out vec2 out_val[2]) {
2162
- vec2 length = vec2_length_fp64(x);
2163
- vec2 length_vec2[2];
2164
- length_vec2[0] = length;
2165
- length_vec2[1] = length;
2166
-
2167
- vec2_div_fp64(x, length_vec2, out_val);
1990
+ vec2 length = vec2_length_fp64(x);
1991
+ vec2 length_vec2[2];
1992
+ length_vec2[0] = length;
1993
+ length_vec2[1] = length;
1994
+ vec2_div_fp64(x, length_vec2, out_val);
2168
1995
  }
2169
-
2170
1996
  vec2 vec2_distance_fp64(vec2 x[2], vec2 y[2]) {
2171
- vec2 diff[2];
2172
- vec2_sub_fp64(x, y, diff);
2173
- return vec2_length_fp64(diff);
1997
+ vec2 diff[2];
1998
+ vec2_sub_fp64(x, y, diff);
1999
+ return vec2_length_fp64(diff);
2174
2000
  }
2175
-
2176
2001
  vec2 vec2_dot_fp64(vec2 a[2], vec2 b[2]) {
2177
- vec2 v[2];
2178
-
2179
- v[0] = mul_fp64(a[0], b[0]);
2180
- v[1] = mul_fp64(a[1], b[1]);
2181
-
2182
- return sum_fp64(v[0], v[1]);
2002
+ vec2 v[2];
2003
+ v[0] = mul_fp64(a[0], b[0]);
2004
+ v[1] = mul_fp64(a[1], b[1]);
2005
+ return sum_fp64(v[0], v[1]);
2183
2006
  }
2184
-
2185
- // vec3 functions
2186
2007
  void vec3_sub_fp64(vec2 a[3], vec2 b[3], out vec2 out_val[3]) {
2187
- for (int i = 0; i < 3; i++) {
2188
- out_val[i] = sum_fp64(a[i], b[i]);
2189
- }
2008
+ for (int i = 0; i < 3; i++) {
2009
+ out_val[i] = sum_fp64(a[i], b[i]);
2010
+ }
2190
2011
  }
2191
-
2192
2012
  void vec3_sum_fp64(vec2 a[3], vec2 b[3], out vec2 out_val[3]) {
2193
- for (int i = 0; i < 3; i++) {
2194
- out_val[i] = sum_fp64(a[i], b[i]);
2195
- }
2013
+ for (int i = 0; i < 3; i++) {
2014
+ out_val[i] = sum_fp64(a[i], b[i]);
2015
+ }
2196
2016
  }
2197
-
2198
2017
  vec2 vec3_length_fp64(vec2 x[3]) {
2199
- return sqrt_fp64(sum_fp64(sum_fp64(mul_fp64(x[0], x[0]), mul_fp64(x[1], x[1])),
2200
- mul_fp64(x[2], x[2])));
2018
+ return sqrt_fp64(sum_fp64(sum_fp64(mul_fp64(x[0], x[0]), mul_fp64(x[1], x[1])),
2019
+ mul_fp64(x[2], x[2])));
2201
2020
  }
2202
-
2203
2021
  vec2 vec3_distance_fp64(vec2 x[3], vec2 y[3]) {
2204
- vec2 diff[3];
2205
- vec3_sub_fp64(x, y, diff);
2206
- return vec3_length_fp64(diff);
2022
+ vec2 diff[3];
2023
+ vec3_sub_fp64(x, y, diff);
2024
+ return vec3_length_fp64(diff);
2207
2025
  }
2208
-
2209
- // vec4 functions
2210
2026
  void vec4_fp64(vec4 a, out vec2 out_val[4]) {
2211
- out_val[0].x = a[0];
2212
- out_val[0].y = 0.0;
2213
-
2214
- out_val[1].x = a[1];
2215
- out_val[1].y = 0.0;
2216
-
2217
- out_val[2].x = a[2];
2218
- out_val[2].y = 0.0;
2219
-
2220
- out_val[3].x = a[3];
2221
- out_val[3].y = 0.0;
2027
+ out_val[0].x = a[0];
2028
+ out_val[0].y = 0.0;
2029
+ out_val[1].x = a[1];
2030
+ out_val[1].y = 0.0;
2031
+ out_val[2].x = a[2];
2032
+ out_val[2].y = 0.0;
2033
+ out_val[3].x = a[3];
2034
+ out_val[3].y = 0.0;
2222
2035
  }
2223
-
2224
2036
  void vec4_scalar_mul_fp64(vec2 a[4], vec2 b, out vec2 out_val[4]) {
2225
- out_val[0] = mul_fp64(a[0], b);
2226
- out_val[1] = mul_fp64(a[1], b);
2227
- out_val[2] = mul_fp64(a[2], b);
2228
- out_val[3] = mul_fp64(a[3], b);
2037
+ out_val[0] = mul_fp64(a[0], b);
2038
+ out_val[1] = mul_fp64(a[1], b);
2039
+ out_val[2] = mul_fp64(a[2], b);
2040
+ out_val[3] = mul_fp64(a[3], b);
2229
2041
  }
2230
-
2231
2042
  void vec4_sum_fp64(vec2 a[4], vec2 b[4], out vec2 out_val[4]) {
2232
- for (int i = 0; i < 4; i++) {
2233
- out_val[i] = sum_fp64(a[i], b[i]);
2234
- }
2043
+ for (int i = 0; i < 4; i++) {
2044
+ out_val[i] = sum_fp64(a[i], b[i]);
2045
+ }
2235
2046
  }
2236
-
2237
2047
  void vec4_dot_fp64(vec2 a[4], vec2 b[4], out vec2 out_val) {
2238
- vec2 v[4];
2239
-
2240
- v[0] = mul_fp64(a[0], b[0]);
2241
- v[1] = mul_fp64(a[1], b[1]);
2242
- v[2] = mul_fp64(a[2], b[2]);
2243
- v[3] = mul_fp64(a[3], b[3]);
2244
-
2245
- out_val = sum_fp64(sum_fp64(v[0], v[1]), sum_fp64(v[2], v[3]));
2048
+ vec2 v[4];
2049
+ v[0] = mul_fp64(a[0], b[0]);
2050
+ v[1] = mul_fp64(a[1], b[1]);
2051
+ v[2] = mul_fp64(a[2], b[2]);
2052
+ v[3] = mul_fp64(a[3], b[3]);
2053
+ out_val = sum_fp64(sum_fp64(v[0], v[1]), sum_fp64(v[2], v[3]));
2246
2054
  }
2247
-
2248
2055
  void mat4_vec4_mul_fp64(vec2 b[16], vec2 a[4], out vec2 out_val[4]) {
2249
- vec2 tmp[4];
2250
-
2251
- for (int i = 0; i < 4; i++)
2252
- {
2253
- for (int j = 0; j < 4; j++)
2254
- {
2255
- tmp[j] = b[j + i * 4];
2256
- }
2257
- vec4_dot_fp64(a, tmp, out_val[i]);
2258
- }
2056
+ vec2 tmp[4];
2057
+ for (int i = 0; i < 4; i++)
2058
+ {
2059
+ for (int j = 0; j < 4; j++)
2060
+ {
2061
+ tmp[j] = b[j + i * 4];
2062
+ }
2063
+ vec4_dot_fp64(a, tmp, out_val[i]);
2064
+ }
2259
2065
  }
2260
2066
  `;
2261
2067
 
@@ -4315,7 +4121,8 @@ if ((terrain_mode == TERRAIN_MODE_USE_COVER) || (terrain_mode == TERRAIN_MODE_US
4315
4121
  bounds = heightMapBounds;
4316
4122
  } else if (terrainCover) {
4317
4123
  const isPicking = opts.picking?.isActive;
4318
- sampler = isPicking ? terrainCover.getPickingFramebuffer() : terrainCover.getRenderFramebuffer();
4124
+ const fbo = isPicking ? terrainCover.getPickingFramebuffer() : terrainCover.getRenderFramebuffer();
4125
+ sampler = fbo?.colorAttachments[0].texture;
4319
4126
  if (isPicking) {
4320
4127
  mode = TERRAIN_MODE.SKIP;
4321
4128
  }
@@ -4786,7 +4593,7 @@ if ((terrain_mode == TERRAIN_MODE_USE_COVER) || (terrain_mode == TERRAIN_MODE_US
4786
4593
  getModuleParameters(layer) {
4787
4594
  const { terrainDrawMode } = layer.state;
4788
4595
  return {
4789
- heightMap: this.heightMap?.getRenderFramebuffer(),
4596
+ heightMap: this.heightMap?.getRenderFramebuffer()?.colorAttachments[0].texture || null,
4790
4597
  heightMapBounds: this.heightMap?.bounds,
4791
4598
  dummyHeightMap: this.dummyHeightMap,
4792
4599
  terrainCover: this.isDrapingEnabled ? this.terrainCovers.get(layer.id) : null,