Changeset View
Changeset View
Standalone View
Standalone View
intern/cycles/device/device_opencl.cpp
| Show First 20 Lines • Show All 1,062 Lines • ▼ Show 20 Lines | void shader(DeviceTask& task) | ||||
| cl_kernel kernel; | cl_kernel kernel; | ||||
| if(task.shader_eval_type >= SHADER_EVAL_BAKE) | if(task.shader_eval_type >= SHADER_EVAL_BAKE) | ||||
| kernel = ckBakeKernel; | kernel = ckBakeKernel; | ||||
| else | else | ||||
| kernel = ckShaderKernel; | kernel = ckShaderKernel; | ||||
| for(int sample = 0; sample < task.num_samples; sample++) { | for(int sample = 0; sample < task.num_samples; sample++) { | ||||
| cl_int d_sample = task.sample; | cl_int d_sample = sample; | ||||
| opencl_assert(clSetKernelArg(kernel, narg++, sizeof(d_data), (void*)&d_data)); | opencl_assert(clSetKernelArg(kernel, narg++, sizeof(d_data), (void*)&d_data)); | ||||
| opencl_assert(clSetKernelArg(kernel, narg++, sizeof(d_input), (void*)&d_input)); | opencl_assert(clSetKernelArg(kernel, narg++, sizeof(d_input), (void*)&d_input)); | ||||
| opencl_assert(clSetKernelArg(kernel, narg++, sizeof(d_output), (void*)&d_output)); | opencl_assert(clSetKernelArg(kernel, narg++, sizeof(d_output), (void*)&d_output)); | ||||
| #define KERNEL_TEX(type, ttype, name) \ | #define KERNEL_TEX(type, ttype, name) \ | ||||
| set_kernel_arg_mem(kernel, &narg, #name); | set_kernel_arg_mem(kernel, &narg, #name); | ||||
| #include "kernel_textures.h" | #include "kernel_textures.h" | ||||
| opencl_assert(clSetKernelArg(kernel, narg++, sizeof(d_shader_eval_type), (void*)&d_shader_eval_type)); | opencl_assert(clSetKernelArg(kernel, narg++, sizeof(d_shader_eval_type), (void*)&d_shader_eval_type)); | ||||
| opencl_assert(clSetKernelArg(kernel, narg++, sizeof(d_shader_x), (void*)&d_shader_x)); | opencl_assert(clSetKernelArg(kernel, narg++, sizeof(d_shader_x), (void*)&d_shader_x)); | ||||
| opencl_assert(clSetKernelArg(kernel, narg++, sizeof(d_shader_w), (void*)&d_shader_w)); | opencl_assert(clSetKernelArg(kernel, narg++, sizeof(d_shader_w), (void*)&d_shader_w)); | ||||
| opencl_assert(clSetKernelArg(kernel, narg++, sizeof(d_sample), (void*)&d_sample)); | opencl_assert(clSetKernelArg(kernel, narg++, sizeof(d_sample), (void*)&d_sample)); | ||||
| enqueue_kernel(kernel, task.shader_w, 1); | enqueue_kernel(kernel, task.shader_w, 1); | ||||
| if(task.update_progress_sample) | |||||
| task.update_progress_sample(); | |||||
| } | } | ||||
| } | } | ||||
| void thread_run(DeviceTask *task) | void thread_run(DeviceTask *task) | ||||
| { | { | ||||
| if(task->type == DeviceTask::FILM_CONVERT) { | if(task->type == DeviceTask::FILM_CONVERT) { | ||||
| film_convert(*task, task->buffer, task->rgba_byte, task->rgba_half); | film_convert(*task, task->buffer, task->rgba_byte, task->rgba_half); | ||||
| } | } | ||||
| Show All 30 Lines | #include "kernel_textures.h" | ||||
| public: | public: | ||||
| OpenCLDeviceTask(OpenCLDevice *device, DeviceTask& task) | OpenCLDeviceTask(OpenCLDevice *device, DeviceTask& task) | ||||
| : DeviceTask(task) | : DeviceTask(task) | ||||
| { | { | ||||
| run = function_bind(&OpenCLDevice::thread_run, device, this); | run = function_bind(&OpenCLDevice::thread_run, device, this); | ||||
| } | } | ||||
| }; | }; | ||||
| int task_count(DeviceTask& task) | |||||
| { | |||||
| return 1; | |||||
| } | |||||
| void task_add(DeviceTask& task) | void task_add(DeviceTask& task) | ||||
| { | { | ||||
| task_pool.push(new OpenCLDeviceTask(this, task)); | task_pool.push(new OpenCLDeviceTask(this, task)); | ||||
| } | } | ||||
| void task_wait() | void task_wait() | ||||
| { | { | ||||
| task_pool.wait(); | task_pool.wait(); | ||||
| ▲ Show 20 Lines • Show All 74 Lines • Show Last 20 Lines | |||||