diff options
author | Bastien Montagne <montagne29@wanadoo.fr> | 2017-03-17 13:00:41 +0300 |
---|---|---|
committer | Bastien Montagne <montagne29@wanadoo.fr> | 2017-03-17 13:00:41 +0300 |
commit | 722451e146d08c1db44ee1265518795684831184 (patch) | |
tree | 84b5e498cbce1cbca1f3e775810162a09f47f876 /intern | |
parent | a8c7152eea6ff0250a2cdd79964bce8b581d2914 (diff) | |
parent | a58350b07f4c848f3d424a0505791245b444ea64 (diff) |
Merge branch 'master' into blender2.8
Conflicts:
source/blender/blenloader/intern/writefile.c
Diffstat (limited to 'intern')
-rw-r--r-- | intern/cycles/device/device_cpu.cpp | 5 | ||||
-rw-r--r-- | intern/cycles/device/device_split_kernel.cpp | 1 | ||||
-rw-r--r-- | intern/cycles/kernel/kernel_random.h | 8 | ||||
-rw-r--r-- | intern/cycles/kernel/kernel_types.h | 5 | ||||
-rw-r--r-- | intern/cycles/kernel/kernel_volume.h | 2 | ||||
-rw-r--r-- | intern/cycles/kernel/split/kernel_shader_eval.h | 8 | ||||
-rw-r--r-- | intern/cycles/kernel/split/kernel_subsurface_scatter.h | 4 |
7 files changed, 14 insertions, 19 deletions
diff --git a/intern/cycles/device/device_cpu.cpp b/intern/cycles/device/device_cpu.cpp index 273c3b48936..d1027f07510 100644 --- a/intern/cycles/device/device_cpu.cpp +++ b/intern/cycles/device/device_cpu.cpp @@ -855,9 +855,8 @@ int2 CPUSplitKernel::split_kernel_local_size() return make_int2(1, 1); } -int2 CPUSplitKernel::split_kernel_global_size(device_memory& /*kg*/, device_memory& /*data*/, DeviceTask *task) { - /* TODO(mai): this needs investigation but cpu gives incorrect render if global size doesnt match tile size */ - return task->requested_tile_size; +int2 CPUSplitKernel::split_kernel_global_size(device_memory& /*kg*/, device_memory& /*data*/, DeviceTask * /*task*/) { + return make_int2(64, 1); } uint64_t CPUSplitKernel::state_buffer_size(device_memory& kernel_globals, device_memory& /*data*/, size_t num_threads) { diff --git a/intern/cycles/device/device_split_kernel.cpp b/intern/cycles/device/device_split_kernel.cpp index 8925ef47b2e..7a4d8c419b5 100644 --- a/intern/cycles/device/device_split_kernel.cpp +++ b/intern/cycles/device/device_split_kernel.cpp @@ -142,6 +142,7 @@ bool DeviceSplitKernel::path_trace(DeviceTask *task, /* Number of elements in the global state buffer */ int num_global_elements = global_size[0] * global_size[1]; + assert(num_global_elements % WORK_POOL_SIZE == 0); /* Allocate all required global memory once. */ if(first_tile) { diff --git a/intern/cycles/kernel/kernel_random.h b/intern/cycles/kernel/kernel_random.h index e773753396f..ad3fa32a809 100644 --- a/intern/cycles/kernel/kernel_random.h +++ b/intern/cycles/kernel/kernel_random.h @@ -191,14 +191,14 @@ ccl_device void path_rng_end(KernelGlobals *kg, ccl_global uint *rng_state, RNG /* Linear Congruential Generator */ -ccl_device_forceinline float path_rng_1D(KernelGlobals *kg, RNG& rng, int sample, int num_samples, int dimension) +ccl_device_forceinline float path_rng_1D(KernelGlobals *kg, RNG *rng, int sample, int num_samples, int dimension) { /* implicit mod 2^32 */ - rng = (1103515245*(rng) + 12345); - return (float)rng * (1.0f/(float)0xFFFFFFFF); + *rng = (1103515245*(*rng) + 12345); + return (float)*rng * (1.0f/(float)0xFFFFFFFF); } -ccl_device_inline void path_rng_2D(KernelGlobals *kg, RNG& rng, int sample, int num_samples, int dimension, float *fx, float *fy) +ccl_device_inline void path_rng_2D(KernelGlobals *kg, RNG *rng, int sample, int num_samples, int dimension, float *fx, float *fy) { *fx = path_rng_1D(kg, rng, sample, num_samples, dimension); *fy = path_rng_1D(kg, rng, sample, num_samples, dimension + 1); diff --git a/intern/cycles/kernel/kernel_types.h b/intern/cycles/kernel/kernel_types.h index b6b891627bf..245832ae163 100644 --- a/intern/cycles/kernel/kernel_types.h +++ b/intern/cycles/kernel/kernel_types.h @@ -32,11 +32,6 @@ # define ccl_addr_space #endif -#if defined(__SPLIT_KERNEL__) && !defined(__COMPUTE_DEVICE_GPU__) -/* TODO(mai): need to investigate how this effects the kernel, as cpu kernel crashes without this right now */ -#define __COMPUTE_DEVICE_GPU__ -#endif - CCL_NAMESPACE_BEGIN /* constants */ diff --git a/intern/cycles/kernel/kernel_volume.h b/intern/cycles/kernel/kernel_volume.h index 608350a9038..dcab138dc84 100644 --- a/intern/cycles/kernel/kernel_volume.h +++ b/intern/cycles/kernel/kernel_volume.h @@ -360,7 +360,7 @@ ccl_device VolumeIntegrateResult kernel_volume_integrate_homogeneous( ShaderData *sd, PathRadiance *L, ccl_addr_space float3 *throughput, - ccl_addr_space RNG *rng, + ccl_addr_space RNG *rng, bool probalistic_scatter) { VolumeShaderCoefficients coeff; diff --git a/intern/cycles/kernel/split/kernel_shader_eval.h b/intern/cycles/kernel/split/kernel_shader_eval.h index fc966b77b2c..b739f86338c 100644 --- a/intern/cycles/kernel/split/kernel_shader_eval.h +++ b/intern/cycles/kernel/split/kernel_shader_eval.h @@ -38,11 +38,11 @@ ccl_device void kernel_shader_eval(KernelGlobals *kg, kernel_split_params.queue_size, 0); - if(ray_index == QUEUE_EMPTY_SLOT) { - return; + char enqueue_flag = 0; + if((ray_index != QUEUE_EMPTY_SLOT) && IS_STATE(kernel_split_state.ray_state, ray_index, RAY_TO_REGENERATE)) { + enqueue_flag = 1; } - char enqueue_flag = (IS_STATE(kernel_split_state.ray_state, ray_index, RAY_TO_REGENERATE)) ? 1 : 0; enqueue_ray_index_local(ray_index, QUEUE_HITBG_BUFF_UPDATE_TOREGEN_RAYS, enqueue_flag, @@ -52,7 +52,7 @@ ccl_device void kernel_shader_eval(KernelGlobals *kg, kernel_split_params.queue_index); /* Continue on with shader evaluation. */ - if(IS_STATE(kernel_split_state.ray_state, ray_index, RAY_ACTIVE)) { + if((ray_index != QUEUE_EMPTY_SLOT) && IS_STATE(kernel_split_state.ray_state, ray_index, RAY_ACTIVE)) { Intersection isect = kernel_split_state.isect[ray_index]; ccl_global uint *rng = &kernel_split_state.rng[ray_index]; ccl_global PathState *state = &kernel_split_state.path_state[ray_index]; diff --git a/intern/cycles/kernel/split/kernel_subsurface_scatter.h b/intern/cycles/kernel/split/kernel_subsurface_scatter.h index 709a296c9a0..4eaa7f56332 100644 --- a/intern/cycles/kernel/split/kernel_subsurface_scatter.h +++ b/intern/cycles/kernel/split/kernel_subsurface_scatter.h @@ -46,12 +46,12 @@ ccl_device void kernel_subsurface_scatter(KernelGlobals *kg, } #endif + char enqueue_flag = 0; + #ifndef __COMPUTE_DEVICE_GPU__ if(ray_index != QUEUE_EMPTY_SLOT) { #endif - - char enqueue_flag = 0; ccl_global char *ray_state = kernel_split_state.ray_state; ccl_global PathState *state = &kernel_split_state.path_state[ray_index]; PathRadiance *L = &kernel_split_state.path_radiance[ray_index]; |