-static inline void combine_two_samples(float w1, float w2, float *offset, float *total_weight)
-{
- assert(w1 * w2 >= 0.0f); // Should not have differing signs.
- if (fabs(w1 + w2) < 1e-6) {
- *offset = 0.5f;
- *total_weight = 0.0f;
- } else {
- *offset = w2 / (w1 + w2);
- *total_weight = w1 + w2;
- }
- assert(*offset >= 0.0f);
- assert(*offset <= 1.0f);
-}
+//
+// Note that since the GPU might have limited precision in its linear
+// interpolation, the effective weights might be different from the ones you
+// asked for. sum_sq_error, if not NULL, will contain the sum of the
+// (estimated) squared errors of the two weights.
+void combine_two_samples(float w1, float w2, float *offset, float *total_weight, float *sum_sq_error);