diff options
author | Hristo Gueorguiev <prem.nirved@gmail.com> | 2017-04-25 21:08:14 +0300 |
---|---|---|
committer | Hristo Gueorguiev <prem.nirved@gmail.com> | 2017-04-25 21:08:14 +0300 |
commit | 9d26e32ea28b35bf51b27828f7b58fe479a29a68 (patch) | |
tree | 18e68ea8b04ddeadd2e61933ecf98c266c9dcd2c /intern | |
parent | 9dadd5ff937f81cc1e5aa9136b8eafb5a5414bb1 (diff) |
Workaround for AMD GPU OpenCL compiler.
Diffstat (limited to 'intern')
-rw-r--r-- | intern/cycles/kernel/kernel_subsurface.h | 6 | ||||
-rw-r--r-- | intern/cycles/kernel/split/kernel_split_data_types.h | 3 |
2 files changed, 9 insertions, 0 deletions
diff --git a/intern/cycles/kernel/kernel_subsurface.h b/intern/cycles/kernel/kernel_subsurface.h index f58eef7a368..baf629342b9 100644 --- a/intern/cycles/kernel/kernel_subsurface.h +++ b/intern/cycles/kernel/kernel_subsurface.h @@ -399,6 +399,12 @@ ccl_device_noinline void subsurface_scatter_multi_setup( #else Ray *ray = &ss_isect->ray; #endif + + /* Workaround for AMD GPU OpenCL compiler. Most probably cache bypass issue. */ +#if defined(__SPLIT_KERNEL__) && defined(__KERNEL_OPENCL_AMD__) && defined(__KERNEL_GPU__) + kernel_split_params.dummy_sd_flag = sd->flag; +#endif + /* Setup new shading point. */ shader_setup_from_subsurface(kg, sd, &ss_isect->hits[hit], ray); diff --git a/intern/cycles/kernel/split/kernel_split_data_types.h b/intern/cycles/kernel/split/kernel_split_data_types.h index 748197b7183..0af8bfc89d5 100644 --- a/intern/cycles/kernel/split/kernel_split_data_types.h +++ b/intern/cycles/kernel/split/kernel_split_data_types.h @@ -43,6 +43,9 @@ typedef struct SplitParams { ccl_global char *use_queues_flag; ccl_global float *buffer; + + /* Place for storing sd->flag. AMD GPU OpenCL compiler workaround */ + int dummy_sd_flag; } SplitParams; /* Global memory variables [porting]; These memory is used for |