Changeset View
Changeset View
Standalone View
Standalone View
intern/cycles/device/opencl/opencl_base.cpp
| Show First 20 Lines • Show All 1,085 Lines • ▼ Show 20 Lines | void OpenCLDeviceBase::shader(DeviceTask& task) | ||||
| cl_int d_shader_eval_type = task.shader_eval_type; | cl_int d_shader_eval_type = task.shader_eval_type; | ||||
| cl_int d_shader_filter = task.shader_filter; | cl_int d_shader_filter = task.shader_filter; | ||||
| cl_int d_shader_x = task.shader_x; | cl_int d_shader_x = task.shader_x; | ||||
| cl_int d_shader_w = task.shader_w; | cl_int d_shader_w = task.shader_w; | ||||
| cl_int d_offset = task.offset; | cl_int d_offset = task.offset; | ||||
| cl_kernel kernel; | cl_kernel kernel; | ||||
| if(task.shader_eval_type >= SHADER_EVAL_BAKE) { | if(task.shader_eval_type == SHADER_EVAL_DISPLACE) { | ||||
| kernel = base_program(ustring("bake")); | |||||
| } | |||||
| else if(task.shader_eval_type == SHADER_EVAL_DISPLACE) { | |||||
| kernel = base_program(ustring("displace")); | kernel = base_program(ustring("displace")); | ||||
| } | } | ||||
| else { | else { | ||||
| kernel = base_program(ustring("background")); | kernel = base_program(ustring("background")); | ||||
| } | } | ||||
| cl_uint start_arg_index = | cl_uint start_arg_index = | ||||
| kernel_set_args(kernel, | kernel_set_args(kernel, | ||||
| Show All 28 Lines | for(int sample = 0; sample < task.num_samples; sample++) { | ||||
| enqueue_kernel(kernel, task.shader_w, 1); | enqueue_kernel(kernel, task.shader_w, 1); | ||||
| clFinish(cqCommandQueue); | clFinish(cqCommandQueue); | ||||
| task.update_progress(NULL); | task.update_progress(NULL); | ||||
| } | } | ||||
| } | } | ||||
| void OpenCLDeviceBase::bake(DeviceTask& task, RenderTile& rtile) | |||||
| { | |||||
| scoped_timer timer(&rtile.buffers->render_time); | |||||
| /* 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_int d_x = rtile.x; | |||||
| cl_int d_y = rtile.y; | |||||
| cl_int d_w = rtile.w; | |||||
| cl_int d_h = rtile.h; | |||||
| cl_int d_offset = rtile.offset; | |||||
| cl_int d_stride = rtile.stride; | |||||
| cl_kernel kernel = base_program(ustring("bake")); | |||||
| cl_uint start_arg_index = | |||||
| kernel_set_args(kernel, | |||||
| 0, | |||||
| d_data, | |||||
| d_buffer); | |||||
| set_kernel_arg_buffers(kernel, &start_arg_index); | |||||
| start_arg_index += kernel_set_args(kernel, | |||||
| start_arg_index, | |||||
| d_x, | |||||
| d_y, | |||||
| d_w, | |||||
| d_h, | |||||
| d_offset, | |||||
| d_stride); | |||||
| int start_sample = rtile.start_sample; | |||||
| int end_sample = rtile.start_sample + rtile.num_samples; | |||||
| for(int sample = start_sample; sample < end_sample; sample++) { | |||||
| if(task.get_cancel()) { | |||||
| if(task.need_finish_queue == false) | |||||
| break; | |||||
| } | |||||
| kernel_set_args(kernel, start_arg_index, sample); | |||||
| enqueue_kernel(kernel, d_w, d_h); | |||||
| rtile.sample = sample + 1; | |||||
| task.update_progress(&rtile, rtile.w*rtile.h); | |||||
| } | |||||
| clFinish(cqCommandQueue); | |||||
| } | |||||
| string OpenCLDeviceBase::kernel_build_options(const string *debug_src) | string OpenCLDeviceBase::kernel_build_options(const string *debug_src) | ||||
| { | { | ||||
| string build_options = "-cl-no-signed-zeros -cl-mad-enable "; | string build_options = "-cl-no-signed-zeros -cl-mad-enable "; | ||||
| if(platform_name == "NVIDIA CUDA") { | if(platform_name == "NVIDIA CUDA") { | ||||
| build_options += "-D__KERNEL_OPENCL_NVIDIA__ " | build_options += "-D__KERNEL_OPENCL_NVIDIA__ " | ||||
| "-cl-nv-maxrregcount=32 " | "-cl-nv-maxrregcount=32 " | ||||
| "-cl-nv-verbose "; | "-cl-nv-verbose "; | ||||
| ▲ Show 20 Lines • Show All 201 Lines • Show Last 20 Lines | |||||