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:
Miguel Pozo
2024-03-22 18:58:12 +01:00
parent cfce96dafe
commit def5f86cae
3 changed files with 64 additions and 65 deletions

View File

@@ -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);
}
/** \} */
/* -------------------------------------------------------------------- */

View File

@@ -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)
{

View File

@@ -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);
}