summaryrefslogtreecommitdiffstats
path: root/backend/amd/amd_gpu/gpu.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'backend/amd/amd_gpu/gpu.cpp')
-rw-r--r--backend/amd/amd_gpu/gpu.cpp45
1 files changed, 32 insertions, 13 deletions
diff --git a/backend/amd/amd_gpu/gpu.cpp b/backend/amd/amd_gpu/gpu.cpp
index 30aa5a8..04e442a 100644
--- a/backend/amd/amd_gpu/gpu.cpp
+++ b/backend/amd/amd_gpu/gpu.cpp
@@ -19,6 +19,7 @@
#include <iostream>
#include <vector>
#include <algorithm>
+#include <regex>
#ifdef _WIN32
#include <windows.h>
@@ -212,7 +213,7 @@ char* LoadTextFile(const char* filename)
return out;
}
-size_t InitOpenCLGpu(cl_context opencl_ctx, GpuContext* ctx, char* source_code)
+size_t InitOpenCLGpu(cl_context opencl_ctx, GpuContext* ctx, const char* source_code)
{
size_t MaximumWorkSize;
cl_int ret;
@@ -330,9 +331,9 @@ size_t InitOpenCLGpu(cl_context opencl_ctx, GpuContext* ctx, char* source_code)
printer::inst()->print_msg(L1,"Error %s when calling clGetProgramBuildInfo for build log.", err_to_str(ret));
return ERR_OCL_API;
}
-
+
printer::inst()->print_str("Build log:\n");
- printer::inst()->print_str(BuildLog);
+ std::cerr<<BuildLog<<std::endl;
free(BuildLog);
return ERR_OCL_API;
@@ -544,7 +545,6 @@ size_t InitOpenCL(GpuContext* ctx, size_t num_gpus, size_t platform_idx)
if( platformName.find("Advanced Micro Devices") == std::string::npos)
{
printer::inst()->print_msg(L1,"WARNING: using non AMD device: %s", platformName.c_str());
- return ERR_STUPID_PARAMS;
}
free(platforms);
@@ -607,22 +607,41 @@ size_t InitOpenCL(GpuContext* ctx, size_t num_gpus, size_t platform_idx)
return ERR_OCL_API;
}
- char* source_code = LoadTextFile(sSourcePath);
- if(source_code == NULL)
- {
- printer::inst()->print_msg(L1,"Couldn't locate GPU source code file at %s.", sSourcePath);
- return ERR_STUPID_PARAMS;
- }
+ //char* source_code = LoadTextFile(sSourcePath);
+
+ const char *cryptonightCL =
+ #include "./opencl/cryptonight.cl"
+ ;
+ const char *blake256CL =
+ #include "./opencl/blake256.cl"
+ ;
+ const char *groestl256CL =
+ #include "./opencl/groestl256.cl"
+ ;
+ const char *jhCL =
+ #include "./opencl/jh.cl"
+ ;
+ const char *wolfAesCL =
+ #include "./opencl/wolf-aes.cl"
+ ;
+ const char *wolfSkeinCL =
+ #include "./opencl/wolf-skein.cl"
+ ;
+
+ std::string source_code(cryptonightCL);
+ source_code = std::regex_replace(source_code, std::regex("XMRSTAK_INCLUDE_WOLF_AES"), wolfAesCL);
+ source_code = std::regex_replace(source_code, std::regex("XMRSTAK_INCLUDE_WOLF_SKEIN"), wolfSkeinCL);
+ source_code = std::regex_replace(source_code, std::regex("XMRSTAK_INCLUDE_JH"), jhCL);
+ source_code = std::regex_replace(source_code, std::regex("XMRSTAK_INCLUDE_BLAKE256"), blake256CL);
+ source_code = std::regex_replace(source_code, std::regex("XMRSTAK_INCLUDE_GROESTL256"), groestl256CL);
for(int i = 0; i < num_gpus; ++i)
{
- if((ret = InitOpenCLGpu(opencl_ctx, &ctx[i], source_code)) != ERR_SUCCESS)
+ if((ret = InitOpenCLGpu(opencl_ctx, &ctx[i], source_code.c_str())) != ERR_SUCCESS)
{
- free(source_code);
return ret;
}
}
- free(source_code);
return ERR_SUCCESS;
}
OpenPOWER on IntegriCloud