Code cleanup: remove copy of shader graph for bump, no longer needed.
This commit is contained in:
@@ -221,28 +221,6 @@ OutputNode *ShaderGraph::output()
|
|||||||
return (OutputNode*)nodes.front();
|
return (OutputNode*)nodes.front();
|
||||||
}
|
}
|
||||||
|
|
||||||
ShaderGraph *ShaderGraph::copy()
|
|
||||||
{
|
|
||||||
ShaderGraph *newgraph = new ShaderGraph();
|
|
||||||
|
|
||||||
/* copy nodes */
|
|
||||||
ShaderNodeSet nodes_all;
|
|
||||||
foreach(ShaderNode *node, nodes)
|
|
||||||
nodes_all.insert(node);
|
|
||||||
|
|
||||||
ShaderNodeMap nodes_copy;
|
|
||||||
copy_nodes(nodes_all, nodes_copy);
|
|
||||||
|
|
||||||
/* add nodes (in same order, so output is still first) */
|
|
||||||
newgraph->clear_nodes();
|
|
||||||
foreach(ShaderNode *node, nodes)
|
|
||||||
newgraph->add(nodes_copy[node]);
|
|
||||||
|
|
||||||
newgraph->simplified = simplified;
|
|
||||||
|
|
||||||
return newgraph;
|
|
||||||
}
|
|
||||||
|
|
||||||
void ShaderGraph::connect(ShaderOutput *from, ShaderInput *to)
|
void ShaderGraph::connect(ShaderOutput *from, ShaderInput *to)
|
||||||
{
|
{
|
||||||
assert(!finalized);
|
assert(!finalized);
|
||||||
|
@@ -245,8 +245,6 @@ public:
|
|||||||
ShaderGraph();
|
ShaderGraph();
|
||||||
~ShaderGraph();
|
~ShaderGraph();
|
||||||
|
|
||||||
ShaderGraph *copy();
|
|
||||||
|
|
||||||
ShaderNode *add(ShaderNode *node);
|
ShaderNode *add(ShaderNode *node);
|
||||||
OutputNode *output();
|
OutputNode *output();
|
||||||
|
|
||||||
|
@@ -1091,21 +1091,14 @@ void OSLCompiler::compile(Scene *scene, OSLGlobals *og, Shader *shader)
|
|||||||
ShaderGraph *graph = shader->graph;
|
ShaderGraph *graph = shader->graph;
|
||||||
ShaderNode *output = (graph)? graph->output(): NULL;
|
ShaderNode *output = (graph)? graph->output(): NULL;
|
||||||
|
|
||||||
/* copy graph for shader with bump mapping */
|
bool has_bump = (shader->displacement_method != DISPLACE_TRUE) &&
|
||||||
if(output->input("Surface")->link && output->input("Displacement")->link)
|
output->input("Surface")->link && output->input("Displacement")->link;
|
||||||
if(!shader->graph_bump)
|
|
||||||
shader->graph_bump = shader->graph->copy();
|
|
||||||
|
|
||||||
/* finalize */
|
/* finalize */
|
||||||
shader->graph->finalize(scene,
|
shader->graph->finalize(scene,
|
||||||
false,
|
has_bump,
|
||||||
shader->has_integrator_dependency);
|
shader->has_integrator_dependency,
|
||||||
if(shader->graph_bump) {
|
shader->displacement_method == DISPLACE_BOTH);
|
||||||
shader->graph_bump->finalize(scene,
|
|
||||||
true,
|
|
||||||
shader->has_integrator_dependency,
|
|
||||||
shader->displacement_method == DISPLACE_BOTH);
|
|
||||||
}
|
|
||||||
|
|
||||||
current_shader = shader;
|
current_shader = shader;
|
||||||
|
|
||||||
@@ -1113,7 +1106,8 @@ void OSLCompiler::compile(Scene *scene, OSLGlobals *og, Shader *shader)
|
|||||||
shader->has_surface_emission = false;
|
shader->has_surface_emission = false;
|
||||||
shader->has_surface_transparent = false;
|
shader->has_surface_transparent = false;
|
||||||
shader->has_surface_bssrdf = false;
|
shader->has_surface_bssrdf = false;
|
||||||
shader->has_bssrdf_bump = false;
|
shader->has_bump = has_bump;
|
||||||
|
shader->has_bssrdf_bump = has_bump;
|
||||||
shader->has_volume = false;
|
shader->has_volume = false;
|
||||||
shader->has_displacement = false;
|
shader->has_displacement = false;
|
||||||
shader->has_surface_spatial_varying = false;
|
shader->has_surface_spatial_varying = false;
|
||||||
@@ -1125,8 +1119,8 @@ void OSLCompiler::compile(Scene *scene, OSLGlobals *og, Shader *shader)
|
|||||||
if(shader->used && graph && output->input("Surface")->link) {
|
if(shader->used && graph && output->input("Surface")->link) {
|
||||||
shader->osl_surface_ref = compile_type(shader, shader->graph, SHADER_TYPE_SURFACE);
|
shader->osl_surface_ref = compile_type(shader, shader->graph, SHADER_TYPE_SURFACE);
|
||||||
|
|
||||||
if(shader->graph_bump && shader->displacement_method != DISPLACE_TRUE)
|
if(has_bump)
|
||||||
shader->osl_surface_bump_ref = compile_type(shader, shader->graph_bump, SHADER_TYPE_BUMP);
|
shader->osl_surface_bump_ref = compile_type(shader, shader->graph, SHADER_TYPE_BUMP);
|
||||||
else
|
else
|
||||||
shader->osl_surface_bump_ref = OSL::ShaderGroupRef();
|
shader->osl_surface_bump_ref = OSL::ShaderGroupRef();
|
||||||
|
|
||||||
|
@@ -177,7 +177,6 @@ Shader::Shader()
|
|||||||
pass_id = 0;
|
pass_id = 0;
|
||||||
|
|
||||||
graph = NULL;
|
graph = NULL;
|
||||||
graph_bump = NULL;
|
|
||||||
|
|
||||||
has_surface = false;
|
has_surface = false;
|
||||||
has_surface_transparent = false;
|
has_surface_transparent = false;
|
||||||
@@ -185,6 +184,7 @@ Shader::Shader()
|
|||||||
has_surface_bssrdf = false;
|
has_surface_bssrdf = false;
|
||||||
has_volume = false;
|
has_volume = false;
|
||||||
has_displacement = false;
|
has_displacement = false;
|
||||||
|
has_bump = false;
|
||||||
has_bssrdf_bump = false;
|
has_bssrdf_bump = false;
|
||||||
has_surface_spatial_varying = false;
|
has_surface_spatial_varying = false;
|
||||||
has_volume_spatial_varying = false;
|
has_volume_spatial_varying = false;
|
||||||
@@ -204,7 +204,6 @@ Shader::Shader()
|
|||||||
Shader::~Shader()
|
Shader::~Shader()
|
||||||
{
|
{
|
||||||
delete graph;
|
delete graph;
|
||||||
delete graph_bump;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Shader::is_constant_emission(float3 *emission)
|
bool Shader::is_constant_emission(float3 *emission)
|
||||||
@@ -239,9 +238,7 @@ void Shader::set_graph(ShaderGraph *graph_)
|
|||||||
|
|
||||||
/* assign graph */
|
/* assign graph */
|
||||||
delete graph;
|
delete graph;
|
||||||
delete graph_bump;
|
|
||||||
graph = graph_;
|
graph = graph_;
|
||||||
graph_bump = NULL;
|
|
||||||
|
|
||||||
/* Store info here before graph optimization to make sure that
|
/* Store info here before graph optimization to make sure that
|
||||||
* nodes that get optimized away still count. */
|
* nodes that get optimized away still count. */
|
||||||
@@ -458,15 +455,11 @@ void ShaderManager::device_update_common(Device *device,
|
|||||||
flag |= SD_VOLUME_MIS;
|
flag |= SD_VOLUME_MIS;
|
||||||
if(shader->volume_interpolation_method == VOLUME_INTERPOLATION_CUBIC)
|
if(shader->volume_interpolation_method == VOLUME_INTERPOLATION_CUBIC)
|
||||||
flag |= SD_VOLUME_CUBIC;
|
flag |= SD_VOLUME_CUBIC;
|
||||||
if(shader->graph_bump)
|
if(shader->has_bump)
|
||||||
flag |= SD_HAS_BUMP;
|
flag |= SD_HAS_BUMP;
|
||||||
if(shader->displacement_method != DISPLACE_BUMP)
|
if(shader->displacement_method != DISPLACE_BUMP)
|
||||||
flag |= SD_HAS_DISPLACEMENT;
|
flag |= SD_HAS_DISPLACEMENT;
|
||||||
|
|
||||||
/* shader with bump mapping */
|
|
||||||
if(shader->displacement_method != DISPLACE_TRUE && shader->graph_bump)
|
|
||||||
flag |= SD_HAS_BSSRDF_BUMP;
|
|
||||||
|
|
||||||
/* constant emission check */
|
/* constant emission check */
|
||||||
float3 constant_emission = make_float3(0.0f, 0.0f, 0.0f);
|
float3 constant_emission = make_float3(0.0f, 0.0f, 0.0f);
|
||||||
if(shader->is_constant_emission(&constant_emission))
|
if(shader->is_constant_emission(&constant_emission))
|
||||||
@@ -608,11 +601,6 @@ void ShaderManager::get_requested_features(Scene *scene,
|
|||||||
Shader *shader = scene->shaders[i];
|
Shader *shader = scene->shaders[i];
|
||||||
/* Gather requested features from all the nodes from the graph nodes. */
|
/* Gather requested features from all the nodes from the graph nodes. */
|
||||||
get_requested_graph_features(shader->graph, requested_features);
|
get_requested_graph_features(shader->graph, requested_features);
|
||||||
/* Gather requested features from the graph itself. */
|
|
||||||
if(shader->graph_bump) {
|
|
||||||
get_requested_graph_features(shader->graph_bump,
|
|
||||||
requested_features);
|
|
||||||
}
|
|
||||||
ShaderNode *output_node = shader->graph->output();
|
ShaderNode *output_node = shader->graph->output();
|
||||||
if(output_node->input("Displacement")->link != NULL) {
|
if(output_node->input("Displacement")->link != NULL) {
|
||||||
requested_features->nodes_features |= NODE_FEATURE_BUMP;
|
requested_features->nodes_features |= NODE_FEATURE_BUMP;
|
||||||
|
@@ -89,11 +89,6 @@ public:
|
|||||||
/* shader graph */
|
/* shader graph */
|
||||||
ShaderGraph *graph;
|
ShaderGraph *graph;
|
||||||
|
|
||||||
/* shader graph with auto bump mapping included, we compile two shaders,
|
|
||||||
* with and without bump, because the displacement method is a mesh
|
|
||||||
* level setting, so we need to handle both */
|
|
||||||
ShaderGraph *graph_bump;
|
|
||||||
|
|
||||||
/* sampling */
|
/* sampling */
|
||||||
bool use_mis;
|
bool use_mis;
|
||||||
bool use_transparent_shadow;
|
bool use_transparent_shadow;
|
||||||
@@ -121,6 +116,7 @@ public:
|
|||||||
bool has_volume;
|
bool has_volume;
|
||||||
bool has_displacement;
|
bool has_displacement;
|
||||||
bool has_surface_bssrdf;
|
bool has_surface_bssrdf;
|
||||||
|
bool has_bump;
|
||||||
bool has_bssrdf_bump;
|
bool has_bssrdf_bump;
|
||||||
bool has_surface_spatial_varying;
|
bool has_surface_spatial_varying;
|
||||||
bool has_volume_spatial_varying;
|
bool has_volume_spatial_varying;
|
||||||
|
@@ -799,29 +799,21 @@ void SVMCompiler::compile(Scene *scene,
|
|||||||
Summary *summary)
|
Summary *summary)
|
||||||
{
|
{
|
||||||
/* copy graph for shader with bump mapping */
|
/* copy graph for shader with bump mapping */
|
||||||
ShaderNode *node = shader->graph->output();
|
ShaderNode *output = shader->graph->output();
|
||||||
int start_num_svm_nodes = svm_nodes.size();
|
int start_num_svm_nodes = svm_nodes.size();
|
||||||
|
|
||||||
const double time_start = time_dt();
|
const double time_start = time_dt();
|
||||||
|
|
||||||
if(node->input("Surface")->link && node->input("Displacement")->link)
|
bool has_bump = (shader->displacement_method != DISPLACE_TRUE) &&
|
||||||
if(!shader->graph_bump)
|
output->input("Surface")->link && output->input("Displacement")->link;
|
||||||
shader->graph_bump = shader->graph->copy();
|
|
||||||
|
|
||||||
/* finalize */
|
/* finalize */
|
||||||
{
|
{
|
||||||
scoped_timer timer((summary != NULL)? &summary->time_finalize: NULL);
|
scoped_timer timer((summary != NULL)? &summary->time_finalize: NULL);
|
||||||
shader->graph->finalize(scene,
|
shader->graph->finalize(scene,
|
||||||
false,
|
has_bump,
|
||||||
shader->has_integrator_dependency);
|
shader->has_integrator_dependency,
|
||||||
}
|
shader->displacement_method == DISPLACE_BOTH);
|
||||||
|
|
||||||
if(shader->graph_bump) {
|
|
||||||
scoped_timer timer((summary != NULL)? &summary->time_finalize_bump: NULL);
|
|
||||||
shader->graph_bump->finalize(scene,
|
|
||||||
true,
|
|
||||||
shader->has_integrator_dependency,
|
|
||||||
shader->displacement_method == DISPLACE_BOTH);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
current_shader = shader;
|
current_shader = shader;
|
||||||
@@ -830,7 +822,8 @@ void SVMCompiler::compile(Scene *scene,
|
|||||||
shader->has_surface_emission = false;
|
shader->has_surface_emission = false;
|
||||||
shader->has_surface_transparent = false;
|
shader->has_surface_transparent = false;
|
||||||
shader->has_surface_bssrdf = false;
|
shader->has_surface_bssrdf = false;
|
||||||
shader->has_bssrdf_bump = false;
|
shader->has_bump = has_bump;
|
||||||
|
shader->has_bssrdf_bump = has_bump;
|
||||||
shader->has_volume = false;
|
shader->has_volume = false;
|
||||||
shader->has_displacement = false;
|
shader->has_displacement = false;
|
||||||
shader->has_surface_spatial_varying = false;
|
shader->has_surface_spatial_varying = false;
|
||||||
@@ -839,9 +832,9 @@ void SVMCompiler::compile(Scene *scene,
|
|||||||
shader->has_integrator_dependency = false;
|
shader->has_integrator_dependency = false;
|
||||||
|
|
||||||
/* generate bump shader */
|
/* generate bump shader */
|
||||||
if(shader->displacement_method != DISPLACE_TRUE && shader->graph_bump) {
|
if(has_bump) {
|
||||||
scoped_timer timer((summary != NULL)? &summary->time_generate_bump: NULL);
|
scoped_timer timer((summary != NULL)? &summary->time_generate_bump: NULL);
|
||||||
compile_type(shader, shader->graph_bump, SHADER_TYPE_BUMP);
|
compile_type(shader, shader->graph, SHADER_TYPE_BUMP);
|
||||||
svm_nodes[index].y = svm_nodes.size();
|
svm_nodes[index].y = svm_nodes.size();
|
||||||
svm_nodes.insert(svm_nodes.end(),
|
svm_nodes.insert(svm_nodes.end(),
|
||||||
current_svm_nodes.begin(),
|
current_svm_nodes.begin(),
|
||||||
@@ -853,7 +846,7 @@ void SVMCompiler::compile(Scene *scene,
|
|||||||
scoped_timer timer((summary != NULL)? &summary->time_generate_surface: NULL);
|
scoped_timer timer((summary != NULL)? &summary->time_generate_surface: NULL);
|
||||||
compile_type(shader, shader->graph, SHADER_TYPE_SURFACE);
|
compile_type(shader, shader->graph, SHADER_TYPE_SURFACE);
|
||||||
/* only set jump offset if there's no bump shader, as the bump shader will fall thru to this one if it exists */
|
/* only set jump offset if there's no bump shader, as the bump shader will fall thru to this one if it exists */
|
||||||
if(shader->displacement_method == DISPLACE_TRUE || !shader->graph_bump) {
|
if(!has_bump) {
|
||||||
svm_nodes[index].y = svm_nodes.size();
|
svm_nodes[index].y = svm_nodes.size();
|
||||||
}
|
}
|
||||||
svm_nodes.insert(svm_nodes.end(),
|
svm_nodes.insert(svm_nodes.end(),
|
||||||
@@ -895,7 +888,6 @@ SVMCompiler::Summary::Summary()
|
|||||||
: num_svm_nodes(0),
|
: num_svm_nodes(0),
|
||||||
peak_stack_usage(0),
|
peak_stack_usage(0),
|
||||||
time_finalize(0.0),
|
time_finalize(0.0),
|
||||||
time_finalize_bump(0.0),
|
|
||||||
time_generate_surface(0.0),
|
time_generate_surface(0.0),
|
||||||
time_generate_bump(0.0),
|
time_generate_bump(0.0),
|
||||||
time_generate_volume(0.0),
|
time_generate_volume(0.0),
|
||||||
@@ -911,10 +903,7 @@ string SVMCompiler::Summary::full_report() const
|
|||||||
report += string_printf("Peak stack usage: %d\n", peak_stack_usage);
|
report += string_printf("Peak stack usage: %d\n", peak_stack_usage);
|
||||||
|
|
||||||
report += string_printf("Time (in seconds):\n");
|
report += string_printf("Time (in seconds):\n");
|
||||||
report += string_printf(" Finalize: %f\n", time_finalize);
|
report += string_printf("Finalize: %f\n", time_finalize);
|
||||||
report += string_printf(" Bump finalize: %f\n", time_finalize_bump);
|
|
||||||
report += string_printf("Finalize: %f\n", time_finalize +
|
|
||||||
time_finalize_bump);
|
|
||||||
report += string_printf(" Surface: %f\n", time_generate_surface);
|
report += string_printf(" Surface: %f\n", time_generate_surface);
|
||||||
report += string_printf(" Bump: %f\n", time_generate_bump);
|
report += string_printf(" Bump: %f\n", time_generate_bump);
|
||||||
report += string_printf(" Volume: %f\n", time_generate_volume);
|
report += string_printf(" Volume: %f\n", time_generate_volume);
|
||||||
|
@@ -74,9 +74,6 @@ public:
|
|||||||
/* Time spent on surface graph finalization. */
|
/* Time spent on surface graph finalization. */
|
||||||
double time_finalize;
|
double time_finalize;
|
||||||
|
|
||||||
/* Time spent on bump graph finalization. */
|
|
||||||
double time_finalize_bump;
|
|
||||||
|
|
||||||
/* Time spent on generating SVM nodes for surface shader. */
|
/* Time spent on generating SVM nodes for surface shader. */
|
||||||
double time_generate_surface;
|
double time_generate_surface;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user