Skip to content

Instantly share code, notes, and snippets.

@hube12
Created February 16, 2020 16:58
Show Gist options
  • Save hube12/b1a171028eafe2d386ed7e334f06ab32 to your computer and use it in GitHub Desktop.
Save hube12/b1a171028eafe2d386ed7e334f06ab32 to your computer and use it in GitHub Desktop.
#include <jrand.cl>
inline uint next(unsigned long* seed, int bits) {
*seed = (*seed * 0x5DEECE66DUL + 0xBUL) & ((1UL << 48) - 1);
return *seed >> (48 - bits);
}
__kernel void start(ulong offset, ulong stride, __global ulong *seeds, __global ushort *ret) {
size_t id = get_global_id(0);
uchar max_count = 0;
uchar max_last = 0;
ulong seed_base = (offset + id) * stride;
for (ulong i = 0; i < stride; i++) {
uchar count = 0;
uchar last = 0;
ulong worldSeed = seed_base | i;
ulong seed = worldSeed;
if(seed >> 40 != 14)continue;
unsigned long tempSeed = (seed * 21586261248413UL + 164331561754775UL) & 281474976710655UL;
if(next(&tempSeed, 4) != 6)continue;
if(next(&tempSeed, 4) != 9)continue;
if(next(&seed, 1) != 1)continue;
if(next(&seed, 1) != 1)continue;
if(next(&seed, 2) != 0)continue;
if(next(&seed, 2) == 0)continue;
if(next(&seed, 2) == 0)continue;
if(next(&seed, 2) == 0)continue;
if(next(&seed, 2) == 0)continue;
if(next(&seed, 2) == 0)continue;
if(next(&seed, 2) == 0)continue;
if(next(&seed, 2) != 0)continue;
if(next(&seed, 2) == 0)continue;
if(next(&seed, 2) == 0)continue;
if(next(&seed, 2) == 0)continue;
if(next(&seed, 2) == 0)continue;
if(next(&seed, 2) == 0)continue;
if(next(&seed, 2) == 0)continue;
if(next(&seed, 2) != 0)continue;
if(next(&seed, 2) == 0)continue;
if(next(&seed, 2) == 0)continue;
if(next(&seed, 2) == 0)continue;
if(next(&seed, 2) == 0)continue;
if(next(&seed, 2) == 0)continue;
if(next(&seed, 2) == 0)continue;
if(next(&seed, 2) == 0)continue;
if(next(&seed, 2) != 0)continue;
if(next(&seed, 2) == 0)continue;
if(next(&seed, 2) == 0)continue;
if(next(&seed, 2) == 0)continue;
if(next(&seed, 2) == 0)continue;
if(next(&seed, 2) == 0)continue;
if(next(&seed, 2) != 0)continue;
if(next(&seed, 2) == 0)continue;
if(next(&seed, 2) == 0)continue;
if(next(&seed, 2) == 0)continue;
if(next(&seed, 2) == 0)continue;
if(next(&seed, 2) == 0)continue;
if(next(&seed, 2) == 0)continue;
if(next(&seed, 2) != 0)continue;
if(next(&seed, 2) == 0)continue;
if(next(&seed, 2) == 0)continue;
if(next(&seed, 2) != 0)continue;
if(next(&seed, 2) == 0)continue;
seed = (seed * 25214903917UL + 11UL) & 281474976710655UL;
if(next(&seed, 2) == 0)continue;
if(next(&seed, 2) == 0)continue;
if(next(&seed, 2) != 0)continue;
if(next(&seed, 2) == 0)continue;
if(next(&seed, 2) != 0)continue;
if(next(&seed, 2) != 0)continue;
if(next(&seed, 2) == 0)continue;
if(next(&seed, 2) != 0)continue;
if(next(&seed, 2) != 0)continue;
if(next(&seed, 2) != 0)continue;
if(next(&seed, 2) == 0)continue;
if(next(&seed, 2) == 0)continue;
if(next(&seed, 2) == 0)continue;
if(next(&seed, 2) == 0)continue;
if(next(&seed, 2) != 0)continue;
if(next(&seed, 2) == 0)continue;
if(next(&seed, 2) == 0)continue;
if(next(&seed, 2) == 0)continue;
if(next(&seed, 2) == 0)continue;
if(next(&seed, 2) == 0)continue;
if(next(&seed, 2) == 0)continue;
if(next(&seed, 2) == 0)continue;
if(next(&seed, 2) != 0)continue;
if(next(&seed, 2) == 0)continue;
if(next(&seed, 2) == 0)continue;
if(next(&seed, 2) == 0)continue;
if(next(&seed, 2) != 0)continue;
if(next(&seed, 2) == 0)continue;
if(next(&seed, 2) == 0)continue;
if(next(&seed, 2) == 0)continue;
if(next(&seed, 2) != 0)continue;
if(next(&seed, 2) == 0)continue;
if(next(&seed, 2) == 0)continue;
if(next(&seed, 2) != 0)continue;
if(next(&seed, 2) == 0)continue;
if(next(&seed, 2) == 0)continue;
if(next(&seed, 2) == 0)continue;
if(next(&seed, 2) == 0)continue;
if(next(&seed, 2) != 0)continue;
if(next(&seed, 2) == 0)continue;
max_count++;
seeds[id] = worldSeed;
}
ret[id] = (max_count << 8) | max_last;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment