Add CPU dispatch for the strings effect

This commit is contained in:
Jean Pierre Cimalando 2020-04-02 01:29:11 +02:00
parent 10fa64b2c8
commit 843d603f37
2 changed files with 17 additions and 2 deletions

View file

@ -1,6 +1,7 @@
include (GNUInstallDirs)
add_subdirectory(external/kiss_fft)
add_subdirectory(external/cpuid)
set (SFIZZ_SOURCES
sfizz/Synth.cpp
@ -54,7 +55,7 @@ target_sources(sfizz_static PRIVATE ${SFIZZ_SOURCES} sfizz/sfizz_wrapper.cpp sfi
target_include_directories (sfizz_static PUBLIC .)
target_include_directories (sfizz_static PUBLIC external)
target_link_libraries (sfizz_static PUBLIC absl::strings absl::span)
target_link_libraries (sfizz_static PRIVATE sfizz_parser absl::flat_hash_map Threads::Threads sfizz-sndfile sfizz-pugixml sfizz-spline sfizz-kissfft)
target_link_libraries (sfizz_static PRIVATE sfizz_parser absl::flat_hash_map Threads::Threads sfizz-sndfile sfizz-pugixml sfizz-spline sfizz-kissfft sfizz-cpuid)
set_target_properties (sfizz_static PROPERTIES OUTPUT_NAME sfizz PUBLIC_HEADER "sfizz.h;sfizz.hpp")
if (WIN32)
target_compile_definitions (sfizz_static PRIVATE _USE_MATH_DEFINES)
@ -89,7 +90,7 @@ if (SFIZZ_SHARED)
target_sources(sfizz_shared PRIVATE ${SFIZZ_SOURCES} sfizz/sfizz_wrapper.cpp sfizz/sfizz.cpp)
target_include_directories (sfizz_shared PRIVATE .)
target_include_directories (sfizz_shared PRIVATE external)
target_link_libraries (sfizz_shared PRIVATE absl::strings absl::span sfizz_parser absl::flat_hash_map Threads::Threads sfizz-sndfile sfizz-pugixml sfizz-spline sfizz-kissfft)
target_link_libraries (sfizz_shared PRIVATE absl::strings absl::span sfizz_parser absl::flat_hash_map Threads::Threads sfizz-sndfile sfizz-pugixml sfizz-spline sfizz-kissfft sfizz-cpuid)
if (WIN32)
target_compile_definitions (sfizz_shared PRIVATE _USE_MATH_DEFINES)
endif()

View file

@ -22,6 +22,7 @@ Extensions
#include "Opcode.h"
#include "MathHelpers.h"
#include "SIMDHelpers.h"
#include "cpuid/cpuinfo.hpp"
#include "absl/memory/memory.h"
#include <cmath>
@ -31,6 +32,19 @@ namespace fx {
Strings::Strings()
: _stringsArray(new ResonantArrayScalar)
{
ResonantArray* array = nullptr;
#if SFIZZ_CPU_FAMILY_X86_64 || SFIZZ_CPU_FAMILY_I386
cpuid::cpuinfo cpuInfo;
if (cpuInfo.has_avx())
array = new ResonantArrayAVX;
else if (cpuInfo.has_sse())
array = new ResonantArraySSE;
#endif
if (!array)
array = new ResonantArrayScalar;
_stringsArray.reset(array);
}
Strings::~Strings()