Cycles: update OSL to work with version 1.13.5
This keeps compatibility with older stable versions, but not older unreleased versions in the 1.13.x series. Ref #113157 Pull Request: https://projects.blender.org/blender/blender/pulls/116004
This commit is contained in:
parent
12c4d22e6d
commit
798a0b301e
|
@ -313,7 +313,7 @@ void CPUDevice::get_cpu_kernel_thread_globals(
|
||||||
kernel_thread_globals.clear();
|
kernel_thread_globals.clear();
|
||||||
void *osl_memory = get_cpu_osl_memory();
|
void *osl_memory = get_cpu_osl_memory();
|
||||||
for (int i = 0; i < info.cpu_threads; i++) {
|
for (int i = 0; i < info.cpu_threads; i++) {
|
||||||
kernel_thread_globals.emplace_back(kernel_globals, osl_memory, profiler);
|
kernel_thread_globals.emplace_back(kernel_globals, osl_memory, profiler, i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -12,14 +12,16 @@ CCL_NAMESPACE_BEGIN
|
||||||
|
|
||||||
CPUKernelThreadGlobals::CPUKernelThreadGlobals(const KernelGlobalsCPU &kernel_globals,
|
CPUKernelThreadGlobals::CPUKernelThreadGlobals(const KernelGlobalsCPU &kernel_globals,
|
||||||
void *osl_globals_memory,
|
void *osl_globals_memory,
|
||||||
Profiler &cpu_profiler)
|
Profiler &cpu_profiler,
|
||||||
|
const int thread_index)
|
||||||
: KernelGlobalsCPU(kernel_globals), cpu_profiler_(cpu_profiler)
|
: KernelGlobalsCPU(kernel_globals), cpu_profiler_(cpu_profiler)
|
||||||
{
|
{
|
||||||
clear_runtime_pointers();
|
clear_runtime_pointers();
|
||||||
|
|
||||||
#ifdef WITH_OSL
|
#ifdef WITH_OSL
|
||||||
OSLGlobals::thread_init(this, static_cast<OSLGlobals *>(osl_globals_memory));
|
OSLGlobals::thread_init(this, static_cast<OSLGlobals *>(osl_globals_memory), thread_index);
|
||||||
#else
|
#else
|
||||||
|
(void)thread_index;
|
||||||
(void)osl_globals_memory;
|
(void)osl_globals_memory;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -23,7 +23,8 @@ class CPUKernelThreadGlobals : public KernelGlobalsCPU {
|
||||||
* without OSL support. Will avoid need to those unnamed pointers and casts. */
|
* without OSL support. Will avoid need to those unnamed pointers and casts. */
|
||||||
CPUKernelThreadGlobals(const KernelGlobalsCPU &kernel_globals,
|
CPUKernelThreadGlobals(const KernelGlobalsCPU &kernel_globals,
|
||||||
void *osl_globals_memory,
|
void *osl_globals_memory,
|
||||||
Profiler &cpu_profiler);
|
Profiler &cpu_profiler,
|
||||||
|
const int thread_index);
|
||||||
|
|
||||||
~CPUKernelThreadGlobals();
|
~CPUKernelThreadGlobals();
|
||||||
|
|
||||||
|
|
|
@ -49,6 +49,7 @@ typedef struct KernelGlobalsCPU {
|
||||||
OSLGlobals *osl = nullptr;
|
OSLGlobals *osl = nullptr;
|
||||||
OSLShadingSystem *osl_ss = nullptr;
|
OSLShadingSystem *osl_ss = nullptr;
|
||||||
OSLThreadData *osl_tdata = nullptr;
|
OSLThreadData *osl_tdata = nullptr;
|
||||||
|
int osl_thread_index = 0;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef __PATH_GUIDING__
|
#ifdef __PATH_GUIDING__
|
||||||
|
|
|
@ -110,7 +110,17 @@ void osl_eval_nodes<SHADER_TYPE_SURFACE>(const KernelGlobalsCPU *kg,
|
||||||
if (sd->object == OBJECT_NONE && sd->lamp == LAMP_NONE) {
|
if (sd->object == OBJECT_NONE && sd->lamp == LAMP_NONE) {
|
||||||
/* background */
|
/* background */
|
||||||
if (kg->osl->background_state) {
|
if (kg->osl->background_state) {
|
||||||
|
#if OSL_LIBRARY_VERSION_CODE >= 11304
|
||||||
|
ss->execute(*octx,
|
||||||
|
*(kg->osl->background_state),
|
||||||
|
kg->osl_thread_index,
|
||||||
|
0,
|
||||||
|
*globals,
|
||||||
|
nullptr,
|
||||||
|
nullptr);
|
||||||
|
#else
|
||||||
ss->execute(octx, *(kg->osl->background_state), *globals);
|
ss->execute(octx, *(kg->osl->background_state), *globals);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -150,8 +160,18 @@ void osl_eval_nodes<SHADER_TYPE_SURFACE>(const KernelGlobalsCPU *kg,
|
||||||
globals->dPdy = TO_VEC3(tmp_dP.dy);
|
globals->dPdy = TO_VEC3(tmp_dP.dy);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* execute bump shader */
|
/* execute bump shader */
|
||||||
|
#if OSL_LIBRARY_VERSION_CODE >= 11304
|
||||||
|
ss->execute(*octx,
|
||||||
|
*(kg->osl->bump_state[shader]),
|
||||||
|
kg->osl_thread_index,
|
||||||
|
0,
|
||||||
|
*globals,
|
||||||
|
nullptr,
|
||||||
|
nullptr);
|
||||||
|
#else
|
||||||
ss->execute(octx, *(kg->osl->bump_state[shader]), *globals);
|
ss->execute(octx, *(kg->osl->bump_state[shader]), *globals);
|
||||||
|
#endif
|
||||||
|
|
||||||
/* reset state */
|
/* reset state */
|
||||||
sd->P = P;
|
sd->P = P;
|
||||||
|
@ -164,7 +184,17 @@ void osl_eval_nodes<SHADER_TYPE_SURFACE>(const KernelGlobalsCPU *kg,
|
||||||
|
|
||||||
/* surface shader */
|
/* surface shader */
|
||||||
if (kg->osl->surface_state[shader]) {
|
if (kg->osl->surface_state[shader]) {
|
||||||
|
#if OSL_LIBRARY_VERSION_CODE >= 11304
|
||||||
|
ss->execute(*octx,
|
||||||
|
*(kg->osl->surface_state[shader]),
|
||||||
|
kg->osl_thread_index,
|
||||||
|
0,
|
||||||
|
*globals,
|
||||||
|
nullptr,
|
||||||
|
nullptr);
|
||||||
|
#else
|
||||||
ss->execute(octx, *(kg->osl->surface_state[shader]), *globals);
|
ss->execute(octx, *(kg->osl->surface_state[shader]), *globals);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -208,7 +238,17 @@ void osl_eval_nodes<SHADER_TYPE_VOLUME>(const KernelGlobalsCPU *kg,
|
||||||
int shader = sd->shader & SHADER_MASK;
|
int shader = sd->shader & SHADER_MASK;
|
||||||
|
|
||||||
if (kg->osl->volume_state[shader]) {
|
if (kg->osl->volume_state[shader]) {
|
||||||
|
#if OSL_LIBRARY_VERSION_CODE >= 11304
|
||||||
|
ss->execute(*octx,
|
||||||
|
*(kg->osl->volume_state[shader]),
|
||||||
|
kg->osl_thread_index,
|
||||||
|
0,
|
||||||
|
*globals,
|
||||||
|
nullptr,
|
||||||
|
nullptr);
|
||||||
|
#else
|
||||||
ss->execute(octx, *(kg->osl->volume_state[shader]), *globals);
|
ss->execute(octx, *(kg->osl->volume_state[shader]), *globals);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/* flatten closure tree */
|
/* flatten closure tree */
|
||||||
|
@ -245,7 +285,17 @@ void osl_eval_nodes<SHADER_TYPE_DISPLACEMENT>(const KernelGlobalsCPU *kg,
|
||||||
int shader = sd->shader & SHADER_MASK;
|
int shader = sd->shader & SHADER_MASK;
|
||||||
|
|
||||||
if (kg->osl->displacement_state[shader]) {
|
if (kg->osl->displacement_state[shader]) {
|
||||||
|
#if OSL_LIBRARY_VERSION_CODE >= 11304
|
||||||
|
ss->execute(*octx,
|
||||||
|
*(kg->osl->displacement_state[shader]),
|
||||||
|
kg->osl_thread_index,
|
||||||
|
0,
|
||||||
|
*globals,
|
||||||
|
nullptr,
|
||||||
|
nullptr);
|
||||||
|
#else
|
||||||
ss->execute(octx, *(kg->osl->displacement_state[shader]), *globals);
|
ss->execute(octx, *(kg->osl->displacement_state[shader]), *globals);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/* get back position */
|
/* get back position */
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
|
|
||||||
CCL_NAMESPACE_BEGIN
|
CCL_NAMESPACE_BEGIN
|
||||||
|
|
||||||
void OSLGlobals::thread_init(KernelGlobalsCPU *kg, OSLGlobals *osl_globals)
|
void OSLGlobals::thread_init(KernelGlobalsCPU *kg, OSLGlobals *osl_globals, const int thread_index)
|
||||||
{
|
{
|
||||||
/* no osl used? */
|
/* no osl used? */
|
||||||
if (!osl_globals->use) {
|
if (!osl_globals->use) {
|
||||||
|
@ -37,6 +37,7 @@ void OSLGlobals::thread_init(KernelGlobalsCPU *kg, OSLGlobals *osl_globals)
|
||||||
|
|
||||||
kg->osl_ss = (OSLShadingSystem *)ss;
|
kg->osl_ss = (OSLShadingSystem *)ss;
|
||||||
kg->osl_tdata = tdata;
|
kg->osl_tdata = tdata;
|
||||||
|
kg->osl_thread_index = thread_index;
|
||||||
}
|
}
|
||||||
|
|
||||||
void OSLGlobals::thread_free(KernelGlobalsCPU *kg)
|
void OSLGlobals::thread_free(KernelGlobalsCPU *kg)
|
||||||
|
|
|
@ -45,7 +45,9 @@ struct OSLGlobals {
|
||||||
}
|
}
|
||||||
|
|
||||||
/* per thread data */
|
/* per thread data */
|
||||||
static void thread_init(struct KernelGlobalsCPU *kg, OSLGlobals *osl_globals);
|
static void thread_init(struct KernelGlobalsCPU *kg,
|
||||||
|
OSLGlobals *osl_globals,
|
||||||
|
const int thread_init);
|
||||||
static void thread_free(struct KernelGlobalsCPU *kg);
|
static void thread_free(struct KernelGlobalsCPU *kg);
|
||||||
|
|
||||||
bool use;
|
bool use;
|
||||||
|
|
|
@ -52,6 +52,11 @@ ccl_device_inline void shaderdata_to_shaderglobals(KernelGlobals kg,
|
||||||
|
|
||||||
/* shader data to be used in services callbacks */
|
/* shader data to be used in services callbacks */
|
||||||
globals->renderstate = sd;
|
globals->renderstate = sd;
|
||||||
|
#if OSL_LIBRARY_VERSION_CODE >= 11304
|
||||||
|
globals->shadingStateUniform = nullptr;
|
||||||
|
globals->thread_index = 0;
|
||||||
|
globals->shade_index = 0;
|
||||||
|
#endif
|
||||||
|
|
||||||
/* hacky, we leave it to services to fetch actual object matrix */
|
/* hacky, we leave it to services to fetch actual object matrix */
|
||||||
globals->shader2common = sd;
|
globals->shader2common = sd;
|
||||||
|
|
|
@ -1165,7 +1165,18 @@ bool OSLRenderServices::get_userdata(
|
||||||
return false; /* disabled by lockgeom */
|
return false; /* disabled by lockgeom */
|
||||||
}
|
}
|
||||||
|
|
||||||
#if OSL_LIBRARY_VERSION_CODE >= 11100
|
#if OSL_LIBRARY_VERSION_CODE >= 11304
|
||||||
|
TextureSystem::TextureHandle *OSLRenderServices::get_texture_handle(OSLUStringHash filename,
|
||||||
|
OSL::ShadingContext *context,
|
||||||
|
const TextureOpt *opt)
|
||||||
|
{
|
||||||
|
return get_texture_handle(to_ustring(filename), context, opt);
|
||||||
|
}
|
||||||
|
|
||||||
|
TextureSystem::TextureHandle *OSLRenderServices::get_texture_handle(OSL::ustring filename,
|
||||||
|
OSL::ShadingContext *,
|
||||||
|
const TextureOpt *)
|
||||||
|
#elif OSL_LIBRARY_VERSION_CODE >= 11100
|
||||||
TextureSystem::TextureHandle *OSLRenderServices::get_texture_handle(OSLUStringHash filename,
|
TextureSystem::TextureHandle *OSLRenderServices::get_texture_handle(OSLUStringHash filename,
|
||||||
OSL::ShadingContext *)
|
OSL::ShadingContext *)
|
||||||
#else
|
#else
|
||||||
|
@ -1616,7 +1627,17 @@ bool OSLRenderServices::environment(OSLUStringHash filename,
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if OSL_LIBRARY_VERSION_CODE >= 11100
|
#if OSL_LIBRARY_VERSION_CODE >= 11304
|
||||||
|
bool OSLRenderServices::get_texture_info(OSLUStringHash filename,
|
||||||
|
TextureHandle *texture_handle,
|
||||||
|
TexturePerthread *texture_thread_info,
|
||||||
|
OSL::ShaderGlobals *,
|
||||||
|
int subimage,
|
||||||
|
OSLUStringHash dataname,
|
||||||
|
TypeDesc datatype,
|
||||||
|
void *data,
|
||||||
|
OSLUStringHash *)
|
||||||
|
#elif OSL_LIBRARY_VERSION_CODE >= 11100
|
||||||
bool OSLRenderServices::get_texture_info(OSLUStringHash filename,
|
bool OSLRenderServices::get_texture_info(OSLUStringHash filename,
|
||||||
TextureHandle *texture_handle,
|
TextureHandle *texture_handle,
|
||||||
TexturePerthread *texture_thread_info,
|
TexturePerthread *texture_thread_info,
|
||||||
|
@ -1627,7 +1648,7 @@ bool OSLRenderServices::get_texture_info(OSLUStringHash filename,
|
||||||
void *data,
|
void *data,
|
||||||
OSLUStringHash *)
|
OSLUStringHash *)
|
||||||
#else
|
#else
|
||||||
bool OSLRenderServices::get_texture_info(OSL::ShaderGlobals *sg,
|
bool OSLRenderServices::get_texture_info(OSL::ShaderGlobals *,
|
||||||
OSLUStringHash filename,
|
OSLUStringHash filename,
|
||||||
TextureHandle *texture_handle,
|
TextureHandle *texture_handle,
|
||||||
int subimage,
|
int subimage,
|
||||||
|
|
|
@ -189,7 +189,14 @@ class OSLRenderServices : public OSL::RendererServices {
|
||||||
void *val,
|
void *val,
|
||||||
bool derivatives) override;
|
bool derivatives) override;
|
||||||
|
|
||||||
#if OSL_LIBRARY_VERSION_CODE >= 11100
|
#if OSL_LIBRARY_VERSION_CODE >= 11304
|
||||||
|
TextureSystem::TextureHandle *get_texture_handle(OSL::ustring filename,
|
||||||
|
OSL::ShadingContext *context,
|
||||||
|
const TextureOpt *options) override;
|
||||||
|
TextureSystem::TextureHandle *get_texture_handle(OSLUStringHash filename,
|
||||||
|
OSL::ShadingContext *context,
|
||||||
|
const TextureOpt *options) override;
|
||||||
|
#elif OSL_LIBRARY_VERSION_CODE >= 11100
|
||||||
TextureSystem::TextureHandle *get_texture_handle(OSLUStringHash filename,
|
TextureSystem::TextureHandle *get_texture_handle(OSLUStringHash filename,
|
||||||
OSL::ShadingContext *context) override;
|
OSL::ShadingContext *context) override;
|
||||||
#else
|
#else
|
||||||
|
@ -245,7 +252,17 @@ class OSLRenderServices : public OSL::RendererServices {
|
||||||
float *dresultdt,
|
float *dresultdt,
|
||||||
OSLUStringHash *errormessage) override;
|
OSLUStringHash *errormessage) override;
|
||||||
|
|
||||||
#if OSL_LIBRARY_VERSION_CODE >= 11100
|
#if OSL_LIBRARY_VERSION_CODE >= 11304
|
||||||
|
bool get_texture_info(OSLUStringHash filename,
|
||||||
|
TextureHandle *texture_handle,
|
||||||
|
TexturePerthread *texture_thread_info,
|
||||||
|
OSL::ShaderGlobals *sg,
|
||||||
|
int subimage,
|
||||||
|
OSLUStringHash dataname,
|
||||||
|
TypeDesc datatype,
|
||||||
|
void *data,
|
||||||
|
OSLUStringHash *errormessage) override;
|
||||||
|
#elif OSL_LIBRARY_VERSION_CODE >= 11100
|
||||||
bool get_texture_info(OSLUStringHash filename,
|
bool get_texture_info(OSLUStringHash filename,
|
||||||
TextureHandle *texture_handle,
|
TextureHandle *texture_handle,
|
||||||
TexturePerthread *texture_thread_info,
|
TexturePerthread *texture_thread_info,
|
||||||
|
|
|
@ -86,8 +86,10 @@ struct ShaderGlobals {
|
||||||
ccl_private void *tracedata;
|
ccl_private void *tracedata;
|
||||||
ccl_private void *objdata;
|
ccl_private void *objdata;
|
||||||
void *context;
|
void *context;
|
||||||
#if OSL_LIBRARY_VERSION_CODE >= 11302
|
#if OSL_LIBRARY_VERSION_CODE >= 11304
|
||||||
void *shadingStateUniform;
|
void *shadingStateUniform;
|
||||||
|
int thread_index;
|
||||||
|
int shade_index;
|
||||||
#endif
|
#endif
|
||||||
void *renderer;
|
void *renderer;
|
||||||
ccl_private void *object2common;
|
ccl_private void *object2common;
|
||||||
|
|
Loading…
Reference in New Issue