forked from bartvdbraak/blender
Cycles: Avoid strings passed by value in OpenCL device
Also use more const qualifiers in the code.
This commit is contained in:
parent
af53fee4b4
commit
95a0bff83a
@ -795,7 +795,7 @@ public:
|
||||
|
||||
bool load_binary(const string& /*kernel_path*/,
|
||||
const string& clbin,
|
||||
string custom_kernel_build_options,
|
||||
const string& custom_kernel_build_options,
|
||||
cl_program *program,
|
||||
const string *debug_src = NULL)
|
||||
{
|
||||
@ -848,7 +848,7 @@ public:
|
||||
}
|
||||
|
||||
bool build_kernel(cl_program *kernel_program,
|
||||
string custom_kernel_build_options,
|
||||
const string& custom_kernel_build_options,
|
||||
const string *debug_src = NULL)
|
||||
{
|
||||
string build_options;
|
||||
@ -882,26 +882,34 @@ public:
|
||||
}
|
||||
|
||||
bool compile_kernel(const string& kernel_path,
|
||||
string source,
|
||||
string custom_kernel_build_options,
|
||||
const string& source,
|
||||
const string& custom_kernel_build_options,
|
||||
cl_program *kernel_program,
|
||||
const string *debug_src = NULL)
|
||||
{
|
||||
/* we compile kernels consisting of many files. unfortunately opencl
|
||||
/* We compile kernels consisting of many files. unfortunately OpenCL
|
||||
* kernel caches do not seem to recognize changes in included files.
|
||||
* so we force recompile on changes by adding the md5 hash of all files */
|
||||
source = path_source_replace_includes(source, kernel_path);
|
||||
* so we force recompile on changes by adding the md5 hash of all files.
|
||||
*/
|
||||
string inlined_source = path_source_replace_includes(source,
|
||||
kernel_path);
|
||||
|
||||
if(debug_src)
|
||||
path_write_text(*debug_src, source);
|
||||
if(debug_src) {
|
||||
path_write_text(*debug_src, inlined_source);
|
||||
}
|
||||
|
||||
size_t source_len = source.size();
|
||||
const char *source_str = source.c_str();
|
||||
size_t source_len = inlined_source.size();
|
||||
const char *source_str = inlined_source.c_str();
|
||||
|
||||
*kernel_program = clCreateProgramWithSource(cxContext, 1, &source_str, &source_len, &ciErr);
|
||||
*kernel_program = clCreateProgramWithSource(cxContext,
|
||||
1,
|
||||
&source_str,
|
||||
&source_len,
|
||||
&ciErr);
|
||||
|
||||
if(opencl_error(ciErr))
|
||||
if(opencl_error(ciErr)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
double starttime = time_dt();
|
||||
printf("Compiling OpenCL kernel ...\n");
|
||||
@ -2078,24 +2086,25 @@ public:
|
||||
/* TODO(sergey): Seems really close to load_kernel(),
|
||||
* could it be de-duplicated?
|
||||
*/
|
||||
bool load_split_kernel(string kernel_path,
|
||||
string kernel_init_source,
|
||||
string clbin,
|
||||
string custom_kernel_build_options,
|
||||
bool load_split_kernel(const string& kernel_path,
|
||||
const string& kernel_init_source,
|
||||
const string& clbin,
|
||||
const string& custom_kernel_build_options,
|
||||
cl_program *program,
|
||||
const string *debug_src = NULL)
|
||||
{
|
||||
if(!opencl_version_check())
|
||||
if(!opencl_version_check()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
clbin = path_user_get(path_join("cache", clbin));
|
||||
string cache_clbin = path_user_get(path_join("cache", clbin));
|
||||
|
||||
/* If exists already, try use it. */
|
||||
if(path_exists(clbin) && load_binary(kernel_path,
|
||||
clbin,
|
||||
custom_kernel_build_options,
|
||||
program,
|
||||
debug_src))
|
||||
if(path_exists(cache_clbin) && load_binary(kernel_path,
|
||||
cache_clbin,
|
||||
custom_kernel_build_options,
|
||||
program,
|
||||
debug_src))
|
||||
{
|
||||
/* Kernel loaded from binary. */
|
||||
}
|
||||
@ -2110,7 +2119,7 @@ public:
|
||||
return false;
|
||||
}
|
||||
/* Save binary for reuse. */
|
||||
if(!save_binary(program, clbin)) {
|
||||
if(!save_binary(program, cache_clbin)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user