diff --git a/src/components/filters/CMakeLists.txt b/src/components/filters/CMakeLists.txt index e2b9ea07..f9f2a155 100644 --- a/src/components/filters/CMakeLists.txt +++ b/src/components/filters/CMakeLists.txt @@ -1,5 +1,13 @@ add_library(vbam-components-filters OBJECT) +unset(extra_src) +if(WINXP) + list(APPEND extra_src + ${CMAKE_SOURCE_DIR}/third_party/quake3-sqrt/quake3-sqrt.h + ) + target_include_directories(vbam-components-filters PRIVATE ${CMAKE_SOURCE_DIR}/third_party/quake3-sqrt) +endif() + target_sources(vbam-components-filters PRIVATE internal/2xSaI.cpp @@ -17,6 +25,7 @@ target_sources(vbam-components-filters internal/xBRZ/xbrz_config.h internal/xBRZ/xbrz_tools.h internal/xbrzfilter.cpp + ${extra_src} PUBLIC filters.h diff --git a/src/components/filters/internal/xBRZ/xbrz.cpp b/src/components/filters/internal/xBRZ/xbrz.cpp index 27f50b48..35b5d4cf 100644 --- a/src/components/filters/internal/xBRZ/xbrz.cpp +++ b/src/components/filters/internal/xBRZ/xbrz.cpp @@ -21,6 +21,10 @@ #include //std::sqrt #include "xbrz_tools.h" +#ifdef WINXP +#include "quake3-sqrt.h" +#endif + // some gcc versions lie about having this C++17 feature #define static_assert(x) static_assert(x, "assertion failed") @@ -66,7 +70,9 @@ uint32_t gradientARGB(uint32_t pixFront, uint32_t pixBack) //find intermediate c inline double fastSqrt(double n) { -#if (defined(__GNUC__) || defined(__clang__)) && (defined(__x86_64__) || defined(__i386__)) +#ifdef WINXP + return quake3_sqrt((float)n); +#elif (defined(__GNUC__) || defined(__clang__)) && (defined(__x86_64__) || defined(__i386__)) __asm__ ("fsqrt" : "+t" (n)); return n; #elif defined(_MSC_VER) && defined(_M_IX86)