forked from bartvdbraak/blender
Cycles / OSLGlobals:
* Fixes for changes in the Open Shading Langauge API from version 0.6.0: 11ce51418b
* Removed the need for ShadingSystemImpl.
This commit is contained in:
parent
7ac0dd2953
commit
fda711a851
@ -60,7 +60,7 @@ struct OSLGlobals {
|
|||||||
/* thread key for thread specific data lookup */
|
/* thread key for thread specific data lookup */
|
||||||
struct ThreadData {
|
struct ThreadData {
|
||||||
OSL::ShaderGlobals globals;
|
OSL::ShaderGlobals globals;
|
||||||
void *thread_info;
|
OSL::PerThreadInfo *thread_info;
|
||||||
};
|
};
|
||||||
|
|
||||||
static tls_ptr(ThreadData, thread_data);
|
static tls_ptr(ThreadData, thread_data);
|
||||||
|
@ -36,25 +36,27 @@ tls_ptr(OSLGlobals::ThreadData, OSLGlobals::thread_data);
|
|||||||
|
|
||||||
void OSLShader::thread_init(KernelGlobals *kg)
|
void OSLShader::thread_init(KernelGlobals *kg)
|
||||||
{
|
{
|
||||||
OSL::pvt::ShadingSystemImpl *ssi = (OSL::pvt::ShadingSystemImpl *)kg->osl.ss;
|
OSL::ShadingSystem *ss = kg->osl.ss;
|
||||||
|
|
||||||
OSLGlobals::ThreadData *tdata = new OSLGlobals::ThreadData();
|
OSLGlobals::ThreadData *tdata = new OSLGlobals::ThreadData();
|
||||||
|
|
||||||
memset(&tdata->globals, 0, sizeof(OSL::ShaderGlobals));
|
memset(&tdata->globals, 0, sizeof(OSL::ShaderGlobals));
|
||||||
tdata->thread_info = ssi->create_thread_info();
|
tdata->thread_info = ss->create_thread_info();
|
||||||
|
|
||||||
tls_set(kg->osl.thread_data, tdata);
|
tls_set(kg->osl.thread_data, tdata);
|
||||||
|
|
||||||
((OSLRenderServices *)ssi->renderer())->thread_init(kg);
|
//((OSLRenderServices *)ssi->renderer())->thread_init(kg);
|
||||||
|
/* XXX not sure here - dingto */
|
||||||
|
thread_init(kg);
|
||||||
}
|
}
|
||||||
|
|
||||||
void OSLShader::thread_free(KernelGlobals *kg)
|
void OSLShader::thread_free(KernelGlobals *kg)
|
||||||
{
|
{
|
||||||
OSL::pvt::ShadingSystemImpl *ssi = (OSL::pvt::ShadingSystemImpl *)kg->osl.ss;
|
OSL::ShadingSystem *ss = kg->osl.ss;
|
||||||
|
|
||||||
OSLGlobals::ThreadData *tdata = tls_get(OSLGlobals::ThreadData, kg->osl.thread_data);
|
OSLGlobals::ThreadData *tdata = tls_get(OSLGlobals::ThreadData, kg->osl.thread_data);
|
||||||
|
|
||||||
ssi->destroy_thread_info(tdata->thread_info);
|
ss->destroy_thread_info(tdata->thread_info);
|
||||||
|
|
||||||
delete tdata;
|
delete tdata;
|
||||||
}
|
}
|
||||||
@ -201,10 +203,10 @@ static void flatten_surface_closure_tree(ShaderData *sd, bool no_glossy,
|
|||||||
void OSLShader::eval_surface(KernelGlobals *kg, ShaderData *sd, float randb, int path_flag)
|
void OSLShader::eval_surface(KernelGlobals *kg, ShaderData *sd, float randb, int path_flag)
|
||||||
{
|
{
|
||||||
/* gather pointers */
|
/* gather pointers */
|
||||||
OSL::pvt::ShadingSystemImpl *ssi = (OSL::pvt::ShadingSystemImpl *)kg->osl.ss;
|
OSL::ShadingSystem *ss = kg->osl.ss;
|
||||||
OSLGlobals::ThreadData *tdata = tls_get(OSLGlobals::ThreadData, kg->osl.thread_data);
|
OSLGlobals::ThreadData *tdata = tls_get(OSLGlobals::ThreadData, kg->osl.thread_data);
|
||||||
OSL::ShaderGlobals *globals = &tdata->globals;
|
OSL::ShaderGlobals *globals = &tdata->globals;
|
||||||
OSL::pvt::ShadingContext *ctx = ssi->get_context(tdata->thread_info);
|
OSL::ShadingContext *ctx = ss->get_context(tdata->thread_info);
|
||||||
|
|
||||||
/* setup shader globals from shader data */
|
/* setup shader globals from shader data */
|
||||||
sd->osl_ctx = ctx;
|
sd->osl_ctx = ctx;
|
||||||
@ -214,7 +216,7 @@ void OSLShader::eval_surface(KernelGlobals *kg, ShaderData *sd, float randb, int
|
|||||||
int shader = sd->shader & SHADER_MASK;
|
int shader = sd->shader & SHADER_MASK;
|
||||||
|
|
||||||
if (kg->osl.surface_state[shader])
|
if (kg->osl.surface_state[shader])
|
||||||
ctx->execute(OSL::pvt::ShadUseSurface, *(kg->osl.surface_state[shader]), *globals);
|
ss->execute(*ctx, *(kg->osl.surface_state[shader]), *globals);
|
||||||
|
|
||||||
/* flatten closure tree */
|
/* flatten closure tree */
|
||||||
sd->num_closure = 0;
|
sd->num_closure = 0;
|
||||||
@ -259,10 +261,10 @@ static float3 flatten_background_closure_tree(const OSL::ClosureColor *closure)
|
|||||||
float3 OSLShader::eval_background(KernelGlobals *kg, ShaderData *sd, int path_flag)
|
float3 OSLShader::eval_background(KernelGlobals *kg, ShaderData *sd, int path_flag)
|
||||||
{
|
{
|
||||||
/* gather pointers */
|
/* gather pointers */
|
||||||
OSL::pvt::ShadingSystemImpl *ssi = (OSL::pvt::ShadingSystemImpl *)kg->osl.ss;
|
OSL::ShadingSystem *ss = kg->osl.ss;
|
||||||
OSLGlobals::ThreadData *tdata = tls_get(OSLGlobals::ThreadData, kg->osl.thread_data);
|
OSLGlobals::ThreadData *tdata = tls_get(OSLGlobals::ThreadData, kg->osl.thread_data);
|
||||||
OSL::ShaderGlobals *globals = &tdata->globals;
|
OSL::ShaderGlobals *globals = &tdata->globals;
|
||||||
OSL::pvt::ShadingContext *ctx = ssi->get_context(tdata->thread_info);
|
OSL::ShadingContext *ctx = ss->get_context(tdata->thread_info);
|
||||||
|
|
||||||
/* setup shader globals from shader data */
|
/* setup shader globals from shader data */
|
||||||
sd->osl_ctx = ctx;
|
sd->osl_ctx = ctx;
|
||||||
@ -270,7 +272,7 @@ float3 OSLShader::eval_background(KernelGlobals *kg, ShaderData *sd, int path_fl
|
|||||||
|
|
||||||
/* execute shader for this point */
|
/* execute shader for this point */
|
||||||
if (kg->osl.background_state)
|
if (kg->osl.background_state)
|
||||||
ctx->execute(OSL::pvt::ShadUseSurface, *kg->osl.background_state, *globals);
|
ss->execute(*ctx, *(kg->osl.background_state), *globals);
|
||||||
|
|
||||||
/* return background color immediately */
|
/* return background color immediately */
|
||||||
if (globals->Ci)
|
if (globals->Ci)
|
||||||
@ -336,10 +338,10 @@ static void flatten_volume_closure_tree(ShaderData *sd,
|
|||||||
void OSLShader::eval_volume(KernelGlobals *kg, ShaderData *sd, float randb, int path_flag)
|
void OSLShader::eval_volume(KernelGlobals *kg, ShaderData *sd, float randb, int path_flag)
|
||||||
{
|
{
|
||||||
/* gather pointers */
|
/* gather pointers */
|
||||||
OSL::pvt::ShadingSystemImpl *ssi = (OSL::pvt::ShadingSystemImpl *)kg->osl.ss;
|
OSL::ShadingSystem *ss = kg->osl.ss;
|
||||||
OSLGlobals::ThreadData *tdata = tls_get(OSLGlobals::ThreadData, kg->osl.thread_data);
|
OSLGlobals::ThreadData *tdata = tls_get(OSLGlobals::ThreadData, kg->osl.thread_data);
|
||||||
OSL::ShaderGlobals *globals = &tdata->globals;
|
OSL::ShaderGlobals *globals = &tdata->globals;
|
||||||
OSL::pvt::ShadingContext *ctx = ssi->get_context(tdata->thread_info);
|
OSL::ShadingContext *ctx = ss->get_context(tdata->thread_info);
|
||||||
|
|
||||||
/* setup shader globals from shader data */
|
/* setup shader globals from shader data */
|
||||||
sd->osl_ctx = ctx;
|
sd->osl_ctx = ctx;
|
||||||
@ -349,7 +351,7 @@ void OSLShader::eval_volume(KernelGlobals *kg, ShaderData *sd, float randb, int
|
|||||||
int shader = sd->shader & SHADER_MASK;
|
int shader = sd->shader & SHADER_MASK;
|
||||||
|
|
||||||
if (kg->osl.volume_state[shader])
|
if (kg->osl.volume_state[shader])
|
||||||
ctx->execute(OSL::pvt::ShadUseSurface, *(kg->osl.volume_state[shader]), *globals);
|
ss->execute(*ctx, *(kg->osl.volume_state[shader]), *globals);
|
||||||
|
|
||||||
if (globals->Ci)
|
if (globals->Ci)
|
||||||
flatten_volume_closure_tree(sd, globals->Ci);
|
flatten_volume_closure_tree(sd, globals->Ci);
|
||||||
@ -360,10 +362,10 @@ void OSLShader::eval_volume(KernelGlobals *kg, ShaderData *sd, float randb, int
|
|||||||
void OSLShader::eval_displacement(KernelGlobals *kg, ShaderData *sd)
|
void OSLShader::eval_displacement(KernelGlobals *kg, ShaderData *sd)
|
||||||
{
|
{
|
||||||
/* gather pointers */
|
/* gather pointers */
|
||||||
OSL::pvt::ShadingSystemImpl *ssi = (OSL::pvt::ShadingSystemImpl *)kg->osl.ss;
|
OSL::ShadingSystem *ss = kg->osl.ss;
|
||||||
OSLGlobals::ThreadData *tdata = tls_get(OSLGlobals::ThreadData, kg->osl.thread_data);
|
OSLGlobals::ThreadData *tdata = tls_get(OSLGlobals::ThreadData, kg->osl.thread_data);
|
||||||
OSL::ShaderGlobals *globals = &tdata->globals;
|
OSL::ShaderGlobals *globals = &tdata->globals;
|
||||||
OSL::pvt::ShadingContext *ctx = ssi->get_context(tdata->thread_info);
|
OSL::ShadingContext *ctx = ss->get_context(tdata->thread_info);
|
||||||
|
|
||||||
/* setup shader globals from shader data */
|
/* setup shader globals from shader data */
|
||||||
sd->osl_ctx = ctx;
|
sd->osl_ctx = ctx;
|
||||||
@ -373,7 +375,7 @@ void OSLShader::eval_displacement(KernelGlobals *kg, ShaderData *sd)
|
|||||||
int shader = sd->shader & SHADER_MASK;
|
int shader = sd->shader & SHADER_MASK;
|
||||||
|
|
||||||
if (kg->osl.displacement_state[shader])
|
if (kg->osl.displacement_state[shader])
|
||||||
ctx->execute(OSL::pvt::ShadUseSurface, *(kg->osl.displacement_state[shader]), *globals);
|
ss->execute(*ctx, *(kg->osl.displacement_state[shader]), *globals);
|
||||||
|
|
||||||
/* get back position */
|
/* get back position */
|
||||||
sd->P = TO_FLOAT3(globals->P);
|
sd->P = TO_FLOAT3(globals->P);
|
||||||
@ -381,10 +383,11 @@ void OSLShader::eval_displacement(KernelGlobals *kg, ShaderData *sd)
|
|||||||
|
|
||||||
void OSLShader::release(KernelGlobals *kg, const ShaderData *sd)
|
void OSLShader::release(KernelGlobals *kg, const ShaderData *sd)
|
||||||
{
|
{
|
||||||
OSL::pvt::ShadingSystemImpl *ssi = (OSL::pvt::ShadingSystemImpl *)kg->osl.ss;
|
OSL::ShadingSystem *ss = kg->osl.ss;
|
||||||
OSLGlobals::ThreadData *tdata = tls_get(OSLGlobals::ThreadData, kg->osl.thread_data);
|
OSLGlobals::ThreadData *tdata = tls_get(OSLGlobals::ThreadData, kg->osl.thread_data);
|
||||||
|
OSL::ShadingContext *ctx = ss->get_context(tdata->thread_info);
|
||||||
|
|
||||||
ssi->release_context((OSL::pvt::ShadingContext *)sd->osl_ctx, tdata->thread_info);
|
ss->release_context(ctx);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* BSDF Closure */
|
/* BSDF Closure */
|
||||||
|
Loading…
Reference in New Issue
Block a user