Arty
hash.h
1 #ifndef HASH_H
2 #define HASH_H
3 
5 inline uint32_t bernstein_init() { return 5381; }
6 
8 inline uint32_t bernstein_hash(uint32_t h, uint32_t d) {
9  h = (h * 33) ^ ( d & 0xFF);
10  h = (h * 33) ^ ((d >> 8) & 0xFF);
11  h = (h * 33) ^ ((d >> 16) & 0xFF);
12  h = (h * 33) ^ ((d >> 24) & 0xFF);
13  return h;
14 }
15 
17 inline uint32_t fnv_init() { return 0x811C9DC5; }
18 
20 inline uint32_t fnv_hash(uint32_t h, uint32_t d) {
21  h = (h * 16777619) ^ ( d & 0xFF);
22  h = (h * 16777619) ^ ((d >> 8) & 0xFF);
23  h = (h * 16777619) ^ ((d >> 16) & 0xFF);
24  h = (h * 16777619) ^ ((d >> 24) & 0xFF);
25  return h;
26 }
27 
29 inline uint32_t sampler_seed(uint32_t pixel, uint32_t iter) {
30  return fnv_hash(fnv_hash(fnv_init(), pixel), iter);
31 }
32 
33 #endif // HASH_H