[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