30static inline unsigned int splitmix32(
const unsigned long seed)
34 unsigned long result = (seed ^ (seed >> 33)) * 0x62a9d9ed799705f5ul;
35 result = (result ^ (result >> 28)) * 0xcb24d0a5c88c35b3ul;
36 return (
unsigned int)(result >> 32);
30static inline unsigned int splitmix32(
const unsigned long seed) {
…}
41static inline unsigned rol32(
const unsigned int x,
const int k)
43 return (x << k) | (x >> (32 - k));
41static inline unsigned rol32(
const unsigned int x,
const int k) {
…}
51 const unsigned int result = state[0] + state[3];
52 const unsigned int t = state[1] << 9;
60 state[3] =
rol32(state[3], 11);
62 return (
float)(result >> 8) * 0x1.0p-24f;
69 return mu + 2.0f * (noise - 0.5f) * sigma;
90 u1 = fmax(u1, FLT_MIN);
92 const float4
flip = { 1.0f, 0.0f, 1.0f, 0.0f };
93 const float4 flip_comp = { 0.0f, 1.0f, 0.0f, 0.0f };
96 const float4 noise =
flip * native_sqrt(-2.0f * native_log(u1)) * native_cos(2.f *
M_PI_F * u2) +
97 flip_comp * native_sqrt(-2.0f * native_log(u1)) * native_sin(2.f *
M_PI_F * u2);
98 return noise * sigma + mu;
115 u1 = fmax(u1, (float4)FLT_MIN);
117 const float4
flip = { 1.0f, 0.0f, 1.0f, 0.0f };
118 const float4 flip_comp = { 0.0f, 1.0f, 0.0f, 0.0f };
121 const float4 noise =
flip * native_sqrt(-2.0f * native_log(u1)) * native_cos(2.f *
M_PI_F * u2) +
122 flip_comp * native_sqrt(-2.0f * native_log(u1)) * native_sin(2.f *
M_PI_F * u2);
125 const float4 r = noise * sigma + 2.0f * native_sqrt(fmax(mu + (3.f / 8.f), 0.0f));
126 return ((r * r - sigma * sigma) / (4.f)) - (3.f / 8.f);
131 const float4 mu,
const float4 param,
#define M_PI_F
Definition data/kernels/common.h:32
dt_noise_distribution_t
Definition data/kernels/noise_generator.h:23
@ DT_NOISE_GAUSSIAN
Definition data/kernels/noise_generator.h:25
@ DT_NOISE_POISSONIAN
Definition data/kernels/noise_generator.h:26
@ DT_NOISE_UNIFORM
Definition data/kernels/noise_generator.h:24
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:130
static unsigned rol32(const unsigned int x, const int k)
Definition data/kernels/noise_generator.h:41
static unsigned int splitmix32(const unsigned long seed)
Definition data/kernels/noise_generator.h:30
static float4 uniform_noise_simd(const float4 mu, const float4 sigma, uint state[4])
Definition data/kernels/noise_generator.h:66
static float4 poisson_noise_simd(const float4 mu, const float4 sigma, uint state[4])
Definition data/kernels/noise_generator.h:102
static float4 gaussian_noise_simd(const float4 mu, const float4 sigma, uint state[4])
Definition data/kernels/noise_generator.h:73
static float xoshiro128plus(uint state[4])
Definition data/kernels/noise_generator.h:47
static void flip(float *x, float *y)
Definition lightroom.c:1035
unsigned int uint
Definition strptime.c:70