Changeset View
Changeset View
Standalone View
Standalone View
intern/cycles/device/opencl/opencl_split.cpp
| Show First 20 Lines • Show All 390 Lines • ▼ Show 20 Lines | public: | ||||
| { | { | ||||
| OpenCLSplitKernelFunction* kernel = new OpenCLSplitKernelFunction(device, cached_memory); | OpenCLSplitKernelFunction* kernel = new OpenCLSplitKernelFunction(device, cached_memory); | ||||
| const string program_name = device->get_opencl_program_name(kernel_name); | const string program_name = device->get_opencl_program_name(kernel_name); | ||||
| kernel->program = | kernel->program = | ||||
| OpenCLDevice::OpenCLProgram(device, | OpenCLDevice::OpenCLProgram(device, | ||||
| program_name, | program_name, | ||||
| device->get_opencl_program_filename(kernel_name), | device->get_opencl_program_filename(kernel_name), | ||||
| device->get_build_options(requested_features, | device->get_build_options(requested_features, | ||||
| program_name, | program_name, | ||||
| device->use_preview_kernels)); | device->use_preview_kernels)); | ||||
| kernel->program.add_kernel(ustring("path_trace_" + kernel_name)); | kernel->program.add_kernel(ustring("path_trace_" + kernel_name)); | ||||
| kernel->program.load(); | kernel->program.load(); | ||||
| if(!kernel->program.is_loaded()) { | if(!kernel->program.is_loaded()) { | ||||
| delete kernel; | delete kernel; | ||||
| return NULL; | return NULL; | ||||
| ▲ Show 20 Lines • Show All 356 Lines • ▼ Show 20 Lines | bool OpenCLDevice::load_kernels(const DeviceRequestedFeatures& requested_features) | ||||
| if(!device_initialized) { | if(!device_initialized) { | ||||
| fprintf(stderr, "OpenCL: failed to initialize device.\n"); | fprintf(stderr, "OpenCL: failed to initialize device.\n"); | ||||
| return false; | return false; | ||||
| } | } | ||||
| /* Verify we have right opencl version. */ | /* Verify we have right opencl version. */ | ||||
| if(!opencl_version_check()) | if(!opencl_version_check()) | ||||
| return false; | return false; | ||||
| load_required_kernels(requested_features); | load_required_kernels(requested_features); | ||||
| vector<OpenCLProgram*> programs; | vector<OpenCLProgram*> programs; | ||||
| kernel_programs.load_kernels(programs, requested_features, false); | kernel_programs.load_kernels(programs, requested_features, false); | ||||
| if (!requested_features.use_baking && requested_features.use_denoising) { | if (!requested_features.use_baking && requested_features.use_denoising) { | ||||
| denoising_program = OpenCLProgram(this, "denoising", "filter.cl", get_build_options(requested_features, "denoising")); | denoising_program = OpenCLProgram(this, "denoising", "filter.cl", get_build_options(requested_features, "denoising")); | ||||
| denoising_program.add_kernel(ustring("filter_divide_shadow")); | denoising_program.add_kernel(ustring("filter_divide_shadow")); | ||||
| ▲ Show 20 Lines • Show All 93 Lines • ▼ Show 20 Lines | |||||
| { | { | ||||
| return use_preview_kernels?&preview_programs:&kernel_programs; | return use_preview_kernels?&preview_programs:&kernel_programs; | ||||
| } | } | ||||
| DeviceKernelStatus OpenCLDevice::get_active_kernel_switch_state() | DeviceKernelStatus OpenCLDevice::get_active_kernel_switch_state() | ||||
| { | { | ||||
| /* Do not switch kernels for background renderings | /* Do not switch kernels for background renderings | ||||
| * We do foreground rendering but use the preview kernels | * We do foreground rendering but use the preview kernels | ||||
| * Check for the optimized kernels | * Check for the optimized kernels | ||||
| * | * | ||||
| * This works also the other way around, where we are using | * This works also the other way around, where we are using | ||||
| * optimized kernels but new ones are being compiled due | * optimized kernels but new ones are being compiled due | ||||
| * to other features that are needed */ | * to other features that are needed */ | ||||
| if (background) { | if (background) { | ||||
| /* The if-statements below would find the same result, | /* The if-statements below would find the same result, | ||||
| * But as the `finished` method uses a mutex we added | * But as the `finished` method uses a mutex we added | ||||
| * this as an early exit */ | * this as an early exit */ | ||||
| return DEVICE_KERNEL_USING_FEATURE_KERNEL; | return DEVICE_KERNEL_USING_FEATURE_KERNEL; | ||||
| } | } | ||||
| bool other_kernels_finished = load_kernel_task_pool.finished(); | bool other_kernels_finished = load_kernel_task_pool.finished(); | ||||
| if (use_preview_kernels) { | if (use_preview_kernels) { | ||||
| if (other_kernels_finished) { | if (other_kernels_finished) { | ||||
| return DEVICE_KERNEL_FEATURE_KERNEL_AVAILABLE; | return DEVICE_KERNEL_FEATURE_KERNEL_AVAILABLE; | ||||
| } | } | ||||
| else { | else { | ||||
| return DEVICE_KERNEL_WAITING_FOR_FEATURE_KERNEL; | return DEVICE_KERNEL_WAITING_FOR_FEATURE_KERNEL; | ||||
| } | } | ||||
| ▲ Show 20 Lines • Show All 1,180 Lines • Show Last 20 Lines | |||||