Blender V5.0
hash.h File Reference
#include "util/defines.h"
#include "util/math.h"
#include "util/types.h"

Go to the source code of this file.

Macros

#define rot(x, k)
#define mix(a, b, c)
#define final(a, b, c)

Functions

CCL_NAMESPACE_BEGIN ccl_device_forceinline float uint_to_float_excl (const uint n)
ccl_device_forceinline float uint_to_float_incl (const uint n)
ccl_ignore_integer_overflow ccl_device_inline int2 hash_pcg2d_i (int2 v)
ccl_ignore_integer_overflow ccl_device_inline int3 hash_pcg3d_i (int3 v)
ccl_ignore_integer_overflow ccl_device_inline int4 hash_pcg4d_i (int4 v)
ccl_device_inline uint hash_uint (const uint kx)
ccl_device_inline uint hash_uint2 (const uint kx, const uint ky)
ccl_device_inline uint hash_uint3 (const uint kx, const uint ky, const uint kz)
ccl_device_inline uint hash_uint4 (const uint kx, const uint ky, const uint kz, const uint kw)
ccl_device_inline float hash_uint_to_float (const uint kx)
ccl_device_inline float hash_uint2_to_float (const uint kx, const uint ky)
ccl_device_inline float hash_uint3_to_float (const uint kx, const uint ky, const uint kz)
ccl_device_inline float hash_uint4_to_float (const uint kx, const uint ky, const uint kz, const uint kw)
ccl_device_inline float hash_float_to_float (const float k)
ccl_device_inline float hash_float2_to_float (const float2 k)
ccl_device_inline float hash_float3_to_float (const float3 k)
ccl_device_inline float hash_float4_to_float (const float4 k)
ccl_device_inline float2 hash_int2_to_float2 (const int2 k)
ccl_device_inline float3 hash_int3_to_float3 (const int3 k)
ccl_device_inline float4 hash_int4_to_float4 (const int4 k)
ccl_device_inline float3 hash_int2_to_float3 (const int2 k)
ccl_device_inline float3 hash_int4_to_float3 (const int4 k)
ccl_device_inline float2 hash_float2_to_float2 (const float2 k)
ccl_device_inline float3 hash_float3_to_float3 (const float3 k)
ccl_device_inline float4 hash_float4_to_float4 (const float4 k)
ccl_device_inline float3 hash_float_to_float3 (const float k)
ccl_device_inline float3 hash_float2_to_float3 (const float2 k)
ccl_device_inline float3 hash_float4_to_float3 (const float4 k)
ccl_device_inline float2 hash_float_to_float2 (const float k)
ccl_device_inline float2 hash_float3_to_float2 (const float3 k)
ccl_device_inline float2 hash_float4_to_float2 (const float4 k)
ccl_device_inline uint hash_hp_uint (uint i)
ccl_device_inline uint hash_hp_seeded_uint (const uint i, uint seed)
ccl_device_inline float hash_hp_float (const uint i)
ccl_device_inline float hash_hp_seeded_float (const uint i, const uint seed)
ccl_device_inline uint hash_wang_seeded_uint (uint i, const uint seed)
ccl_device_inline float hash_wang_seeded_float (const uint i, const uint seed)
ccl_device_inline uint hash_shuffle_uint (uint i, const uint length, const uint seed)
ccl_device_inline uint hash_iqnt2d (const uint x, const uint y)
static uint hash_string (const char *str)

Macro Definition Documentation

◆ final

#define final ( a,
b,
c )
Value:
{ \
c ^= b; \
c -= rot(b, 14); \
a ^= c; \
a -= rot(c, 11); \
b ^= a; \
b -= rot(a, 25); \
c ^= b; \
c -= rot(b, 16); \
a ^= c; \
a -= rot(c, 4); \
b ^= a; \
b -= rot(a, 14); \
c ^= b; \
c -= rot(b, 24); \
} \
((void)0)
#define rot(x, k)

Definition at line 107 of file hash.h.

◆ mix

#define mix ( a,
b,
c )
Value:
{ \
a -= c; \
a ^= rot(c, 4); \
c += b; \
b -= a; \
b ^= rot(a, 6); \
a += c; \
c -= b; \
c ^= rot(b, 8); \
b += a; \
a -= c; \
a ^= rot(c, 16); \
c += b; \
b -= a; \
b ^= rot(a, 19); \
a += c; \
c -= b; \
c ^= rot(b, 4); \
b += a; \
} \
((void)0)

Definition at line 84 of file hash.h.

Referenced by hash_uint4().

◆ rot

#define rot ( x,
k )
Value:
(((x) << (k)) | ((x) >> (32 - (k))))

Definition at line 82 of file hash.h.

Function Documentation

◆ hash_float2_to_float()

◆ hash_float2_to_float2()

ccl_device_inline float2 hash_float2_to_float2 ( const float2 k)

◆ hash_float2_to_float3()

ccl_device_inline float3 hash_float2_to_float3 ( const float2 k)

◆ hash_float3_to_float()

◆ hash_float3_to_float2()

ccl_device_inline float2 hash_float3_to_float2 ( const float3 k)

◆ hash_float3_to_float3()

◆ hash_float4_to_float()

◆ hash_float4_to_float2()

ccl_device_inline float2 hash_float4_to_float2 ( const float4 k)

◆ hash_float4_to_float3()

◆ hash_float4_to_float4()

ccl_device_inline float4 hash_float4_to_float4 ( const float4 k)

◆ hash_float_to_float()

ccl_device_inline float hash_float_to_float ( const float k)

Definition at line 217 of file hash.h.

References __float_as_uint, ccl_device_inline, and hash_uint_to_float().

Referenced by hash_float_to_float2(), and hash_float_to_float3().

◆ hash_float_to_float2()

ccl_device_inline float2 hash_float_to_float2 ( const float k)

Definition at line 323 of file hash.h.

References ccl_device_inline, hash_float2_to_float(), hash_float_to_float(), and make_float2.

◆ hash_float_to_float3()

◆ hash_hp_float()

ccl_device_inline float hash_hp_float ( const uint i)

Definition at line 537 of file hash.h.

References ccl_device_inline, hash_hp_uint(), i, and uint_to_float_excl().

Referenced by tabulated_sobol_generate_4D().

◆ hash_hp_seeded_float()

ccl_device_inline float hash_hp_seeded_float ( const uint i,
const uint seed )

Definition at line 543 of file hash.h.

References ccl_device_inline, hash_hp_seeded_uint(), i, seed, and uint_to_float_excl().

◆ hash_hp_seeded_uint()

ccl_device_inline uint hash_hp_seeded_uint ( const uint i,
uint seed )

◆ hash_hp_uint()

◆ hash_int2_to_float2()

◆ hash_int2_to_float3()

ccl_device_inline float3 hash_int2_to_float3 ( const int2 k)

Definition at line 262 of file hash.h.

References ccl_device_inline, hash_int3_to_float3(), make_int3(), int2::x, and int2::y.

Referenced by voronoi_f1(), voronoi_f2(), and voronoi_smooth_f1().

◆ hash_int3_to_float3()

◆ hash_int4_to_float3()

ccl_device_inline float3 hash_int4_to_float3 ( const int4 k)

Definition at line 267 of file hash.h.

References ccl_device_inline, hash_int4_to_float4(), and make_float3().

Referenced by voronoi_f1(), voronoi_f2(), and voronoi_smooth_f1().

◆ hash_int4_to_float4()

◆ hash_iqnt2d()

ccl_device_inline uint hash_iqnt2d ( const uint x,
const uint y )

2D hash recommended from "Hash Functions for GPU Rendering" JCGT Vol. 9, No. 3, 2020 See https://www.shadertoy.com/view/4tXyWN and https://www.shadertoy.com/view/XlGcRh http://www.jcgt.org/published/0009/03/02/paper.pdf

Definition at line 625 of file hash.h.

References ccl_device_inline, x, and y.

Referenced by path_rng_pixel_init().

◆ hash_pcg2d_i()

Definition at line 39 of file hash.h.

References ccl_device_inline, ccl_ignore_integer_overflow, make_int2(), and v.

Referenced by hash_int2_to_float2().

◆ hash_pcg3d_i()

Definition at line 50 of file hash.h.

References ccl_device_inline, ccl_ignore_integer_overflow, make_int3(), and v.

Referenced by hash_int3_to_float3().

◆ hash_pcg4d_i()

Definition at line 63 of file hash.h.

References ccl_device_inline, ccl_ignore_integer_overflow, make_int4(), and v.

Referenced by hash_int4_to_float4().

◆ hash_shuffle_uint()

ccl_device_inline uint hash_shuffle_uint ( uint i,
const uint length,
const uint seed )

Definition at line 591 of file hash.h.

References ccl_device_inline, count_leading_zeros(), i, length(), mask(), and seed.

Referenced by tabulated_sobol_shuffled_sample_index().

◆ hash_string()

uint hash_string ( const char * str)
inlinestatic

Definition at line 637 of file hash.h.

References i, and str.

Referenced by LightManager::add_ies(), and GeometryManager::create_volume_mesh().

◆ hash_uint()

ccl_device_inline uint hash_uint ( const uint kx)

Definition at line 126 of file hash.h.

References b, and ccl_device_inline.

Referenced by Integrator::device_update(), hash_uint_to_float(), integrator_init_from_bake(), and perlin_1d().

◆ hash_uint2()

◆ hash_uint2_to_float()

◆ hash_uint3()

ccl_device_inline uint hash_uint3 ( const uint kx,
const uint ky,
const uint kz )

Definition at line 153 of file hash.h.

References b, and ccl_device_inline.

Referenced by hash_uint3_to_float(), lcg_state_init(), and perlin_3d().

◆ hash_uint3_to_float()

ccl_device_inline float hash_uint3_to_float ( const uint kx,
const uint ky,
const uint kz )

Definition at line 202 of file hash.h.

References ccl_device_inline, hash_uint3(), and uint_to_float_incl().

Referenced by hash_float3_to_float().

◆ hash_uint4()

ccl_device_inline uint hash_uint4 ( const uint kx,
const uint ky,
const uint kz,
const uint kw )

Definition at line 168 of file hash.h.

References b, ccl_device_inline, and mix.

Referenced by hash_uint4_to_float(), and perlin_4d().

◆ hash_uint4_to_float()

ccl_device_inline float hash_uint4_to_float ( const uint kx,
const uint ky,
const uint kz,
const uint kw )

Definition at line 207 of file hash.h.

References ccl_device_inline, hash_uint4(), and uint_to_float_incl().

Referenced by hash_float4_to_float().

◆ hash_uint_to_float()

◆ hash_wang_seeded_float()

◆ hash_wang_seeded_uint()

ccl_device_inline uint hash_wang_seeded_uint ( uint i,
const uint seed )

Definition at line 557 of file hash.h.

References ccl_device_inline, i, and seed.

Referenced by hash_wang_seeded_float(), and tabulated_sobol_shuffled_sample_index().

◆ uint_to_float_excl()

CCL_NAMESPACE_BEGIN ccl_device_forceinline float uint_to_float_excl ( const uint n)

Definition at line 14 of file hash.h.

References ccl_device_forceinline.

Referenced by hash_hp_float(), hash_hp_seeded_float(), hash_wang_seeded_float(), and sobol_burley().

◆ uint_to_float_incl()

ccl_device_forceinline float uint_to_float_incl ( const uint n)