Changeset View
Changeset View
Standalone View
Standalone View
intern/cycles/kernel/kernels/cpu/kernel_cpu_impl.h
| Show First 20 Lines • Show All 157 Lines • ▼ Show 20 Lines | |||||
| /* Split Kernel Path Tracing */ | /* Split Kernel Path Tracing */ | ||||
| #define DEFINE_SPLIT_KERNEL_FUNCTION(name) \ | #define DEFINE_SPLIT_KERNEL_FUNCTION(name) \ | ||||
| void KERNEL_FUNCTION_FULL_NAME(name)(KernelGlobals *kg, KernelData* /*data*/) \ | void KERNEL_FUNCTION_FULL_NAME(name)(KernelGlobals *kg, KernelData* /*data*/) \ | ||||
| { \ | { \ | ||||
| kernel_##name(kg); \ | kernel_##name(kg); \ | ||||
| } | } | ||||
| #define DEFINE_SPLIT_KERNEL_FUNCTION_LOCAL_QUEUE_ATOMICS(name) \ | |||||
| void KERNEL_FUNCTION_FULL_NAME(name)(KernelGlobals *kg, KernelData* /*data*/) \ | |||||
| { \ | |||||
| ccl_local unsigned int local_queue_atomics; \ | |||||
| kernel_##name(kg, &local_queue_atomics); \ | |||||
| } | |||||
| #define DEFINE_SPLIT_KERNEL_FUNCTION_LOCAL_QUEUE_ATOMICS_2(name) \ | |||||
| void KERNEL_FUNCTION_FULL_NAME(name)(KernelGlobals *kg, KernelData* /*data*/) \ | |||||
| { \ | |||||
| ccl_local unsigned int local_queue_atomics_0; \ | |||||
| ccl_local unsigned int local_queue_atomics_1; \ | |||||
| kernel_##name(kg, &local_queue_atomics_0, &local_queue_atomics_1); \ | |||||
| } | |||||
| #define DEFINE_SPLIT_KERNEL_FUNCTION_LOCAL_QUEUE_ATOMICS_2V(name) \ | |||||
maiself: Maybe this and the previous can be combined? | |||||
| void KERNEL_FUNCTION_FULL_NAME(name)(KernelGlobals *kg, KernelData* /*data*/) \ | |||||
| { \ | |||||
| ccl_local unsigned int local_queue_atomics[2]; \ | |||||
| kernel_##name(kg, local_queue_atomics); \ | |||||
| } | |||||
| DEFINE_SPLIT_KERNEL_FUNCTION(path_init) | DEFINE_SPLIT_KERNEL_FUNCTION(path_init) | ||||
| DEFINE_SPLIT_KERNEL_FUNCTION(scene_intersect) | DEFINE_SPLIT_KERNEL_FUNCTION(scene_intersect) | ||||
| DEFINE_SPLIT_KERNEL_FUNCTION(lamp_emission) | DEFINE_SPLIT_KERNEL_FUNCTION(lamp_emission) | ||||
| DEFINE_SPLIT_KERNEL_FUNCTION(queue_enqueue) | DEFINE_SPLIT_KERNEL_FUNCTION_LOCAL_QUEUE_ATOMICS_2V(queue_enqueue) | ||||
| DEFINE_SPLIT_KERNEL_FUNCTION(background_buffer_update) | DEFINE_SPLIT_KERNEL_FUNCTION_LOCAL_QUEUE_ATOMICS(background_buffer_update); | ||||
maiselfUnsubmitted Not Done Inline ActionsDont need the ; maiself: Dont need the ; | |||||
| DEFINE_SPLIT_KERNEL_FUNCTION(shader_eval) | DEFINE_SPLIT_KERNEL_FUNCTION_LOCAL_QUEUE_ATOMICS(shader_eval) | ||||
| DEFINE_SPLIT_KERNEL_FUNCTION(holdout_emission_blurring_pathtermination_ao) | DEFINE_SPLIT_KERNEL_FUNCTION_LOCAL_QUEUE_ATOMICS_2(holdout_emission_blurring_pathtermination_ao) | ||||
| DEFINE_SPLIT_KERNEL_FUNCTION(direct_lighting) | DEFINE_SPLIT_KERNEL_FUNCTION_LOCAL_QUEUE_ATOMICS(direct_lighting) | ||||
| DEFINE_SPLIT_KERNEL_FUNCTION(shadow_blocked) | DEFINE_SPLIT_KERNEL_FUNCTION(shadow_blocked) | ||||
| DEFINE_SPLIT_KERNEL_FUNCTION(next_iteration_setup) | DEFINE_SPLIT_KERNEL_FUNCTION_LOCAL_QUEUE_ATOMICS(next_iteration_setup) | ||||
| void KERNEL_FUNCTION_FULL_NAME(register_functions)(void(*reg)(const char* name, void* func)) | void KERNEL_FUNCTION_FULL_NAME(register_functions)(void(*reg)(const char* name, void* func)) | ||||
| { | { | ||||
| #define REGISTER_NAME_STRING(name) #name | #define REGISTER_NAME_STRING(name) #name | ||||
| #define REGISTER_EVAL_NAME(name) REGISTER_NAME_STRING(name) | #define REGISTER_EVAL_NAME(name) REGISTER_NAME_STRING(name) | ||||
| #define REGISTER(name) reg(REGISTER_EVAL_NAME(KERNEL_FUNCTION_FULL_NAME(name)), (void*)KERNEL_FUNCTION_FULL_NAME(name)); | #define REGISTER(name) reg(REGISTER_EVAL_NAME(KERNEL_FUNCTION_FULL_NAME(name)), (void*)KERNEL_FUNCTION_FULL_NAME(name)); | ||||
| REGISTER(path_trace); | REGISTER(path_trace); | ||||
| Show All 24 Lines | |||||
Maybe this and the previous can be combined?