Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMai Lavelle <mai.lavelle@gmail.com>2017-11-27 08:47:24 +0300
committerMai Lavelle <mai.lavelle@gmail.com>2017-11-27 08:51:51 +0300
commit7fdc17434e386b29fd446e4dc066c84d00ff1638 (patch)
treef633e8009ad73b685297ad7698fe0d0dd85b5085
parent8ef6f7e80ffc32ea37b47d3ba829f10ebea83c7f (diff)
Cycles: Fix mistake with ShaderEvalTask that could lead to crash
-rw-r--r--intern/cycles/kernel/split/kernel_shader_eval.h2
-rw-r--r--intern/cycles/kernel/split/kernel_split_common.h2
-rw-r--r--intern/cycles/kernel/split/kernel_split_data_types.h1
3 files changed, 3 insertions, 2 deletions
diff --git a/intern/cycles/kernel/split/kernel_shader_eval.h b/intern/cycles/kernel/split/kernel_shader_eval.h
index f095b4f84ee..c53807f4e09 100644
--- a/intern/cycles/kernel/split/kernel_shader_eval.h
+++ b/intern/cycles/kernel/split/kernel_shader_eval.h
@@ -42,7 +42,7 @@ ccl_device void kernel_shader_eval(KernelGlobals *kg)
if(IS_STATE(kernel_split_state.ray_state, ray_index, shade_state)) {
ShaderEvalTask *eval_task = &kernel_split_state.shader_eval_task[ray_index];
- ShaderData *sd = (ShaderData*)(((ccl_global char*)&kernel_split_state) + eval_task->sd_offset);
+ ShaderData *sd = (ShaderData*)(kernel_split_state.data + eval_task->sd_offset);
ccl_global PathState *state = &kernel_split_state.path_state[ray_index];
shader_eval(kg, sd, state, eval_task->intent);
diff --git a/intern/cycles/kernel/split/kernel_split_common.h b/intern/cycles/kernel/split/kernel_split_common.h
index c2c92ea142d..093bcaa84ea 100644
--- a/intern/cycles/kernel/split/kernel_split_common.h
+++ b/intern/cycles/kernel/split/kernel_split_common.h
@@ -56,7 +56,7 @@ CCL_NAMESPACE_BEGIN
ccl_device void shader_eval_task_setup(KernelGlobals *kg, ShaderEvalTask *task, ShaderData *sd, ShaderEvalIntent intent) {
task->intent = intent;
- task->sd_offset = ((ccl_global char*)sd) - ((ccl_global char*)&kernel_split_state);
+ task->sd_offset = ((ccl_global char*)sd) - kernel_split_state.data;
}
ccl_device_inline void kernel_split_path_end(KernelGlobals *kg, int ray_index)
diff --git a/intern/cycles/kernel/split/kernel_split_data_types.h b/intern/cycles/kernel/split/kernel_split_data_types.h
index d7731441089..dab0bf72fcf 100644
--- a/intern/cycles/kernel/split/kernel_split_data_types.h
+++ b/intern/cycles/kernel/split/kernel_split_data_types.h
@@ -111,6 +111,7 @@ typedef ccl_global struct SplitBranchedState {
#endif /* __VOLUME__ */
#define SPLIT_DATA_ENTRIES \
+ SPLIT_DATA_ENTRY(ccl_global char, data, 0) \
SPLIT_DATA_ENTRY(ccl_global float3, throughput, 1) \
SPLIT_DATA_ENTRY(PathRadiance, path_radiance, 1) \
SPLIT_DATA_ENTRY(ccl_global Ray, ray, 1) \