static string get_build_options(OpenCLDeviceBase *device, const DeviceRequestedFeatures& requested_features) { string build_options = "-D__SPLIT_KERNEL__ "; build_options += requested_features.get_build_options(); /* Set compute device build option. */ cl_device_type device_type; OpenCLInfo::get_device_type(device->cdDevice, &device_type, &device->ciErr); assert(device->ciErr == CL_SUCCESS); if(device_type == CL_DEVICE_TYPE_GPU) { build_options += " -D__COMPUTE_DEVICE_GPU__"; } return build_options; }
virtual void load_kernels(const DeviceRequestedFeatures& requested_features, vector<OpenCLProgram*> &programs) { string build_options = "-D__SPLIT_KERNEL__ "; #ifdef __WORK_STEALING__ build_options += "-D__WORK_STEALING__ "; #endif build_options += requested_features.get_build_options(); /* Set compute device build option. */ cl_device_type device_type; ciErr = clGetDeviceInfo(cdDevice, CL_DEVICE_TYPE, sizeof(cl_device_type), &device_type, NULL); assert(ciErr == CL_SUCCESS); if(device_type == CL_DEVICE_TYPE_GPU) { build_options += " -D__COMPUTE_DEVICE_GPU__"; } #define GLUE(a, b) a ## b #define LOAD_KERNEL(name) \ do { \ GLUE(program_, name) = OpenCLProgram(this, "split_" #name, "kernel_" #name ".cl", build_options); \ GLUE(program_, name).add_kernel(ustring("path_trace_" #name)); \ programs.push_back(&GLUE(program_, name)); \ } while(false) LOAD_KERNEL(data_init); LOAD_KERNEL(scene_intersect); LOAD_KERNEL(lamp_emission); LOAD_KERNEL(queue_enqueue); LOAD_KERNEL(background_buffer_update); LOAD_KERNEL(shader_eval); LOAD_KERNEL(holdout_emission_blurring_pathtermination_ao); LOAD_KERNEL(direct_lighting); LOAD_KERNEL(shadow_blocked); LOAD_KERNEL(next_iteration_setup); LOAD_KERNEL(sum_all_radiance); #undef FIND_KERNEL #undef GLUE current_max_closure = requested_features.max_closure; }
string build_options_for_base_program( const DeviceRequestedFeatures& requested_features) { return requested_features.get_build_options(); }