[Bf-blender-cvs] [949ab753bb2] blender2.7: Cycles OpenCL: Remove OpenCL MegaKernel
Jeroen Bakker
noreply at git.blender.org
Wed Feb 20 15:17:56 CET 2019
Commit: 949ab753bb2e2d0f76921ed6d716f074ce863f21
Author: Jeroen Bakker
Date: Wed Feb 20 14:41:56 2019 +0100
Branches: blender2.7
https://developer.blender.org/rB949ab753bb2e2d0f76921ed6d716f074ce863f21
Cycles OpenCL: Remove OpenCL MegaKernel
Using OpenCL MegaKernel has been slow and therefore not usefull.
This patch will remove the mega kernel from the OpenCL codebase
and the OpenCLDeviceBase class.
T61736: removal of mega kernel
T61703: baking does not work with mega kernel
Tags: #cycles
Differential Revision: https://developer.blender.org/D4383
===================================================================
M intern/cycles/blender/addon/ui.py
M intern/cycles/blender/blender_python.cpp
M intern/cycles/device/CMakeLists.txt
M intern/cycles/device/device_opencl.cpp
M intern/cycles/device/opencl/memory_manager.cpp
M intern/cycles/device/opencl/memory_manager.h
M intern/cycles/device/opencl/opencl.h
D intern/cycles/device/opencl/opencl_base.cpp
D intern/cycles/device/opencl/opencl_mega.cpp
M intern/cycles/device/opencl/opencl_split.cpp
M intern/cycles/device/opencl/opencl_util.cpp
M intern/cycles/kernel/CMakeLists.txt
R056 intern/cycles/kernel/kernels/opencl/kernel.cl intern/cycles/kernel/kernels/opencl/kernel_base.cl
M intern/cycles/util/util_debug.cpp
M intern/cycles/util/util_debug.h
===================================================================
diff --git a/intern/cycles/blender/addon/ui.py b/intern/cycles/blender/addon/ui.py
index e372843d763..5d1d9e764d0 100644
--- a/intern/cycles/blender/addon/ui.py
+++ b/intern/cycles/blender/addon/ui.py
@@ -1634,7 +1634,6 @@ class CYCLES_RENDER_PT_debug(CyclesButtonsPanel, Panel):
col = layout.column()
col.label('OpenCL Flags:')
- col.prop(cscene, "debug_opencl_kernel_type", text="Kernel")
col.prop(cscene, "debug_opencl_device_type", text="Device")
col.prop(cscene, "debug_opencl_kernel_single_program", text="Single Program")
col.prop(cscene, "debug_use_opencl_debug", text="Debug")
diff --git a/intern/cycles/blender/blender_python.cpp b/intern/cycles/blender/blender_python.cpp
index 513941b1fcc..da369d0454a 100644
--- a/intern/cycles/blender/blender_python.cpp
+++ b/intern/cycles/blender/blender_python.cpp
@@ -67,7 +67,6 @@ bool debug_flags_sync_from_scene(BL::Scene b_scene)
PointerRNA cscene = RNA_pointer_get(&b_scene.ptr, "cycles");
/* Backup some settings for comparison. */
DebugFlags::OpenCL::DeviceType opencl_device_type = flags.opencl.device_type;
- DebugFlags::OpenCL::KernelType opencl_kernel_type = flags.opencl.kernel_type;
/* Synchronize shared flags. */
flags.viewport_static_bvh = get_enum(cscene, "debug_bvh_type");
/* Synchronize CPU flags. */
@@ -81,18 +80,6 @@ bool debug_flags_sync_from_scene(BL::Scene b_scene)
/* Synchronize CUDA flags. */
flags.cuda.adaptive_compile = get_boolean(cscene, "debug_use_cuda_adaptive_compile");
flags.cuda.split_kernel = get_boolean(cscene, "debug_use_cuda_split_kernel");
- /* Synchronize OpenCL kernel type. */
- switch(get_enum(cscene, "debug_opencl_kernel_type")) {
- case 0:
- flags.opencl.kernel_type = DebugFlags::OpenCL::KERNEL_DEFAULT;
- break;
- case 1:
- flags.opencl.kernel_type = DebugFlags::OpenCL::KERNEL_MEGA;
- break;
- case 2:
- flags.opencl.kernel_type = DebugFlags::OpenCL::KERNEL_SPLIT;
- break;
- }
/* Synchronize OpenCL device type. */
switch(get_enum(cscene, "debug_opencl_device_type")) {
case 0:
@@ -118,8 +105,7 @@ bool debug_flags_sync_from_scene(BL::Scene b_scene)
flags.opencl.debug = get_boolean(cscene, "debug_use_opencl_debug");
flags.opencl.mem_limit = ((size_t)get_int(cscene, "debug_opencl_mem_limit"))*1024*1024;
flags.opencl.single_program = get_boolean(cscene, "debug_opencl_kernel_single_program");
- return flags.opencl.device_type != opencl_device_type ||
- flags.opencl.kernel_type != opencl_kernel_type;
+ return flags.opencl.device_type != opencl_device_type;
}
/* Reset debug flags to default values.
@@ -130,10 +116,8 @@ bool debug_flags_reset()
DebugFlagsRef flags = DebugFlags();
/* Backup some settings for comparison. */
DebugFlags::OpenCL::DeviceType opencl_device_type = flags.opencl.device_type;
- DebugFlags::OpenCL::KernelType opencl_kernel_type = flags.opencl.kernel_type;
flags.reset();
- return flags.opencl.device_type != opencl_device_type ||
- flags.opencl.kernel_type != opencl_kernel_type;
+ return flags.opencl.device_type != opencl_device_type;
}
} /* namespace */
diff --git a/intern/cycles/device/CMakeLists.txt b/intern/cycles/device/CMakeLists.txt
index 75e78e038ea..d95cd02a85e 100644
--- a/intern/cycles/device/CMakeLists.txt
+++ b/intern/cycles/device/CMakeLists.txt
@@ -37,8 +37,6 @@ set(SRC_OPENCL
opencl/opencl.h
opencl/memory_manager.h
- opencl/opencl_base.cpp
- opencl/opencl_mega.cpp
opencl/opencl_split.cpp
opencl/opencl_util.cpp
opencl/memory_manager.cpp
diff --git a/intern/cycles/device/device_opencl.cpp b/intern/cycles/device/device_opencl.cpp
index 1e8c6b2dd0e..948fe407f63 100644
--- a/intern/cycles/device/device_opencl.cpp
+++ b/intern/cycles/device/device_opencl.cpp
@@ -29,19 +29,7 @@ CCL_NAMESPACE_BEGIN
Device *device_opencl_create(DeviceInfo& info, Stats &stats, Profiler &profiler, bool background)
{
- vector<OpenCLPlatformDevice> usable_devices;
- OpenCLInfo::get_usable_devices(&usable_devices);
- assert(info.num < usable_devices.size());
- const OpenCLPlatformDevice& platform_device = usable_devices[info.num];
- const string& platform_name = platform_device.platform_name;
- const cl_device_type device_type = platform_device.device_type;
- if(OpenCLInfo::kernel_use_split(platform_name, device_type)) {
- VLOG(1) << "Using split kernel.";
- return opencl_create_split_device(info, stats, profiler, background);
- } else {
- VLOG(1) << "Using mega kernel.";
- return opencl_create_mega_device(info, stats, profiler, background);
- }
+ return opencl_create_split_device(info, stats, profiler, background);
}
bool device_opencl_init()
@@ -111,7 +99,6 @@ void device_opencl_info(vector<DeviceInfo>& devices)
foreach(OpenCLPlatformDevice& platform_device, usable_devices) {
/* Compute unique ID for persistent user preferences. */
const string& platform_name = platform_device.platform_name;
- const cl_device_type device_type = platform_device.device_type;
const string& device_name = platform_device.device_name;
string hardware_id = platform_device.hardware_id;
if(hardware_id == "") {
@@ -133,8 +120,7 @@ void device_opencl_info(vector<DeviceInfo>& devices)
/* We don't know if it's used for display, but assume it is. */
info.display_device = true;
info.advanced_shading = OpenCLInfo::kernel_use_advanced_shading(platform_name);
- info.use_split_kernel = OpenCLInfo::kernel_use_split(platform_name,
- device_type);
+ info.use_split_kernel = true;
info.has_volume_decoupled = false;
info.id = id;
diff --git a/intern/cycles/device/opencl/memory_manager.cpp b/intern/cycles/device/opencl/memory_manager.cpp
index 485a656cb83..9cb105982aa 100644
--- a/intern/cycles/device/opencl/memory_manager.cpp
+++ b/intern/cycles/device/opencl/memory_manager.cpp
@@ -28,7 +28,7 @@ void MemoryManager::DeviceBuffer::add_allocation(Allocation& allocation)
allocations.push_back(&allocation);
}
-void MemoryManager::DeviceBuffer::update_device_memory(OpenCLDeviceBase *device)
+void MemoryManager::DeviceBuffer::update_device_memory(OpenCLDevice *device)
{
bool need_realloc = false;
@@ -142,7 +142,7 @@ void MemoryManager::DeviceBuffer::update_device_memory(OpenCLDeviceBase *device)
clFinish(device->cqCommandQueue);
}
-void MemoryManager::DeviceBuffer::free(OpenCLDeviceBase *)
+void MemoryManager::DeviceBuffer::free(OpenCLDevice *)
{
buffer->free();
}
@@ -160,7 +160,7 @@ MemoryManager::DeviceBuffer* MemoryManager::smallest_device_buffer()
return smallest;
}
-MemoryManager::MemoryManager(OpenCLDeviceBase *device)
+MemoryManager::MemoryManager(OpenCLDevice *device)
: device(device), need_update(false)
{
foreach(DeviceBuffer& device_buffer, device_buffers) {
diff --git a/intern/cycles/device/opencl/memory_manager.h b/intern/cycles/device/opencl/memory_manager.h
index b49bd32dab6..8fcc4440369 100644
--- a/intern/cycles/device/opencl/memory_manager.h
+++ b/intern/cycles/device/opencl/memory_manager.h
@@ -26,7 +26,7 @@
CCL_NAMESPACE_BEGIN
-class OpenCLDeviceBase;
+class OpenCLDevice;
class MemoryManager {
public:
@@ -73,12 +73,12 @@ private:
void add_allocation(Allocation& allocation);
- void update_device_memory(OpenCLDeviceBase *device);
+ void update_device_memory(OpenCLDevice *device);
- void free(OpenCLDeviceBase *device);
+ void free(OpenCLDevice *device);
};
- OpenCLDeviceBase *device;
+ OpenCLDevice *device;
DeviceBuffer device_buffers[NUM_DEVICE_BUFFERS];
@@ -90,7 +90,7 @@ private:
DeviceBuffer* smallest_device_buffer();
public:
- MemoryManager(OpenCLDeviceBase *device);
+ MemoryManager(OpenCLDevice *device);
void free(); /* Free all memory. */
diff --git a/intern/cycles/device/opencl/opencl.h b/intern/cycles/device/opencl/opencl.h
index 766b9e4bf1a..1c5f6d375ec 100644
--- a/intern/cycles/device/opencl/opencl.h
+++ b/intern/cycles/device/opencl/opencl.h
@@ -18,6 +18,7 @@
#include "device/device.h"
#include "device/device_denoising.h"
+#include "device/device_split_kernel.h"
#include "util/util_map.h"
#include "util/util_param.h"
@@ -84,8 +85,6 @@ public:
static cl_device_type device_type();
static bool use_debug();
static bool kernel_use_advanced_shading(const string& platform_name);
- static bool kernel_use_split(const string& platform_name,
- const cl_device_type device_type);
static bool device_supported(const string& platform_name,
const cl_device_id device_id);
static bool platform_version_check(cl_platform_id platform,
@@ -259,7 +258,7 @@ public:
} \
} (void) 0
-class OpenCLDeviceBase : public Device
+class OpenCLDevice : public Device
{
public:
DedicatedTaskPool task_pool;
@@ -273,7 +272,7 @@ public:
class OpenCLProgram {
public:
OpenCLProgram() : loaded(false), program(NULL), device(NULL) {}
- OpenCLProgram(OpenCLDeviceBase *device,
+ OpenCLProgram(OpenCLDevice *device,
const string& program_name,
const string& kernel_name,
const string& kernel_build_options,
@@ -311,7 +310,7 @@ public:
bool loaded;
cl_program program;
- OpenCLDeviceBase *device;
+ OpenCLDevice *device;
/* Used for the OpenCLCache key. */
string program_name;
@@ -325,6 +324,32 @@ public:
map<ustring, cl_kernel> kernels;
};
+ DeviceSplitKernel *split_kernel;
+
+ OpenCLProgram program_data_init;
+ OpenCLProgram program_state_buffer_size;
+
+ OpenCLProgram program_split;
+
+ OpenCLProgram program_path_init;
+ OpenCLProgram program_scene_intersect;
+ OpenCLProgram program_lamp_emission;
+ OpenCLProgram program_do_volume;
+ OpenCLProgram program_queue_enqueue;
+ OpenCLProgram program_indirect_background;
+ OpenCLProgram program_shader_setup;
+ OpenCLProgram program_shader_sort;
+ OpenCLProgram program_shader_eval;
+ OpenCLProgram program_holdout_emission_blurring_pathtermination_ao;
+ OpenCLProgram program_subsurface_scatter;
+ OpenCLProgram program_direct_lighting;
+ OpenCLProgram program_shadow_blocked_ao;
+ OpenCLProgram program_shadow_blocked_dl;
+ OpenCLProgram program_enqueue_inactive;
+ OpenCLProgram program_next_iteration_setup;
+ OpenCLProgram
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list