diff options
Diffstat (limited to 'graphics/waifu2x-converter-cpp/files/patch-non-x86')
-rw-r--r-- | graphics/waifu2x-converter-cpp/files/patch-non-x86 | 168 |
1 files changed, 168 insertions, 0 deletions
diff --git a/graphics/waifu2x-converter-cpp/files/patch-non-x86 b/graphics/waifu2x-converter-cpp/files/patch-non-x86 new file mode 100644 index 000000000000..54c56d3c2a12 --- /dev/null +++ b/graphics/waifu2x-converter-cpp/files/patch-non-x86 @@ -0,0 +1,168 @@ +https://github.com/tanakamura/waifu2x-converter-cpp/pull/6 + +diff --git CMakeLists.txt CMakeLists.txt +index bcb0338..899ee7b 100644 +--- CMakeLists.txt ++++ CMakeLists.txt +@@ -58,10 +58,24 @@ endif() + find_library(IMGCODECS_LIBRARY NAMES opencv_imgcodecs opencv_highgui + HINTS ${OPENCV_PREFIX}/lib) + ++if(CMAKE_SYSTEM_PROCESSOR STREQUAL "amd64" OR ++ CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" OR ++ CMAKE_SYSTEM_PROCESSOR MATCHES "^i.86$") ++ set(X86_TRUE true) ++else() ++ set(X86_TRUE false) ++endif() ++ ++option(X86OPT "Enable X86 SIMD optimizations" ${X86_TRUE}) ++if(X86OPT) ++ add_definitions(-DX86OPT) ++ set(X86OPT_SOURCES src/modelHandler_avx.cpp src/modelHandler_fma.cpp src/modelHandler_sse.cpp) ++endif() ++ + add_executable(waifu2x-converter-cpp + src/main.cpp) + add_library(w2xc SHARED +- src/modelHandler.cpp src/modelHandler_avx.cpp src/modelHandler_fma.cpp src/modelHandler_sse.cpp ++ src/modelHandler.cpp ${X86OPT_SOURCES} + src/modelHandler_OpenCL.cpp src/convertRoutine.cpp src/threadPool.cpp + src/modelHandler_CUDA.cpp src/w2xconv.cpp src/common.cpp + src/Env.cpp +diff --git src/Env.cpp src/Env.cpp +index 76c1859..2c1069d 100644 +--- src/Env.cpp ++++ src/Env.cpp +@@ -1,11 +1,13 @@ + #include "Env.hpp" + #include "Buffer.hpp" + ++#ifdef X86OPT + #ifdef __GNUC__ + #include <cpuid.h> + #else + #include <intrin.h> + #endif ++#endif // X86OPT + + ComputeEnv::ComputeEnv() + :num_cl_dev(0), +@@ -14,6 +16,9 @@ ComputeEnv::ComputeEnv() + cuda_dev_list(nullptr), + transfer_wait(0) + { ++ this->flags = 0; ++ ++#ifdef X86OPT + unsigned int eax=0, ebx=0, ecx=0, edx=0; + + #ifdef __GNUC__ +@@ -26,8 +31,6 @@ ComputeEnv::ComputeEnv() + ecx = cpuInfo[2]; + edx = cpuInfo[3]; + #endif +- this->flags = 0; +- + if (ecx & (1<<0)) { + this->flags |= ComputeEnv::HAVE_CPU_SSE3; + } +@@ -35,6 +38,7 @@ ComputeEnv::ComputeEnv() + if (ecx & (1<<12)) { + this->flags |= ComputeEnv::HAVE_CPU_FMA; + } ++#endif // X86OPT + + this->pref_block_size = 512; + } +diff --git src/modelHandler.cpp src/modelHandler.cpp +index 2f72442..1a3d87e 100644 +--- src/modelHandler.cpp ++++ src/modelHandler.cpp +@@ -306,6 +306,7 @@ bool Model::filter_AVX_OpenCL(ComputeEnv *env, + nInputPlanes, nOutputPlanes, fbiases_flat, weight_flat, + size.width, size.height, nJob); + } else { ++#ifdef X86OPT + const float *packed_input = (float*)packed_input_buf->get_read_ptr_host(env, in_size); + float *packed_output = (float*)packed_output_buf->get_write_ptr_host(env); + +@@ -322,6 +323,9 @@ bool Model::filter_AVX_OpenCL(ComputeEnv *env, + nInputPlanes, nOutputPlanes, fbiases_flat, weight_flat, + size.width, size.height, nJob); + } ++#else ++ filter_CV(env, packed_input_buf, packed_output_buf, size); ++#endif + } + + double t2 = getsec(); +@@ -376,6 +380,7 @@ bool Model::filter_AVX_OpenCL(ComputeEnv *env, + nInputPlanes, nOutputPlanes, fbiases_flat, weight_flat, + size.width, size.height, nJob); + } else { ++#ifdef X86OPT + const float *packed_input = (float*)packed_input_buf->get_read_ptr_host(env, in_size); + float *packed_output = (float*)packed_output_buf->get_write_ptr_host(env); + +@@ -395,6 +400,9 @@ bool Model::filter_AVX_OpenCL(ComputeEnv *env, + size.width, size.height, nJob); + } + } ++#else ++ filter_CV(env, packed_input_buf, packed_output_buf, size); ++#endif + } + } + +diff --git src/modelHandler_OpenCL.cpp src/modelHandler_OpenCL.cpp +index ea4fd9b..13da2a2 100644 +--- src/modelHandler_OpenCL.cpp ++++ src/modelHandler_OpenCL.cpp +@@ -16,13 +16,6 @@ + #include "CLlib.h" + #include "params.h" + +-#ifdef __GNUC__ +-#include <cpuid.h> +-#else +-#include <intrin.h> +-#endif +- +- + static const char prog[] = + #include "modelHandler_OpenCL.cl.h" + ; +diff --git src/w2xconv.cpp src/w2xconv.cpp +index 5ed00bd..94b08c4 100644 +--- src/w2xconv.cpp ++++ src/w2xconv.cpp +@@ -1,10 +1,12 @@ + #define W2XCONV_IMPL + + #include <thread> ++#ifdef X86OPT + //#if (defined __GNUC__) || (defined __clang__) + #ifndef _WIN32 + #include <cpuid.h> + #endif ++#endif // X86OPT + #include "w2xconv.h" + #include "sec.hpp" + #include "Buffer.hpp" +@@ -63,6 +65,7 @@ w2xconv_init(enum W2XConvGPUMode gpu, + c->target_processor.devid = 0; + impl->dev_name = impl->env.cl_dev_list[0].name.c_str(); + } else { ++#ifdef X86OPT + { + + #ifdef _WIN32 +@@ -91,6 +94,7 @@ w2xconv_init(enum W2XConvGPUMode gpu, + + c->target_processor.type = W2XCONV_PROC_HOST; + } ++#endif // X86OPT + } + + c->target_processor.dev_name = impl->dev_name.c_str(); |