[Bf-blender-cvs] [87d733f] cycles_split_kernel: Cycles: Ensure we get a compiler error if data_init parameters fall out of sync
Mai Lavelle
noreply at git.blender.org
Wed Dec 7 04:27:05 CET 2016
Commit: 87d733f64bc716dee138d5a5171cb74bd92584c8
Author: Mai Lavelle
Date: Tue Dec 6 21:40:48 2016 -0500
Branches: cycles_split_kernel
https://developer.blender.org/rB87d733f64bc716dee138d5a5171cb74bd92584c8
Cycles: Ensure we get a compiler error if data_init parameters fall out of sync
Code isn't so pretty and the errors that we get if this does happen are kind
of cryptic, but it's better than nothing.
===================================================================
M intern/cycles/device/device_cpu.cpp
M intern/cycles/kernel/kernel.h
M intern/cycles/kernel/kernels/cpu/kernel_cpu.h
M intern/cycles/kernel/kernels/cpu/kernel_cpu_impl.h
M intern/cycles/kernel/split/kernel_data_init.h
===================================================================
diff --git a/intern/cycles/device/device_cpu.cpp b/intern/cycles/device/device_cpu.cpp
index 5bc8287..fac0296 100644
--- a/intern/cycles/device/device_cpu.cpp
+++ b/intern/cycles/device/device_cpu.cpp
@@ -727,9 +727,40 @@ protected:
int buffer_stride,
ccl_global float *buffer);
- data_init_t data_init = get_kernel_function<data_init_t>("data_init");
- if(!data_init) {
- return false;
+ data_init_t data_init;
+
+#ifdef WITH_CYCLES_OPTIMIZED_KERNEL_AVX2
+ if(system_cpu_support_avx2()) {
+ data_init = kernel_cpu_avx2_data_init;
+ }
+ else
+#endif
+#ifdef WITH_CYCLES_OPTIMIZED_KERNEL_AVX
+ if(system_cpu_support_avx()) {
+ data_init = kernel_cpu_avx_data_init;
+ }
+ else
+#endif
+#ifdef WITH_CYCLES_OPTIMIZED_KERNEL_SSE41
+ if(system_cpu_support_sse41()) {
+ data_init = kernel_cpu_sse41_data_init;
+ }
+ else
+#endif
+#ifdef WITH_CYCLES_OPTIMIZED_KERNEL_SSE3
+ if(system_cpu_support_sse3()) {
+ data_init = kernel_cpu_sse3_data_init;
+ }
+ else
+#endif
+#ifdef WITH_CYCLES_OPTIMIZED_KERNEL_SSE2
+ if(system_cpu_support_sse2()) {
+ data_init = kernel_cpu_sse2_data_init;
+ }
+ else
+#endif
+ {
+ data_init = kernel_cpu_data_init;
}
KernelGlobals *kg = (KernelGlobals*)kernel_globals.device_pointer;
diff --git a/intern/cycles/kernel/kernel.h b/intern/cycles/kernel/kernel.h
index bf0016a..cd339e6 100644
--- a/intern/cycles/kernel/kernel.h
+++ b/intern/cycles/kernel/kernel.h
@@ -20,6 +20,7 @@
/* CPU Kernel Interface */
#include "util_types.h"
+#include "kernel_types.h"
CCL_NAMESPACE_BEGIN
diff --git a/intern/cycles/kernel/kernels/cpu/kernel_cpu.h b/intern/cycles/kernel/kernels/cpu/kernel_cpu.h
index 0271399..a503b8f 100644
--- a/intern/cycles/kernel/kernels/cpu/kernel_cpu.h
+++ b/intern/cycles/kernel/kernels/cpu/kernel_cpu.h
@@ -49,6 +49,34 @@ void KERNEL_FUNCTION_FULL_NAME(shader)(KernelGlobals *kg,
int offset,
int sample);
+/* Split kernels */
+
+void KERNEL_FUNCTION_FULL_NAME(data_init)(
+ KernelGlobals *kg,
+ ccl_constant KernelData *data,
+ ccl_global void *split_data_buffer,
+ int num_elements,
+ ccl_global char *ray_state,
+ ccl_global uint *rng_state,
+ int start_sample,
+ int end_sample,
+ int sx, int sy, int sw, int sh, int offset, int stride,
+ int rng_state_offset_x,
+ int rng_state_offset_y,
+ int rng_state_stride,
+ ccl_global int *Queue_index,
+ int queuesize,
+ ccl_global char *use_queues_flag,
+#ifdef __WORK_STEALING__
+ ccl_global unsigned int *work_pool_wgs,
+ unsigned int num_samples,
+#endif
+ int parallel_samples,
+ int buffer_offset_x,
+ int buffer_offset_y,
+ int buffer_stride,
+ ccl_global float *buffer);
+
#define DECLARE_SPLIT_KERNEL_FUNCTION(name) \
void KERNEL_FUNCTION_FULL_NAME(name)(KernelGlobals *kg, KernelData *data);
diff --git a/intern/cycles/kernel/kernels/cpu/kernel_cpu_impl.h b/intern/cycles/kernel/kernels/cpu/kernel_cpu_impl.h
index 8f5e329..c59f489 100644
--- a/intern/cycles/kernel/kernels/cpu/kernel_cpu_impl.h
+++ b/intern/cycles/kernel/kernels/cpu/kernel_cpu_impl.h
@@ -185,8 +185,7 @@ void KERNEL_FUNCTION_FULL_NAME(register_functions)(void(*reg)(const char* name,
REGISTER(convert_to_half_float);
REGISTER(shader);
- reg(REGISTER_EVAL_NAME(KERNEL_FUNCTION_FULL_NAME(data_init)), (void*)kernel_data_init);
-
+ REGISTER(data_init);
REGISTER(scene_intersect);
REGISTER(lamp_emission);
REGISTER(queue_enqueue);
diff --git a/intern/cycles/kernel/split/kernel_data_init.h b/intern/cycles/kernel/split/kernel_data_init.h
index 81ec4d6..4ad172b 100644
--- a/intern/cycles/kernel/split/kernel_data_init.h
+++ b/intern/cycles/kernel/split/kernel_data_init.h
@@ -51,7 +51,11 @@ CCL_NAMESPACE_BEGIN
* The number of elements in the queues is initialized to 0;
*/
+#ifndef __KERNEL_CPU__
ccl_device void kernel_data_init(
+#else
+void KERNEL_FUNCTION_FULL_NAME(data_init)(
+#endif
KernelGlobals *kg,
ccl_constant KernelData *data,
ccl_global void *split_data_buffer,
More information about the Bf-blender-cvs
mailing list