* Started working on a ray tracing glTF sample * Started working on a ray tracing glTF sample Added textures using descriptor indexing * Frame accumulation Pass glTF node transforms to BLAS build * Shader cleanup * Code cleanup, flip Y using TLAS transform matrix * Create AS for all primitives in the gltf scene * Remove unused variables * Added missing shaders * Minor cleanup
37 lines
No EOL
1.1 KiB
GLSL
37 lines
No EOL
1.1 KiB
GLSL
/* Copyright (c) 2023, Sascha Willems
|
|
*
|
|
* SPDX-License-Identifier: MIT
|
|
*
|
|
*/
|
|
|
|
// Tiny Encryption Algorithm
|
|
// By Fahad Zafar, Marc Olano and Aaron Curtis, see https://www.highperformancegraphics.org/previous/www_2010/media/GPUAlgorithms/HPG2010_GPUAlgorithms_Zafar.pdf
|
|
uint tea(uint val0, uint val1)
|
|
{
|
|
uint sum = 0;
|
|
uint v0 = val0;
|
|
uint v1 = val1;
|
|
for (uint n = 0; n < 16; n++)
|
|
{
|
|
sum += 0x9E3779B9;
|
|
v0 += ((v1 << 4) + 0xA341316C) ^ (v1 + sum) ^ ((v1 >> 5) + 0xC8013EA4);
|
|
v1 += ((v0 << 4) + 0xAD90777D) ^ (v0 + sum) ^ ((v0 >> 5) + 0x7E95761E);
|
|
}
|
|
return v0;
|
|
}
|
|
|
|
// Linear congruential generator based on the previous RNG state
|
|
// See https://en.wikipedia.org/wiki/Linear_congruential_generator
|
|
uint lcg(inout uint previous)
|
|
{
|
|
const uint multiplier = 1664525u;
|
|
const uint increment = 1013904223u;
|
|
previous = (multiplier * previous + increment);
|
|
return previous & 0x00FFFFFF;
|
|
}
|
|
|
|
// Generate a random float in [0, 1) given the previous RNG state
|
|
float rnd(inout uint previous)
|
|
{
|
|
return (float(lcg(previous)) / float(0x01000000));
|
|
} |