Fix T101562: GPU: Update fmod to match Cycles/OSL behavior

Implementation from:
https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/blob/main/src/include/OSL/dual.h#L1283
https://github.com/OpenImageIO/oiio/blob/master/src/include/OpenImageIO/fmath.h#L1605

Reviewed By: fclem

Maniphest Tasks: T101562

Differential Revision: https://developer.blender.org/D16497
This commit is contained in:
Miguel Pozo 2022-11-15 13:04:47 +01:00
parent a968f1b9b3
commit 21eeedfc60
Notes: blender-bot 2023-02-14 06:17:14 +01:00
Referenced by issue #101562, 7 mod 7 in Eevee Math Node return an incorrect value
1 changed files with 6 additions and 3 deletions

View File

@ -5,11 +5,14 @@ float safe_divide(float a, float b)
return (b != 0.0) ? a / b : 0.0;
}
/* fmod function compatible with OSL using nvidia reference example. */
/* fmod function compatible with OSL (copy from OSL/dual.h) */
float compatible_fmod(float a, float b)
{
float c = (b != 0.0) ? fract(abs(a / b)) * abs(b) : 0.0;
return (a < 0.0) ? -c : c;
if (b != 0.0f) {
int N = int(a / b);
return a - N * b;
}
return 0.0f;
}
float compatible_pow(float x, float y)