Changeset View
Changeset View
Standalone View
Standalone View
intern/cycles/device/opencl/device_opencl_impl.cpp
| Show First 20 Lines • Show All 858 Lines • ▼ Show 20 Lines | foreach (OpenCLProgram *program, programs) { | ||||
| if (!program->load()) { | if (!program->load()) { | ||||
| load_required_kernel_task_pool.push(function_bind(&OpenCLProgram::compile, program)); | load_required_kernel_task_pool.push(function_bind(&OpenCLProgram::compile, program)); | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| bool OpenCLDevice::wait_for_availability(const DeviceRequestedFeatures &requested_features) | bool OpenCLDevice::wait_for_availability(const DeviceRequestedFeatures &requested_features) | ||||
| { | { | ||||
| if (requested_features.use_baking) { | |||||
| /* For baking, kernels have already been loaded in load_required_kernels(). */ | |||||
sergey: Would be nice to reference a function where the loading happened. Think it will make thing more… | |||||
| return true; | |||||
| } | |||||
| if (background) { | if (background) { | ||||
| load_kernel_task_pool.wait_work(); | load_kernel_task_pool.wait_work(); | ||||
| use_preview_kernels = false; | use_preview_kernels = false; | ||||
| } | } | ||||
| else { | else { | ||||
| /* We use a device setting to determine to load preview kernels or not | /* We use a device setting to determine to load preview kernels or not | ||||
| * Better to check on device level than per kernel as mixing preview and | * Better to check on device level than per kernel as mixing preview and | ||||
| * non-preview kernels does not work due to different data types */ | * non-preview kernels does not work due to different data types */ | ||||
| ▲ Show 20 Lines • Show All 1,053 Lines • ▼ Show 20 Lines | for (int sample = start_sample; sample < end_sample; sample++) { | ||||
| if (task.get_cancel()) { | if (task.get_cancel()) { | ||||
| if (task.need_finish_queue == false) | if (task.need_finish_queue == false) | ||||
| break; | break; | ||||
| } | } | ||||
| kernel_set_args(kernel, start_arg_index, sample); | kernel_set_args(kernel, start_arg_index, sample); | ||||
| enqueue_kernel(kernel, d_w, d_h); | enqueue_kernel(kernel, d_w, d_h); | ||||
| clFinish(cqCommandQueue); | |||||
| rtile.sample = sample + 1; | rtile.sample = sample + 1; | ||||
| task.update_progress(&rtile, rtile.w * rtile.h); | task.update_progress(&rtile, rtile.w * rtile.h); | ||||
| } | } | ||||
| clFinish(cqCommandQueue); | |||||
| } | } | ||||
| static bool kernel_build_opencl_2(cl_device_id cdDevice) | static bool kernel_build_opencl_2(cl_device_id cdDevice) | ||||
| { | { | ||||
| /* Build with OpenCL 2.0 if available, this improves performance | /* Build with OpenCL 2.0 if available, this improves performance | ||||
| * with AMD OpenCL drivers on Windows and Linux (legacy drivers). | * with AMD OpenCL drivers on Windows and Linux (legacy drivers). | ||||
| * Note that OpenCL selects the highest 1.x version by default, | * Note that OpenCL selects the highest 1.x version by default, | ||||
| * only for 2.0 do we need the explicit compiler flag. */ | * only for 2.0 do we need the explicit compiler flag. */ | ||||
| ▲ Show 20 Lines • Show All 220 Lines • Show Last 20 Lines | |||||
Would be nice to reference a function where the loading happened. Think it will make thing more clear here.