[Bf-blender-cvs] [a6597b8] cycles_kernel_split: Cycles kernel split: Style cleanup in new classes from device_opencl
Sergey Sharybin
noreply at git.blender.org
Sat May 9 12:13:49 CEST 2015
Commit: a6597b85fa91536ec02c11a1d0e26362fb92e0c2
Author: Sergey Sharybin
Date: Sat May 9 15:06:21 2015 +0500
Branches: cycles_kernel_split
https://developer.blender.org/rBa6597b85fa91536ec02c11a1d0e26362fb92e0c2
Cycles kernel split: Style cleanup in new classes from device_opencl
===================================================================
M intern/cycles/device/device_opencl.cpp
===================================================================
diff --git a/intern/cycles/device/device_opencl.cpp b/intern/cycles/device/device_opencl.cpp
index ce6c18a..fe7c549 100644
--- a/intern/cycles/device/device_opencl.cpp
+++ b/intern/cycles/device/device_opencl.cpp
@@ -1094,6 +1094,9 @@ protected:
void *pointer;
};
+ /* TODO(sergey): In the future we can use variadic templates, once
+ * C++0x is allowed. Should allow to clean this up a bit.
+ */
int kernel_set_args(cl_kernel kernel,
int start_argument_index,
const ArgumentWrapper& arg1 = ArgumentWrapper(),
@@ -1220,88 +1223,99 @@ public:
bool load_kernels(const DeviceRequestedFeatures& requested_features)
{
- /* verify if device was initialized */
- if(!device_initialized) {
- fprintf(stderr, "OpenCL: failed to initialize device.\n");
- return false;
- }
-
- /* Get Shader, bake and film convert kernels */
+ /* Get Shader, bake and film convert kernels.
+ * It'll also do verification of OpenCL actually initialized.
+ */
if(!OpenCLDeviceBase::load_kernels(requested_features)) {
return false;
}
- /* try to use cached kernel */
+ /* Try to use cached kernel. */
thread_scoped_lock cache_locker;
- path_trace_program = OpenCLCache::get_program(cpPlatform, cdDevice, OpenCLCache::OCL_DEV_MEGAKERNEL_PROGRAM, cache_locker);
+ path_trace_program = OpenCLCache::get_program(cpPlatform,
+ cdDevice,
+ OpenCLCache::OCL_DEV_MEGAKERNEL_PROGRAM,
+ cache_locker);
if(!path_trace_program) {
- /* verify we have right opencl version */
+ /* Verify we have right opencl version. */
if(!opencl_version_check())
return false;
- /* md5 hash to detect changes */
+ /* Calculate md5 hash to detect changes. */
string kernel_path = path_get("kernel");
string kernel_md5 = path_files_md5_hash(kernel_path);
string custom_kernel_build_options = "-D__COMPILE_ONLY_MEGAKERNEL__ ";
string device_md5 = device_md5_hash(custom_kernel_build_options);
- /* path to cached binary */
- string clbin = string_printf("cycles_kernel_%s_%s.clbin", device_md5.c_str(), kernel_md5.c_str());
+ /* Path to cached binary. */
+ string clbin = string_printf("cycles_kernel_%s_%s.clbin",
+ device_md5.c_str(),
+ kernel_md5.c_str());
clbin = path_user_get(path_join("cache", clbin));
- /* path to preprocessed source for debugging */
+ /* Path to preprocessed source for debugging. */
string clsrc, *debug_src = NULL;
-
if(opencl_kernel_use_debug()) {
- clsrc = string_printf("cycles_kernel_%s_%s.cl", device_md5.c_str(), kernel_md5.c_str());
+ clsrc = string_printf("cycles_kernel_%s_%s.cl",
+ device_md5.c_str(),
+ kernel_md5.c_str());
clsrc = path_user_get(path_join("cache", clsrc));
debug_src = &clsrc;
}
- /* if exists already, try use it */
- if (path_exists(clbin) && load_binary(kernel_path, clbin, custom_kernel_build_options, &path_trace_program, debug_src)) {
- /* kernel loaded from binary */
+ /* If exists already, try use it. */
+ if (path_exists(clbin) && load_binary(kernel_path,
+ clbin,
+ custom_kernel_build_options,
+ &path_trace_program,
+ debug_src)) {
+ /* Kernel loaded from binary, nothing to do. */
}
else {
-
- string init_kernel_source = "#include \"kernel.cl\" // " + kernel_md5 + "\n";
-
- /* if does not exist or loading binary failed, compile kernel */
- if (!compile_kernel(kernel_path, init_kernel_source, custom_kernel_build_options, &path_trace_program, debug_src))
+ string init_kernel_source = "#include \"kernel.cl\" // " +
+ kernel_md5 + "\n";
+ /* If does not exist or loading binary failed, compile kernel. */
+ if (!compile_kernel(kernel_path,
+ init_kernel_source,
+ custom_kernel_build_options,
+ &path_trace_program,
+ debug_src))
+ {
return false;
-
- /* save binary for reuse */
- if(!save_binary(&path_trace_program, clbin))
+ }
+ /* Save binary for reuse. */
+ if(!save_binary(&path_trace_program, clbin)) {
return false;
+ }
}
-
- /* cache the program */
- OpenCLCache::store_program(cpPlatform, cdDevice, path_trace_program, OpenCLCache::OCL_DEV_MEGAKERNEL_PROGRAM, cache_locker);
- }
-
- /* find kernels */
- ckPathTraceKernel = clCreateKernel(path_trace_program, "kernel_ocl_path_trace", &ciErr);
+ /* Cache the program. */
+ OpenCLCache::store_program(cpPlatform,
+ cdDevice,
+ path_trace_program,
+ OpenCLCache::OCL_DEV_MEGAKERNEL_PROGRAM,
+ cache_locker);
+ }
+
+ /* Find kernels. */
+ ckPathTraceKernel = clCreateKernel(path_trace_program,
+ "kernel_ocl_path_trace",
+ &ciErr);
if(opencl_error(ciErr))
return false;
-
return true;
}
~OpenCLDeviceMegaKernel()
{
task_pool.stop();
-
- if(ckPathTraceKernel)
- clReleaseKernel(ckPathTraceKernel);
-
- if(path_trace_program)
- clReleaseProgram(path_trace_program);
+ release_kernel_safe(ckPathTraceKernel);
+ release_program_safe(path_trace_program);
}
void path_trace(RenderTile& rtile, int sample)
{
- /* cast arguments to cl types */
+ /* Cast arguments to cl types. */
cl_mem d_data = CL_MEM_PTR(const_mem_map["__data"]->device_pointer);
cl_mem d_buffer = CL_MEM_PTR(rtile.buffer);
cl_mem d_rng_state = CL_MEM_PTR(rtile.rng_state);
@@ -1312,11 +1326,11 @@ public:
cl_int d_offset = rtile.offset;
cl_int d_stride = rtile.stride;
- /* sample arguments */
+ /* Sample arguments. */
cl_int d_sample = sample;
cl_uint narg = 0;
- /* TODO : Make the kernel launch similar to Cuda */
+ /* TODO : Make the kernel launch similar to Cuda. */
KERNEL_APPEND_ARG(ckPathTraceKernel, d_data);
KERNEL_APPEND_ARG(ckPathTraceKernel, d_buffer);
KERNEL_APPEND_ARG(ckPathTraceKernel, d_rng_state);
@@ -1347,8 +1361,7 @@ public:
}
else if(task->type == DeviceTask::PATH_TRACE) {
RenderTile tile;
-
- /* keep rendering tiles until done */
+ /* Keep rendering tiles until done. */
while(task->acquire_tile(this, tile)) {
int start_sample = tile.start_sample;
int end_sample = tile.start_sample + tile.num_samples;
@@ -1368,10 +1381,12 @@ public:
/* Complete kernel execution before release tile */
/* This helps in multi-device render;
- * The device that reaches the critical-section function release_tile
- * waits (stalling other devices from entering release_tile) for all kernels
- * to complete. If device1 (a slow-render device) reaches release_tile first then
- * it would stall device2 (a fast-render device) from proceeding to render next tile
+ * The device that reaches the critical-section function
+ * release_tile waits (stalling other devices from entering
+ * release_tile) for all kernels to complete. If device1 (a
+ * slow-render device) reaches release_tile first then it would
+ * stall device2 (a fast-render device) from proceeding to render
+ * next tile.
*/
clFinish(cqCommandQueue);
@@ -1385,7 +1400,9 @@ public:
OpenCLDeviceTask(OpenCLDeviceMegaKernel *device, DeviceTask& task)
: DeviceTask(task)
{
- run = function_bind(&OpenCLDeviceMegaKernel::thread_run, device, this);
+ run = function_bind(&OpenCLDeviceMegaKernel::thread_run,
+ device,
+ this);
}
};
@@ -1410,13 +1427,13 @@ public:
}
};
-/* OpenCLDeviceSplitKernel's declaration/definition */
+/* OpenCLDeviceSplitKernel's declaration/definition. */
class OpenCLDeviceSplitKernel : public OpenCLDeviceBase
{
public:
DedicatedTaskPool task_pool;
- /* Kernel declaration */
+ /* Kernel declaration. */
cl_kernel ckPathTraceKernel_DataInit;
cl_kernel ckPathTraceKernel_SceneIntersect;
cl_kernel ckPathTraceKernel_LampEmission;
@@ -1429,7 +1446,7 @@ public:
cl_kernel ckPathTraceKernel_SetUpNextIteration;
cl_kernel ckPathTraceKernel_SumAllRadiance;
- /* cl_program declaration */
+ /* cl_program declaration. */
cl_program dataInit_program;
cl_program sceneIntersect_program;
cl_program lampEmission_program;
@@ -1445,7 +1462,7 @@ public:
/* Global memory variables [porting]; These memory is used for
* co-operation between different kernels; Data written by one
* kernel will be avaible to another kernel via this global
- * memory
+ * memory.
*/
cl_mem rng_coop;
cl_mem throughput_coop;
@@ -1454,13 +1471,15 @@ public:
cl_mem Ray_coop;
cl_mem PathState_coop;
cl_mem Intersection_coop;
- cl_mem kgbuffer; /* KernelGlobals buffer */
+ cl_mem kgbuffer; /* KernelGlobals buffer. */
- /* global buffers for ShaderData */
- cl_mem sd; /* ShaderData used in the main path-iteration loop */
- cl_mem sd_DL_shadow; /* ShaderData used in Direct Lighting and ShadowBlocked kernel */
+ /* Global buffers for ShaderData. */
+ cl_mem sd; /* ShaderData used in the main path-iteration loop. */
+ cl_mem sd_DL_shadow; /* ShaderData used in Direct Lighting and
+ * ShadowBlocked kernel.
+ */
- /* global buffers of each member of ShaderData */
+ /* Global buffers of each member of ShaderData. */
cl_mem P_sd;
cl_mem P_sd_DL_shadow;
cl_mem N_sd;
@@ -1512,7 +1531,7 @@ public:
cl_mem ray_dP_sd;
cl_mem ray_dP_sd_DL_shadow;
- /* Global memory required for shadow blocked and accum_radiance */
+ /* Global memory required for shadow blocked and accum_radiance. */
cl_mem BSDFEval_coop;
cl_mem ISLamp_coop;
cl_mem LightRay_coop;
@@ -1527,23 +1546,25 @@ public:
cl_mem debugdata_coop;
#endif
- /* Global state array tha
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list