diff options
author | Zhigang Gong <zhigang.gong@intel.com> | 2014-09-11 09:51:19 +0800 |
---|---|---|
committer | Zhigang Gong <zhigang.gong@intel.com> | 2014-09-11 13:39:48 +0800 |
commit | 7b130877387f612acb96c34ba31f6864b8eb7fda (patch) | |
tree | e329b8a1af9021aafb8dc538bf925e74d2392d28 | |
parent | 077337848a738fe0f9cae7b786b64ad8e5a5782d (diff) |
GBE: fix bugs when handling -cl-std option.
Actually, CLANG does take this option and we should not
filter it out. We also change the default option to create
PCH file to -cl-std=CL1.2. And if the user pass in a CL1.1
we will have to disable PCH.
Another change is that if we are CL1.2, then we should enable
the cl_khr_fp64 by default. As from CL1.2, this extension should
be enabled by default.
Signed-off-by: Zhigang Gong <zhigang.gong@intel.com>
Reviewed-by: "Yang, Rong R" <rong.r.yang@intel.com>
-rw-r--r-- | backend/src/backend/program.cpp | 11 | ||||
-rw-r--r-- | backend/src/libocl/CMakeLists.txt | 3 |
2 files changed, 9 insertions, 5 deletions
diff --git a/backend/src/backend/program.cpp b/backend/src/backend/program.cpp index 0aa5f14..cc76493 100644 --- a/backend/src/backend/program.cpp +++ b/backend/src/backend/program.cpp @@ -659,7 +659,7 @@ namespace gbe { const std::string unsupportedOptions("-cl-denorms-are-zero, -cl-strict-aliasing, -cl-opt-disable," "-cl-no-signed-zeros, -cl-fp32-correctly-rounded-divide-sqrt"); - const std::string uncompatiblePCHOptions = ("-cl-single-precision-constant, -cl-fast-relaxed-math"); + const std::string uncompatiblePCHOptions = ("-cl-single-precision-constant, -cl-fast-relaxed-math, -cl-std=CL1.1"); const std::string fastMathOption = ("-cl-fast-relaxed-math"); while (end != std::string::npos) { end = optionStr.find(' ', start); @@ -683,7 +683,6 @@ namespace gbe { *errSize = snprintf(err, stringSize, "Invalid build option: %s\n", str.c_str()); return false; } - continue; } if (uncompatiblePCHOptions.find(str) != std::string::npos) @@ -699,8 +698,10 @@ namespace gbe { free(str); } - if (useDefaultCLCVersion) + if (useDefaultCLCVersion) { clOpt.push_back("-D__OPENCL_C_VERSION__=120"); + clOpt.push_back("-cl-std=CL1.2"); + } //for clCompilerProgram usage. if(temp_header_path){ clOpt.push_back("-I"); @@ -721,6 +722,10 @@ namespace gbe { FILE *clFile = fdopen(clFd, "w"); FATAL_IF(clFile == NULL, "Failed to open temporary file"); + #define ENABLE_CL_KHR_FP64_STR "#pragma OPENCL EXTENSION cl_khr_fp64 : enable\n" + if (options && !strstr(const_cast<char *>(options), "-cl-std=CL1.1")) + fwrite(ENABLE_CL_KHR_FP64_STR, strlen(ENABLE_CL_KHR_FP64_STR), 1, clFile); + if (!findPCH || invalidPCH) { clOpt.push_back("-include"); clOpt.push_back("ocl.h"); diff --git a/backend/src/libocl/CMakeLists.txt b/backend/src/libocl/CMakeLists.txt index d71f70b..f015eec 100644 --- a/backend/src/libocl/CMakeLists.txt +++ b/backend/src/libocl/CMakeLists.txt @@ -129,8 +129,7 @@ FOREACH(M ${OCL_BASH_GENERATED_MODULES}) ENDFOREACH(M) -SET (CLANG_OCL_FLAGS -fno-builtin -ffp-contract=off -cl-kernel-arg-info -DGEN7_SAMPLER_CLAMP_BORDER_WORKAROUND) - +SET (CLANG_OCL_FLAGS -fno-builtin -ffp-contract=off -cl-kernel-arg-info -DGEN7_SAMPLER_CLAMP_BORDER_WORKAROUND "-cl-std=CL1.2") MACRO(ADD_CL_TO_BC_TARGET _file) # CMake seems can not add pattern rule, use MACRO to replace. STRING(REGEX REPLACE "${LIBOCL_BINARY_DIR}/src/\(o.*\)\\.cl" "${LIBOCL_BINARY_DIR}/lib/\\1.bc" output_name ${_file}) |