[Bf-blender-cvs] [9228722] cycles_split_kernel: Cycles: Fix rendering with OSL and split kernel
Mai Lavelle
noreply at git.blender.org
Wed Nov 2 16:03:54 CET 2016
Commit: 9228722a8a9c488649214e13823dcf943afc1150
Author: Mai Lavelle
Date: Tue Nov 1 19:33:30 2016 +0100
Branches: cycles_split_kernel
https://developer.blender.org/rB9228722a8a9c488649214e13823dcf943afc1150
Cycles: Fix rendering with OSL and split kernel
The `sd` pointer doesn't actually point to the threads own `sd` in the split
kernel, needed to account for that for OSL to render correctly.
===================================================================
M intern/cycles/kernel/kernel_shader.h
M intern/cycles/kernel/kernel_types.h
===================================================================
diff --git a/intern/cycles/kernel/kernel_shader.h b/intern/cycles/kernel/kernel_shader.h
index 3e098c9..fd0c874 100644
--- a/intern/cycles/kernel/kernel_shader.h
+++ b/intern/cycles/kernel/kernel_shader.h
@@ -844,7 +844,7 @@ ccl_device void shader_eval_surface(KernelGlobals *kg, ShaderData *sd, ccl_addr_
#ifdef __OSL__
if(kg->osl)
- OSLShader::eval_surface(kg, sd, state, path_flag, ctx);
+ OSLShader::eval_surface(kg, ccl_thread_sd(sd), state, path_flag, ctx);
else
#endif
{
@@ -876,7 +876,7 @@ ccl_device float3 shader_eval_background(KernelGlobals *kg, ShaderData *sd,
#ifdef __SVM__
#ifdef __OSL__
if(kg->osl) {
- OSLShader::eval_background(kg, sd, state, path_flag, ctx);
+ OSLShader::eval_background(kg, ccl_thread_sd(sd), state, path_flag, ctx);
}
else
#endif
@@ -1043,7 +1043,7 @@ ccl_device_inline void shader_eval_volume(KernelGlobals *kg,
#ifdef __SVM__
# ifdef __OSL__
if(kg->osl) {
- OSLShader::eval_volume(kg, sd, state, path_flag, ctx);
+ OSLShader::eval_volume(kg, ccl_thread_sd(sd), state, path_flag, ctx);
}
else
# endif
@@ -1072,7 +1072,7 @@ ccl_device void shader_eval_displacement(KernelGlobals *kg, ShaderData *sd, ccl_
#ifdef __SVM__
# ifdef __OSL__
if(kg->osl)
- OSLShader::eval_displacement(kg, sd, ctx);
+ OSLShader::eval_displacement(kg, ccl_thread_sd(sd), ctx);
else
# endif
{
diff --git a/intern/cycles/kernel/kernel_types.h b/intern/cycles/kernel/kernel_types.h
index 8e3fa92..f47c92d 100644
--- a/intern/cycles/kernel/kernel_types.h
+++ b/intern/cycles/kernel/kernel_types.h
@@ -755,6 +755,7 @@ enum ShaderDataFlag {
# define ccl_soa_member(type, name) type soa_##name
# define ccl_fetch(s, t) (s[SD_THREAD].soa_##t)
# define ccl_fetch_array(s, t, index) (&s[SD_THREAD].soa_##t[index])
+# define ccl_thread_sd(s) (&(s[SD_THREAD]))
# else
/* ShaderData is stored as an Structure-of-Arrays */
# define SD_GLOBAL_SIZE (ccl_global_size(0) * ccl_global_size(1))
@@ -768,6 +769,7 @@ enum ShaderDataFlag {
# define ccl_soa_member(type, name) type name
# define ccl_fetch(s, t) (s->t)
# define ccl_fetch_array(s, t, index) (&s->t[index])
+# define ccl_thread_sd(s) (s)
#endif
typedef ccl_addr_space struct ShaderData {
More information about the Bf-blender-cvs
mailing list