Metal: Improve AMD EEVEE Performance #104743

Closed
Jason Fielder wants to merge 3 commits from Jason-Fielder/blender:MetalAMDPerformanceEEVEE_2 into main

When changing the target branch, be careful to rebase the branch in your fork to match. See documentation.
4 changed files with 12 additions and 28 deletions
Showing only changes of commit dc42ce0273 - Show all commits

View File

@ -102,7 +102,7 @@ Closure closure_eval(ClosureTranslucent translucent)
}
CLOSURE_EVAL_FUNCTION_DECLARE_1(GlossyBSDF, Glossy)
Closure closure_eval(ClosureReflection reflection)
Closure closure_eval(ClosureReflection reflection, const bool do_output_ssr)
{
/* Glue with the old system. */
CLOSURE_VARS_DECLARE_1(Glossy);
@ -113,26 +113,20 @@ Closure closure_eval(ClosureReflection reflection)
CLOSURE_EVAL_FUNCTION_1(GlossyBSDF, Glossy);
Closure closure = CLOSURE_DEFAULT;
if (!output_ssr(reflection)) {
bool output_radiance = true;
if(do_output_ssr){
output_radiance = !output_ssr(reflection);
}
if (output_radiance) {
closure.radiance += out_Glossy_0.radiance * reflection.color * reflection.weight;
}

Change closure_eval_always to be an overload of closure_eval with an optional const bool parameter for ssr output: closure_eval(ClosureReflection reflection, const bool do_ssr_output)

Change `closure_eval_always` to be an overload of `closure_eval` with an optional const bool parameter for ssr output: `closure_eval(ClosureReflection reflection, const bool do_ssr_output)`
return closure;
}
CLOSURE_EVAL_FUNCTION_DECLARE_1(GlossyBSDFAlways, Glossy)
Closure closure_eval_always(ClosureReflection reflection)
Closure closure_eval(ClosureReflection reflection)
{
/* Glue with the old system. */
CLOSURE_VARS_DECLARE_1(Glossy);
in_Glossy_0.N = reflection.N;
in_Glossy_0.roughness = reflection.roughness;
CLOSURE_EVAL_FUNCTION_1(GlossyBSDF, Glossy);
Closure closure = CLOSURE_DEFAULT;
closure.radiance += out_Glossy_0.radiance * reflection.color * reflection.weight;
return closure;
return closure_eval(reflection, true);
}
CLOSURE_EVAL_FUNCTION_DECLARE_1(RefractionBSDF, Refraction)
@ -240,7 +234,7 @@ Closure closure_eval(ClosureDiffuse diffuse,
#if defined(DO_SPLIT_CLOSURE_EVAL)
Closure closure = closure_eval(diffuse);
Closure closure_reflection = closure_eval(reflection);
Closure closure_clearcoat = closure_eval_always(clearcoat);
Closure closure_clearcoat = closure_eval(clearcoat, false);
closure.radiance += closure_reflection.radiance + closure_clearcoat.radiance;
return closure;
#else
@ -280,7 +274,7 @@ Closure closure_eval(ClosureDiffuse diffuse,
#if defined(DO_SPLIT_CLOSURE_EVAL)
Closure closure = closure_eval(diffuse);
Closure closure_reflection = closure_eval(reflection);
Closure closure_clearcoat = closure_eval_always(clearcoat);
Closure closure_clearcoat = closure_eval(clearcoat, false);
Closure closure_refraction = closure_eval(refraction);
closure.radiance += closure_reflection.radiance + closure_clearcoat.radiance +
closure_refraction.radiance;

View File

@ -17,10 +17,6 @@ Closure closure_eval(ClosureReflection reflection)
{
return CLOSURE_DEFAULT;
}
Closure closure_eval_always(ClosureReflection reflection)
{
return CLOSURE_DEFAULT;
}
Closure closure_eval(ClosureRefraction refraction)
{
return CLOSURE_DEFAULT;

View File

@ -53,7 +53,7 @@ vec3 coordinate_incoming(vec3 P);
Closure closure_eval(ClosureDiffuse diffuse);
Closure closure_eval(ClosureTranslucent translucent);
Closure closure_eval(ClosureReflection reflection);
Closure closure_eval_always(ClosureReflection reflection);
Closure closure_eval(ClosureReflection reflection, const bool do_output_ssr);
Closure closure_eval(ClosureRefraction refraction);
Closure closure_eval(ClosureEmission emission);
Closure closure_eval(ClosureTransparency transparency);

View File

@ -92,12 +92,6 @@ Closure closure_eval(ClosureReflection reflection)
return Closure(0);
}
Closure closure_eval_always(ClosureReflection reflection)
{
SELECT_CLOSURE(g_reflection_data, g_reflection_rand, reflection);
return Closure(0);
}
Closure closure_eval(ClosureRefraction refraction)
{
SELECT_CLOSURE(g_refraction_data, g_refraction_rand, refraction);