Cycles OSL: update to build with latest OSL master shader group changes.

This commit is contained in:
Brecht Van Lommel 2013-12-08 15:15:27 +01:00
parent 2288eb8245
commit 38adc8a91f
2 changed files with 19 additions and 19 deletions

@ -724,13 +724,17 @@ void OSLCompiler::generate_nodes(const set<ShaderNode*>& nodes)
} while(!nodes_done); } while(!nodes_done);
} }
void OSLCompiler::compile_type(Shader *shader, ShaderGraph *graph, ShaderType type) OSL::ShadingAttribStateRef OSLCompiler::compile_type(Shader *shader, ShaderGraph *graph, ShaderType type)
{ {
OSL::ShadingSystem *ss = (OSL::ShadingSystem*)shadingsys; OSL::ShadingSystem *ss = (OSL::ShadingSystem*)shadingsys;
current_type = type; current_type = type;
#if OSL_LIBRARY_VERSION_CODE >= 10501
OSL::ShadingAttribStateRef group = ss->ShaderGroupBegin(shader->name.c_str());
#else
ss->ShaderGroupBegin(shader->name.c_str()); ss->ShaderGroupBegin(shader->name.c_str());
#endif
ShaderNode *output = graph->output(); ShaderNode *output = graph->output();
set<ShaderNode*> dependencies; set<ShaderNode*> dependencies;
@ -757,12 +761,19 @@ void OSLCompiler::compile_type(Shader *shader, ShaderGraph *graph, ShaderType ty
assert(0); assert(0);
ss->ShaderGroupEnd(); ss->ShaderGroupEnd();
#if OSL_LIBRARY_VERSION_CODE >= 10501
return group;
#else
OSL::ShadingAttribStateRef group = ss->state();
ss->clear_state();
return group;
#endif
} }
void OSLCompiler::compile(OSLGlobals *og, Shader *shader) void OSLCompiler::compile(OSLGlobals *og, Shader *shader)
{ {
if(shader->need_update) { if(shader->need_update) {
OSL::ShadingSystem *ss = (OSL::ShadingSystem*)shadingsys;
ShaderGraph *graph = shader->graph; ShaderGraph *graph = shader->graph;
ShaderNode *output = (graph)? graph->output(): NULL; ShaderNode *output = (graph)? graph->output(): NULL;
@ -788,19 +799,13 @@ void OSLCompiler::compile(OSLGlobals *og, Shader *shader)
/* generate surface shader */ /* generate surface shader */
if(shader->used && graph && output->input("Surface")->link) { if(shader->used && graph && output->input("Surface")->link) {
compile_type(shader, shader->graph, SHADER_TYPE_SURFACE); shader->osl_surface_ref = compile_type(shader, shader->graph, SHADER_TYPE_SURFACE);
shader->osl_surface_ref = ss->state();
if(shader->graph_bump) { if(shader->graph_bump)
ss->clear_state(); shader->osl_surface_bump_ref = compile_type(shader, shader->graph_bump, SHADER_TYPE_SURFACE);
compile_type(shader, shader->graph_bump, SHADER_TYPE_SURFACE);
shader->osl_surface_bump_ref = ss->state();
}
else else
shader->osl_surface_bump_ref = shader->osl_surface_ref; shader->osl_surface_bump_ref = shader->osl_surface_ref;
ss->clear_state();
shader->has_surface = true; shader->has_surface = true;
} }
else { else {
@ -810,21 +815,16 @@ void OSLCompiler::compile(OSLGlobals *og, Shader *shader)
/* generate volume shader */ /* generate volume shader */
if(shader->used && graph && output->input("Volume")->link) { if(shader->used && graph && output->input("Volume")->link) {
compile_type(shader, shader->graph, SHADER_TYPE_VOLUME); shader->osl_volume_ref = compile_type(shader, shader->graph, SHADER_TYPE_VOLUME);
shader->has_volume = true; shader->has_volume = true;
shader->osl_volume_ref = ss->state();
ss->clear_state();
} }
else else
shader->osl_volume_ref = OSL::ShadingAttribStateRef(); shader->osl_volume_ref = OSL::ShadingAttribStateRef();
/* generate displacement shader */ /* generate displacement shader */
if(shader->used && graph && output->input("Displacement")->link) { if(shader->used && graph && output->input("Displacement")->link) {
compile_type(shader, shader->graph, SHADER_TYPE_DISPLACEMENT); shader->osl_displacement_ref = compile_type(shader, shader->graph, SHADER_TYPE_DISPLACEMENT);
shader->has_displacement = true; shader->has_displacement = true;
shader->osl_displacement_ref = ss->state();
ss->clear_state();
} }
else else
shader->osl_displacement_ref = OSL::ShadingAttribStateRef(); shader->osl_displacement_ref = OSL::ShadingAttribStateRef();

@ -143,7 +143,7 @@ public:
private: private:
string id(ShaderNode *node); string id(ShaderNode *node);
void compile_type(Shader *shader, ShaderGraph *graph, ShaderType type); OSL::ShadingAttribStateRef compile_type(Shader *shader, ShaderGraph *graph, ShaderType type);
bool node_skip_input(ShaderNode *node, ShaderInput *input); bool node_skip_input(ShaderNode *node, ShaderInput *input);
string compatible_name(ShaderNode *node, ShaderInput *input); string compatible_name(ShaderNode *node, ShaderInput *input);
string compatible_name(ShaderNode *node, ShaderOutput *output); string compatible_name(ShaderNode *node, ShaderOutput *output);