Cycles: Updates for new OSL 1.5 API.

Differential Revision: https://developer.blender.org/D662

Patch by Sergey and myself.
This commit is contained in:
Thomas Dinges 2014-07-24 23:07:49 +02:00
parent 35f07cfc1b
commit 6582215f87
3 changed files with 90 additions and 27 deletions

@ -126,7 +126,7 @@ void OSLRenderServices::thread_init(KernelGlobals *kernel_globals_, OSL::Texture
osl_ts = osl_ts_; osl_ts = osl_ts_;
} }
bool OSLRenderServices::get_matrix(OSL::Matrix44 &result, OSL::TransformationPtr xform, float time) bool OSLRenderServices::get_matrix(OSL::ShaderGlobals *sg, OSL::Matrix44 &result, OSL::TransformationPtr xform, float time)
{ {
/* this is only used for shader and object space, we don't really have /* this is only used for shader and object space, we don't really have
* a concept of shader space, so we just use object space for both. */ * a concept of shader space, so we just use object space for both. */
@ -156,7 +156,7 @@ bool OSLRenderServices::get_matrix(OSL::Matrix44 &result, OSL::TransformationPtr
return false; return false;
} }
bool OSLRenderServices::get_inverse_matrix(OSL::Matrix44 &result, OSL::TransformationPtr xform, float time) bool OSLRenderServices::get_inverse_matrix(OSL::ShaderGlobals *sg, OSL::Matrix44 &result, OSL::TransformationPtr xform, float time)
{ {
/* this is only used for shader and object space, we don't really have /* this is only used for shader and object space, we don't really have
* a concept of shader space, so we just use object space for both. */ * a concept of shader space, so we just use object space for both. */
@ -186,7 +186,7 @@ bool OSLRenderServices::get_inverse_matrix(OSL::Matrix44 &result, OSL::Transform
return false; return false;
} }
bool OSLRenderServices::get_matrix(OSL::Matrix44 &result, ustring from, float time) bool OSLRenderServices::get_matrix(OSL::ShaderGlobals *sg, OSL::Matrix44 &result, ustring from, float time)
{ {
KernelGlobals *kg = kernel_globals; KernelGlobals *kg = kernel_globals;
@ -218,7 +218,7 @@ bool OSLRenderServices::get_matrix(OSL::Matrix44 &result, ustring from, float ti
return false; return false;
} }
bool OSLRenderServices::get_inverse_matrix(OSL::Matrix44 &result, ustring to, float time) bool OSLRenderServices::get_inverse_matrix(OSL::ShaderGlobals *sg, OSL::Matrix44 &result, ustring to, float time)
{ {
KernelGlobals *kg = kernel_globals; KernelGlobals *kg = kernel_globals;
@ -250,7 +250,7 @@ bool OSLRenderServices::get_inverse_matrix(OSL::Matrix44 &result, ustring to, fl
return false; return false;
} }
bool OSLRenderServices::get_matrix(OSL::Matrix44 &result, OSL::TransformationPtr xform) bool OSLRenderServices::get_matrix(OSL::ShaderGlobals *sg, OSL::Matrix44 &result, OSL::TransformationPtr xform)
{ {
/* this is only used for shader and object space, we don't really have /* this is only used for shader and object space, we don't really have
* a concept of shader space, so we just use object space for both. */ * a concept of shader space, so we just use object space for both. */
@ -275,7 +275,7 @@ bool OSLRenderServices::get_matrix(OSL::Matrix44 &result, OSL::TransformationPtr
return false; return false;
} }
bool OSLRenderServices::get_inverse_matrix(OSL::Matrix44 &result, OSL::TransformationPtr xform) bool OSLRenderServices::get_inverse_matrix(OSL::ShaderGlobals *sg, OSL::Matrix44 &result, OSL::TransformationPtr xform)
{ {
/* this is only used for shader and object space, we don't really have /* this is only used for shader and object space, we don't really have
* a concept of shader space, so we just use object space for both. */ * a concept of shader space, so we just use object space for both. */
@ -300,7 +300,7 @@ bool OSLRenderServices::get_inverse_matrix(OSL::Matrix44 &result, OSL::Transform
return false; return false;
} }
bool OSLRenderServices::get_matrix(OSL::Matrix44 &result, ustring from) bool OSLRenderServices::get_matrix(OSL::ShaderGlobals *sg, OSL::Matrix44 &result, ustring from)
{ {
KernelGlobals *kg = kernel_globals; KernelGlobals *kg = kernel_globals;
@ -328,7 +328,7 @@ bool OSLRenderServices::get_matrix(OSL::Matrix44 &result, ustring from)
return false; return false;
} }
bool OSLRenderServices::get_inverse_matrix(OSL::Matrix44 &result, ustring to) bool OSLRenderServices::get_inverse_matrix(OSL::ShaderGlobals *sg, OSL::Matrix44 &result, ustring to)
{ {
KernelGlobals *kg = kernel_globals; KernelGlobals *kg = kernel_globals;
@ -356,7 +356,7 @@ bool OSLRenderServices::get_inverse_matrix(OSL::Matrix44 &result, ustring to)
return false; return false;
} }
bool OSLRenderServices::get_array_attribute(void *renderstate, bool derivatives, bool OSLRenderServices::get_array_attribute(OSL::ShaderGlobals *sg, bool derivatives,
ustring object, TypeDesc type, ustring name, ustring object, TypeDesc type, ustring name,
int index, void *val) int index, void *val)
{ {
@ -751,13 +751,13 @@ bool OSLRenderServices::get_background_attribute(KernelGlobals *kg, ShaderData *
return false; return false;
} }
bool OSLRenderServices::get_attribute(void *renderstate, bool derivatives, ustring object_name, bool OSLRenderServices::get_attribute(OSL::ShaderGlobals *sg, bool derivatives, ustring object_name,
TypeDesc type, ustring name, void *val) TypeDesc type, ustring name, void *val)
{ {
if (renderstate == NULL) if (sg->renderstate == NULL)
return false; return false;
ShaderData *sd = (ShaderData *)renderstate; ShaderData *sd = (ShaderData *)(sg->renderstate);
KernelGlobals *kg = sd->osl_globals; KernelGlobals *kg = sd->osl_globals;
bool is_curve; bool is_curve;
int object; int object;
@ -815,12 +815,12 @@ bool OSLRenderServices::get_attribute(void *renderstate, bool derivatives, ustri
} }
bool OSLRenderServices::get_userdata(bool derivatives, ustring name, TypeDesc type, bool OSLRenderServices::get_userdata(bool derivatives, ustring name, TypeDesc type,
void *renderstate, void *val) OSL::ShaderGlobals *sg, void *val)
{ {
return false; /* disabled by lockgeom */ return false; /* disabled by lockgeom */
} }
bool OSLRenderServices::has_userdata(ustring name, TypeDesc type, void *renderstate) bool OSLRenderServices::has_userdata(ustring name, TypeDesc type, OSL::ShaderGlobals *sg)
{ {
return false; /* never called by OSL */ return false; /* never called by OSL */
} }
@ -1100,7 +1100,7 @@ bool OSLRenderServices::getmessage(OSL::ShaderGlobals *sg, ustring source, ustri
return set_attribute_float(f, type, derivatives, val); return set_attribute_float(f, type, derivatives, val);
} }
return get_attribute(sd, derivatives, u_empty, type, name, val); return get_attribute(sg, derivatives, u_empty, type, name, val);
} }
} }
} }

@ -49,27 +49,27 @@ public:
void thread_init(KernelGlobals *kernel_globals, OSL::TextureSystem *ts); void thread_init(KernelGlobals *kernel_globals, OSL::TextureSystem *ts);
bool get_matrix(OSL::Matrix44 &result, OSL::TransformationPtr xform, float time); bool get_matrix(OSL::ShaderGlobals *sg, OSL::Matrix44 &result, OSL::TransformationPtr xform, float time);
bool get_inverse_matrix(OSL::Matrix44 &result, OSL::TransformationPtr xform, float time); bool get_inverse_matrix(OSL::ShaderGlobals *sg, OSL::Matrix44 &result, OSL::TransformationPtr xform, float time);
bool get_matrix(OSL::Matrix44 &result, ustring from, float time); bool get_matrix(OSL::ShaderGlobals *sg, OSL::Matrix44 &result, ustring from, float time);
bool get_inverse_matrix(OSL::Matrix44 &result, ustring to, float time); bool get_inverse_matrix(OSL::ShaderGlobals *sg, OSL::Matrix44 &result, ustring to, float time);
bool get_matrix(OSL::Matrix44 &result, OSL::TransformationPtr xform); bool get_matrix(OSL::ShaderGlobals *sg, OSL::Matrix44 &result, OSL::TransformationPtr xform);
bool get_inverse_matrix(OSL::Matrix44 &result, OSL::TransformationPtr xform); bool get_inverse_matrix(OSL::ShaderGlobals *sg, OSL::Matrix44 &result, OSL::TransformationPtr xform);
bool get_matrix(OSL::Matrix44 &result, ustring from); bool get_matrix(OSL::ShaderGlobals *sg, OSL::Matrix44 &result, ustring from);
bool get_inverse_matrix(OSL::Matrix44 &result, ustring from); bool get_inverse_matrix(OSL::ShaderGlobals *sg, OSL::Matrix44 &result, ustring from);
bool get_array_attribute(void *renderstate, bool derivatives, bool get_array_attribute(OSL::ShaderGlobals *sg, bool derivatives,
ustring object, TypeDesc type, ustring name, ustring object, TypeDesc type, ustring name,
int index, void *val); int index, void *val);
bool get_attribute(void *renderstate, bool derivatives, ustring object, bool get_attribute(OSL::ShaderGlobals *sg, bool derivatives, ustring object,
TypeDesc type, ustring name, void *val); TypeDesc type, ustring name, void *val);
bool get_userdata(bool derivatives, ustring name, TypeDesc type, bool get_userdata(bool derivatives, ustring name, TypeDesc type,
void *renderstate, void *val); OSL::ShaderGlobals *sg, void *val);
bool has_userdata(ustring name, TypeDesc type, void *renderstate); bool has_userdata(ustring name, TypeDesc type, OSL::ShaderGlobals *sg);
int pointcloud_search(OSL::ShaderGlobals *sg, ustring filename, const OSL::Vec3 &center, int pointcloud_search(OSL::ShaderGlobals *sg, ustring filename, const OSL::Vec3 &center,
float radius, int max_points, bool sort, size_t *out_indices, float radius, int max_points, bool sort, size_t *out_indices,
@ -157,6 +157,65 @@ public:
static ustring u_v; static ustring u_v;
static ustring u_empty; static ustring u_empty;
#if OSL_LIBRARY_VERSION_CODE < 10500
bool get_matrix(OSL::Matrix44 &result, OSL::TransformationPtr xform, float time) {
return get_matrix(NULL, result, xform, time);
}
bool get_inverse_matrix(OSL::Matrix44 &result, OSL::TransformationPtr xform, float time) {
return get_inverse_matrix(NULL, result, xform, time);
}
bool get_matrix(OSL::Matrix44 &result, ustring from, float time) {
return get_matrix(NULL, result, from, time);
}
bool get_inverse_matrix(OSL::Matrix44 &result, ustring to, float time) {
return get_inverse_matrix(NULL, result, to, time);
}
bool get_matrix(OSL::Matrix44 &result, OSL::TransformationPtr xform) {
return get_matrix(NULL, result, xform);
}
bool get_inverse_matrix(OSL::Matrix44 &result, OSL::TransformationPtr xform) {
return get_inverse_matrix(NULL, result, xform);
}
bool get_matrix(OSL::Matrix44 &result, ustring from) {
return get_matrix(NULL, result, from);
}
bool get_inverse_matrix(OSL::Matrix44 &result, ustring to) {
return get_inverse_matrix(NULL, result, to);
}
bool get_array_attribute(void *renderstate, bool derivatives,
ustring object, TypeDesc type, ustring name,
int index, void *val) {
OSL::ShaderGlobals sg;
sg.renderstate = renderstate;
return get_array_attribute(&sg, derivatives,
object, type, name,
index, val);
}
bool get_attribute(void *renderstate, bool derivatives, ustring object_name,
TypeDesc type, ustring name, void *val) {
OSL::ShaderGlobals sg;
sg.renderstate = renderstate;
return get_attribute(&sg, derivatives, object_name, type, name, val);
}
bool has_userdata(ustring name, TypeDesc type, void *renderstate) {
return has_userdata(name, type, (OSL::ShaderGlobals *) renderstate);
}
bool get_userdata(bool derivatives, ustring name, TypeDesc type,
void *renderstate, void *val) {
return get_userdata(derivatives, name, type, (OSL::ShaderGlobals *) renderstate, val);
}
#endif
private: private:
KernelGlobals *kernel_globals; KernelGlobals *kernel_globals;
OSL::TextureSystem *osl_ts; OSL::TextureSystem *osl_ts;

@ -248,7 +248,11 @@ void OSLShaderManager::shading_system_free()
bool OSLShaderManager::osl_compile(const string& inputfile, const string& outputfile) bool OSLShaderManager::osl_compile(const string& inputfile, const string& outputfile)
{ {
#if OSL_LIBRARY_VERSION_CODE >= 10500
vector<string_view> options;
#else
vector<string> options; vector<string> options;
#endif
string stdosl_path; string stdosl_path;
/* specify output file name */ /* specify output file name */