Fix: EEVEE-Next: Material compilation
Move pcg functions to eevee_sampling_lib. Including gpu_shader_common libs in engine code results in double includes.
This commit is contained in:
@@ -110,6 +110,70 @@ vec2 regular_grid_2d(int i, int sample_count)
|
||||
return (vec2(i % sample_per_dim, i / sample_per_dim) + 0.5) / float(sample_per_dim);
|
||||
}
|
||||
|
||||
/* PCG */
|
||||
|
||||
/* https://www.pcg-random.org/ */
|
||||
uint pcg_uint(uint u)
|
||||
{
|
||||
uint state = u * 747796405u + 2891336453u;
|
||||
uint word = ((state >> ((state >> 28u) + 4u)) ^ state) * 277803737u;
|
||||
return (word >> 22u) ^ word;
|
||||
}
|
||||
|
||||
float pcg(float v)
|
||||
{
|
||||
return pcg_uint(floatBitsToUint(v)) / float(0xffffffffU);
|
||||
}
|
||||
|
||||
float pcg(vec2 v)
|
||||
{
|
||||
/* Nested pcg (faster and better quality that pcg2d). */
|
||||
uvec2 u = floatBitsToUint(v);
|
||||
return pcg_uint(pcg_uint(u.x) + u.y) / float(0xffffffffU);
|
||||
}
|
||||
|
||||
/* http://www.jcgt.org/published/0009/03/02/ */
|
||||
vec3 pcg3d(vec3 v)
|
||||
{
|
||||
uvec3 u = floatBitsToUint(v);
|
||||
|
||||
u = u * 1664525u + 1013904223u;
|
||||
|
||||
u.x += u.y * u.z;
|
||||
u.y += u.z * u.x;
|
||||
u.z += u.x * u.y;
|
||||
|
||||
u ^= u >> 16u;
|
||||
|
||||
u.x += u.y * u.z;
|
||||
u.y += u.z * u.x;
|
||||
u.z += u.x * u.y;
|
||||
|
||||
return vec3(u) / float(0xffffffffU);
|
||||
}
|
||||
|
||||
/* http://www.jcgt.org/published/0009/03/02/ */
|
||||
vec4 pcg4d(vec4 v)
|
||||
{
|
||||
uvec4 u = floatBitsToUint(v);
|
||||
|
||||
u = u * 1664525u + 1013904223u;
|
||||
|
||||
u.x += u.y * u.w;
|
||||
u.y += u.z * u.x;
|
||||
u.z += u.x * u.y;
|
||||
u.w += u.y * u.z;
|
||||
|
||||
u ^= u >> 16u;
|
||||
|
||||
u.x += u.y * u.w;
|
||||
u.y += u.z * u.x;
|
||||
u.z += u.x * u.y;
|
||||
u.w += u.y * u.z;
|
||||
|
||||
return vec4(u) / float(0xffffffffU);
|
||||
}
|
||||
|
||||
/** \} */
|
||||
|
||||
/* -------------------------------------------------------------------- */
|
||||
|
||||
@@ -16,7 +16,6 @@
|
||||
#pragma BLENDER_REQUIRE(eevee_nodetree_lib.glsl)
|
||||
#pragma BLENDER_REQUIRE(eevee_sampling_lib.glsl)
|
||||
#pragma BLENDER_REQUIRE(eevee_shadow_tilemap_lib.glsl)
|
||||
#pragma BLENDER_REQUIRE(gpu_shader_common_hash.glsl)
|
||||
|
||||
vec4 closure_to_rgba(Closure cl)
|
||||
{
|
||||
|
||||
@@ -232,67 +232,3 @@ float wang_hash_noise(uint s)
|
||||
|
||||
return fract(float(s) / 4294967296.0);
|
||||
}
|
||||
|
||||
/* PCG */
|
||||
|
||||
/* https://www.pcg-random.org/ */
|
||||
uint pcg_uint(uint u)
|
||||
{
|
||||
uint state = u * 747796405u + 2891336453u;
|
||||
uint word = ((state >> ((state >> 28u) + 4u)) ^ state) * 277803737u;
|
||||
return (word >> 22u) ^ word;
|
||||
}
|
||||
|
||||
float pcg(float v)
|
||||
{
|
||||
return pcg_uint(floatBitsToUint(v)) / float(0xffffffffU);
|
||||
}
|
||||
|
||||
float pcg(vec2 v)
|
||||
{
|
||||
/* Nested pcg (faster and better quality that pcg2d). */
|
||||
uvec2 u = floatBitsToUint(v);
|
||||
return pcg_uint(pcg_uint(u.x) + u.y) / float(0xffffffffU);
|
||||
}
|
||||
|
||||
/* http://www.jcgt.org/published/0009/03/02/ */
|
||||
vec3 pcg3d(vec3 v)
|
||||
{
|
||||
uvec3 u = floatBitsToUint(v);
|
||||
|
||||
u = u * 1664525u + 1013904223u;
|
||||
|
||||
u.x += u.y * u.z;
|
||||
u.y += u.z * u.x;
|
||||
u.z += u.x * u.y;
|
||||
|
||||
u ^= u >> 16u;
|
||||
|
||||
u.x += u.y * u.z;
|
||||
u.y += u.z * u.x;
|
||||
u.z += u.x * u.y;
|
||||
|
||||
return vec3(u) / float(0xffffffffU);
|
||||
}
|
||||
|
||||
/* http://www.jcgt.org/published/0009/03/02/ */
|
||||
vec4 pcg4d(vec4 v)
|
||||
{
|
||||
uvec4 u = floatBitsToUint(v);
|
||||
|
||||
u = u * 1664525u + 1013904223u;
|
||||
|
||||
u.x += u.y * u.w;
|
||||
u.y += u.z * u.x;
|
||||
u.z += u.x * u.y;
|
||||
u.w += u.y * u.z;
|
||||
|
||||
u ^= u >> 16u;
|
||||
|
||||
u.x += u.y * u.w;
|
||||
u.y += u.z * u.x;
|
||||
u.z += u.x * u.y;
|
||||
u.w += u.y * u.z;
|
||||
|
||||
return vec4(u) / float(0xffffffffU);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user