Cycles: Solve speed regression of classroom scene after principled commit
This way we can skip it from compiling into OpenCL kernels by making this shader compile-time feature.
This commit is contained in:
@@ -66,6 +66,8 @@ std::ostream& operator <<(std::ostream &os,
|
||||
<< string_from_bool(requested_features.use_patch_evaluation) << std::endl;
|
||||
os << "Use Transparent Shadows: "
|
||||
<< string_from_bool(requested_features.use_transparent) << std::endl;
|
||||
os << "Use Principled BSDF: "
|
||||
<< string_from_bool(requested_features.use_principled) << std::endl;
|
||||
return os;
|
||||
}
|
||||
|
||||
|
@@ -124,6 +124,9 @@ public:
|
||||
/* Use various shadow tricks, such as shadow catcher. */
|
||||
bool use_shadow_tricks;
|
||||
|
||||
/* Per-uber shader usage flags. */
|
||||
bool use_principled;
|
||||
|
||||
DeviceRequestedFeatures()
|
||||
{
|
||||
/* TODO(sergey): Find more meaningful defaults. */
|
||||
@@ -141,6 +144,7 @@ public:
|
||||
use_patch_evaluation = false;
|
||||
use_transparent = false;
|
||||
use_shadow_tricks = false;
|
||||
use_principled = false;
|
||||
}
|
||||
|
||||
bool modified(const DeviceRequestedFeatures& requested_features)
|
||||
@@ -158,7 +162,8 @@ public:
|
||||
use_integrator_branched == requested_features.use_integrator_branched &&
|
||||
use_patch_evaluation == requested_features.use_patch_evaluation &&
|
||||
use_transparent == requested_features.use_transparent &&
|
||||
use_shadow_tricks == requested_features.use_shadow_tricks);
|
||||
use_shadow_tricks == requested_features.use_shadow_tricks &&
|
||||
use_principled == requested_features.use_principled);
|
||||
}
|
||||
|
||||
/* Convert the requested features structure to a build options,
|
||||
@@ -205,6 +210,9 @@ public:
|
||||
if(!use_shadow_tricks) {
|
||||
build_options += " -D__NO_SHADOW_TRICKS__";
|
||||
}
|
||||
if(!use_principled) {
|
||||
build_options += " -D__NO_PRINCIPLED__";
|
||||
}
|
||||
return build_options;
|
||||
}
|
||||
};
|
||||
|
@@ -137,6 +137,7 @@ ccl_device_forceinline int bsdf_sample(KernelGlobals *kg,
|
||||
label = bsdf_hair_transmission_sample(sc, sd->Ng, sd->I, sd->dI.dx, sd->dI.dy, randu, randv,
|
||||
eval, omega_in, &domega_in->dx, &domega_in->dy, pdf);
|
||||
break;
|
||||
#ifdef __PRINCIPLED__
|
||||
case CLOSURE_BSDF_PRINCIPLED_DIFFUSE_ID:
|
||||
case CLOSURE_BSDF_BSSRDF_PRINCIPLED_ID:
|
||||
label = bsdf_principled_diffuse_sample(sc, sd->Ng, sd->I, sd->dI.dx, sd->dI.dy, randu, randv,
|
||||
@@ -146,6 +147,7 @@ ccl_device_forceinline int bsdf_sample(KernelGlobals *kg,
|
||||
label = bsdf_principled_sheen_sample(sc, sd->Ng, sd->I, sd->dI.dx, sd->dI.dy, randu, randv,
|
||||
eval, omega_in, &domega_in->dx, &domega_in->dy, pdf);
|
||||
break;
|
||||
#endif /* __PRINCIPLED__ */
|
||||
#endif
|
||||
#ifdef __VOLUME__
|
||||
case CLOSURE_VOLUME_HENYEY_GREENSTEIN_ID:
|
||||
@@ -243,6 +245,7 @@ float3 bsdf_eval(KernelGlobals *kg,
|
||||
case CLOSURE_BSDF_HAIR_TRANSMISSION_ID:
|
||||
eval = bsdf_hair_transmission_eval_reflect(sc, sd->I, omega_in, pdf);
|
||||
break;
|
||||
#ifdef __PRINCIPLED__
|
||||
case CLOSURE_BSDF_PRINCIPLED_DIFFUSE_ID:
|
||||
case CLOSURE_BSDF_BSSRDF_PRINCIPLED_ID:
|
||||
eval = bsdf_principled_diffuse_eval_reflect(sc, sd->I, omega_in, pdf);
|
||||
@@ -250,6 +253,7 @@ float3 bsdf_eval(KernelGlobals *kg,
|
||||
case CLOSURE_BSDF_PRINCIPLED_SHEEN_ID:
|
||||
eval = bsdf_principled_sheen_eval_reflect(sc, sd->I, omega_in, pdf);
|
||||
break;
|
||||
#endif /* __PRINCIPLED__ */
|
||||
#endif
|
||||
#ifdef __VOLUME__
|
||||
case CLOSURE_VOLUME_HENYEY_GREENSTEIN_ID:
|
||||
@@ -323,6 +327,7 @@ float3 bsdf_eval(KernelGlobals *kg,
|
||||
case CLOSURE_BSDF_HAIR_TRANSMISSION_ID:
|
||||
eval = bsdf_hair_transmission_eval_transmit(sc, sd->I, omega_in, pdf);
|
||||
break;
|
||||
#ifdef __PRINCIPLED__
|
||||
case CLOSURE_BSDF_PRINCIPLED_DIFFUSE_ID:
|
||||
case CLOSURE_BSDF_BSSRDF_PRINCIPLED_ID:
|
||||
eval = bsdf_principled_diffuse_eval_transmit(sc, sd->I, omega_in, pdf);
|
||||
@@ -330,6 +335,7 @@ float3 bsdf_eval(KernelGlobals *kg,
|
||||
case CLOSURE_BSDF_PRINCIPLED_SHEEN_ID:
|
||||
eval = bsdf_principled_sheen_eval_transmit(sc, sd->I, omega_in, pdf);
|
||||
break;
|
||||
#endif /* __PRINCIPLED__ */
|
||||
#endif
|
||||
#ifdef __VOLUME__
|
||||
case CLOSURE_VOLUME_HENYEY_GREENSTEIN_ID:
|
||||
|
@@ -362,6 +362,7 @@ ccl_device int bssrdf_setup(Bssrdf *bssrdf, ClosureType type)
|
||||
if(bssrdf->radius < BSSRDF_MIN_RADIUS) {
|
||||
/* revert to diffuse BSDF if radius too small */
|
||||
int flag;
|
||||
#ifdef __PRINCIPLED__
|
||||
if(type == CLOSURE_BSSRDF_PRINCIPLED_ID) {
|
||||
float roughness = bssrdf->roughness;
|
||||
float3 N = bssrdf->N;
|
||||
@@ -377,7 +378,9 @@ ccl_device int bssrdf_setup(Bssrdf *bssrdf, ClosureType type)
|
||||
flag = bsdf_principled_diffuse_setup(bsdf);
|
||||
bsdf->type = CLOSURE_BSDF_BSSRDF_PRINCIPLED_ID;
|
||||
}
|
||||
else {
|
||||
else
|
||||
#endif /* __PRINCIPLED__ */
|
||||
{
|
||||
DiffuseBsdf *bsdf = (DiffuseBsdf*)bssrdf;
|
||||
bsdf->N = bssrdf->N;
|
||||
flag = bsdf_diffuse_setup(bsdf);
|
||||
@@ -391,7 +394,9 @@ ccl_device int bssrdf_setup(Bssrdf *bssrdf, ClosureType type)
|
||||
bssrdf->sharpness = saturate(bssrdf->sharpness);
|
||||
bssrdf->type = type;
|
||||
|
||||
if(type == CLOSURE_BSSRDF_BURLEY_ID || type == CLOSURE_BSSRDF_PRINCIPLED_ID) {
|
||||
if(type == CLOSURE_BSSRDF_BURLEY_ID ||
|
||||
type == CLOSURE_BSSRDF_PRINCIPLED_ID)
|
||||
{
|
||||
bssrdf_burley_setup(bssrdf);
|
||||
}
|
||||
|
||||
|
@@ -149,6 +149,7 @@ ccl_device void subsurface_scatter_setup_diffuse_bsdf(ShaderData *sd, ShaderClos
|
||||
|
||||
if(hit) {
|
||||
Bssrdf *bssrdf = (Bssrdf *)sc;
|
||||
#ifdef __PRINCIPLED__
|
||||
if(bssrdf->type == CLOSURE_BSSRDF_PRINCIPLED_ID) {
|
||||
PrincipledDiffuseBsdf *bsdf = (PrincipledDiffuseBsdf*)bsdf_alloc(sd, sizeof(PrincipledDiffuseBsdf), weight);
|
||||
|
||||
@@ -164,6 +165,7 @@ ccl_device void subsurface_scatter_setup_diffuse_bsdf(ShaderData *sd, ShaderClos
|
||||
}
|
||||
else if(CLOSURE_IS_BSDF_BSSRDF(bssrdf->type) ||
|
||||
CLOSURE_IS_BSSRDF(bssrdf->type))
|
||||
#endif /* __PRINCIPLED__ */
|
||||
{
|
||||
DiffuseBsdf *bsdf = (DiffuseBsdf*)bsdf_alloc(sd, sizeof(DiffuseBsdf), weight);
|
||||
|
||||
|
@@ -78,6 +78,7 @@ CCL_NAMESPACE_BEGIN
|
||||
# define __OSL__
|
||||
# endif
|
||||
# define __SUBSURFACE__
|
||||
# define __PRINCIPLED__
|
||||
# define __CMJ__
|
||||
# define __VOLUME__
|
||||
# define __VOLUME_SCATTER__
|
||||
@@ -94,6 +95,7 @@ CCL_NAMESPACE_BEGIN
|
||||
# define __VOLUME__
|
||||
# define __VOLUME_SCATTER__
|
||||
# define __SUBSURFACE__
|
||||
# define __PRINCIPLED__
|
||||
# define __SHADOW_RECORD_ALL__
|
||||
# ifndef __SPLIT_KERNEL__
|
||||
# define __BRANCHED_PATH__
|
||||
@@ -109,6 +111,7 @@ CCL_NAMESPACE_BEGIN
|
||||
# define __KERNEL_SHADING__
|
||||
# define __KERNEL_ADV_SHADING__
|
||||
# define __SUBSURFACE__
|
||||
# define __PRINCIPLED__
|
||||
# define __VOLUME__
|
||||
# define __VOLUME_SCATTER__
|
||||
# define __SHADOW_RECORD_ALL__
|
||||
@@ -134,6 +137,7 @@ CCL_NAMESPACE_BEGIN
|
||||
# define __KERNEL_SHADING__
|
||||
# define __KERNEL_ADV_SHADING__
|
||||
# define __SUBSURFACE__
|
||||
# define __PRINCIPLED__
|
||||
# define __VOLUME__
|
||||
# define __VOLUME_SCATTER__
|
||||
# define __SHADOW_RECORD_ALL__
|
||||
@@ -222,6 +226,9 @@ CCL_NAMESPACE_BEGIN
|
||||
#ifdef __NO_SHADOW_TRICKS__
|
||||
# undef __SHADOW_TRICKS__
|
||||
#endif
|
||||
#ifdef __NO_PRINCIPLED__
|
||||
# undef __PRINCIPLED__
|
||||
#endif
|
||||
|
||||
/* Random Numbers */
|
||||
|
||||
|
@@ -76,6 +76,7 @@ ccl_device void svm_node_closure_bsdf(KernelGlobals *kg, ShaderData *sd, float *
|
||||
float param2 = (stack_valid(param2_offset))? stack_load_float(stack, param2_offset): __uint_as_float(node.w);
|
||||
|
||||
switch(type) {
|
||||
#ifdef __PRINCIPLED__
|
||||
case CLOSURE_BSDF_PRINCIPLED_ID: {
|
||||
uint specular_offset, roughness_offset, specular_tint_offset, anisotropic_offset, sheen_offset,
|
||||
sheen_tint_offset, clearcoat_offset, clearcoat_gloss_offset, eta_offset, transparency_offset,
|
||||
@@ -408,6 +409,7 @@ ccl_device void svm_node_closure_bsdf(KernelGlobals *kg, ShaderData *sd, float *
|
||||
|
||||
break;
|
||||
}
|
||||
#endif /* __PRINCIPLED__ */
|
||||
case CLOSURE_BSDF_DIFFUSE_ID: {
|
||||
float3 weight = sd->svm_closure_weight * mix_weight;
|
||||
OrenNayarBsdf *bsdf = (OrenNayarBsdf*)bsdf_alloc(sd, sizeof(OrenNayarBsdf), weight);
|
||||
|
@@ -569,6 +569,9 @@ void ShaderManager::get_requested_graph_features(ShaderGraph *graph,
|
||||
if(CLOSURE_IS_VOLUME(bsdf_node->closure)) {
|
||||
requested_features->nodes_features |= NODE_FEATURE_VOLUME;
|
||||
}
|
||||
else if(CLOSURE_IS_PRINCIPLED(bsdf_node->closure)) {
|
||||
requested_features->use_principled = true;
|
||||
}
|
||||
}
|
||||
if(node->has_surface_bssrdf()) {
|
||||
requested_features->use_subsurface = true;
|
||||
|
Reference in New Issue
Block a user