[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