32static inline unsigned int splitmix32(
const unsigned long seed)
36 unsigned long result = (seed ^ (seed >> 33)) * 0x62a9d9ed799705f5ul;
37 result = (result ^ (result >> 28)) * 0xcb24d0a5c88c35b3ul;
38 return (
unsigned int)(result >> 32);
43static inline unsigned rol32(
const unsigned int x,
const int k)
45 return (
x << k) | (
x >> (32 - k));
53 const unsigned int result = state[0] + state[3];
54 const unsigned int t = state[1] << 9;
62 state[3] =
rol32(state[3], 11);
64 return (
float)(result >> 8) * 0x1.0p-24f;
71 return mu + 2.0f * (noise - 0.5f) * sigma;
92 u1 = fmax(u1, FLT_MIN);
94 const float4
flip = { 1.0f, 0.0f, 1.0f, 0.0f };
95 const float4 flip_comp = { 0.0f, 1.0f, 0.0f, 0.0f };
98 const float4 noise =
flip * native_sqrt(-2.0f * native_log(u1)) * native_cos(2.f *
M_PI_F * u2) +
99 flip_comp * native_sqrt(-2.0f * native_log(u1)) * native_sin(2.f *
M_PI_F * u2);
100 return noise * sigma + mu;
117 u1 = fmax(u1, (float4)FLT_MIN);
119 const float4
flip = { 1.0f, 0.0f, 1.0f, 0.0f };
120 const float4 flip_comp = { 0.0f, 1.0f, 0.0f, 0.0f };
123 const float4 noise =
flip * native_sqrt(-2.0f * native_log(u1)) * native_cos(2.f *
M_PI_F * u2) +
124 flip_comp * native_sqrt(-2.0f * native_log(u1)) * native_sin(2.f *
M_PI_F * u2);
127 const float4
r = noise * sigma + 2.0f * native_sqrt(fmax(mu + (3.f / 8.f), 0.0f));
128 return ((
r *
r - sigma * sigma) / (4.f)) - (3.f / 8.f);
133 const float4 mu,
const float4 param,
const float r
Definition colorspaces_inline_conversions.h:1324
#define M_PI_F
Definition data/kernels/common.h:36
dt_noise_distribution_t
Definition data/kernels/noise_generator.h:25
@ DT_NOISE_GAUSSIAN
Definition data/kernels/noise_generator.h:27
@ DT_NOISE_POISSONIAN
Definition data/kernels/noise_generator.h:28
@ DT_NOISE_UNIFORM
Definition data/kernels/noise_generator.h:26
static float4 dt_noise_generator_simd(const dt_noise_distribution_t distribution, const float4 mu, const float4 param, uint state[4])
Definition data/kernels/noise_generator.h:132
static unsigned rol32(const unsigned int x, const int k)
Definition data/kernels/noise_generator.h:43
static unsigned int splitmix32(const unsigned long seed)
Definition data/kernels/noise_generator.h:32
static float4 uniform_noise_simd(const float4 mu, const float4 sigma, uint state[4])
Definition data/kernels/noise_generator.h:68
static float4 poisson_noise_simd(const float4 mu, const float4 sigma, uint state[4])
Definition data/kernels/noise_generator.h:104
static float4 gaussian_noise_simd(const float4 mu, const float4 sigma, uint state[4])
Definition data/kernels/noise_generator.h:75
static float xoshiro128plus(uint state[4])
Definition data/kernels/noise_generator.h:49
static const float x
Definition iop_profile.h:239
const int t
Definition iop_profile.h:227
static void flip(float *x, float *y)
Definition lightroom.c:1015
unsigned int uint
Definition strptime.c:73