File tree Expand file tree Collapse file tree
apps/typegpu-docs/tests/individual-example-tests
packages/typegpu-noise/src Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -200,10 +200,21 @@ describe('uniformity test example', () => {
200200
201201 @group(0) @binding(0) var<uniform> configUniform: Config;
202202
203+ fn hash(v: u32) -> u32 {
204+ var x = (v ^ (v >> 17u));
205+ x *= 3982152891u;
206+ x ^= (x >> 11u);
207+ x *= 2890668881u;
208+ x ^= (x >> 15u);
209+ x *= 830770091u;
210+ x ^= (x >> 14u);
211+ return x;
212+ }
213+
203214 var<private> seed: vec2u;
204215
205216 fn seed2(value: vec2f) {
206- seed = vec2u(value);
217+ seed = vec2u(hash(u32( value.x)), hash(u32(value.y)) );
207218 }
208219
209220 fn randSeed2(seed: vec2f) {
@@ -218,12 +229,13 @@ describe('uniformity test example', () => {
218229 return ((x << k) | (x >> (32u - k)));
219230 }
220231
221- fn next() {
232+ fn next() -> u32 {
222233 let s0 = seed[0i];
223234 var s1 = seed[1i];
224235 s1 ^= s0;
225236 seed[0i] = ((rotl(s0, 26u) ^ s1) ^ (s1 << 9u));
226237 seed[1i] = rotl(s1, 13u);
238+ return (rotl((seed[0i] * 2654435771u), 5u) * 5u);
227239 }
228240
229241 fn u32To01Float(value: u32) -> f32 {
@@ -234,8 +246,7 @@ describe('uniformity test example', () => {
234246 }
235247
236248 fn sample() -> f32 {
237- next();
238- let r = seed.x;
249+ let r = next();
239250 return u32To01Float(r);
240251 }
241252
Original file line number Diff line number Diff line change @@ -63,24 +63,26 @@ export const XOROSHIRO64STARSTAR: StatefulGenerator = (() => {
6363 return ( x << k ) | ( x >> ( 32 - k ) ) ;
6464 } ) ;
6565
66- const next = tgpu . fn ( [ ] ) ( ( ) => {
66+ const next = tgpu . fn (
67+ [ ] ,
68+ d . u32 ,
69+ ) ( ( ) => {
6770 const s0 = seed . $ [ 0 ] ;
6871 let s1 = seed . $ [ 1 ] ;
69-
7072 s1 ^= s0 ;
7173 seed . $ [ 0 ] = rotl ( s0 , 26 ) ^ s1 ^ ( s1 << 9 ) ;
7274 seed . $ [ 1 ] = rotl ( s1 , 13 ) ;
75+ return rotl ( seed . $ [ 0 ] * 0x9e3779bb , 5 ) * 5 ;
7376 } ) ;
7477
7578 return {
7679 seed2 : tgpu . fn ( [ d . vec2f ] ) ( ( value ) => {
77- seed . $ = d . vec2u ( value ) ;
80+ seed . $ = d . vec2u ( hash ( d . u32 ( value . x ) ) , hash ( d . u32 ( value . y ) ) ) ;
7881 } ) ,
7982
8083 sample : randomGeneratorShell ( ( ) => {
8184 'use gpu' ;
82- next ( ) ;
83- const r = seed . $ . x ;
85+ const r = next ( ) ;
8486 return u32To01Float ( r ) ;
8587 } ) . $name ( 'sample' ) ,
8688 } ;
You can’t perform that action at this time.
0 commit comments