summaryrefslogtreecommitdiff
path: root/graphics/waifu2x-converter-cpp/files/patch-non-x86
diff options
context:
space:
mode:
Diffstat (limited to 'graphics/waifu2x-converter-cpp/files/patch-non-x86')
-rw-r--r--graphics/waifu2x-converter-cpp/files/patch-non-x86168
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();