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;
64 return (
float)(result >> 8) * 0x1.0p-24f;
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);
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));
133 const float4
mu,
const float4
param,
#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:235
const int t
Definition iop_profile.h:225
float *const restrict const size_t k
Definition luminance_mask.h:78
const float uint32_t state[4]
Definition src/develop/noise_generator.h:72
const float sigma
Definition src/develop/noise_generator.h:71
const float const float param
Definition src/develop/noise_generator.h:108
return noise *sigma mu
Definition src/develop/noise_generator.h:89
const float u2
Definition src/develop/noise_generator.h:86
const float r
Definition src/develop/noise_generator.h:101
const float const int flip
Definition src/develop/noise_generator.h:78
const float noise
Definition src/develop/noise_generator.h:87
unsigned int uint
Definition strptime.c:74