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:
Diffstat (limited to 'intern/cycles/device/opencl')
-rw-r--r--intern/cycles/device/opencl/opencl.h1
-rw-r--r--intern/cycles/device/opencl/opencl_split.cpp21
-rw-r--r--intern/cycles/device/opencl/opencl_util.cpp5
3 files changed, 19 insertions, 8 deletions
diff --git a/intern/cycles/device/opencl/opencl.h b/intern/cycles/device/opencl/opencl.h
index 14e1db7a7aa..1c47dd18c2d 100644
--- a/intern/cycles/device/opencl/opencl.h
+++ b/intern/cycles/device/opencl/opencl.h
@@ -90,6 +90,7 @@ public:
cl_device_id device_id);
static void get_usable_devices(vector<OpenCLPlatformDevice> *usable_devices,
bool force_all = false);
+ static bool use_single_program();
};
/* Thread safe cache for contexts and programs.
diff --git a/intern/cycles/device/opencl/opencl_split.cpp b/intern/cycles/device/opencl/opencl_split.cpp
index be931599e39..4c6c9387864 100644
--- a/intern/cycles/device/opencl/opencl_split.cpp
+++ b/intern/cycles/device/opencl/opencl_split.cpp
@@ -77,16 +77,18 @@ public:
virtual bool load_kernels(const DeviceRequestedFeatures& requested_features,
vector<OpenCLDeviceBase::OpenCLProgram*> &programs)
{
+ bool single_program = OpenCLInfo::use_single_program();
program_data_init = OpenCLDeviceBase::OpenCLProgram(this,
- "split_data_init",
- "kernel_data_init.cl",
+ single_program ? "split" : "split_data_init",
+ single_program ? "kernel_split.cl" : "kernel_data_init.cl",
get_build_options(this, requested_features));
+
program_data_init.add_kernel(ustring("path_trace_data_init"));
programs.push_back(&program_data_init);
program_state_buffer_size = OpenCLDeviceBase::OpenCLProgram(this,
- "split_state_buffer_size",
- "kernel_state_buffer_size.cl",
+ single_program ? "split" : "split_state_buffer_size",
+ single_program ? "kernel_split.cl" : "kernel_state_buffer_size.cl",
get_build_options(this, requested_features));
program_state_buffer_size.add_kernel(ustring("path_trace_state_buffer_size"));
programs.push_back(&program_state_buffer_size);
@@ -209,10 +211,13 @@ public:
{
OpenCLSplitKernelFunction* kernel = new OpenCLSplitKernelFunction(device);
- kernel->program = OpenCLDeviceBase::OpenCLProgram(device,
- "split_" + kernel_name,
- "kernel_" + kernel_name + ".cl",
- get_build_options(device, requested_features));
+ bool single_program = OpenCLInfo::use_single_program();
+ kernel->program =
+ OpenCLDeviceBase::OpenCLProgram(device,
+ single_program ? "split" : "split_" + kernel_name,
+ single_program ? "kernel_split.cl" : "kernel_" + kernel_name + ".cl",
+ get_build_options(device, requested_features));
+
kernel->program.add_kernel(ustring("path_trace_" + kernel_name));
kernel->program.load();
diff --git a/intern/cycles/device/opencl/opencl_util.cpp b/intern/cycles/device/opencl/opencl_util.cpp
index d5c19bf5386..e2d0ff71786 100644
--- a/intern/cycles/device/opencl/opencl_util.cpp
+++ b/intern/cycles/device/opencl/opencl_util.cpp
@@ -552,6 +552,11 @@ bool OpenCLInfo::use_debug()
return DebugFlags().opencl.debug;
}
+bool OpenCLInfo::use_single_program()
+{
+ return DebugFlags().opencl.single_program;
+}
+
bool OpenCLInfo::kernel_use_advanced_shading(const string& platform)
{
/* keep this in sync with kernel_types.h! */