For a noise shader I'm looking for a pseudo random number algorithm with 3d vector argument, i.e.,
for every integer vector it returns a value in [0,1].
It should be as fast as possible without producing visual artifacts and giving the same results on every GPU.
Two variants (pseudo code) I found are
   rand1(vec3 (x,y,z)){
       return xorshift32(x ^ xorshift32(y ^ xorshift32(z)));
   }
which already uses 20 arithmetic operations and still has to be casted and normalized and
   rand2(vec3 v){
       return fract(sin(dot(v, vec3(12.9898, 78.233, ?))) * 43758.5453);
   };
which might be faster but uses sin causing precision problems and different results on different GPU's.
Do you know any other algorithms requiring less arithmetic operations? Thanks in advance.
Edit: Another standard PRNG is XORWOW as implemented in C as
xorwow() {
    int x = 123456789, y = 362436069, z = 521288629, w = 88675123, v = 5783321, d = 6615241;
    int t = (x ^ (x >> 2));
    x = y;
    y = z;
    z = w;
    w = v;
    v = (v ^ (v << 4)) ^ (t ^ (t << 1));
    return (d += 362437) + v;
}
Can we rewrite it to fit in our context?
