From 8df7fb0f039ae9544a4bdf329a27c2f34260fa74 Mon Sep 17 00:00:00 2001 From: Stefan Werner Date: Tue, 17 Jun 2025 14:57:32 +0200 Subject: [PATCH 01/10] WIP: AVX10.1 --- CMakeLists.txt | 35 ++++++++++++++++++++++++++++++++--- common/cmake/msvc.cmake | 1 + kernels/CMakeLists.txt | 18 +++++++++++++++++- 3 files changed, 50 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 47076d84fd..9ee047416e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -380,9 +380,10 @@ IF (EMBREE_MAX_ISA STREQUAL "NONE") OPTION(EMBREE_ISA_NEON2X "Enables NEON ISA double pumped." OFF) ENDIF() ELSE() - TRY_COMPILE(COMPILER_SUPPORTS_AVX "${CMAKE_BINARY_DIR}" "${PROJECT_SOURCE_DIR}/common/cmake/check_isa.cpp" COMPILE_DEFINITIONS ${FLAGS_AVX}) - TRY_COMPILE(COMPILER_SUPPORTS_AVX2 "${CMAKE_BINARY_DIR}" "${PROJECT_SOURCE_DIR}/common/cmake/check_isa.cpp" COMPILE_DEFINITIONS ${FLAGS_AVX2}) - TRY_COMPILE(COMPILER_SUPPORTS_AVX512 "${CMAKE_BINARY_DIR}" "${PROJECT_SOURCE_DIR}/common/cmake/check_isa.cpp" COMPILE_DEFINITIONS ${FLAGS_AVX512}) + TRY_COMPILE(COMPILER_SUPPORTS_AVX "${CMAKE_BINARY_DIR}" "${PROJECT_SOURCE_DIR}/common/cmake/check_isa.cpp" COMPILE_DEFINITIONS ${FLAGS_AVX}) + TRY_COMPILE(COMPILER_SUPPORTS_AVX2 "${CMAKE_BINARY_DIR}" "${PROJECT_SOURCE_DIR}/common/cmake/check_isa.cpp" COMPILE_DEFINITIONS ${FLAGS_AVX2}) + TRY_COMPILE(COMPILER_SUPPORTS_AVX512 "${CMAKE_BINARY_DIR}" "${PROJECT_SOURCE_DIR}/common/cmake/check_isa.cpp" COMPILE_DEFINITIONS ${FLAGS_AVX512}) + TRY_COMPILE(COMPILER_SUPPORTS_AVX10_1 "${CMAKE_BINARY_DIR}" "${PROJECT_SOURCE_DIR}/common/cmake/check_isa.cpp" COMPILE_DEFINITIONS ${FLAGS_AVX10_1}) OPTION(EMBREE_ISA_SSE2 "Enables SSE2 ISA." ON) OPTION(EMBREE_ISA_SSE42 "Enables SSE4.2 ISA." ON) @@ -390,8 +391,10 @@ IF (EMBREE_MAX_ISA STREQUAL "NONE") OPTION(EMBREE_ISA_AVX2 "Enables AVX2 ISA." ${COMPILER_SUPPORTS_AVX2}) IF (APPLE) OPTION(EMBREE_ISA_AVX512 "Enables AVX512 ISA." OFF) + OPTION(EMBREE_ISA_AVX10_1 "Enables AVX10.1 ISA." OFF) ELSE() OPTION(EMBREE_ISA_AVX512 "Enables AVX512 ISA." ${COMPILER_SUPPORTS_AVX512}) + OPTION(EMBREE_ISA_AVX10_1 "Enables AVX10.1 ISA." ${COMPILER_SUPPORTS_AVX10_1}) ENDIF() # Don't use OPTION, but still set them to OFF, so that embree-config.cmake is consisten with its definitions SET(EMBREE_ISA_NEON OFF) @@ -406,6 +409,7 @@ ELSEIF (EMBREE_MAX_ISA STREQUAL "DEFAULT") UNSET(EMBREE_ISA_AVX CACHE) UNSET(EMBREE_ISA_AVX2 CACHE) UNSET(EMBREE_ISA_AVX512 CACHE) + UNSET(EMBREE_ISA_AVX10_1 CACHE) SET(EMBREE_ISA_NEON OFF) SET(EMBREE_ISA_NEON2X OFF) SET(EMBREE_ISA_SSE2 OFF) @@ -413,6 +417,7 @@ ELSEIF (EMBREE_MAX_ISA STREQUAL "DEFAULT") SET(EMBREE_ISA_AVX OFF) SET(EMBREE_ISA_AVX2 OFF) SET(EMBREE_ISA_AVX512 OFF) + SET(EMBREE_ISA_AVX10_1 OFF) MESSAGE(STATUS "Detecting default ISA...") INCLUDE(check_isa_default) CHECK_ISA_DEFAULT(EMBREE_ISA_DEFAULT) @@ -427,6 +432,7 @@ ELSE() UNSET(EMBREE_ISA_AVX CACHE) UNSET(EMBREE_ISA_AVX2 CACHE) UNSET(EMBREE_ISA_AVX512 CACHE) + UNSET(EMBREE_ISA_AVX10_1 CACHE) IF(EMBREE_MAX_ISA STREQUAL "NEON") SET(ISA 1) @@ -444,6 +450,8 @@ ELSE() SET(ISA 5) ELSEIF(EMBREE_MAX_ISA STREQUAL "AVX512SKX") # just for compatibility SET(ISA 5) + ELSEIF(EMBREE_MAX_ISA STREQUAL "AVX10.1") + SET(ISA 6) ELSE() MESSAGE(FATAL_ERROR "Unsupported ISA specified: " ${EMBREE_MAX_ISA}) ENDIF() @@ -455,6 +463,7 @@ ELSE() SET(EMBREE_ISA_AVX OFF) SET(EMBREE_ISA_AVX2 OFF) SET(EMBREE_ISA_AVX512 OFF) + SET(EMBREE_ISA_AVX10_1 OFF) IF (EMBREE_ARM) IF (ISA GREATER 0) @@ -479,6 +488,9 @@ ELSE() IF (ISA GREATER 4) SET(EMBREE_ISA_AVX512 ON) ENDIF () + IF (ISA GREATER 5) + SET(EMBREE_ISA_AVX10_1 ON) + ENDIF () ENDIF() ENDIF() @@ -511,6 +523,9 @@ IF (APPLE AND EMBREE_STATIC_LIB) IF (EMBREE_ISA_AVX512) MATH(EXPR NUMISA "${NUMISA}+1") ENDIF() + IF (EMBREE_ISA_AVX10_1) + MATH(EXPR NUMISA "${NUMISA}+1") + ENDIF() IF (NUMISA GREATER 1) IF (${CMAKE_CXX_COMPILER_ID} MATCHES "Clang") @@ -530,6 +545,7 @@ SET(SSE42 1) SET(AVX 2) SET(AVX2 3) SET(AVX512 4) +SET(AVX10_1 5) UNSET(FLAGS_LOWEST) SET(ISA_LOWEST -1) @@ -612,6 +628,19 @@ IF (EMBREE_ISA_AVX512) ENDIF() ENDIF () +IF (EMBREE_ISA_AVX10_1) + ADD_DEFINITIONS(-DEMBREE_TARGET_AVX10_1) + IF (NOT EMBREE_ARM) + # AVX 10.1 support in ISPC? + # LIST(APPEND ISPC_TARGETS "") + ENDIF() + IF(NOT FLAGS_LOWEST) + SET(ISA_LOWEST ${AVX10_1}) + SET(ISA_LOWEST_AVX ${AVX10_1}) + SET(FLAGS_LOWEST ${FLAGS_AVX10_1}) + ENDIF() +ENDIF () + IF (ISA_LOWEST EQUAL -1) MESSAGE(FATAL_ERROR "You have to enable at least one ISA!") ENDIF() diff --git a/common/cmake/msvc.cmake b/common/cmake/msvc.cmake index 9f08cd0f03..9989dddbcf 100644 --- a/common/cmake/msvc.cmake +++ b/common/cmake/msvc.cmake @@ -6,6 +6,7 @@ SET(FLAGS_SSE42 "${FLAGS_SSE2} /D__SSE3__ /D__SSSE3__ /D__SSE4_1__ /D__SSE4_2__" SET(FLAGS_AVX "${FLAGS_SSE42} /arch:AVX") SET(FLAGS_AVX2 "${FLAGS_SSE42} /arch:AVX2") SET(FLAGS_AVX512 "${FLAGS_AVX2} /arch:AVX512") +SET(FLAGS_AVX10_1 "${FLAGS_AVX2} /arch:AVX10.1") SET(COMMON_CXX_FLAGS "") SET(COMMON_CXX_FLAGS "${COMMON_CXX_FLAGS} /EHsc") # catch C++ exceptions only and extern "C" functions never throw a C++ exception diff --git a/kernels/CMakeLists.txt b/kernels/CMakeLists.txt index b82780799c..e6b95d9fd7 100644 --- a/kernels/CMakeLists.txt +++ b/kernels/CMakeLists.txt @@ -132,7 +132,7 @@ MACRO(embree_files TARGET ISA) LIST(APPEND ${TARGET} geometry/primitive8.cpp) ENDIF() - IF (${ISA} EQUAL ${SSE2} OR ${ISA} EQUAL ${AVX} OR ${ISA} EQUAL ${AVX2} OR ${ISA} EQUAL ${AVX512} OR ${ISA_LOWEST} EQUAL ${ISA}) + IF (${ISA} EQUAL ${SSE2} OR ${ISA} EQUAL ${AVX} OR ${ISA} EQUAL ${AVX2} OR ${ISA} EQUAL ${AVX512} OR ${ISA} EQUAL ${AVX10_1} OR ${ISA_LOWEST} EQUAL ${ISA}) LIST(APPEND ${TARGET} common/scene_user_geometry.cpp @@ -209,6 +209,7 @@ embree_files(EMBREE_LIBRARY_FILES_SSE42 ${SSE42}) embree_files(EMBREE_LIBRARY_FILES_AVX ${AVX}) embree_files(EMBREE_LIBRARY_FILES_AVX2 ${AVX2}) embree_files(EMBREE_LIBRARY_FILES_AVX512 ${AVX512}) +embree_files(EMBREE_LIBRARY_FILES_AVX10_1 ${AVX10_1}) #message("SSE2: ${EMBREE_LIBRARY_FILES_SSE2}") #message("SSE42: ${EMBREE_LIBRARY_FILES_SSE42}") @@ -237,6 +238,7 @@ CreateISADummyFiles(EMBREE_LIBRARY_FILES_SSE42 sse42 ${EMBREE_LIBRARY_FI CreateISADummyFiles(EMBREE_LIBRARY_FILES_AVX avx ${EMBREE_LIBRARY_FILES_AVX}) CreateISADummyFiles(EMBREE_LIBRARY_FILES_AVX2 avx2 ${EMBREE_LIBRARY_FILES_AVX2}) CreateISADummyFiles(EMBREE_LIBRARY_FILES_AVX512 avx512 ${EMBREE_LIBRARY_FILES_AVX512}) +CreateISADummyFiles(EMBREE_LIBRARY_FILES_AVX10_1 avx10_1 ${EMBREE_LIBRARY_FILES_AVX10_1}) MACRO (CheckGlobals library) IF (NOT WIN32 AND NOT APPLE) @@ -346,6 +348,20 @@ IF (EMBREE_ISA_AVX512 AND EMBREE_LIBRARY_FILES_AVX512) ENDIF() ENDIF() +IF (EMBREE_ISA_AVX10_1 AND EMBREE_LIBRARY_FILES_AVX10_1) + DISABLE_STACK_PROTECTOR_FOR_INTERSECTORS(${EMBREE_LIBRARY_FILES_AVX10_1}) + ADD_LIBRARY(embree_avx10_1 STATIC ${EMBREE_LIBRARY_FILES_AVX10_1}) + TARGET_LINK_LIBRARIES(embree_avx10_1 PRIVATE tasking) + SET_TARGET_PROPERTIES(embree_avx10_1 PROPERTIES COMPILE_FLAGS "${FLAGS_AVX10_1}") + SET_PROPERTY(TARGET embree_avx10_1 PROPERTY FOLDER kernels) + SET(EMBREE_LIBRARIES ${EMBREE_LIBRARIES} embree_avx10_1) + CheckGlobals(embree_avx10_1) + IF (EMBREE_STATIC_LIB) + INSTALL(TARGETS embree_avx10_1 EXPORT embree_avx10_1-targets ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" COMPONENT devel) + INSTALL(EXPORT embree_avx10_1-targets DESTINATION "${EMBREE_CMAKEEXPORT_DIR}" COMPONENT devel) + ENDIF() +ENDIF() + TARGET_LINK_LIBRARIES(embree PRIVATE ${EMBREE_LIBRARIES} sys math simd lexers tasking) IF (EMBREE_SYCL_SUPPORT) TARGET_LINK_LIBRARIES(embree PRIVATE ${SYCL_LIB_NAME} ze_wrapper PUBLIC embree_sycl) From 4c01b7a92abbbae74a8cf47e2ce2445a85cd0b4d Mon Sep 17 00:00:00 2001 From: "Werner, Stefan" Date: Wed, 18 Feb 2026 21:12:27 +0100 Subject: [PATCH 02/10] Added AVX10.1 flags for gcc and clang --- common/cmake/check_isa.cpp | 4 +++- common/cmake/clang.cmake | 1 + common/cmake/gnu.cmake | 1 + 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/common/cmake/check_isa.cpp b/common/cmake/check_isa.cpp index a9879d2dc1..7a6683ffe7 100644 --- a/common/cmake/check_isa.cpp +++ b/common/cmake/check_isa.cpp @@ -14,7 +14,9 @@ // limitations under the License. // // ======================================================================== // -#if \ +if defined(__AVX10_1__) +char const *info_isa = "ISA" ":" "AVX10.1" +#elif \ defined(__AVX512F__) && defined(__AVX512CD__) && \ defined(__AVX512DQ__) && defined(__AVX512BW__) && defined(__AVX512VL__) char const *info_isa = "ISA" ":" "AVX512"; diff --git a/common/cmake/clang.cmake b/common/cmake/clang.cmake index 2666d1be8b..7bb740c159 100644 --- a/common/cmake/clang.cmake +++ b/common/cmake/clang.cmake @@ -28,6 +28,7 @@ ELSE () _SET_IF_EMPTY(FLAGS_AVX "-mavx") _SET_IF_EMPTY(FLAGS_AVX2 "-mf16c -mavx2 -mfma -mlzcnt -mbmi -mbmi2") _SET_IF_EMPTY(FLAGS_AVX512 "-march=skx") + _SET_IF_EMPTY(FLAGS_AVX10_1 "-mlzcnt -mavx10.1-512") ENDIF () IF (WIN32) diff --git a/common/cmake/gnu.cmake b/common/cmake/gnu.cmake index d43a1b534c..f4c9d01d84 100644 --- a/common/cmake/gnu.cmake +++ b/common/cmake/gnu.cmake @@ -18,6 +18,7 @@ ELSE () _SET_IF_EMPTY(FLAGS_AVX "-mavx") _SET_IF_EMPTY(FLAGS_AVX2 "-mf16c -mavx2 -mfma -mlzcnt -mbmi -mbmi2") _SET_IF_EMPTY(FLAGS_AVX512 "-march=skylake-avx512") + _SET_IF_EMPTY(FLAGS_AVX10_1 "-mlzcnt -mavx10.1") ENDIF () OPTION(EMBREE_IGNORE_CMAKE_CXX_FLAGS "When enabled Embree ignores default CMAKE_CXX_FLAGS." ON) From 75d34b16f1b7d4c711b26a17e21e03aa0628883f Mon Sep 17 00:00:00 2001 From: Stefan Werner Date: Wed, 18 Mar 2026 09:16:39 +0100 Subject: [PATCH 03/10] Added CPU ID feature detection of AVX 10.x and APX --- common/sys/sysinfo.cpp | 44 +++++++++++++++++++++++++++++++------ common/sys/sysinfo.h | 35 ++++++++++++++++------------- kernels/common/device.cpp | 2 +- kernels/common/state.cpp | 4 ++-- kernels/common/state.h | 4 ++-- tutorials/verify/verify.cpp | 4 ++-- 6 files changed, 64 insertions(+), 29 deletions(-) diff --git a/common/sys/sysinfo.cpp b/common/sys/sysinfo.cpp index 5f375cd95c..51b634a900 100644 --- a/common/sys/sysinfo.cpp +++ b/common/sys/sysinfo.cpp @@ -253,6 +253,16 @@ namespace embree /* cpuid[eax=7,ecx=0].ecx */ static const int CPU_FEATURE_BIT_AVX512VBMI = 1 << 1; // AVX512VBMI (vector bit manipulation instructions) + + /* cpuid[eax=7,ecx=1].eax */ + static const int CPU_FEATURE_BIT_APX = 1 << 21; // APX (Advanced Performance Extensions) + + /* cpuid[eax=7,ecx=1].ecx */ + static const int CPU_FEATURE_BIT_AVX10 = 1 << 19; // AVX-10 (256-bit and 512-bit vector instructions) + + /* cpuid[eax=7,ecx=1].eax bits for AVX-10 version */ + static const int CPU_FEATURE_BIT_AVX10_VERSION_SHIFT = 12; + static const int CPU_FEATURE_BIT_AVX10_VERSION_MASK = 0x3; // 2 bits for version #endif #if defined(__X86_ASM__) @@ -270,11 +280,11 @@ namespace embree } #endif - int getCPUFeatures() + int64_t getCPUFeatures() { #if defined(__X86_ASM__) /* cache CPU features access */ - static int cpu_features = 0; + static int64_t cpu_features = 0; if (cpu_features) return cpu_features; @@ -291,27 +301,32 @@ namespace embree /* get CPUID leaves for EAX = 1,7, and 0x80000001 */ int cpuid_leaf_1[4] = { 0,0,0,0 }; int cpuid_leaf_7[4] = { 0,0,0,0 }; + int cpuid_leaf_7_1[4] = { 0,0,0,0 }; int cpuid_leaf_e1[4] = { 0,0,0,0 }; if (nIds >= 1) __cpuid (cpuid_leaf_1,0x00000001); #if _WIN32 #if _MSC_VER && (_MSC_FULL_VER < 160040219) #else if (nIds >= 7) __cpuidex(cpuid_leaf_7,0x00000007,0); + if (nIds >= 7) __cpuidex(cpuid_leaf_7_1,0x00000007,1); #endif #else if (nIds >= 7) __cpuid_count(cpuid_leaf_7,0x00000007,0); + if (nIds >= 7) __cpuid_count(cpuid_leaf_7_1,0x00000007,1); #endif if (nExIds >= 0x80000001) __cpuid(cpuid_leaf_e1,0x80000001); - /* detect if OS saves XMM, YMM, and ZMM states */ + /* detect if OS saves XMM, YMM, and ZMM states, and APX state */ bool xmm_enabled = true; bool ymm_enabled = false; bool zmm_enabled = false; + bool apx_enabled = false; if (cpuid_leaf_1[ECX] & CPU_FEATURE_BIT_OXSAVE) { int64_t xcr0 = get_xcr0(); xmm_enabled = ((xcr0 & 0x02) == 0x02); /* checks if xmm are enabled in XCR0 */ ymm_enabled = xmm_enabled && ((xcr0 & 0x04) == 0x04); /* checks if ymm state are enabled in XCR0 */ zmm_enabled = ymm_enabled && ((xcr0 & 0xE0) == 0xE0); /* checks if OPMASK state, upper 256-bit of ZMM0-ZMM15 and ZMM16-ZMM31 state are enabled in XCR0 */ + apx_enabled = ((xcr0 & 0x030000) == 0x030000); /* checks if APX state (bit 17 and 18) are enabled in XCR0 */ } if (xmm_enabled) cpu_features |= CPU_FEATURE_XMM_ENABLED; if (ymm_enabled) cpu_features |= CPU_FEATURE_YMM_ENABLED; @@ -343,6 +358,15 @@ namespace embree if (cpuid_leaf_7[EBX] & CPU_FEATURE_BIT_AVX512IFMA) cpu_features |= CPU_FEATURE_AVX512IFMA; if (cpuid_leaf_7[EBX] & CPU_FEATURE_BIT_AVX512VL ) cpu_features |= CPU_FEATURE_AVX512VL; if (cpuid_leaf_7[ECX] & CPU_FEATURE_BIT_AVX512VBMI) cpu_features |= CPU_FEATURE_AVX512VBMI; + + if ((cpuid_leaf_7_1[EAX] & CPU_FEATURE_BIT_APX) && apx_enabled) cpu_features |= CPU_FEATURE_APX; + + /* detect AVX-10 version */ + if (cpuid_leaf_7_1[ECX] & CPU_FEATURE_BIT_AVX10) { + uint32_t avx10_version = (cpuid_leaf_7_1[EAX] >> CPU_FEATURE_BIT_AVX10_VERSION_SHIFT) & CPU_FEATURE_BIT_AVX10_VERSION_MASK; + if (avx10_version >= 1) cpu_features |= CPU_FEATURE_AVX10_1; + if (avx10_version >= 2) cpu_features |= CPU_FEATURE_AVX10_2; + } #if defined(__MACOSX__) if ( (cpu_features & CPU_FEATURE_AVX512F) @@ -382,7 +406,7 @@ namespace embree #endif } - std::string stringOfCPUFeatures(int features) + std::string stringOfCPUFeatures(int64_t features) { std::string str; if (features & CPU_FEATURE_XMM_ENABLED) str += "XMM "; @@ -412,12 +436,15 @@ namespace embree if (features & CPU_FEATURE_AVX512VL) str += "AVX512VL "; if (features & CPU_FEATURE_AVX512IFMA) str += "AVX512IFMA "; if (features & CPU_FEATURE_AVX512VBMI) str += "AVX512VBMI "; + if (features & CPU_FEATURE_APX) str += "APX "; + if (features & CPU_FEATURE_AVX10_1) str += "AVX10.1 "; + if (features & CPU_FEATURE_AVX10_2) str += "AVX10.2 "; if (features & CPU_FEATURE_NEON) str += "NEON "; if (features & CPU_FEATURE_NEON_2X) str += "2xNEON "; return str; } - std::string stringOfISA (int isa) + std::string stringOfISA (int64_t isa) { if (isa == SSE) return "SSE"; if (isa == SSE2) return "SSE2"; @@ -434,11 +461,11 @@ namespace embree return "UNKNOWN"; } - bool hasISA(int features, int isa) { + bool hasISA(int64_t features, int64_t isa) { return (features & isa) == isa; } - std::string supportedTargetList (int features) + std::string supportedTargetList (int64_t features) { std::string v; if (hasISA(features,SSE)) v += "SSE "; @@ -451,6 +478,9 @@ namespace embree if (hasISA(features,AVXI)) v += "AVXI "; if (hasISA(features,AVX2)) v += "AVX2 "; if (hasISA(features,AVX512)) v += "AVX512 "; + if (hasISA(features, CPU_FEATURE_APX)) v += "APX "; + if (hasISA(features, CPU_FEATURE_AVX10_1)) v += "AVX10.1 "; + if (hasISA(features, CPU_FEATURE_AVX10_2)) v += "AVX10.2 "; if (hasISA(features,NEON)) v += "NEON "; if (hasISA(features,NEON_2X)) v += "2xNEON "; diff --git a/common/sys/sysinfo.h b/common/sys/sysinfo.h index 02eacbe717..efdf122687 100644 --- a/common/sys/sysinfo.h +++ b/common/sys/sysinfo.h @@ -140,32 +140,37 @@ namespace embree static const int CPU_FEATURE_ZMM_ENABLED = 1 << 27; static const int CPU_FEATURE_NEON = 1 << 28; static const int CPU_FEATURE_NEON_2X = 1 << 29; + static const int CPU_FEATURE_APX = 1 << 30; + // Note: AVX10_1 and AVX10_2 use bits in a bitmask spanning beyond 32 bits + // For now we use long long types in feature detection + static const int64_t CPU_FEATURE_AVX10_1 = 1LL << 32; + static const int64_t CPU_FEATURE_AVX10_2 = 1LL << 33; /*! get CPU features */ - int getCPUFeatures(); + int64_t getCPUFeatures(); /*! convert CPU features into a string */ std::string stringOfCPUFeatures(int features); /*! creates a string of all supported targets that are supported */ - std::string supportedTargetList (int isa); + std::string supportedTargetList (int64_t isa); /*! ISAs */ - static const int SSE = CPU_FEATURE_SSE | CPU_FEATURE_XMM_ENABLED; - static const int SSE2 = SSE | CPU_FEATURE_SSE2; - static const int SSE3 = SSE2 | CPU_FEATURE_SSE3; - static const int SSSE3 = SSE3 | CPU_FEATURE_SSSE3; - static const int SSE41 = SSSE3 | CPU_FEATURE_SSE41; - static const int SSE42 = SSE41 | CPU_FEATURE_SSE42 | CPU_FEATURE_POPCNT; - static const int AVX = SSE42 | CPU_FEATURE_AVX | CPU_FEATURE_YMM_ENABLED; - static const int AVXI = AVX | CPU_FEATURE_F16C; - static const int AVX2 = AVXI | CPU_FEATURE_AVX2 | CPU_FEATURE_FMA3 | CPU_FEATURE_BMI1 | CPU_FEATURE_BMI2 | CPU_FEATURE_LZCNT; - static const int AVX512 = AVX2 | CPU_FEATURE_AVX512F | CPU_FEATURE_AVX512DQ | CPU_FEATURE_AVX512CD | CPU_FEATURE_AVX512BW | CPU_FEATURE_AVX512VL | CPU_FEATURE_ZMM_ENABLED; - static const int NEON = CPU_FEATURE_NEON | CPU_FEATURE_SSE | CPU_FEATURE_SSE2; - static const int NEON_2X = CPU_FEATURE_NEON_2X | AVX2; + static const int64_t SSE = CPU_FEATURE_SSE | CPU_FEATURE_XMM_ENABLED; + static const int64_t SSE2 = SSE | CPU_FEATURE_SSE2; + static const int64_t SSE3 = SSE2 | CPU_FEATURE_SSE3; + static const int64_t SSSE3 = SSE3 | CPU_FEATURE_SSSE3; + static const int64_t SSE41 = SSSE3 | CPU_FEATURE_SSE41; + static const int64_t SSE42 = SSE41 | CPU_FEATURE_SSE42 | CPU_FEATURE_POPCNT; + static const int64_t AVX = SSE42 | CPU_FEATURE_AVX | CPU_FEATURE_YMM_ENABLED; + static const int64_t AVXI = AVX | CPU_FEATURE_F16C; + static const int64_t AVX2 = AVXI | CPU_FEATURE_AVX2 | CPU_FEATURE_FMA3 | CPU_FEATURE_BMI1 | CPU_FEATURE_BMI2 | CPU_FEATURE_LZCNT; + static const int64_t AVX512 = AVX2 | CPU_FEATURE_AVX512F | CPU_FEATURE_AVX512DQ | CPU_FEATURE_AVX512CD | CPU_FEATURE_AVX512BW | CPU_FEATURE_AVX512VL | CPU_FEATURE_ZMM_ENABLED; + static const int64_t NEON = CPU_FEATURE_NEON | CPU_FEATURE_SSE | CPU_FEATURE_SSE2; + static const int64_t NEON_2X = CPU_FEATURE_NEON_2X | AVX2; /*! converts ISA bitvector into a string */ - std::string stringOfISA(int features); + std::string stringOfISA(int64_t features); /*! return the number of logical threads of the system */ unsigned int getNumberOfLogicalThreads(); diff --git a/kernels/common/device.cpp b/kernels/common/device.cpp index 7ccaad635c..592564294f 100644 --- a/kernels/common/device.cpp +++ b/kernels/common/device.cpp @@ -188,7 +188,7 @@ namespace embree void Device::print() { - const int cpu_features = getCPUFeatures(); + const int64_t cpu_features = getCPUFeatures(); std::cout << std::endl; std::cout << "Embree Ray Tracing Kernels " << RTC_VERSION_STRING << " (" << RTC_HASH << ")" << std::endl; std::cout << " Compiler : " << getCompilerName() << std::endl; diff --git a/kernels/common/state.cpp b/kernels/common/state.cpp index cce5eafce1..459bdf1b7c 100644 --- a/kernels/common/state.cpp +++ b/kernels/common/state.cpp @@ -144,7 +144,7 @@ namespace embree State::~State() { } - bool State::hasISA(const int isa) { + bool State::hasISA(const int64_t isa) { return (enabled_cpu_features & isa) == isa; } @@ -232,7 +232,7 @@ namespace embree parse(cin); } - int string_to_cpufeatures(const std::string& isa) + int64_t string_to_cpufeatures(const std::string& isa) { if (isa == "sse" ) return SSE; else if (isa == "sse2") return SSE2; diff --git a/kernels/common/state.h b/kernels/common/state.h index 2617a783c2..6d90bebeea 100644 --- a/kernels/common/state.h +++ b/kernels/common/state.h @@ -138,8 +138,8 @@ namespace embree size_t numUserThreads; //!< number of user provided threads to use in builders bool set_affinity; //!< sets affinity for worker threads bool start_threads; //!< true when threads should be started at device creation time - int enabled_cpu_features; //!< CPU ISA features to use - int enabled_builder_cpu_features; //!< CPU ISA features to use for builders only + int64_t enabled_cpu_features; //!< CPU ISA features to use + int64_t enabled_builder_cpu_features; //!< CPU ISA features to use for builders only enum FREQUENCY_LEVEL { FREQUENCY_SIMD128, FREQUENCY_SIMD256, diff --git a/tutorials/verify/verify.cpp b/tutorials/verify/verify.cpp index cb1edc00aa..3517125026 100644 --- a/tutorials/verify/verify.cpp +++ b/tutorials/verify/verify.cpp @@ -45,9 +45,9 @@ namespace embree } } - bool hasISA(const int isa) + bool hasISA(const int64_t isa) { - int cpu_features = getCPUFeatures(); + int64_t cpu_features = getCPUFeatures(); return (cpu_features & isa) == isa; } From 5ce67207679ef00bda5f54f8b3d39a64f62214f4 Mon Sep 17 00:00:00 2001 From: Stefan Werner Date: Wed, 18 Mar 2026 09:41:27 +0100 Subject: [PATCH 04/10] More changes to ISA detection and selection to include new instruction sets --- CMakeLists.txt | 60 +++++++++++++++++++++++++++++++- common/cmake/check_isa.cpp | 6 +++- common/cmake/clang.cmake | 2 ++ common/cmake/embree-config.cmake | 15 ++++++++ common/cmake/gnu.cmake | 2 ++ common/cmake/msvc.cmake | 2 ++ common/sys/sysinfo.h | 3 ++ kernels/CMakeLists.txt | 34 +++++++++++++++++- kernels/bvh/bvh4_factory.cpp | 6 ++-- kernels/bvh/bvh4_factory.h | 6 ++-- kernels/bvh/bvh8_factory.cpp | 6 ++-- kernels/bvh/bvh8_factory.h | 6 ++-- kernels/common/device.cpp | 9 +++++ 13 files changed, 142 insertions(+), 15 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9ee047416e..7fb24d660d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -366,7 +366,7 @@ ENDIF() IF (EMBREE_ARM) SET_PROPERTY(CACHE EMBREE_MAX_ISA PROPERTY STRINGS NONE NEON NEON2X) ELSE() - SET_PROPERTY(CACHE EMBREE_MAX_ISA PROPERTY STRINGS NONE SSE2 SSE4.2 AVX AVX2 AVX512 DEFAULT) + SET_PROPERTY(CACHE EMBREE_MAX_ISA PROPERTY STRINGS NONE SSE2 SSE4.2 AVX AVX2 AVX512 AVX10.1 AVX10.2 APX DEFAULT) ENDIF() IF (EMBREE_MAX_ISA STREQUAL "NONE") @@ -384,6 +384,8 @@ IF (EMBREE_MAX_ISA STREQUAL "NONE") TRY_COMPILE(COMPILER_SUPPORTS_AVX2 "${CMAKE_BINARY_DIR}" "${PROJECT_SOURCE_DIR}/common/cmake/check_isa.cpp" COMPILE_DEFINITIONS ${FLAGS_AVX2}) TRY_COMPILE(COMPILER_SUPPORTS_AVX512 "${CMAKE_BINARY_DIR}" "${PROJECT_SOURCE_DIR}/common/cmake/check_isa.cpp" COMPILE_DEFINITIONS ${FLAGS_AVX512}) TRY_COMPILE(COMPILER_SUPPORTS_AVX10_1 "${CMAKE_BINARY_DIR}" "${PROJECT_SOURCE_DIR}/common/cmake/check_isa.cpp" COMPILE_DEFINITIONS ${FLAGS_AVX10_1}) + TRY_COMPILE(COMPILER_SUPPORTS_AVX10_2 "${CMAKE_BINARY_DIR}" "${PROJECT_SOURCE_DIR}/common/cmake/check_isa.cpp" COMPILE_DEFINITIONS ${FLAGS_AVX10_2}) + TRY_COMPILE(COMPILER_SUPPORTS_APX "${CMAKE_BINARY_DIR}" "${PROJECT_SOURCE_DIR}/common/cmake/check_isa.cpp" COMPILE_DEFINITIONS ${FLAGS_APX}) OPTION(EMBREE_ISA_SSE2 "Enables SSE2 ISA." ON) OPTION(EMBREE_ISA_SSE42 "Enables SSE4.2 ISA." ON) @@ -392,9 +394,13 @@ IF (EMBREE_MAX_ISA STREQUAL "NONE") IF (APPLE) OPTION(EMBREE_ISA_AVX512 "Enables AVX512 ISA." OFF) OPTION(EMBREE_ISA_AVX10_1 "Enables AVX10.1 ISA." OFF) + OPTION(EMBREE_ISA_AVX10_2 "Enables AVX10.2 ISA." OFF) + OPTION(EMBREE_ISA_APX "Enables APX ISA." OFF) ELSE() OPTION(EMBREE_ISA_AVX512 "Enables AVX512 ISA." ${COMPILER_SUPPORTS_AVX512}) OPTION(EMBREE_ISA_AVX10_1 "Enables AVX10.1 ISA." ${COMPILER_SUPPORTS_AVX10_1}) + OPTION(EMBREE_ISA_AVX10_2 "Enables AVX10.2 ISA." ${COMPILER_SUPPORTS_AVX10_2}) + OPTION(EMBREE_ISA_APX "Enables APX ISA." ${COMPILER_SUPPORTS_APX}) ENDIF() # Don't use OPTION, but still set them to OFF, so that embree-config.cmake is consisten with its definitions SET(EMBREE_ISA_NEON OFF) @@ -410,6 +416,8 @@ ELSEIF (EMBREE_MAX_ISA STREQUAL "DEFAULT") UNSET(EMBREE_ISA_AVX2 CACHE) UNSET(EMBREE_ISA_AVX512 CACHE) UNSET(EMBREE_ISA_AVX10_1 CACHE) + UNSET(EMBREE_ISA_AVX10_2 CACHE) + UNSET(EMBREE_ISA_APX CACHE) SET(EMBREE_ISA_NEON OFF) SET(EMBREE_ISA_NEON2X OFF) SET(EMBREE_ISA_SSE2 OFF) @@ -418,6 +426,8 @@ ELSEIF (EMBREE_MAX_ISA STREQUAL "DEFAULT") SET(EMBREE_ISA_AVX2 OFF) SET(EMBREE_ISA_AVX512 OFF) SET(EMBREE_ISA_AVX10_1 OFF) + SET(EMBREE_ISA_AVX10_2 OFF) + SET(EMBREE_ISA_APX OFF) MESSAGE(STATUS "Detecting default ISA...") INCLUDE(check_isa_default) CHECK_ISA_DEFAULT(EMBREE_ISA_DEFAULT) @@ -433,6 +443,8 @@ ELSE() UNSET(EMBREE_ISA_AVX2 CACHE) UNSET(EMBREE_ISA_AVX512 CACHE) UNSET(EMBREE_ISA_AVX10_1 CACHE) + UNSET(EMBREE_ISA_AVX10_2 CACHE) + UNSET(EMBREE_ISA_APX CACHE) IF(EMBREE_MAX_ISA STREQUAL "NEON") SET(ISA 1) @@ -452,6 +464,10 @@ ELSE() SET(ISA 5) ELSEIF(EMBREE_MAX_ISA STREQUAL "AVX10.1") SET(ISA 6) + ELSEIF(EMBREE_MAX_ISA STREQUAL "AVX10.2") + SET(ISA 7) + ELSEIF(EMBREE_MAX_ISA STREQUAL "APX") + SET(ISA 8) ELSE() MESSAGE(FATAL_ERROR "Unsupported ISA specified: " ${EMBREE_MAX_ISA}) ENDIF() @@ -464,6 +480,8 @@ ELSE() SET(EMBREE_ISA_AVX2 OFF) SET(EMBREE_ISA_AVX512 OFF) SET(EMBREE_ISA_AVX10_1 OFF) + SET(EMBREE_ISA_AVX10_2 OFF) + SET(EMBREE_ISA_APX OFF) IF (EMBREE_ARM) IF (ISA GREATER 0) @@ -491,6 +509,12 @@ ELSE() IF (ISA GREATER 5) SET(EMBREE_ISA_AVX10_1 ON) ENDIF () + IF (ISA GREATER 6) + SET(EMBREE_ISA_AVX10_2 ON) + ENDIF () + IF (ISA GREATER 7) + SET(EMBREE_ISA_APX ON) + ENDIF () ENDIF() ENDIF() @@ -526,6 +550,12 @@ IF (APPLE AND EMBREE_STATIC_LIB) IF (EMBREE_ISA_AVX10_1) MATH(EXPR NUMISA "${NUMISA}+1") ENDIF() + IF (EMBREE_ISA_AVX10_2) + MATH(EXPR NUMISA "${NUMISA}+1") + ENDIF() + IF (EMBREE_ISA_APX) + MATH(EXPR NUMISA "${NUMISA}+1") + ENDIF() IF (NUMISA GREATER 1) IF (${CMAKE_CXX_COMPILER_ID} MATCHES "Clang") @@ -546,6 +576,8 @@ SET(AVX 2) SET(AVX2 3) SET(AVX512 4) SET(AVX10_1 5) +SET(AVX10_2 6) +SET(APX 7) UNSET(FLAGS_LOWEST) SET(ISA_LOWEST -1) @@ -641,6 +673,32 @@ IF (EMBREE_ISA_AVX10_1) ENDIF() ENDIF () +IF (EMBREE_ISA_AVX10_2) + ADD_DEFINITIONS(-DEMBREE_TARGET_AVX10_2) + IF (NOT EMBREE_ARM) + # AVX 10.2 support in ISPC? + # LIST(APPEND ISPC_TARGETS "") + ENDIF() + IF(NOT FLAGS_LOWEST) + SET(ISA_LOWEST ${AVX10_2}) + SET(ISA_LOWEST_AVX ${AVX10_2}) + SET(FLAGS_LOWEST ${FLAGS_AVX10_2}) + ENDIF() +ENDIF () + +IF (EMBREE_ISA_APX) + ADD_DEFINITIONS(-DEMBREE_TARGET_APX) + IF (NOT EMBREE_ARM) + # APX support in ISPC? + # LIST(APPEND ISPC_TARGETS "") + ENDIF() + IF(NOT FLAGS_LOWEST) + SET(ISA_LOWEST ${APX}) + SET(ISA_LOWEST_AVX ${APX}) + SET(FLAGS_LOWEST ${FLAGS_APX}) + ENDIF() +ENDIF () + IF (ISA_LOWEST EQUAL -1) MESSAGE(FATAL_ERROR "You have to enable at least one ISA!") ENDIF() diff --git a/common/cmake/check_isa.cpp b/common/cmake/check_isa.cpp index 7a6683ffe7..30391b63e2 100644 --- a/common/cmake/check_isa.cpp +++ b/common/cmake/check_isa.cpp @@ -14,7 +14,11 @@ // limitations under the License. // // ======================================================================== // -if defined(__AVX10_1__) +if defined(__APX_F__) +char const *info_isa = "ISA" ":" "APX" +#elif defined(__AVX10_2__) +char const *info_isa = "ISA" ":" "AVX10.2" +#elif defined(__AVX10_1__) char const *info_isa = "ISA" ":" "AVX10.1" #elif \ defined(__AVX512F__) && defined(__AVX512CD__) && \ diff --git a/common/cmake/clang.cmake b/common/cmake/clang.cmake index 7bb740c159..13a2091ac6 100644 --- a/common/cmake/clang.cmake +++ b/common/cmake/clang.cmake @@ -29,6 +29,8 @@ ELSE () _SET_IF_EMPTY(FLAGS_AVX2 "-mf16c -mavx2 -mfma -mlzcnt -mbmi -mbmi2") _SET_IF_EMPTY(FLAGS_AVX512 "-march=skx") _SET_IF_EMPTY(FLAGS_AVX10_1 "-mlzcnt -mavx10.1-512") + _SET_IF_EMPTY(FLAGS_AVX10_2 "-mlzcnt -mavx10.2-512") + _SET_IF_EMPTY(FLAGS_APX "-mapx-features") ENDIF () IF (WIN32) diff --git a/common/cmake/embree-config.cmake b/common/cmake/embree-config.cmake index c0009fdc7d..f2da6cee76 100644 --- a/common/cmake/embree-config.cmake +++ b/common/cmake/embree-config.cmake @@ -20,6 +20,9 @@ SET(EMBREE_ISA_SSE42 @EMBREE_ISA_SSE42@) SET(EMBREE_ISA_AVX @EMBREE_ISA_AVX@) SET(EMBREE_ISA_AVX2 @EMBREE_ISA_AVX2@) SET(EMBREE_ISA_AVX512 @EMBREE_ISA_AVX512@) +SET(EMBREE_ISA_AVX10_1 @EMBREE_ISA_AVX10_1@) +SET(EMBREE_ISA_AVX10_2 @EMBREE_ISA_AVX10_2@) +SET(EMBREE_ISA_APX @EMBREE_ISA_APX@) SET(EMBREE_ISA_AVX512SKX @EMBREE_ISA_AVX512@) # just for compatibility SET(EMBREE_ISA_NEON @EMBREE_ISA_NEON@) SET(EMBREE_ISA_NEON2X @EMBREE_ISA_NEON2X@) @@ -85,6 +88,18 @@ IF (EMBREE_STATIC_LIB) INCLUDE("${EMBREE_ROOT_DIR}/@EMBREE_CMAKEEXPORT_DIR@/embree_avx512-targets.cmake") ENDIF() + IF (EMBREE_ISA_AVX10_1) + INCLUDE("${EMBREE_ROOT_DIR}/@EMBREE_CMAKEEXPORT_DIR@/embree_avx10_1-targets.cmake") + ENDIF() + + IF (EMBREE_ISA_AVX10_2) + INCLUDE("${EMBREE_ROOT_DIR}/@EMBREE_CMAKEEXPORT_DIR@/embree_avx10_2-targets.cmake") + ENDIF() + + IF (EMBREE_ISA_APX) + INCLUDE("${EMBREE_ROOT_DIR}/@EMBREE_CMAKEEXPORT_DIR@/embree_apx-targets.cmake") + ENDIF() + ENDIF() IF (EMBREE_SYCL_SUPPORT) diff --git a/common/cmake/gnu.cmake b/common/cmake/gnu.cmake index f4c9d01d84..2594b1e48c 100644 --- a/common/cmake/gnu.cmake +++ b/common/cmake/gnu.cmake @@ -19,6 +19,8 @@ ELSE () _SET_IF_EMPTY(FLAGS_AVX2 "-mf16c -mavx2 -mfma -mlzcnt -mbmi -mbmi2") _SET_IF_EMPTY(FLAGS_AVX512 "-march=skylake-avx512") _SET_IF_EMPTY(FLAGS_AVX10_1 "-mlzcnt -mavx10.1") + _SET_IF_EMPTY(FLAGS_AVX10_2 "-mlzcnt -mavx10.2") + _SET_IF_EMPTY(FLAGS_APX "-mapxf") ENDIF () OPTION(EMBREE_IGNORE_CMAKE_CXX_FLAGS "When enabled Embree ignores default CMAKE_CXX_FLAGS." ON) diff --git a/common/cmake/msvc.cmake b/common/cmake/msvc.cmake index 9989dddbcf..57f814d8a1 100644 --- a/common/cmake/msvc.cmake +++ b/common/cmake/msvc.cmake @@ -7,6 +7,8 @@ SET(FLAGS_AVX "${FLAGS_SSE42} /arch:AVX") SET(FLAGS_AVX2 "${FLAGS_SSE42} /arch:AVX2") SET(FLAGS_AVX512 "${FLAGS_AVX2} /arch:AVX512") SET(FLAGS_AVX10_1 "${FLAGS_AVX2} /arch:AVX10.1") +SET(FLAGS_AVX10_2 "${FLAGS_AVX2} /arch:AVX10.2") +SET(FLAGS_APX "${FLAGS_AVX10_2}") SET(COMMON_CXX_FLAGS "") SET(COMMON_CXX_FLAGS "${COMMON_CXX_FLAGS} /EHsc") # catch C++ exceptions only and extern "C" functions never throw a C++ exception diff --git a/common/sys/sysinfo.h b/common/sys/sysinfo.h index efdf122687..0a04723fe9 100644 --- a/common/sys/sysinfo.h +++ b/common/sys/sysinfo.h @@ -166,6 +166,9 @@ namespace embree static const int64_t AVXI = AVX | CPU_FEATURE_F16C; static const int64_t AVX2 = AVXI | CPU_FEATURE_AVX2 | CPU_FEATURE_FMA3 | CPU_FEATURE_BMI1 | CPU_FEATURE_BMI2 | CPU_FEATURE_LZCNT; static const int64_t AVX512 = AVX2 | CPU_FEATURE_AVX512F | CPU_FEATURE_AVX512DQ | CPU_FEATURE_AVX512CD | CPU_FEATURE_AVX512BW | CPU_FEATURE_AVX512VL | CPU_FEATURE_ZMM_ENABLED; + static const int64_t AVX10_1 = AVX512 | CPU_FEATURE_AVX10_1; + static const int64_t AVX10_2 = AVX10_1 | CPU_FEATURE_AVX10_2; + static const int64_t APX = AVX10_2 | CPU_FEATURE_APX; static const int64_t NEON = CPU_FEATURE_NEON | CPU_FEATURE_SSE | CPU_FEATURE_SSE2; static const int64_t NEON_2X = CPU_FEATURE_NEON_2X | AVX2; diff --git a/kernels/CMakeLists.txt b/kernels/CMakeLists.txt index e6b95d9fd7..f7c3efdb6e 100644 --- a/kernels/CMakeLists.txt +++ b/kernels/CMakeLists.txt @@ -132,7 +132,7 @@ MACRO(embree_files TARGET ISA) LIST(APPEND ${TARGET} geometry/primitive8.cpp) ENDIF() - IF (${ISA} EQUAL ${SSE2} OR ${ISA} EQUAL ${AVX} OR ${ISA} EQUAL ${AVX2} OR ${ISA} EQUAL ${AVX512} OR ${ISA} EQUAL ${AVX10_1} OR ${ISA_LOWEST} EQUAL ${ISA}) + IF (${ISA} EQUAL ${SSE2} OR ${ISA} EQUAL ${AVX} OR ${ISA} EQUAL ${AVX2} OR ${ISA} EQUAL ${AVX512} OR ${ISA} EQUAL ${AVX10_1} OR ${ISA} EQUAL ${AVX10_2} OR ${ISA} EQUAL ${APX} OR ${ISA_LOWEST} EQUAL ${ISA}) LIST(APPEND ${TARGET} common/scene_user_geometry.cpp @@ -210,6 +210,8 @@ embree_files(EMBREE_LIBRARY_FILES_AVX ${AVX}) embree_files(EMBREE_LIBRARY_FILES_AVX2 ${AVX2}) embree_files(EMBREE_LIBRARY_FILES_AVX512 ${AVX512}) embree_files(EMBREE_LIBRARY_FILES_AVX10_1 ${AVX10_1}) +embree_files(EMBREE_LIBRARY_FILES_AVX10_2 ${AVX10_2}) +embree_files(EMBREE_LIBRARY_FILES_APX ${APX}) #message("SSE2: ${EMBREE_LIBRARY_FILES_SSE2}") #message("SSE42: ${EMBREE_LIBRARY_FILES_SSE42}") @@ -239,6 +241,8 @@ CreateISADummyFiles(EMBREE_LIBRARY_FILES_AVX avx ${EMBREE_LIBRARY_FI CreateISADummyFiles(EMBREE_LIBRARY_FILES_AVX2 avx2 ${EMBREE_LIBRARY_FILES_AVX2}) CreateISADummyFiles(EMBREE_LIBRARY_FILES_AVX512 avx512 ${EMBREE_LIBRARY_FILES_AVX512}) CreateISADummyFiles(EMBREE_LIBRARY_FILES_AVX10_1 avx10_1 ${EMBREE_LIBRARY_FILES_AVX10_1}) +CreateISADummyFiles(EMBREE_LIBRARY_FILES_AVX10_2 avx10_2 ${EMBREE_LIBRARY_FILES_AVX10_2}) +CreateISADummyFiles(EMBREE_LIBRARY_FILES_APX apx ${EMBREE_LIBRARY_FILES_APX}) MACRO (CheckGlobals library) IF (NOT WIN32 AND NOT APPLE) @@ -362,6 +366,34 @@ IF (EMBREE_ISA_AVX10_1 AND EMBREE_LIBRARY_FILES_AVX10_1) ENDIF() ENDIF() +IF (EMBREE_ISA_AVX10_2 AND EMBREE_LIBRARY_FILES_AVX10_2) + DISABLE_STACK_PROTECTOR_FOR_INTERSECTORS(${EMBREE_LIBRARY_FILES_AVX10_2}) + ADD_LIBRARY(embree_avx10_2 STATIC ${EMBREE_LIBRARY_FILES_AVX10_2}) + TARGET_LINK_LIBRARIES(embree_avx10_2 PRIVATE tasking) + SET_TARGET_PROPERTIES(embree_avx10_2 PROPERTIES COMPILE_FLAGS "${FLAGS_AVX10_2}") + SET_PROPERTY(TARGET embree_avx10_2 PROPERTY FOLDER kernels) + SET(EMBREE_LIBRARIES ${EMBREE_LIBRARIES} embree_avx10_2) + CheckGlobals(embree_avx10_2) + IF (EMBREE_STATIC_LIB) + INSTALL(TARGETS embree_avx10_2 EXPORT embree_avx10_2-targets ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" COMPONENT devel) + INSTALL(EXPORT embree_avx10_2-targets DESTINATION "${EMBREE_CMAKEEXPORT_DIR}" COMPONENT devel) + ENDIF() +ENDIF() + +IF (EMBREE_ISA_APX AND EMBREE_LIBRARY_FILES_APX) + DISABLE_STACK_PROTECTOR_FOR_INTERSECTORS(${EMBREE_LIBRARY_FILES_APX}) + ADD_LIBRARY(embree_apx STATIC ${EMBREE_LIBRARY_FILES_APX}) + TARGET_LINK_LIBRARIES(embree_apx PRIVATE tasking) + SET_TARGET_PROPERTIES(embree_apx PROPERTIES COMPILE_FLAGS "${FLAGS_APX}") + SET_PROPERTY(TARGET embree_apx PROPERTY FOLDER kernels) + SET(EMBREE_LIBRARIES ${EMBREE_LIBRARIES} embree_apx) + CheckGlobals(embree_apx) + IF (EMBREE_STATIC_LIB) + INSTALL(TARGETS embree_apx EXPORT embree_apx-targets ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" COMPONENT devel) + INSTALL(EXPORT embree_apx-targets DESTINATION "${EMBREE_CMAKEEXPORT_DIR}" COMPONENT devel) + ENDIF() +ENDIF() + TARGET_LINK_LIBRARIES(embree PRIVATE ${EMBREE_LIBRARIES} sys math simd lexers tasking) IF (EMBREE_SYCL_SUPPORT) TARGET_LINK_LIBRARIES(embree PRIVATE ${SYCL_LIB_NAME} ze_wrapper PUBLIC embree_sycl) diff --git a/kernels/bvh/bvh4_factory.cpp b/kernels/bvh/bvh4_factory.cpp index d03940deea..9e926abf22 100644 --- a/kernels/bvh/bvh4_factory.cpp +++ b/kernels/bvh/bvh4_factory.cpp @@ -250,7 +250,7 @@ namespace embree DECLARE_ISA_FUNCTION(Builder*,BVH4Quad4vMeshRefitSAH,void* COMMA QuadMesh* COMMA unsigned int COMMA size_t); DECLARE_ISA_FUNCTION(Builder*,BVH4VirtualMeshRefitSAH,void* COMMA UserGeometry* COMMA unsigned int COMMA size_t); - BVH4Factory::BVH4Factory(int bfeatures, int ifeatures) + BVH4Factory::BVH4Factory(int64_t bfeatures, int64_t ifeatures) { SELECT_SYMBOL_DEFAULT_AVX_AVX2(ifeatures,BVH4ColliderUserGeom); @@ -258,7 +258,7 @@ namespace embree selectIntersectors(ifeatures); } - void BVH4Factory::selectBuilders(int features) + void BVH4Factory::selectBuilders(int64_t features) { IF_ENABLED_TRIS (SELECT_SYMBOL_DEFAULT_AVX(features,BVH4BuilderTwoLevelTriangle4MeshSAH)); IF_ENABLED_TRIS (SELECT_SYMBOL_DEFAULT_AVX(features,BVH4BuilderTwoLevelTriangle4iMeshSAH)); @@ -308,7 +308,7 @@ namespace embree IF_ENABLED_SUBDIV(SELECT_SYMBOL_DEFAULT_AVX(features,BVH4SubdivPatch1MBBuilderSAH)); } - void BVH4Factory::selectIntersectors(int features) + void BVH4Factory::selectIntersectors(int64_t features) { IF_ENABLED_CURVES_OR_POINTS(SELECT_SYMBOL_DEFAULT_AVX_AVX2_AVX512(features,VirtualCurveIntersector4i)); IF_ENABLED_CURVES_OR_POINTS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,VirtualCurveIntersector8i)); diff --git a/kernels/bvh/bvh4_factory.h b/kernels/bvh/bvh4_factory.h index abf51dd108..0a0e3c614c 100644 --- a/kernels/bvh/bvh4_factory.h +++ b/kernels/bvh/bvh4_factory.h @@ -11,7 +11,7 @@ namespace embree class BVH4Factory : public BVHFactory { public: - BVH4Factory(int bfeatures, int ifeatures); + BVH4Factory(int64_t bfeatures, int64_t ifeatures); public: Accel* BVH4OBBVirtualCurve4i(Scene* scene, IntersectVariant ivariant); @@ -55,8 +55,8 @@ namespace embree Accel* BVH4GridMB(Scene* scene, BuildVariant bvariant = BuildVariant::STATIC, IntersectVariant ivariant = IntersectVariant::FAST); private: - void selectBuilders(int features); - void selectIntersectors(int features); + void selectBuilders(int64_t features); + void selectIntersectors(int64_t features); private: Accel::Intersectors BVH4OBBVirtualCurveIntersectors(BVH4* bvh, VirtualCurveIntersector* leafIntersector, IntersectVariant ivariant); diff --git a/kernels/bvh/bvh8_factory.cpp b/kernels/bvh/bvh8_factory.cpp index 7c0f7565fa..3583bd5cea 100644 --- a/kernels/bvh/bvh8_factory.cpp +++ b/kernels/bvh/bvh8_factory.cpp @@ -224,7 +224,7 @@ namespace embree DECLARE_ISA_FUNCTION(Builder*,BVH8BuilderTwoLevelInstanceSAH,void* COMMA Scene* COMMA Geometry::GTypeMask COMMA bool); DECLARE_ISA_FUNCTION(Builder*,BVH8BuilderTwoLevelInstanceArraySAH,void* COMMA Scene* COMMA Geometry::GTypeMask COMMA bool); - BVH8Factory::BVH8Factory(int bfeatures, int ifeatures) + BVH8Factory::BVH8Factory(int64_t bfeatures, int64_t ifeatures) { SELECT_SYMBOL_INIT_AVX(ifeatures,BVH8ColliderUserGeom); @@ -232,7 +232,7 @@ namespace embree selectIntersectors(ifeatures); } - void BVH8Factory::selectBuilders(int features) + void BVH8Factory::selectBuilders(int64_t features) { IF_ENABLED_CURVES_OR_POINTS(SELECT_SYMBOL_INIT_AVX(features,BVH8Curve8vBuilder_OBB_New)); IF_ENABLED_CURVES_OR_POINTS(SELECT_SYMBOL_INIT_AVX(features,BVH8OBBCurve8iMBBuilder_OBB)); @@ -275,7 +275,7 @@ namespace embree IF_ENABLED_INSTANCE_ARRAY (SELECT_SYMBOL_INIT_AVX(features,BVH8BuilderTwoLevelInstanceArraySAH)); } - void BVH8Factory::selectIntersectors(int features) + void BVH8Factory::selectIntersectors(int64_t features) { IF_ENABLED_CURVES_OR_POINTS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,VirtualCurveIntersector8v)); IF_ENABLED_CURVES_OR_POINTS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,VirtualCurveIntersector8iMB)); diff --git a/kernels/bvh/bvh8_factory.h b/kernels/bvh/bvh8_factory.h index e55310b703..67d8f54799 100644 --- a/kernels/bvh/bvh8_factory.h +++ b/kernels/bvh/bvh8_factory.h @@ -11,7 +11,7 @@ namespace embree class BVH8Factory : public BVHFactory { public: - BVH8Factory(int bfeatures, int ifeatures); + BVH8Factory(int64_t bfeatures, int64_t ifeatures); public: Accel* BVH8OBBVirtualCurve8v(Scene* scene, IntersectVariant ivariant); @@ -46,8 +46,8 @@ namespace embree Accel* BVH8GridMB(Scene* scene, BuildVariant bvariant = BuildVariant::STATIC, IntersectVariant ivariant = IntersectVariant::FAST); private: - void selectBuilders(int features); - void selectIntersectors(int features); + void selectBuilders(int64_t features); + void selectIntersectors(int64_t features); private: Accel::Intersectors BVH8OBBVirtualCurveIntersectors(BVH8* bvh, VirtualCurveIntersector* leafIntersector, IntersectVariant ivariant); diff --git a/kernels/common/device.cpp b/kernels/common/device.cpp index 592564294f..4ca222384a 100644 --- a/kernels/common/device.cpp +++ b/kernels/common/device.cpp @@ -158,6 +158,15 @@ namespace embree #endif #if defined(EMBREE_TARGET_AVX512) v += "AVX512 "; +#endif +#if defined(EMBREE_TARGET_AVX10_1) + v += "AVX10.1 "; +#endif +#if defined(EMBREE_TARGET_AVX10_2) + v += "AVX10.2 "; +#endif +#if defined(EMBREE_TARGET_APX) + v += "APX "; #endif return v; } From 3d2278ffde36aa2dc67bb382ae9e9d89b2ee1592 Mon Sep 17 00:00:00 2001 From: Stefan Werner Date: Wed, 18 Mar 2026 13:13:05 +0100 Subject: [PATCH 05/10] More updates for AVX10/APX support --- common/cmake/msvc.cmake | 4 +- common/sys/sysinfo.cpp | 3 + common/sys/sysinfo.h | 19 +++- kernels/bvh/bvh_intersector1_bvh4.cpp | 2 +- kernels/common/isa.h | 54 +++++++++-- kernels/common/state.cpp | 9 ++ kernels/common/state.h | 2 +- tutorials/verify/verify.cpp | 125 ++++++++++++++------------ tutorials/verify/verify.h | 10 +-- 9 files changed, 152 insertions(+), 76 deletions(-) diff --git a/common/cmake/msvc.cmake b/common/cmake/msvc.cmake index 57f814d8a1..3066770f19 100644 --- a/common/cmake/msvc.cmake +++ b/common/cmake/msvc.cmake @@ -6,8 +6,8 @@ SET(FLAGS_SSE42 "${FLAGS_SSE2} /D__SSE3__ /D__SSSE3__ /D__SSE4_1__ /D__SSE4_2__" SET(FLAGS_AVX "${FLAGS_SSE42} /arch:AVX") SET(FLAGS_AVX2 "${FLAGS_SSE42} /arch:AVX2") SET(FLAGS_AVX512 "${FLAGS_AVX2} /arch:AVX512") -SET(FLAGS_AVX10_1 "${FLAGS_AVX2} /arch:AVX10.1") -SET(FLAGS_AVX10_2 "${FLAGS_AVX2} /arch:AVX10.2") +SET(FLAGS_AVX10_1 "${FLAGS_AVX512} /arch:AVX10.1") +SET(FLAGS_AVX10_2 "${FLAGS_AVX10_1} /arch:AVX10.2") SET(FLAGS_APX "${FLAGS_AVX10_2}") SET(COMMON_CXX_FLAGS "") diff --git a/common/sys/sysinfo.cpp b/common/sys/sysinfo.cpp index 51b634a900..be0a78273c 100644 --- a/common/sys/sysinfo.cpp +++ b/common/sys/sysinfo.cpp @@ -455,6 +455,9 @@ namespace embree if (isa == AVX) return "AVX"; if (isa == AVX2) return "AVX2"; if (isa == AVX512) return "AVX512"; + if (isa == AVX10_1) return "AVX10.1"; + if (isa == AVX10_2) return "AVX10.2"; + if (isa == APX) return "APX"; if (isa == NEON) return "NEON"; if (isa == NEON_2X) return "2xNEON"; diff --git a/common/sys/sysinfo.h b/common/sys/sysinfo.h index 0a04723fe9..3b1c4a38db 100644 --- a/common/sys/sysinfo.h +++ b/common/sys/sysinfo.h @@ -15,7 +15,21 @@ #include "platform.h" /* define isa namespace and ISA bitvector */ -#if defined (__AVX512VL__) +/* Allow build system to override via -Disa=... -DISA=... on the command line */ +#if !defined(isa) +#if defined(__APX_F__) || defined(__APX__) +# define isa apx +# define ISA APX +# define ISA_STR "APX" +#elif defined(__AVX10_2__) +# define isa avx10_2 +# define ISA AVX10_2 +# define ISA_STR "AVX10.2" +#elif defined(__AVX10_1__) +# define isa avx10_1 +# define ISA AVX10_1 +# define ISA_STR "AVX10.1" +#elif defined (__AVX512VL__) # define isa avx512 # define ISA AVX512 # define ISA_STR "AVX512" @@ -63,6 +77,7 @@ #else #error Unknown ISA #endif +#endif /* !defined(isa) */ namespace embree { @@ -150,7 +165,7 @@ namespace embree int64_t getCPUFeatures(); /*! convert CPU features into a string */ - std::string stringOfCPUFeatures(int features); + std::string stringOfCPUFeatures(int64_t features); /*! creates a string of all supported targets that are supported */ std::string supportedTargetList (int64_t isa); diff --git a/kernels/bvh/bvh_intersector1_bvh4.cpp b/kernels/bvh/bvh_intersector1_bvh4.cpp index 1baecc7bbc..f8c4d35d47 100644 --- a/kernels/bvh/bvh_intersector1_bvh4.cpp +++ b/kernels/bvh/bvh_intersector1_bvh4.cpp @@ -7,7 +7,7 @@ namespace embree { namespace isa { - int getISA() { + int64_t getISA() { return VerifyMultiTargetLinking::getISA(); } diff --git a/kernels/common/isa.h b/kernels/common/isa.h index 9e1132e1a0..93f1444691 100644 --- a/kernels/common/isa.h +++ b/kernels/common/isa.h @@ -18,6 +18,9 @@ namespace embree namespace avx { extern type name(); } \ namespace avx2 { extern type name(); } \ namespace avx512 { extern type name(); } \ + namespace avx10_1 { extern type name(); } \ + namespace avx10_2 { extern type name(); } \ + namespace apx { extern type name(); } \ void name##_error2() { throw_RTCError(RTC_ERROR_UNKNOWN,"internal error in ISA selection for " TOSTRING(name)); } \ type name##_error() { return type(name##_error2); } \ type name##_zero() { return type(nullptr); } @@ -27,7 +30,10 @@ namespace embree namespace sse42 { extern type symbol(args); } \ namespace avx { extern type symbol(args); } \ namespace avx2 { extern type symbol(args); } \ - namespace avx512 { extern type symbol(args); } \ + namespace avx512 { extern type symbol(args); } \ + namespace avx10_1 { extern type symbol(args); } \ + namespace avx10_2 { extern type symbol(args); } \ + namespace apx { extern type symbol(args); } \ inline type symbol##_error(args) { throw_RTCError(RTC_ERROR_UNSUPPORTED_CPU,"function " TOSTRING(symbol) " not supported by your CPU"); } \ typedef type (*symbol##Ty)(args); \ @@ -92,6 +98,37 @@ namespace embree #define SELECT_SYMBOL_AVX512(features,intersector) #endif +#if defined(EMBREE_TARGET_AVX10_1) +#if !defined(EMBREE_TARGET_SIMD16) +#define EMBREE_TARGET_SIMD16 +#endif +#define SELECT_SYMBOL_AVX10_1(features,intersector) \ + if ((features & AVX10_1) == AVX10_1) intersector = avx10_1::intersector; +#else +#define SELECT_SYMBOL_AVX10_1(features,intersector) +#endif + +#if defined(EMBREE_TARGET_AVX10_2) +#if !defined(EMBREE_TARGET_SIMD16) +#define EMBREE_TARGET_SIMD16 +#endif +#define SELECT_SYMBOL_AVX10_2(features,intersector) \ + if ((features & AVX10_2) == AVX10_2) intersector = avx10_2::intersector; +#else +#define SELECT_SYMBOL_AVX10_2(features,intersector) +#endif + +#if defined(EMBREE_TARGET_APX) +#if !defined(EMBREE_TARGET_SIMD16) +#define EMBREE_TARGET_SIMD16 +#endif +#define SELECT_SYMBOL_APX(features,intersector) \ + if ((features & APX) == APX) intersector = apx::intersector; +#else +#define SELECT_SYMBOL_APX(features,intersector) +#endif + + #define SELECT_SYMBOL_DEFAULT_SSE42(features,intersector) \ SELECT_SYMBOL_DEFAULT(features,intersector); \ SELECT_SYMBOL_SSE42(features,intersector); @@ -233,14 +270,17 @@ namespace embree SELECT_SYMBOL_AVX2(features,intersector); struct VerifyMultiTargetLinking { - static __noinline int getISA(int depth = 5) { + static __noinline int64_t getISA(int depth = 5) { if (depth == 0) return ISA; else return getISA(depth-1); } }; - namespace sse2 { int getISA(); }; - namespace sse42 { int getISA(); }; - namespace avx { int getISA(); }; - namespace avx2 { int getISA(); }; - namespace avx512 { int getISA(); }; + namespace sse2 { int64_t getISA(); }; + namespace sse42 { int64_t getISA(); }; + namespace avx { int64_t getISA(); }; + namespace avx2 { int64_t getISA(); }; + namespace avx512 { int64_t getISA(); }; + namespace avx10_1 { int64_t getISA(); }; + namespace avx10_2 { int64_t getISA(); }; + namespace apx { int64_t getISA(); }; } diff --git a/kernels/common/state.cpp b/kernels/common/state.cpp index 459bdf1b7c..a771664bcc 100644 --- a/kernels/common/state.cpp +++ b/kernels/common/state.cpp @@ -191,6 +191,15 @@ namespace embree #if defined (EMBREE_TARGET_AVX512) assert(avx512::getISA() <= AVX512); #endif +#if defined (EMBREE_TARGET_AVX10_1) + assert(avx10_1::getISA() <= AVX10_1); +#endif +#if defined (EMBREE_TARGET_AVX10_2) + assert(avx10_2::getISA() <= AVX10_2); +#endif +#if defined (EMBREE_TARGET_APX) + assert(apx::getISA() <= APX); +#endif #endif } diff --git a/kernels/common/state.h b/kernels/common/state.h index 6d90bebeea..c66073117f 100644 --- a/kernels/common/state.h +++ b/kernels/common/state.h @@ -46,7 +46,7 @@ namespace embree bool verbosity(size_t N); /*! checks if some particular ISA is enabled */ - bool hasISA(const int isa); + bool hasISA(const int64_t isa); /*! check whether selected ISA is supported by the HW */ bool checkISASupport(); diff --git a/tutorials/verify/verify.cpp b/tutorials/verify/verify.cpp index 3517125026..211862543e 100644 --- a/tutorials/verify/verify.cpp +++ b/tutorials/verify/verify.cpp @@ -763,7 +763,7 @@ namespace embree struct MultipleDevicesTest : public VerifyApplication::Test { - MultipleDevicesTest (std::string name, int isa) + MultipleDevicesTest (std::string name, int64_t isa) : VerifyApplication::Test(name,isa,VerifyApplication::TEST_SHOULD_PASS) {} VerifyApplication::TestReturnValue run(VerifyApplication* state, bool silent) @@ -786,7 +786,7 @@ namespace embree { GeometryType gtype; - GetBoundsTest (std::string name, int isa, GeometryType gtype) + GetBoundsTest (std::string name, int64_t isa, GeometryType gtype) : VerifyApplication::Test(name,isa,VerifyApplication::TEST_SHOULD_PASS), gtype(gtype) {} VerifyApplication::TestReturnValue run(VerifyApplication* state, bool silent) @@ -826,7 +826,7 @@ namespace embree { GeometryType gtype; - GetLinearBoundsTest (std::string name, int isa, GeometryType gtype) + GetLinearBoundsTest (std::string name, int64_t isa, GeometryType gtype) : VerifyApplication::Test(name,isa,VerifyApplication::TEST_SHOULD_PASS), gtype(gtype) {} VerifyApplication::TestReturnValue run(VerifyApplication* state, bool silent) @@ -864,7 +864,7 @@ namespace embree struct GetUserDataTest : public VerifyApplication::Test { - GetUserDataTest (std::string name, int isa) + GetUserDataTest (std::string name, int64_t isa) : VerifyApplication::Test(name,isa,VerifyApplication::TEST_SHOULD_PASS) {} VerifyApplication::TestReturnValue run(VerifyApplication* state, bool silent) @@ -916,7 +916,7 @@ namespace embree { GeometryType gtype; - BufferStrideTest (std::string name, int isa, GeometryType gtype) + BufferStrideTest (std::string name, int64_t isa, GeometryType gtype) : VerifyApplication::Test(name,isa,VerifyApplication::TEST_SHOULD_PASS), gtype(gtype) {} VerifyApplication::TestReturnValue run(VerifyApplication* state, bool silent) @@ -1023,7 +1023,7 @@ namespace embree */ struct TypesTest : public VerifyApplication::Test { - TypesTest(std::string name, int isa) + TypesTest(std::string name, int64_t isa) : VerifyApplication::Test(name,isa,VerifyApplication::TEST_SHOULD_PASS) {} @@ -1053,7 +1053,7 @@ namespace embree struct EmptySceneTest : public VerifyApplication::Test { - EmptySceneTest (std::string name, int isa, SceneFlags sflags) + EmptySceneTest (std::string name, int64_t isa, SceneFlags sflags) : VerifyApplication::Test(name,isa,VerifyApplication::TEST_SHOULD_PASS), sflags(sflags) {} VerifyApplication::TestReturnValue run(VerifyApplication* state, bool silent) @@ -1088,7 +1088,7 @@ namespace embree SceneFlags sflags; RTCBuildQuality quality; - EmptyGeometryTest (std::string name, int isa, SceneFlags sflags, RTCBuildQuality quality) + EmptyGeometryTest (std::string name, int64_t isa, SceneFlags sflags, RTCBuildQuality quality) : VerifyApplication::Test(name,isa,VerifyApplication::TEST_SHOULD_PASS), sflags(sflags), quality(quality) {} VerifyApplication::TestReturnValue run(VerifyApplication* state, bool silent) @@ -1122,7 +1122,7 @@ namespace embree SceneFlags sflags; RTCBuildQuality quality; - ManyBuildTest (std::string name, int isa, SceneFlags sflags, RTCBuildQuality quality) + ManyBuildTest (std::string name, int64_t isa, SceneFlags sflags, RTCBuildQuality quality) : VerifyApplication::Test(name,isa,VerifyApplication::TEST_SHOULD_PASS,false), sflags(sflags), quality(quality) {} VerifyApplication::TestReturnValue run (VerifyApplication* state, bool silent) @@ -1175,7 +1175,7 @@ namespace embree SceneFlags sflags; RTCBuildQuality quality; - BuildTest (std::string name, int isa, SceneFlags sflags, RTCBuildQuality quality) + BuildTest (std::string name, int64_t isa, SceneFlags sflags, RTCBuildQuality quality) : VerifyApplication::Test(name,isa,VerifyApplication::TEST_SHOULD_PASS), sflags(sflags), quality(quality) {} VerifyApplication::TestReturnValue run (VerifyApplication* state, bool silent) @@ -1212,7 +1212,7 @@ namespace embree RTCBuildQuality quality; size_t N; - OverlappingGeometryTest (std::string name, int isa, SceneFlags sflags, RTCBuildQuality quality, size_t N) + OverlappingGeometryTest (std::string name, int64_t isa, SceneFlags sflags, RTCBuildQuality quality, size_t N) : VerifyApplication::Test(name,isa,VerifyApplication::TEST_SHOULD_PASS), sflags(sflags), quality(quality), N(N) {} VerifyApplication::TestReturnValue run(VerifyApplication* state, bool silent) @@ -1314,7 +1314,7 @@ namespace embree SceneFlags sflags; RTCBuildQuality quality; - MemoryConsumptionTest (std::string name, int isa, GeometryType gtype, SceneFlags sflags, RTCBuildQuality quality) + MemoryConsumptionTest (std::string name, int64_t isa, GeometryType gtype, SceneFlags sflags, RTCBuildQuality quality) : VerifyApplication::Test(name,isa,VerifyApplication::TEST_SHOULD_PASS), gtype(gtype), sflags(sflags), quality(quality) {} static bool memoryMonitor(void* userPtr, const ssize_t bytes, const bool /*post*/) @@ -1524,7 +1524,7 @@ namespace embree { SceneFlags sflags; - NewDeleteGeometryTest (std::string name, int isa, SceneFlags sflags) + NewDeleteGeometryTest (std::string name, int64_t isa, SceneFlags sflags) : VerifyApplication::Test(name,isa,VerifyApplication::TEST_SHOULD_PASS), sflags(sflags) {} VerifyApplication::TestReturnValue run(VerifyApplication* state, bool silent) @@ -1592,7 +1592,7 @@ namespace embree { SceneFlags sflags; - UserGeometryIDTest (std::string name, int isa, SceneFlags sflags) + UserGeometryIDTest (std::string name, int64_t isa, SceneFlags sflags) : VerifyApplication::Test(name,isa,VerifyApplication::TEST_SHOULD_PASS), sflags(sflags) {} VerifyApplication::TestReturnValue run(VerifyApplication* state, bool silent) @@ -1646,7 +1646,7 @@ namespace embree { SceneFlags sflags; - EnableDisableGeometryTest (std::string name, int isa, SceneFlags sflags) + EnableDisableGeometryTest (std::string name, int64_t isa, SceneFlags sflags) : VerifyApplication::Test(name,isa,VerifyApplication::TEST_SHOULD_PASS), sflags(sflags) {} VerifyApplication::TestReturnValue run(VerifyApplication* state, bool silent) @@ -1701,7 +1701,7 @@ namespace embree { SceneFlags sflags; - DisableAndDetachGeometryTest (std::string name, int isa, SceneFlags sflags) + DisableAndDetachGeometryTest (std::string name, int64_t isa, SceneFlags sflags) : VerifyApplication::Test(name,isa,VerifyApplication::TEST_SHOULD_PASS), sflags(sflags) {} VerifyApplication::TestReturnValue run(VerifyApplication* state, bool silent) @@ -1778,7 +1778,7 @@ namespace embree struct TriangleSplitRegression : public VerifyApplication::Test { - TriangleSplitRegression (int isa) + TriangleSplitRegression (int64_t isa) : VerifyApplication::Test("TriangleSplitRegression", isa, VerifyApplication::TEST_SHOULD_PASS) {} VerifyApplication::TestReturnValue run(VerifyApplication* state, bool silent) @@ -1837,7 +1837,7 @@ namespace embree SceneFlags sflags; RTCBuildQuality quality; - UpdateTest (std::string name, int isa, SceneFlags sflags, RTCBuildQuality quality, IntersectMode imode, IntersectVariant ivariant) + UpdateTest (std::string name, int64_t isa, SceneFlags sflags, RTCBuildQuality quality, IntersectMode imode, IntersectVariant ivariant) : VerifyApplication::IntersectTest(name,isa,imode,ivariant,VerifyApplication::TEST_SHOULD_PASS), sflags(sflags), quality(quality) {} static void move_mesh(RTCGeometry mesh, size_t numVertices, Vec3fa& pos) @@ -1914,7 +1914,7 @@ namespace embree struct GarbageGeometryTest : public VerifyApplication::Test { - GarbageGeometryTest (std::string name, int isa) + GarbageGeometryTest (std::string name, int64_t isa) : VerifyApplication::Test(name,isa,VerifyApplication::TEST_SHOULD_PASS) {} VerifyApplication::TestReturnValue run(VerifyApplication* state, bool silent) @@ -2043,7 +2043,7 @@ namespace embree { unsigned int N; - InterpolateSubdivTest (std::string name, int isa, unsigned int N) + InterpolateSubdivTest (std::string name, int64_t isa, unsigned int N) : VerifyApplication::Test(name,isa,VerifyApplication::TEST_SHOULD_PASS), N(N) {} bool checkInterpolation2D(RTCGeometry geom, int primID, float u, float v, int v0, RTCBufferType bufferType, unsigned int bufferSlot, float* data, unsigned int N, unsigned int N_total) @@ -2182,7 +2182,7 @@ namespace embree { size_t N; - InterpolateTrianglesTest (std::string name, int isa, size_t N) + InterpolateTrianglesTest (std::string name, int64_t isa, size_t N) : VerifyApplication::Test(name,isa,VerifyApplication::TEST_SHOULD_PASS), N(N) {} bool checkTriangleInterpolation(RTCGeometry geom, int primID, float u, float v, int v0, int v1, int v2, RTCBufferType bufferType, unsigned int bufferSlot, float* data, size_t N, size_t N_total) @@ -2278,7 +2278,7 @@ namespace embree { size_t N; - InterpolateGridTest (std::string name, int isa, size_t N) + InterpolateGridTest (std::string name, int64_t isa, size_t N) : VerifyApplication::Test(name,isa,VerifyApplication::TEST_SHOULD_PASS), N(N) {} bool checkGridInterpolation(RTCGeometry geom, int primID, float u, float v, RTCBufferType bufferType, unsigned int bufferSlot, size_t N) @@ -2357,7 +2357,7 @@ namespace embree { size_t N; - InterpolateHairTest (std::string name, int isa, size_t N) + InterpolateHairTest (std::string name, int64_t isa, size_t N) : VerifyApplication::Test(name,isa,VerifyApplication::TEST_SHOULD_PASS), N(N) {} bool checkHairInterpolation(RTCGeometry geom, int primID, float u, float v, int v0, RTCBufferType bufferType, unsigned int bufferSlot, float* data, size_t N, size_t N_total) @@ -2464,7 +2464,7 @@ namespace embree SceneFlags sflags; RTCBuildQuality quality; - TriangleHitTest (std::string name, int isa, SceneFlags sflags, RTCBuildQuality quality, IntersectMode imode, IntersectVariant ivariant) + TriangleHitTest (std::string name, int64_t isa, SceneFlags sflags, RTCBuildQuality quality, IntersectMode imode, IntersectVariant ivariant) : VerifyApplication::IntersectTest(name,isa,imode,ivariant,VerifyApplication::TEST_SHOULD_PASS), sflags(sflags), quality(quality) {} inline Vec3fa uniformSampleTriangle(const Vec3fa &a, const Vec3fa &b, const Vec3fa &c, float &u, float& v) @@ -2551,7 +2551,7 @@ namespace embree SceneFlags sflags; RTCBuildQuality quality; - QuadHitTest (std::string name, int isa, SceneFlags sflags, RTCBuildQuality quality, IntersectMode imode, IntersectVariant ivariant) + QuadHitTest (std::string name, int64_t isa, SceneFlags sflags, RTCBuildQuality quality, IntersectMode imode, IntersectVariant ivariant) : VerifyApplication::IntersectTest(name,isa,imode,ivariant,VerifyApplication::TEST_SHOULD_PASS), sflags(sflags), quality(quality) {} VerifyApplication::TestReturnValue run(VerifyApplication* state, bool silent) @@ -2628,7 +2628,7 @@ namespace embree SceneFlags sflags; RTCBuildQuality quality; - RayMasksTest (std::string name, int isa, SceneFlags sflags, RTCBuildQuality quality, IntersectMode imode, IntersectVariant ivariant) + RayMasksTest (std::string name, int64_t isa, SceneFlags sflags, RTCBuildQuality quality, IntersectMode imode, IntersectVariant ivariant) : VerifyApplication::IntersectTest(name,isa,imode,ivariant,VerifyApplication::TEST_SHOULD_PASS), sflags(sflags), quality(quality) {} VerifyApplication::TestReturnValue run(VerifyApplication* state, bool silent) @@ -2697,7 +2697,7 @@ namespace embree RTCBuildQuality quality; GeometryType gtype; - BackfaceCullingTest (std::string name, int isa, SceneFlags sflags, RTCBuildQuality quality, GeometryType gtype, IntersectMode imode, IntersectVariant ivariant) + BackfaceCullingTest (std::string name, int64_t isa, SceneFlags sflags, RTCBuildQuality quality, GeometryType gtype, IntersectMode imode, IntersectVariant ivariant) : VerifyApplication::IntersectTest(name,isa,imode,ivariant,VerifyApplication::TEST_SHOULD_PASS), sflags(sflags), quality(quality), gtype(gtype) {} VerifyApplication::TestReturnValue run(VerifyApplication* state, bool silent) @@ -2765,7 +2765,7 @@ namespace embree RTCBuildQuality quality; bool subdiv; - IntersectionFilterTest (std::string name, int isa, SceneFlags sflags, RTCBuildQuality quality, bool subdiv, IntersectMode imode, IntersectVariant ivariant) + IntersectionFilterTest (std::string name, int64_t isa, SceneFlags sflags, RTCBuildQuality quality, bool subdiv, IntersectMode imode, IntersectVariant ivariant) : VerifyApplication::IntersectTest(name,isa,imode,ivariant,VerifyApplication::TEST_SHOULD_PASS), sflags(sflags), quality(quality), subdiv(subdiv) {} static void intersectionFilterN(const RTCFilterFunctionNArguments* const args) @@ -2842,7 +2842,7 @@ namespace embree RTCBuildQuality quality; bool subdiv; - InstancingTest (std::string name, int isa, SceneFlags sflags, RTCBuildQuality quality, bool subdiv, IntersectMode imode, IntersectVariant ivariant) + InstancingTest (std::string name, int64_t isa, SceneFlags sflags, RTCBuildQuality quality, bool subdiv, IntersectMode imode, IntersectVariant ivariant) : VerifyApplication::IntersectTest(name,isa,imode,ivariant,VerifyApplication::TEST_SHOULD_PASS), sflags(sflags), quality(quality), subdiv(subdiv) { } @@ -2946,7 +2946,7 @@ namespace embree SceneFlags sflags; RTCBuildQuality quality; - InstanceArrayTest (std::string name, int isa, SceneFlags sflags, RTCBuildQuality quality, IntersectMode imode, IntersectVariant ivariant) + InstanceArrayTest (std::string name, int64_t isa, SceneFlags sflags, RTCBuildQuality quality, IntersectMode imode, IntersectVariant ivariant) : VerifyApplication::IntersectTest(name,isa,imode,ivariant,VerifyApplication::TEST_SHOULD_PASS), sflags(sflags), quality(quality) { } @@ -3161,7 +3161,7 @@ namespace embree SceneFlags sflags; RTCBuildQuality quality; - InstanceArrayRandomTest (std::string name, int isa, SceneFlags sflags, RTCBuildQuality quality, IntersectMode imode, IntersectVariant ivariant) + InstanceArrayRandomTest (std::string name, int64_t isa, SceneFlags sflags, RTCBuildQuality quality, IntersectMode imode, IntersectVariant ivariant) : VerifyApplication::IntersectTest(name,isa,imode,ivariant,VerifyApplication::TEST_SHOULD_PASS), sflags(sflags), quality(quality) { } @@ -3448,7 +3448,7 @@ namespace embree SceneFlags sflags; RTCBuildQuality quality; - InstanceArrayTestFormats (std::string name, int isa, SceneFlags sflags, RTCBuildQuality quality, IntersectMode imode, IntersectVariant ivariant) + InstanceArrayTestFormats (std::string name, int64_t isa, SceneFlags sflags, RTCBuildQuality quality, IntersectMode imode, IntersectVariant ivariant) : VerifyApplication::IntersectTest(name,isa,imode,ivariant,VerifyApplication::TEST_SHOULD_PASS), sflags(sflags), quality(quality) { } @@ -3558,7 +3558,7 @@ namespace embree static const size_t N = 10; static const size_t maxStreamSize = 100; - InactiveRaysTest (std::string name, int isa, SceneFlags sflags, RTCBuildQuality quality, IntersectMode imode, IntersectVariant ivariant) + InactiveRaysTest (std::string name, int64_t isa, SceneFlags sflags, RTCBuildQuality quality, IntersectMode imode, IntersectVariant ivariant) : VerifyApplication::IntersectTest(name,isa,imode,ivariant,VerifyApplication::TEST_SHOULD_PASS), sflags(sflags), quality(quality) {} VerifyApplication::TestReturnValue run(VerifyApplication* state, bool silent) @@ -3617,7 +3617,7 @@ namespace embree static const size_t N = 5; static const size_t maxStreamSize = 30; - WatertightTest (std::string name, int isa, SceneFlags sflags, IntersectMode imode, std::string model, const Vec3fa& pos) + WatertightTest (std::string name, int64_t isa, SceneFlags sflags, IntersectMode imode, std::string model, const Vec3fa& pos) : VerifyApplication::IntersectTest(name,isa,imode,VARIANT_INTERSECT,VerifyApplication::TEST_SHOULD_PASS), sflags(sflags), model(model), pos(pos) {} VerifyApplication::TestReturnValue run(VerifyApplication* state, bool silent) @@ -3698,7 +3698,7 @@ namespace embree static const size_t N = 10000; static const size_t maxStreamSize = 100; - SmallTriangleHitTest (std::string name, int isa, SceneFlags sflags, IntersectMode imode, const Vec3fa& pos, const float radius) + SmallTriangleHitTest (std::string name, int64_t isa, SceneFlags sflags, IntersectMode imode, const Vec3fa& pos, const float radius) : VerifyApplication::IntersectTest(name,isa,imode,VARIANT_INTERSECT,VerifyApplication::TEST_SHOULD_PASS), sflags(sflags), pos(pos), radius(radius) {} VerifyApplication::TestReturnValue run(VerifyApplication* state, bool silent) @@ -3764,7 +3764,7 @@ namespace embree static const size_t N = 10; static const size_t maxStreamSize = 100; - RayAlignmentTest (std::string name, int isa, SceneFlags sflags, IntersectMode imode, std::string model) + RayAlignmentTest (std::string name, int64_t isa, SceneFlags sflags, IntersectMode imode, std::string model) : VerifyApplication::IntersectTest(name,isa,imode,VARIANT_INTERSECT,VerifyApplication::TEST_SHOULD_PASS), sflags(sflags), model(model) {} VerifyApplication::TestReturnValue run(VerifyApplication* state, bool silent) @@ -3815,7 +3815,7 @@ namespace embree SceneFlags sflags; RTCBuildQuality quality; - NaNTest (std::string name, int isa, SceneFlags sflags, RTCBuildQuality quality, IntersectMode imode, IntersectVariant ivariant) + NaNTest (std::string name, int64_t isa, SceneFlags sflags, RTCBuildQuality quality, IntersectMode imode, IntersectVariant ivariant) : VerifyApplication::IntersectTest(name,isa,imode,ivariant,VerifyApplication::TEST_SHOULD_PASS), sflags(sflags), quality(quality) {} VerifyApplication::TestReturnValue run(VerifyApplication* state, bool silent) @@ -3886,7 +3886,7 @@ namespace embree SceneFlags sflags; RTCBuildQuality quality; - InfTest (std::string name, int isa, SceneFlags sflags, RTCBuildQuality quality, IntersectMode imode, IntersectVariant ivariant) + InfTest (std::string name, int64_t isa, SceneFlags sflags, RTCBuildQuality quality, IntersectMode imode, IntersectVariant ivariant) : VerifyApplication::IntersectTest(name,isa,imode,ivariant,VerifyApplication::TEST_SHOULD_PASS), sflags(sflags), quality(quality) {} VerifyApplication::TestReturnValue run(VerifyApplication* state, bool silent) @@ -3971,7 +3971,7 @@ namespace embree { SceneFlags sflags; - PointQueryAPICallsTest (std::string name, int isa, SceneFlags sflags) + PointQueryAPICallsTest (std::string name, int64_t isa, SceneFlags sflags) : VerifyApplication::Test(name,isa,VerifyApplication::TEST_SHOULD_PASS), sflags(sflags) {} VerifyApplication::TestReturnValue run(VerifyApplication *state, bool silent) @@ -4232,7 +4232,7 @@ namespace embree SceneFlags sflags; std::string tri_accel; - PointQueryTest (std::string name, int isa, SceneFlags sflags, std::string tri_accel = "") + PointQueryTest (std::string name, int64_t isa, SceneFlags sflags, std::string tri_accel = "") : VerifyApplication::Test(name,isa,VerifyApplication::TEST_SHOULD_PASS), sflags(sflags), tri_accel(tri_accel) {} VerifyApplication::TestReturnValue run(VerifyApplication* state, bool silent) @@ -4327,7 +4327,7 @@ namespace embree SceneFlags sflags; std::string tri_accel; - PointQueryMotionBlurTest (std::string name, int isa, SceneFlags sflags, std::string tri_accel = "") + PointQueryMotionBlurTest (std::string name, int64_t isa, SceneFlags sflags, std::string tri_accel = "") : VerifyApplication::Test(name,isa,VerifyApplication::TEST_SHOULD_PASS), sflags(sflags), tri_accel(tri_accel) {} VerifyApplication::TestReturnValue run(VerifyApplication* state, bool silent) @@ -4473,7 +4473,7 @@ namespace embree struct GeometryStateTest : public VerifyApplication::Test { - GeometryStateTest (std::string name, int isa) + GeometryStateTest (std::string name, int64_t isa) : VerifyApplication::Test (name, isa, VerifyApplication::TEST_SHOULD_PASS) {} VerifyApplication::TestReturnValue run (VerifyApplication* state, bool silent) @@ -4556,7 +4556,7 @@ namespace embree } }; - SceneCheckModifiedGeometryTest (std::string name, int isa) + SceneCheckModifiedGeometryTest (std::string name, int64_t isa) : VerifyApplication::Test(name, isa, VerifyApplication::TEST_SHOULD_PASS) {} @@ -4637,7 +4637,7 @@ namespace embree void* userRayExt; }; - SphereFilterMultiHitTest (std::string name, int isa) + SphereFilterMultiHitTest (std::string name, int64_t isa) : VerifyApplication::Test(name, isa, VerifyApplication::TEST_SHOULD_PASS) {} @@ -5303,7 +5303,7 @@ namespace embree std::vector intersectModes; std::vector threads; - IntensiveRegressionTest (std::string name, int isa, thread_func func, int mode, float intensity) + IntensiveRegressionTest (std::string name, int64_t isa, thread_func func, int mode, float intensity) : VerifyApplication::Test(name,isa,VerifyApplication::TEST_SHOULD_PASS), func(func), mode(mode), intensity(intensity) {} VerifyApplication::TestReturnValue run(VerifyApplication* state, bool silent) @@ -5381,7 +5381,7 @@ namespace embree float intensity; std::vector intersectModes; - MemoryMonitorTest (std::string name, int isa, thread_func func, float intensity) + MemoryMonitorTest (std::string name, int64_t isa, thread_func func, float intensity) : VerifyApplication::Test(name,isa,VerifyApplication::TEST_SHOULD_PASS), func(func), intensity(intensity) {} VerifyApplication::TestReturnValue run(VerifyApplication* state, bool silent) @@ -5440,7 +5440,7 @@ namespace embree struct ParallelForExceptionTest1 : public VerifyApplication::Test { - ParallelForExceptionTest1 (std::string name, int isa) + ParallelForExceptionTest1 (std::string name, int64_t isa) : VerifyApplication::Test(name,isa,VerifyApplication::TEST_SHOULD_PASS) {} VerifyApplication::TestReturnValue run(VerifyApplication* state, bool silent) @@ -5468,7 +5468,7 @@ namespace embree struct ParallelForExceptionTest2 : public VerifyApplication::Test { - ParallelForExceptionTest2 (std::string name, int isa) + ParallelForExceptionTest2 (std::string name, int64_t isa) : VerifyApplication::Test(name,isa,VerifyApplication::TEST_SHOULD_PASS) {} VerifyApplication::TestReturnValue run(VerifyApplication* state, bool silent) @@ -5501,7 +5501,7 @@ namespace embree struct ParallelForExceptionTest3 : public VerifyApplication::Test { - ParallelForExceptionTest3 (std::string name, int isa) + ParallelForExceptionTest3 (std::string name, int64_t isa) : VerifyApplication::Test(name,isa,VerifyApplication::TEST_SHOULD_PASS) {} VerifyApplication::TestReturnValue run(VerifyApplication* state, bool silent) @@ -5533,7 +5533,7 @@ namespace embree struct ParallelForExceptionTest4 : public VerifyApplication::Test { - ParallelForExceptionTest4 (std::string name, int isa) + ParallelForExceptionTest4 (std::string name, int64_t isa) : VerifyApplication::Test(name,isa,VerifyApplication::TEST_SHOULD_PASS) {} VerifyApplication::TestReturnValue run(VerifyApplication* state, bool silent) @@ -5565,7 +5565,7 @@ namespace embree struct ParallelForExceptionTest5 : public VerifyApplication::Test { - ParallelForExceptionTest5 (std::string name, int isa) + ParallelForExceptionTest5 (std::string name, int64_t isa) : VerifyApplication::Test(name,isa,VerifyApplication::TEST_SHOULD_PASS) {} VerifyApplication::TestReturnValue run(VerifyApplication* state, bool silent) @@ -5608,7 +5608,7 @@ namespace embree struct ParallelForExceptionTest6 : public VerifyApplication::Test { - ParallelForExceptionTest6 (std::string name, int isa) + ParallelForExceptionTest6 (std::string name, int64_t isa) : VerifyApplication::Test(name,isa,VerifyApplication::TEST_SHOULD_PASS) {} VerifyApplication::TestReturnValue run(VerifyApplication* state, bool silent) @@ -5647,7 +5647,7 @@ namespace embree struct ParallelForExceptionTest7 : public VerifyApplication::Test { - ParallelForExceptionTest7 (std::string name, int isa) + ParallelForExceptionTest7 (std::string name, int64_t isa) : VerifyApplication::Test(name,isa,VerifyApplication::TEST_SHOULD_PASS) {} VerifyApplication::TestReturnValue run(VerifyApplication* state, bool silent) @@ -5713,7 +5713,7 @@ namespace embree struct SimpleBenchmark : public VerifyApplication::Benchmark { - SimpleBenchmark (std::string name, int isa) + SimpleBenchmark (std::string name, int64_t isa) : VerifyApplication::Benchmark(name,isa,"1/s",true,10) {} float benchmark(VerifyApplication* state) @@ -5729,7 +5729,7 @@ namespace embree { unsigned int N, dN; - ParallelIntersectBenchmark (std::string name, int isa, unsigned int N, unsigned int dN) + ParallelIntersectBenchmark (std::string name, int64_t isa, unsigned int N, unsigned int dN) : VerifyApplication::Benchmark(name,isa,"Mrps",true,10), N(N), dN(dN) {} bool setup(VerifyApplication* state) @@ -5771,7 +5771,7 @@ namespace embree static const size_t numTilesX = width / tileSizeX; static const size_t numTilesY = height / tileSizeY; - CoherentRaysBenchmark (std::string name, int isa, GeometryType gtype, SceneFlags sflags, RTCBuildQuality quality, IntersectMode imode, IntersectVariant ivariant, size_t numPhi) + CoherentRaysBenchmark (std::string name, int64_t isa, GeometryType gtype, SceneFlags sflags, RTCBuildQuality quality, IntersectMode imode, IntersectVariant ivariant, size_t numPhi) : ParallelIntersectBenchmark(name,isa,numTilesX*numTilesY,1), gtype(gtype), sflags(sflags), quality(quality), imode(imode), ivariant(ivariant), numPhi(numPhi) {} size_t setNumPrimitives(size_t N) @@ -5933,7 +5933,7 @@ namespace embree static const size_t numRays = 16*1024*1024; static const size_t deltaRays = 1024; - IncoherentRaysBenchmark (std::string name, int isa, GeometryType gtype, SceneFlags sflags, RTCBuildQuality quality, IntersectMode imode, IntersectVariant ivariant, size_t numPhi) + IncoherentRaysBenchmark (std::string name, int64_t isa, GeometryType gtype, SceneFlags sflags, RTCBuildQuality quality, IntersectMode imode, IntersectVariant ivariant, size_t numPhi) : ParallelIntersectBenchmark(name,isa,numRays,deltaRays), gtype(gtype), sflags(sflags), quality(quality), imode(imode), ivariant(ivariant), numPhi(numPhi), device(nullptr) {} size_t setNumPrimitives(size_t N) @@ -6075,7 +6075,7 @@ namespace embree Ref scene; std::vector> geometries; - CreateGeometryBenchmark (std::string name, int isa, GeometryType gtype, SceneFlags sflags, RTCBuildQuality quality, size_t numPhi, size_t numMeshes, bool update, bool dobenchmark) + CreateGeometryBenchmark (std::string name, int64_t isa, GeometryType gtype, SceneFlags sflags, RTCBuildQuality quality, size_t numPhi, size_t numMeshes, bool update, bool dobenchmark) : VerifyApplication::Benchmark(name,isa,dobenchmark ? "Mprims/s" : "MB",dobenchmark,dobenchmark?10:1), gtype(gtype), sflags(sflags), quality(quality), numPhi(numPhi), numMeshes(numMeshes), update(update), dobenchmark(dobenchmark), numPrimitives(0), device(nullptr), scene(nullptr) {} @@ -6249,6 +6249,15 @@ namespace embree #if defined(EMBREE_TARGET_AVX512) if (hasISA(AVX512)) isas.push_back(AVX512); #endif +#if defined(EMBREE_TARGET_AVX10_1) + if (hasISA(AVX10_1)) isas.push_back(AVX10_1); +#endif +#if defined(EMBREE_TARGET_AVX10_2) + if (hasISA(AVX10_2)) isas.push_back(AVX10_2); +#endif +#if defined(EMBREE_TARGET_APX) + if (hasISA(APX)) isas.push_back(APX); +#endif /* create list of all intersect modes to test */ intersectModes.push_back(MODE_INTERSECT1); diff --git a/tutorials/verify/verify.h b/tutorials/verify/verify.h index aac053b6f6..9234f3783e 100644 --- a/tutorials/verify/verify.h +++ b/tutorials/verify/verify.h @@ -25,7 +25,7 @@ namespace embree struct Test : public RefCount { - Test (std::string name, int isa, TestType ty, bool enabled = true) + Test (std::string name, int64_t isa, TestType ty, bool enabled = true) : name(name), isa(isa), ty(ty), enabled(enabled), ignoreFailure(false) { RandomSampler_init(sampler,0x23F67E21); @@ -61,7 +61,7 @@ namespace embree public: std::string name; - int isa; + int64_t isa; TestType ty; bool enabled; bool ignoreFailure; @@ -72,7 +72,7 @@ namespace embree { public: const std::string unit; - Benchmark (const std::string& name, int isa, const std::string& unit, bool higher_is_better, size_t max_attempts) + Benchmark (const std::string& name, int64_t isa, const std::string& unit, bool higher_is_better, size_t max_attempts) : Test(name,isa,BENCHMARK,false), unit(unit), numThreads(getNumberOfLogicalThreads()), higher_is_better(higher_is_better), max_attempts(max_attempts) {} virtual size_t setNumPrimitives(size_t N) { return 0; } @@ -121,7 +121,7 @@ namespace embree struct IntersectTest : public Test { - IntersectTest (std::string name, int isa, IntersectMode imode, IntersectVariant ivariant, TestType ty = TEST_SHOULD_PASS) + IntersectTest (std::string name, int64_t isa, IntersectMode imode, IntersectVariant ivariant, TestType ty = TEST_SHOULD_PASS) : Test(name,isa,ty), imode(imode), ivariant(ivariant) {} public: @@ -153,7 +153,7 @@ namespace embree public: MutexSys mutex; - std::vector isas; + std::vector isas; Ref tests; std::map> name2test; From d117ca74bedfcdd001efb1fa757d6b058f73f028 Mon Sep 17 00:00:00 2001 From: Stefan Werner Date: Thu, 19 Mar 2026 08:25:06 +0100 Subject: [PATCH 06/10] Added display names for new CPUs --- common/sys/sysinfo.cpp | 33 +++++++++++++++++++++++++++++++++ common/sys/sysinfo.h | 13 +++++++++++++ 2 files changed, 46 insertions(+) diff --git a/common/sys/sysinfo.cpp b/common/sys/sysinfo.cpp index be0a78273c..2b9583e33c 100644 --- a/common/sys/sysinfo.cpp +++ b/common/sys/sysinfo.cpp @@ -134,6 +134,26 @@ namespace embree uint32_t DisplayFamily_DisplayModel = (DisplayFamily << 8) + (DisplayModel << 0); // Data from Intel® 64 and IA-32 Architectures, Volume 4, Chapter 2, Table 2-1 (CPUID Signature Values of DisplayFamily_DisplayModel) + if (DisplayFamily_DisplayModel == 0x1301) return CPU::DIAMOND_RAPIDS; + if (DisplayFamily_DisplayModel == 0x06AF) return CPU::SIERRA_FOREST; + if (DisplayFamily_DisplayModel == 0x06AD) return CPU::GRANITE_RAPIDS; + if (DisplayFamily_DisplayModel == 0x06AE) return CPU::GRANITE_RAPIDS; + if (DisplayFamily_DisplayModel == 0x06CF) return CPU::EMERALD_RAPIDS; + if (DisplayFamily_DisplayModel == 0x068F) return CPU::SAPPHIRE_RAPIDS; + if (DisplayFamily_DisplayModel == 0x06D7) return CPU::BARTLETT_LAKE; + if (DisplayFamily_DisplayModel == 0x06CC) return CPU::PANTHER_LAKE; + if (DisplayFamily_DisplayModel == 0x06BD) return CPU::LUNAR_LAKE; + if (DisplayFamily_DisplayModel == 0x06B5) return CPU::ARROW_LAKE; + if (DisplayFamily_DisplayModel == 0x06C5) return CPU::ARROW_LAKE; + if (DisplayFamily_DisplayModel == 0x06C6) return CPU::ARROW_LAKE; + if (DisplayFamily_DisplayModel == 0x06AA) return CPU::METEOR_LAKE; + if (DisplayFamily_DisplayModel == 0x06AC) return CPU::METEOR_LAKE; + if (DisplayFamily_DisplayModel == 0x06B7) return CPU::RAPTOR_LAKE; + if (DisplayFamily_DisplayModel == 0x06BA) return CPU::RAPTOR_LAKE; + if (DisplayFamily_DisplayModel == 0x06BF) return CPU::RAPTOR_LAKE; + if (DisplayFamily_DisplayModel == 0x0697) return CPU::ALDER_LAKE; + if (DisplayFamily_DisplayModel == 0x069A) return CPU::ALDER_LAKE; + if (DisplayFamily_DisplayModel == 0x06A7) return CPU::ROCKET_LAKE; if (DisplayFamily_DisplayModel == 0x067D) return CPU::CORE_ICE_LAKE; if (DisplayFamily_DisplayModel == 0x067E) return CPU::CORE_ICE_LAKE; if (DisplayFamily_DisplayModel == 0x068C) return CPU::CORE_TIGER_LAKE; @@ -184,6 +204,19 @@ namespace embree std::string stringOfCPUModel(CPU model) { switch (model) { + case CPU::DIAMOND_RAPIDS : return "Diamond Rapids"; + case CPU::SIERRA_FOREST : return "Sierra Forest"; + case CPU::GRANITE_RAPIDS : return "Granite Rapids"; + case CPU::EMERALD_RAPIDS : return "Emerald Rapids"; + case CPU::SAPPHIRE_RAPIDS : return "Sapphire Rapids"; + case CPU::BARTLETT_LAKE : return "Bartlett Lake"; + case CPU::PANTHER_LAKE : return "Panther Lake"; + case CPU::LUNAR_LAKE : return "Lunar Lake"; + case CPU::ARROW_LAKE : return "Arrow Lake"; + case CPU::METEOR_LAKE : return "Meteor Lake"; + case CPU::RAPTOR_LAKE : return "Raptor Lake"; + case CPU::ALDER_LAKE : return "Alder Lake"; + case CPU::ROCKET_LAKE : return "Rocket Lake"; case CPU::XEON_ICE_LAKE : return "Xeon Ice Lake"; case CPU::CORE_ICE_LAKE : return "Core Ice Lake"; case CPU::CORE_TIGER_LAKE : return "Core Tiger Lake"; diff --git a/common/sys/sysinfo.h b/common/sys/sysinfo.h index 3b1c4a38db..592700aa34 100644 --- a/common/sys/sysinfo.h +++ b/common/sys/sysinfo.h @@ -83,6 +83,19 @@ namespace embree { enum class CPU { + DIAMOND_RAPIDS, + SIERRA_FOREST, + GRANITE_RAPIDS, + EMERALD_RAPIDS, + SAPPHIRE_RAPIDS, + BARTLETT_LAKE, + PANTHER_LAKE, + LUNAR_LAKE, + ARROW_LAKE, + METEOR_LAKE, + RAPTOR_LAKE, + ALDER_LAKE, + ROCKET_LAKE, XEON_ICE_LAKE, CORE_ICE_LAKE, CORE_TIGER_LAKE, From 6f646dc4ed97b239b0e1addacbc75a759b4fef79 Mon Sep 17 00:00:00 2001 From: Stefan Werner Date: Thu, 19 Mar 2026 10:52:02 +0100 Subject: [PATCH 07/10] Corrected CPU feature detection --- common/cmake/clang.cmake | 6 +++--- common/cmake/gnu.cmake | 8 +++++--- common/sys/sysinfo.cpp | 25 +++++++++++++++-------- kernels/common/state.cpp | 3 +++ tutorials/common/tutorial/application.cpp | 5 ++++- 5 files changed, 31 insertions(+), 16 deletions(-) diff --git a/common/cmake/clang.cmake b/common/cmake/clang.cmake index 13a2091ac6..dca848f324 100644 --- a/common/cmake/clang.cmake +++ b/common/cmake/clang.cmake @@ -28,9 +28,9 @@ ELSE () _SET_IF_EMPTY(FLAGS_AVX "-mavx") _SET_IF_EMPTY(FLAGS_AVX2 "-mf16c -mavx2 -mfma -mlzcnt -mbmi -mbmi2") _SET_IF_EMPTY(FLAGS_AVX512 "-march=skx") - _SET_IF_EMPTY(FLAGS_AVX10_1 "-mlzcnt -mavx10.1-512") - _SET_IF_EMPTY(FLAGS_AVX10_2 "-mlzcnt -mavx10.2-512") - _SET_IF_EMPTY(FLAGS_APX "-mapx-features") + _SET_IF_EMPTY(FLAGS_AVX10_1 "${FLAGS_AVX2} -mavx10.1-512") + _SET_IF_EMPTY(FLAGS_AVX10_2 "${FLAGS_AVX2} -mavx10.2-512") + _SET_IF_EMPTY(FLAGS_APX "${FLAGS_AVX10_2} -mapx-features") ENDIF () IF (WIN32) diff --git a/common/cmake/gnu.cmake b/common/cmake/gnu.cmake index 2594b1e48c..1bc5bd20da 100644 --- a/common/cmake/gnu.cmake +++ b/common/cmake/gnu.cmake @@ -18,9 +18,11 @@ ELSE () _SET_IF_EMPTY(FLAGS_AVX "-mavx") _SET_IF_EMPTY(FLAGS_AVX2 "-mf16c -mavx2 -mfma -mlzcnt -mbmi -mbmi2") _SET_IF_EMPTY(FLAGS_AVX512 "-march=skylake-avx512") - _SET_IF_EMPTY(FLAGS_AVX10_1 "-mlzcnt -mavx10.1") - _SET_IF_EMPTY(FLAGS_AVX10_2 "-mlzcnt -mavx10.2") - _SET_IF_EMPTY(FLAGS_APX "-mapxf") + _SET_IF_EMPTY(FLAGS_AVX10_1 "${FLAGS_AVX2} -mavx10.1") + _SET_IF_EMPTY(FLAGS_AVX10_2 "${FLAGS_AVX2} -mavx10.2") + # Keep APX target codegen aligned with AVX10.2 to avoid assembler issues + # with vector instructions when forcing additional APX flags. + _SET_IF_EMPTY(FLAGS_APX "${FLAGS_AVX10_2} -mapxf") ENDIF () OPTION(EMBREE_IGNORE_CMAKE_CXX_FLAGS "When enabled Embree ignores default CMAKE_CXX_FLAGS." ON) diff --git a/common/sys/sysinfo.cpp b/common/sys/sysinfo.cpp index 2b9583e33c..912950312d 100644 --- a/common/sys/sysinfo.cpp +++ b/common/sys/sysinfo.cpp @@ -287,15 +287,11 @@ namespace embree /* cpuid[eax=7,ecx=0].ecx */ static const int CPU_FEATURE_BIT_AVX512VBMI = 1 << 1; // AVX512VBMI (vector bit manipulation instructions) - /* cpuid[eax=7,ecx=1].eax */ + /* cpuid[eax=7,ecx=1].edx */ static const int CPU_FEATURE_BIT_APX = 1 << 21; // APX (Advanced Performance Extensions) /* cpuid[eax=7,ecx=1].ecx */ static const int CPU_FEATURE_BIT_AVX10 = 1 << 19; // AVX-10 (256-bit and 512-bit vector instructions) - - /* cpuid[eax=7,ecx=1].eax bits for AVX-10 version */ - static const int CPU_FEATURE_BIT_AVX10_VERSION_SHIFT = 12; - static const int CPU_FEATURE_BIT_AVX10_VERSION_MASK = 0x3; // 2 bits for version #endif #if defined(__X86_ASM__) @@ -359,8 +355,9 @@ namespace embree xmm_enabled = ((xcr0 & 0x02) == 0x02); /* checks if xmm are enabled in XCR0 */ ymm_enabled = xmm_enabled && ((xcr0 & 0x04) == 0x04); /* checks if ymm state are enabled in XCR0 */ zmm_enabled = ymm_enabled && ((xcr0 & 0xE0) == 0xE0); /* checks if OPMASK state, upper 256-bit of ZMM0-ZMM15 and ZMM16-ZMM31 state are enabled in XCR0 */ - apx_enabled = ((xcr0 & 0x030000) == 0x030000); /* checks if APX state (bit 17 and 18) are enabled in XCR0 */ + apx_enabled = ((xcr0 & (0x80000)) == 0x80000); /* checks if APX state (bit 19) is enabled in XCR0 */ } + if (xmm_enabled) cpu_features |= CPU_FEATURE_XMM_ENABLED; if (ymm_enabled) cpu_features |= CPU_FEATURE_YMM_ENABLED; if (zmm_enabled) cpu_features |= CPU_FEATURE_ZMM_ENABLED; @@ -392,11 +389,21 @@ namespace embree if (cpuid_leaf_7[EBX] & CPU_FEATURE_BIT_AVX512VL ) cpu_features |= CPU_FEATURE_AVX512VL; if (cpuid_leaf_7[ECX] & CPU_FEATURE_BIT_AVX512VBMI) cpu_features |= CPU_FEATURE_AVX512VBMI; - if ((cpuid_leaf_7_1[EAX] & CPU_FEATURE_BIT_APX) && apx_enabled) cpu_features |= CPU_FEATURE_APX; + if ((cpuid_leaf_7_1[EDX] & CPU_FEATURE_BIT_APX) && apx_enabled) cpu_features |= CPU_FEATURE_APX; /* detect AVX-10 version */ - if (cpuid_leaf_7_1[ECX] & CPU_FEATURE_BIT_AVX10) { - uint32_t avx10_version = (cpuid_leaf_7_1[EAX] >> CPU_FEATURE_BIT_AVX10_VERSION_SHIFT) & CPU_FEATURE_BIT_AVX10_VERSION_MASK; + if ((cpuid_leaf_7_1[EDX] & CPU_FEATURE_BIT_AVX10) && (nIds >= 0x24)) { + int cpuid_leaf_24_0[4] = { 0, 0, 0, 0 }; + +#if _WIN32 +#if _MSC_VER && (_MSC_FULL_VER < 160040219) +#else + __cpuidex(cpuid_leaf_24_0, 0x00000024, 0); +#endif +#else + __cpuid_count(cpuid_leaf_24_0, 0x00000024, 0); +#endif + int avx10_version = cpuid_leaf_24_0[EBX] & 0xff; if (avx10_version >= 1) cpu_features |= CPU_FEATURE_AVX10_1; if (avx10_version >= 2) cpu_features |= CPU_FEATURE_AVX10_2; } diff --git a/kernels/common/state.cpp b/kernels/common/state.cpp index a771664bcc..cc6422eadd 100644 --- a/kernels/common/state.cpp +++ b/kernels/common/state.cpp @@ -255,6 +255,9 @@ namespace embree else if (isa == "avxi") return AVXI; else if (isa == "avx2") return AVX2; else if (isa == "avx512") return AVX512; + else if (isa == "avx10.1") return AVX10_1; + else if (isa == "avx10.2") return AVX10_2; + else if (isa == "apx") return APX; else return SSE2; } diff --git a/tutorials/common/tutorial/application.cpp b/tutorials/common/tutorial/application.cpp index 84991b720f..10e0491d1c 100644 --- a/tutorials/common/tutorial/application.cpp +++ b/tutorials/common/tutorial/application.cpp @@ -99,7 +99,10 @@ namespace embree " avx: select AVX codepath\n" " avxi: select AVXI codepath\n" " avx2: select AVX2 codepath\n" - " avx512: select AVX512 codepath\n"); + " avx512: select AVX512 codepath\n" + " avx10.1: select AVX10.1 codepath\n" + " avx10.2: select AVX10.2 codepath\n" + " apx: select APX codepath\n"); } } From a760f2089903f5fb29b6183d499e338b25ba7cf2 Mon Sep 17 00:00:00 2001 From: Stefan Werner Date: Thu, 19 Mar 2026 13:16:45 +0100 Subject: [PATCH 08/10] Fixed clang APX compile flags --- common/cmake/clang.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/cmake/clang.cmake b/common/cmake/clang.cmake index dca848f324..39a73f252b 100644 --- a/common/cmake/clang.cmake +++ b/common/cmake/clang.cmake @@ -30,7 +30,7 @@ ELSE () _SET_IF_EMPTY(FLAGS_AVX512 "-march=skx") _SET_IF_EMPTY(FLAGS_AVX10_1 "${FLAGS_AVX2} -mavx10.1-512") _SET_IF_EMPTY(FLAGS_AVX10_2 "${FLAGS_AVX2} -mavx10.2-512") - _SET_IF_EMPTY(FLAGS_APX "${FLAGS_AVX10_2} -mapx-features") + _SET_IF_EMPTY(FLAGS_APX "${FLAGS_AVX10_2} -mapxf") ENDIF () IF (WIN32) From badd8566e6f8695010d50d9895f9d81603833668 Mon Sep 17 00:00:00 2001 From: Stefan Werner Date: Thu, 19 Mar 2026 13:17:02 +0100 Subject: [PATCH 09/10] remoted duplicate macros in isa.h --- kernels/common/isa.h | 39 +-------------------------------------- 1 file changed, 1 insertion(+), 38 deletions(-) diff --git a/kernels/common/isa.h b/kernels/common/isa.h index 93f1444691..323c770da4 100644 --- a/kernels/common/isa.h +++ b/kernels/common/isa.h @@ -156,12 +156,6 @@ namespace embree SELECT_SYMBOL_AVX2(features,intersector); \ SELECT_SYMBOL_AVX512(features,intersector); -#define SELECT_SYMBOL_DEFAULT_AVX_AVX2_AVX512(features,intersector) \ - SELECT_SYMBOL_DEFAULT(features,intersector); \ - SELECT_SYMBOL_AVX(features,intersector); \ - SELECT_SYMBOL_AVX2(features,intersector); \ - SELECT_SYMBOL_AVX512(features,intersector); - #define SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512(features,intersector) \ SELECT_SYMBOL_DEFAULT(features,intersector); \ SELECT_SYMBOL_SSE42(features,intersector); \ @@ -169,13 +163,6 @@ namespace embree SELECT_SYMBOL_AVX2(features,intersector); \ SELECT_SYMBOL_AVX512(features,intersector); -#define SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512(features,intersector) \ - SELECT_SYMBOL_DEFAULT(features,intersector); \ - SELECT_SYMBOL_SSE42(features,intersector); \ - SELECT_SYMBOL_AVX(features,intersector); \ - SELECT_SYMBOL_AVX2(features,intersector); \ - SELECT_SYMBOL_AVX512(features,intersector); - #define SELECT_SYMBOL_DEFAULT_AVX(features,intersector) \ SELECT_SYMBOL_DEFAULT(features,intersector); \ SELECT_SYMBOL_AVX(features,intersector); @@ -184,21 +171,12 @@ namespace embree SELECT_SYMBOL_DEFAULT(features,intersector); \ SELECT_SYMBOL_AVX(features,intersector); \ SELECT_SYMBOL_AVX2(features,intersector); - -#define SELECT_SYMBOL_DEFAULT_AVX(features,intersector) \ - SELECT_SYMBOL_DEFAULT(features,intersector); \ - SELECT_SYMBOL_AVX(features,intersector); - + #define SELECT_SYMBOL_DEFAULT_AVX_AVX512(features,intersector) \ SELECT_SYMBOL_DEFAULT(features,intersector); \ SELECT_SYMBOL_AVX(features,intersector); \ SELECT_SYMBOL_AVX512(features,intersector); -#define SELECT_SYMBOL_DEFAULT_AVX_AVX512(features,intersector) \ - SELECT_SYMBOL_DEFAULT(features,intersector); \ - SELECT_SYMBOL_AVX(features,intersector); \ - SELECT_SYMBOL_AVX512(features,intersector); - #define SELECT_SYMBOL_INIT_AVX(features,intersector) \ INIT_SYMBOL(features,intersector); \ SELECT_SYMBOL_AVX(features,intersector); @@ -220,26 +198,11 @@ namespace embree SELECT_SYMBOL_AVX(features,intersector); \ SELECT_SYMBOL_AVX2(features,intersector); -#define SELECT_SYMBOL_INIT_AVX(features,intersector) \ - INIT_SYMBOL(features,intersector); \ - SELECT_SYMBOL_AVX(features,intersector); - #define SELECT_SYMBOL_INIT_AVX_AVX512(features,intersector) \ INIT_SYMBOL(features,intersector); \ SELECT_SYMBOL_AVX(features,intersector); \ SELECT_SYMBOL_AVX512(features,intersector); -#define SELECT_SYMBOL_INIT_AVX_AVX2(features,intersector) \ - INIT_SYMBOL(features,intersector); \ - SELECT_SYMBOL_AVX(features,intersector); \ - SELECT_SYMBOL_AVX2(features,intersector); - -#define SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,intersector) \ - INIT_SYMBOL(features,intersector); \ - SELECT_SYMBOL_AVX(features,intersector); \ - SELECT_SYMBOL_AVX2(features,intersector); \ - SELECT_SYMBOL_AVX512(features,intersector); - #define SELECT_SYMBOL_INIT_SSE42_AVX_AVX2_AVX512(features,intersector) \ INIT_SYMBOL(features,intersector); \ SELECT_SYMBOL_SSE42(features,intersector); \ From aea9b436279d0613208c8153e36adfae75fa7aa6 Mon Sep 17 00:00:00 2001 From: Stefan Werner Date: Fri, 20 Mar 2026 16:08:44 +0100 Subject: [PATCH 10/10] Updated ISA macros and BVH build selections to AVX10.x and APX isas --- kernels/bvh/bvh4_factory.cpp | 272 +++++++++++++++++------------------ kernels/bvh/bvh8_factory.cpp | 254 ++++++++++++++++---------------- kernels/common/isa.h | 252 +++++++++++++++++++++----------- kernels/common/rtcore.cpp | 20 +-- 4 files changed, 443 insertions(+), 355 deletions(-) diff --git a/kernels/bvh/bvh4_factory.cpp b/kernels/bvh/bvh4_factory.cpp index 9e926abf22..10e17d2c8c 100644 --- a/kernels/bvh/bvh4_factory.cpp +++ b/kernels/bvh/bvh4_factory.cpp @@ -310,185 +310,185 @@ namespace embree void BVH4Factory::selectIntersectors(int64_t features) { - IF_ENABLED_CURVES_OR_POINTS(SELECT_SYMBOL_DEFAULT_AVX_AVX2_AVX512(features,VirtualCurveIntersector4i)); - IF_ENABLED_CURVES_OR_POINTS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,VirtualCurveIntersector8i)); - IF_ENABLED_CURVES_OR_POINTS(SELECT_SYMBOL_DEFAULT_AVX_AVX2_AVX512(features,VirtualCurveIntersector4v)); - IF_ENABLED_CURVES_OR_POINTS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,VirtualCurveIntersector8v)); - IF_ENABLED_CURVES_OR_POINTS(SELECT_SYMBOL_DEFAULT_AVX_AVX2_AVX512(features,VirtualCurveIntersector4iMB)); - IF_ENABLED_CURVES_OR_POINTS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,VirtualCurveIntersector8iMB)); + IF_ENABLED_CURVES_OR_POINTS(SELECT_SYMBOL_DEFAULT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,VirtualCurveIntersector4i)); + IF_ENABLED_CURVES_OR_POINTS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,VirtualCurveIntersector8i)); + IF_ENABLED_CURVES_OR_POINTS(SELECT_SYMBOL_DEFAULT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,VirtualCurveIntersector4v)); + IF_ENABLED_CURVES_OR_POINTS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,VirtualCurveIntersector8v)); + IF_ENABLED_CURVES_OR_POINTS(SELECT_SYMBOL_DEFAULT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,VirtualCurveIntersector4iMB)); + IF_ENABLED_CURVES_OR_POINTS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,VirtualCurveIntersector8iMB)); /* select intersectors1 */ - IF_ENABLED_CURVES_OR_POINTS(SELECT_SYMBOL_DEFAULT_AVX_AVX2_AVX512(features,BVH4OBBVirtualCurveIntersector1)); - IF_ENABLED_CURVES_OR_POINTS(SELECT_SYMBOL_DEFAULT_AVX_AVX2_AVX512(features,BVH4OBBVirtualCurveIntersector1MB)); - IF_ENABLED_CURVES_OR_POINTS(SELECT_SYMBOL_DEFAULT_AVX_AVX2_AVX512(features,BVH4OBBVirtualCurveIntersectorRobust1)); - IF_ENABLED_CURVES_OR_POINTS(SELECT_SYMBOL_DEFAULT_AVX_AVX2_AVX512(features,BVH4OBBVirtualCurveIntersectorRobust1MB)); + IF_ENABLED_CURVES_OR_POINTS(SELECT_SYMBOL_DEFAULT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH4OBBVirtualCurveIntersector1)); + IF_ENABLED_CURVES_OR_POINTS(SELECT_SYMBOL_DEFAULT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH4OBBVirtualCurveIntersector1MB)); + IF_ENABLED_CURVES_OR_POINTS(SELECT_SYMBOL_DEFAULT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH4OBBVirtualCurveIntersectorRobust1)); + IF_ENABLED_CURVES_OR_POINTS(SELECT_SYMBOL_DEFAULT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH4OBBVirtualCurveIntersectorRobust1MB)); - IF_ENABLED_TRIS(SELECT_SYMBOL_DEFAULT_AVX_AVX2_AVX512(features,BVH4Triangle4Intersector1Moeller)); + IF_ENABLED_TRIS(SELECT_SYMBOL_DEFAULT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH4Triangle4Intersector1Moeller)); IF_ENABLED_TRIS(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX512(features,BVH4Triangle4iIntersector1Moeller)); IF_ENABLED_TRIS(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX512(features,BVH4Triangle4vIntersector1Pluecker)); IF_ENABLED_TRIS(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX512(features,BVH4Triangle4iIntersector1Pluecker)); - IF_ENABLED_TRIS(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512(features,BVH4Triangle4vMBIntersector1Moeller)); - IF_ENABLED_TRIS(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512(features,BVH4Triangle4iMBIntersector1Moeller)); - IF_ENABLED_TRIS(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512(features,BVH4Triangle4vMBIntersector1Pluecker)); - IF_ENABLED_TRIS(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512(features,BVH4Triangle4iMBIntersector1Pluecker)); + IF_ENABLED_TRIS(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH4Triangle4vMBIntersector1Moeller)); + IF_ENABLED_TRIS(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH4Triangle4iMBIntersector1Moeller)); + IF_ENABLED_TRIS(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH4Triangle4vMBIntersector1Pluecker)); + IF_ENABLED_TRIS(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH4Triangle4iMBIntersector1Pluecker)); - IF_ENABLED_QUADS(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512(features,BVH4Quad4vIntersector1Moeller)); - IF_ENABLED_QUADS(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512(features,BVH4Quad4iIntersector1Moeller)); - IF_ENABLED_QUADS(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512(features,BVH4Quad4vIntersector1Pluecker)); - IF_ENABLED_QUADS(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512(features,BVH4Quad4iIntersector1Pluecker)); + IF_ENABLED_QUADS(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH4Quad4vIntersector1Moeller)); + IF_ENABLED_QUADS(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH4Quad4iIntersector1Moeller)); + IF_ENABLED_QUADS(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH4Quad4vIntersector1Pluecker)); + IF_ENABLED_QUADS(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH4Quad4iIntersector1Pluecker)); - IF_ENABLED_QUADS(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512(features,BVH4Quad4iMBIntersector1Pluecker)); - IF_ENABLED_QUADS(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512(features,BVH4Quad4iMBIntersector1Moeller)); + IF_ENABLED_QUADS(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH4Quad4iMBIntersector1Pluecker)); + IF_ENABLED_QUADS(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH4Quad4iMBIntersector1Moeller)); IF_ENABLED_TRIS(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX512(features,QBVH4Triangle4iIntersector1Pluecker)); IF_ENABLED_QUADS(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX512(features,QBVH4Quad4iIntersector1Pluecker)); - IF_ENABLED_SUBDIV(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512(features,BVH4SubdivPatch1Intersector1)); - IF_ENABLED_SUBDIV(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512(features,BVH4SubdivPatch1MBIntersector1)); + IF_ENABLED_SUBDIV(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH4SubdivPatch1Intersector1)); + IF_ENABLED_SUBDIV(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH4SubdivPatch1MBIntersector1)); - IF_ENABLED_USER(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512(features,BVH4VirtualIntersector1)); - IF_ENABLED_USER(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512(features,BVH4VirtualMBIntersector1)); + IF_ENABLED_USER(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH4VirtualIntersector1)); + IF_ENABLED_USER(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH4VirtualMBIntersector1)); - IF_ENABLED_INSTANCE(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512(features,BVH4InstanceIntersector1)); - IF_ENABLED_INSTANCE(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512(features,BVH4InstanceMBIntersector1)); + IF_ENABLED_INSTANCE(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH4InstanceIntersector1)); + IF_ENABLED_INSTANCE(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH4InstanceMBIntersector1)); - IF_ENABLED_INSTANCE_ARRAY(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512(features,BVH4InstanceArrayIntersector1)); - IF_ENABLED_INSTANCE_ARRAY(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512(features,BVH4InstanceArrayMBIntersector1)); + IF_ENABLED_INSTANCE_ARRAY(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH4InstanceArrayIntersector1)); + IF_ENABLED_INSTANCE_ARRAY(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH4InstanceArrayMBIntersector1)); - IF_ENABLED_GRIDS(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512(features,BVH4GridIntersector1Moeller)); - IF_ENABLED_GRIDS(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512(features,BVH4GridMBIntersector1Moeller)) - IF_ENABLED_GRIDS(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512(features,BVH4GridIntersector1Pluecker)); + IF_ENABLED_GRIDS(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH4GridIntersector1Moeller)); + IF_ENABLED_GRIDS(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH4GridMBIntersector1Moeller)) + IF_ENABLED_GRIDS(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH4GridIntersector1Pluecker)); #if defined (EMBREE_RAY_PACKETS) /* select intersectors4 */ - IF_ENABLED_CURVES_OR_POINTS(SELECT_SYMBOL_DEFAULT_AVX_AVX2_AVX512(features,BVH4OBBVirtualCurveIntersector4Hybrid)); - IF_ENABLED_CURVES_OR_POINTS(SELECT_SYMBOL_DEFAULT_AVX_AVX2_AVX512(features,BVH4OBBVirtualCurveIntersector4HybridMB)); - IF_ENABLED_CURVES_OR_POINTS(SELECT_SYMBOL_DEFAULT_AVX_AVX2_AVX512(features,BVH4OBBVirtualCurveIntersectorRobust4Hybrid)); - IF_ENABLED_CURVES_OR_POINTS(SELECT_SYMBOL_DEFAULT_AVX_AVX2_AVX512(features,BVH4OBBVirtualCurveIntersectorRobust4HybridMB)); - - IF_ENABLED_TRIS(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512(features,BVH4Triangle4Intersector4HybridMoeller)); - IF_ENABLED_TRIS(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512(features,BVH4Triangle4Intersector4HybridMoellerNoFilter)); - IF_ENABLED_TRIS(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512(features,BVH4Triangle4iIntersector4HybridMoeller)); - IF_ENABLED_TRIS(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512(features,BVH4Triangle4vIntersector4HybridPluecker)); - IF_ENABLED_TRIS(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512(features,BVH4Triangle4iIntersector4HybridPluecker)); - - IF_ENABLED_TRIS(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512(features,BVH4Triangle4vMBIntersector4HybridMoeller)); - IF_ENABLED_TRIS(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512(features,BVH4Triangle4iMBIntersector4HybridMoeller)); - IF_ENABLED_TRIS(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512(features,BVH4Triangle4vMBIntersector4HybridPluecker)); - IF_ENABLED_TRIS(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512(features,BVH4Triangle4iMBIntersector4HybridPluecker)); - - IF_ENABLED_QUADS(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512(features,BVH4Quad4vIntersector4HybridMoeller)); - IF_ENABLED_QUADS(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512(features,BVH4Quad4vIntersector4HybridMoellerNoFilter)); - IF_ENABLED_QUADS(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512(features,BVH4Quad4iIntersector4HybridMoeller)); - IF_ENABLED_QUADS(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512(features,BVH4Quad4vIntersector4HybridPluecker)); - IF_ENABLED_QUADS(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512(features,BVH4Quad4iIntersector4HybridPluecker)); - - IF_ENABLED_QUADS(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512(features,BVH4Quad4iMBIntersector4HybridMoeller)); - IF_ENABLED_QUADS(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512(features,BVH4Quad4iMBIntersector4HybridPluecker)); - - IF_ENABLED_SUBDIV(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512(features,BVH4SubdivPatch1Intersector4)); - IF_ENABLED_SUBDIV(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512(features,BVH4SubdivPatch1MBIntersector4)); + IF_ENABLED_CURVES_OR_POINTS(SELECT_SYMBOL_DEFAULT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH4OBBVirtualCurveIntersector4Hybrid)); + IF_ENABLED_CURVES_OR_POINTS(SELECT_SYMBOL_DEFAULT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH4OBBVirtualCurveIntersector4HybridMB)); + IF_ENABLED_CURVES_OR_POINTS(SELECT_SYMBOL_DEFAULT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH4OBBVirtualCurveIntersectorRobust4Hybrid)); + IF_ENABLED_CURVES_OR_POINTS(SELECT_SYMBOL_DEFAULT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH4OBBVirtualCurveIntersectorRobust4HybridMB)); + + IF_ENABLED_TRIS(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH4Triangle4Intersector4HybridMoeller)); + IF_ENABLED_TRIS(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH4Triangle4Intersector4HybridMoellerNoFilter)); + IF_ENABLED_TRIS(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH4Triangle4iIntersector4HybridMoeller)); + IF_ENABLED_TRIS(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH4Triangle4vIntersector4HybridPluecker)); + IF_ENABLED_TRIS(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH4Triangle4iIntersector4HybridPluecker)); + + IF_ENABLED_TRIS(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH4Triangle4vMBIntersector4HybridMoeller)); + IF_ENABLED_TRIS(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH4Triangle4iMBIntersector4HybridMoeller)); + IF_ENABLED_TRIS(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH4Triangle4vMBIntersector4HybridPluecker)); + IF_ENABLED_TRIS(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH4Triangle4iMBIntersector4HybridPluecker)); + + IF_ENABLED_QUADS(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH4Quad4vIntersector4HybridMoeller)); + IF_ENABLED_QUADS(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH4Quad4vIntersector4HybridMoellerNoFilter)); + IF_ENABLED_QUADS(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH4Quad4iIntersector4HybridMoeller)); + IF_ENABLED_QUADS(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH4Quad4vIntersector4HybridPluecker)); + IF_ENABLED_QUADS(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH4Quad4iIntersector4HybridPluecker)); + + IF_ENABLED_QUADS(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH4Quad4iMBIntersector4HybridMoeller)); + IF_ENABLED_QUADS(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH4Quad4iMBIntersector4HybridPluecker)); + + IF_ENABLED_SUBDIV(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH4SubdivPatch1Intersector4)); + IF_ENABLED_SUBDIV(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH4SubdivPatch1MBIntersector4)); - IF_ENABLED_USER(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512(features,BVH4VirtualIntersector4Chunk)); - IF_ENABLED_USER(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512(features,BVH4VirtualMBIntersector4Chunk)); + IF_ENABLED_USER(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH4VirtualIntersector4Chunk)); + IF_ENABLED_USER(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH4VirtualMBIntersector4Chunk)); - IF_ENABLED_INSTANCE(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512(features,BVH4InstanceIntersector4Chunk)); - IF_ENABLED_INSTANCE(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512(features,BVH4InstanceMBIntersector4Chunk)); + IF_ENABLED_INSTANCE(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH4InstanceIntersector4Chunk)); + IF_ENABLED_INSTANCE(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH4InstanceMBIntersector4Chunk)); - IF_ENABLED_INSTANCE_ARRAY(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512(features,BVH4InstanceArrayIntersector4Chunk)); - IF_ENABLED_INSTANCE_ARRAY(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512(features,BVH4InstanceArrayMBIntersector4Chunk)); + IF_ENABLED_INSTANCE_ARRAY(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH4InstanceArrayIntersector4Chunk)); + IF_ENABLED_INSTANCE_ARRAY(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH4InstanceArrayMBIntersector4Chunk)); - IF_ENABLED_QUADS(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512(features,BVH4Quad4vIntersector4HybridMoeller)); + IF_ENABLED_QUADS(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH4Quad4vIntersector4HybridMoeller)); - IF_ENABLED_GRIDS(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512(features,BVH4GridIntersector4HybridMoeller)); - IF_ENABLED_GRIDS(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512(features,BVH4GridMBIntersector4HybridMoeller)); - IF_ENABLED_GRIDS(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512(features,BVH4GridIntersector4HybridPluecker)); + IF_ENABLED_GRIDS(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH4GridIntersector4HybridMoeller)); + IF_ENABLED_GRIDS(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH4GridMBIntersector4HybridMoeller)); + IF_ENABLED_GRIDS(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH4GridIntersector4HybridPluecker)); /* select intersectors8 */ - IF_ENABLED_CURVES_OR_POINTS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH4OBBVirtualCurveIntersector8Hybrid)); - IF_ENABLED_CURVES_OR_POINTS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH4OBBVirtualCurveIntersector8HybridMB)); - IF_ENABLED_CURVES_OR_POINTS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH4OBBVirtualCurveIntersectorRobust8Hybrid)); - IF_ENABLED_CURVES_OR_POINTS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH4OBBVirtualCurveIntersectorRobust8HybridMB)); + IF_ENABLED_CURVES_OR_POINTS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH4OBBVirtualCurveIntersector8Hybrid)); + IF_ENABLED_CURVES_OR_POINTS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH4OBBVirtualCurveIntersector8HybridMB)); + IF_ENABLED_CURVES_OR_POINTS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH4OBBVirtualCurveIntersectorRobust8Hybrid)); + IF_ENABLED_CURVES_OR_POINTS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH4OBBVirtualCurveIntersectorRobust8HybridMB)); - IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH4Triangle4Intersector8HybridMoeller)); - IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH4Triangle4Intersector8HybridMoellerNoFilter)); - IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH4Triangle4iIntersector8HybridMoeller)); - IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH4Triangle4vIntersector8HybridPluecker)); - IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH4Triangle4iIntersector8HybridPluecker)); + IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH4Triangle4Intersector8HybridMoeller)); + IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH4Triangle4Intersector8HybridMoellerNoFilter)); + IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH4Triangle4iIntersector8HybridMoeller)); + IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH4Triangle4vIntersector8HybridPluecker)); + IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH4Triangle4iIntersector8HybridPluecker)); - IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH4Triangle4vMBIntersector8HybridMoeller)); - IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH4Triangle4iMBIntersector8HybridMoeller)); - IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH4Triangle4vMBIntersector8HybridPluecker)); - IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH4Triangle4iMBIntersector8HybridPluecker)); + IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH4Triangle4vMBIntersector8HybridMoeller)); + IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH4Triangle4iMBIntersector8HybridMoeller)); + IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH4Triangle4vMBIntersector8HybridPluecker)); + IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH4Triangle4iMBIntersector8HybridPluecker)); - IF_ENABLED_QUADS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH4Quad4vIntersector8HybridMoeller)); - IF_ENABLED_QUADS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH4Quad4vIntersector8HybridMoellerNoFilter)); - IF_ENABLED_QUADS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH4Quad4iIntersector8HybridMoeller)); - IF_ENABLED_QUADS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH4Quad4vIntersector8HybridPluecker)); - IF_ENABLED_QUADS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH4Quad4iIntersector8HybridPluecker)); + IF_ENABLED_QUADS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH4Quad4vIntersector8HybridMoeller)); + IF_ENABLED_QUADS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH4Quad4vIntersector8HybridMoellerNoFilter)); + IF_ENABLED_QUADS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH4Quad4iIntersector8HybridMoeller)); + IF_ENABLED_QUADS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH4Quad4vIntersector8HybridPluecker)); + IF_ENABLED_QUADS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH4Quad4iIntersector8HybridPluecker)); - IF_ENABLED_QUADS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH4Quad4iMBIntersector8HybridMoeller)); - IF_ENABLED_QUADS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH4Quad4iMBIntersector8HybridPluecker)); + IF_ENABLED_QUADS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH4Quad4iMBIntersector8HybridMoeller)); + IF_ENABLED_QUADS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH4Quad4iMBIntersector8HybridPluecker)); - IF_ENABLED_SUBDIV(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH4SubdivPatch1Intersector8)); - IF_ENABLED_SUBDIV(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH4SubdivPatch1MBIntersector8)); + IF_ENABLED_SUBDIV(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH4SubdivPatch1Intersector8)); + IF_ENABLED_SUBDIV(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH4SubdivPatch1MBIntersector8)); - IF_ENABLED_USER(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH4VirtualIntersector8Chunk)); - IF_ENABLED_USER(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH4VirtualMBIntersector8Chunk)); + IF_ENABLED_USER(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH4VirtualIntersector8Chunk)); + IF_ENABLED_USER(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH4VirtualMBIntersector8Chunk)); - IF_ENABLED_INSTANCE(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH4InstanceIntersector8Chunk)); - IF_ENABLED_INSTANCE(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH4InstanceMBIntersector8Chunk)); + IF_ENABLED_INSTANCE(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH4InstanceIntersector8Chunk)); + IF_ENABLED_INSTANCE(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH4InstanceMBIntersector8Chunk)); - IF_ENABLED_INSTANCE_ARRAY(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH4InstanceArrayIntersector8Chunk)); - IF_ENABLED_INSTANCE_ARRAY(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH4InstanceArrayMBIntersector8Chunk)); + IF_ENABLED_INSTANCE_ARRAY(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH4InstanceArrayIntersector8Chunk)); + IF_ENABLED_INSTANCE_ARRAY(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH4InstanceArrayMBIntersector8Chunk)); - IF_ENABLED_GRIDS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH4GridIntersector8HybridMoeller)); - IF_ENABLED_GRIDS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH4GridMBIntersector8HybridMoeller)); - IF_ENABLED_GRIDS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH4GridIntersector8HybridPluecker)); + IF_ENABLED_GRIDS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH4GridIntersector8HybridMoeller)); + IF_ENABLED_GRIDS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH4GridMBIntersector8HybridMoeller)); + IF_ENABLED_GRIDS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH4GridIntersector8HybridPluecker)); /* select intersectors16 */ - IF_ENABLED_CURVES_OR_POINTS(SELECT_SYMBOL_INIT_AVX512(features,BVH4OBBVirtualCurveIntersector16Hybrid)); - IF_ENABLED_CURVES_OR_POINTS(SELECT_SYMBOL_INIT_AVX512(features,BVH4OBBVirtualCurveIntersector16HybridMB)); - IF_ENABLED_CURVES_OR_POINTS(SELECT_SYMBOL_INIT_AVX512(features,BVH4OBBVirtualCurveIntersectorRobust16Hybrid)); - IF_ENABLED_CURVES_OR_POINTS(SELECT_SYMBOL_INIT_AVX512(features,BVH4OBBVirtualCurveIntersectorRobust16HybridMB)); - - IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX512(features,BVH4Triangle4Intersector16HybridMoeller)); - IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX512(features,BVH4Triangle4Intersector16HybridMoellerNoFilter)); - IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX512(features,BVH4Triangle4iIntersector16HybridMoeller)); - IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX512(features,BVH4Triangle4vIntersector16HybridPluecker)); - IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX512(features,BVH4Triangle4iIntersector16HybridPluecker)); - - IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX512(features,BVH4Triangle4vMBIntersector16HybridMoeller)); - IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX512(features,BVH4Triangle4iMBIntersector16HybridMoeller)); - IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX512(features,BVH4Triangle4vMBIntersector16HybridPluecker)); - IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX512(features,BVH4Triangle4iMBIntersector16HybridPluecker)); - - IF_ENABLED_QUADS(SELECT_SYMBOL_INIT_AVX512(features,BVH4Quad4vIntersector16HybridMoeller)); - IF_ENABLED_QUADS(SELECT_SYMBOL_INIT_AVX512(features,BVH4Quad4vIntersector16HybridMoellerNoFilter)); - IF_ENABLED_QUADS(SELECT_SYMBOL_INIT_AVX512(features,BVH4Quad4iIntersector16HybridMoeller)); - IF_ENABLED_QUADS(SELECT_SYMBOL_INIT_AVX512(features,BVH4Quad4vIntersector16HybridPluecker)); - IF_ENABLED_QUADS(SELECT_SYMBOL_INIT_AVX512(features,BVH4Quad4iIntersector16HybridPluecker)); - - IF_ENABLED_QUADS(SELECT_SYMBOL_INIT_AVX512(features,BVH4Quad4iMBIntersector16HybridMoeller)); - IF_ENABLED_QUADS(SELECT_SYMBOL_INIT_AVX512(features,BVH4Quad4iMBIntersector16HybridPluecker)); - - IF_ENABLED_SUBDIV(SELECT_SYMBOL_INIT_AVX512(features,BVH4SubdivPatch1Intersector16)); - IF_ENABLED_SUBDIV(SELECT_SYMBOL_INIT_AVX512(features,BVH4SubdivPatch1MBIntersector16)); + IF_ENABLED_CURVES_OR_POINTS(SELECT_SYMBOL_INIT_AVX512_AVX10_1_AVX10_2_APX(features,BVH4OBBVirtualCurveIntersector16Hybrid)); + IF_ENABLED_CURVES_OR_POINTS(SELECT_SYMBOL_INIT_AVX512_AVX10_1_AVX10_2_APX(features,BVH4OBBVirtualCurveIntersector16HybridMB)); + IF_ENABLED_CURVES_OR_POINTS(SELECT_SYMBOL_INIT_AVX512_AVX10_1_AVX10_2_APX(features,BVH4OBBVirtualCurveIntersectorRobust16Hybrid)); + IF_ENABLED_CURVES_OR_POINTS(SELECT_SYMBOL_INIT_AVX512_AVX10_1_AVX10_2_APX(features,BVH4OBBVirtualCurveIntersectorRobust16HybridMB)); + + IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX512_AVX10_1_AVX10_2_APX(features,BVH4Triangle4Intersector16HybridMoeller)); + IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX512_AVX10_1_AVX10_2_APX(features,BVH4Triangle4Intersector16HybridMoellerNoFilter)); + IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX512_AVX10_1_AVX10_2_APX(features,BVH4Triangle4iIntersector16HybridMoeller)); + IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX512_AVX10_1_AVX10_2_APX(features,BVH4Triangle4vIntersector16HybridPluecker)); + IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX512_AVX10_1_AVX10_2_APX(features,BVH4Triangle4iIntersector16HybridPluecker)); + + IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX512_AVX10_1_AVX10_2_APX(features,BVH4Triangle4vMBIntersector16HybridMoeller)); + IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX512_AVX10_1_AVX10_2_APX(features,BVH4Triangle4iMBIntersector16HybridMoeller)); + IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX512_AVX10_1_AVX10_2_APX(features,BVH4Triangle4vMBIntersector16HybridPluecker)); + IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX512_AVX10_1_AVX10_2_APX(features,BVH4Triangle4iMBIntersector16HybridPluecker)); + + IF_ENABLED_QUADS(SELECT_SYMBOL_INIT_AVX512_AVX10_1_AVX10_2_APX(features,BVH4Quad4vIntersector16HybridMoeller)); + IF_ENABLED_QUADS(SELECT_SYMBOL_INIT_AVX512_AVX10_1_AVX10_2_APX(features,BVH4Quad4vIntersector16HybridMoellerNoFilter)); + IF_ENABLED_QUADS(SELECT_SYMBOL_INIT_AVX512_AVX10_1_AVX10_2_APX(features,BVH4Quad4iIntersector16HybridMoeller)); + IF_ENABLED_QUADS(SELECT_SYMBOL_INIT_AVX512_AVX10_1_AVX10_2_APX(features,BVH4Quad4vIntersector16HybridPluecker)); + IF_ENABLED_QUADS(SELECT_SYMBOL_INIT_AVX512_AVX10_1_AVX10_2_APX(features,BVH4Quad4iIntersector16HybridPluecker)); + + IF_ENABLED_QUADS(SELECT_SYMBOL_INIT_AVX512_AVX10_1_AVX10_2_APX(features,BVH4Quad4iMBIntersector16HybridMoeller)); + IF_ENABLED_QUADS(SELECT_SYMBOL_INIT_AVX512_AVX10_1_AVX10_2_APX(features,BVH4Quad4iMBIntersector16HybridPluecker)); + + IF_ENABLED_SUBDIV(SELECT_SYMBOL_INIT_AVX512_AVX10_1_AVX10_2_APX(features,BVH4SubdivPatch1Intersector16)); + IF_ENABLED_SUBDIV(SELECT_SYMBOL_INIT_AVX512_AVX10_1_AVX10_2_APX(features,BVH4SubdivPatch1MBIntersector16)); - IF_ENABLED_USER(SELECT_SYMBOL_INIT_AVX512(features,BVH4VirtualIntersector16Chunk)); - IF_ENABLED_USER(SELECT_SYMBOL_INIT_AVX512(features,BVH4VirtualMBIntersector16Chunk)); + IF_ENABLED_USER(SELECT_SYMBOL_INIT_AVX512_AVX10_1_AVX10_2_APX(features,BVH4VirtualIntersector16Chunk)); + IF_ENABLED_USER(SELECT_SYMBOL_INIT_AVX512_AVX10_1_AVX10_2_APX(features,BVH4VirtualMBIntersector16Chunk)); - IF_ENABLED_INSTANCE(SELECT_SYMBOL_INIT_AVX512(features,BVH4InstanceIntersector16Chunk)); - IF_ENABLED_INSTANCE(SELECT_SYMBOL_INIT_AVX512(features,BVH4InstanceMBIntersector16Chunk)); + IF_ENABLED_INSTANCE(SELECT_SYMBOL_INIT_AVX512_AVX10_1_AVX10_2_APX(features,BVH4InstanceIntersector16Chunk)); + IF_ENABLED_INSTANCE(SELECT_SYMBOL_INIT_AVX512_AVX10_1_AVX10_2_APX(features,BVH4InstanceMBIntersector16Chunk)); - IF_ENABLED_INSTANCE_ARRAY(SELECT_SYMBOL_INIT_AVX512(features,BVH4InstanceArrayIntersector16Chunk)); - IF_ENABLED_INSTANCE_ARRAY(SELECT_SYMBOL_INIT_AVX512(features,BVH4InstanceArrayMBIntersector16Chunk)); + IF_ENABLED_INSTANCE_ARRAY(SELECT_SYMBOL_INIT_AVX512_AVX10_1_AVX10_2_APX(features,BVH4InstanceArrayIntersector16Chunk)); + IF_ENABLED_INSTANCE_ARRAY(SELECT_SYMBOL_INIT_AVX512_AVX10_1_AVX10_2_APX(features,BVH4InstanceArrayMBIntersector16Chunk)); - IF_ENABLED_GRIDS(SELECT_SYMBOL_INIT_AVX512(features,BVH4GridIntersector16HybridMoeller)); - IF_ENABLED_GRIDS(SELECT_SYMBOL_INIT_AVX512(features,BVH4GridMBIntersector16HybridMoeller)); - IF_ENABLED_GRIDS(SELECT_SYMBOL_INIT_AVX512(features,BVH4GridIntersector16HybridPluecker)); + IF_ENABLED_GRIDS(SELECT_SYMBOL_INIT_AVX512_AVX10_1_AVX10_2_APX(features,BVH4GridIntersector16HybridMoeller)); + IF_ENABLED_GRIDS(SELECT_SYMBOL_INIT_AVX512_AVX10_1_AVX10_2_APX(features,BVH4GridMBIntersector16HybridMoeller)); + IF_ENABLED_GRIDS(SELECT_SYMBOL_INIT_AVX512_AVX10_1_AVX10_2_APX(features,BVH4GridIntersector16HybridPluecker)); #endif } diff --git a/kernels/bvh/bvh8_factory.cpp b/kernels/bvh/bvh8_factory.cpp index 3583bd5cea..dd8eff405a 100644 --- a/kernels/bvh/bvh8_factory.cpp +++ b/kernels/bvh/bvh8_factory.cpp @@ -277,167 +277,167 @@ namespace embree void BVH8Factory::selectIntersectors(int64_t features) { - IF_ENABLED_CURVES_OR_POINTS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,VirtualCurveIntersector8v)); - IF_ENABLED_CURVES_OR_POINTS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,VirtualCurveIntersector8iMB)); + IF_ENABLED_CURVES_OR_POINTS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,VirtualCurveIntersector8v)); + IF_ENABLED_CURVES_OR_POINTS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,VirtualCurveIntersector8iMB)); /* select intersectors1 */ - IF_ENABLED_CURVES_OR_POINTS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH8OBBVirtualCurveIntersector1)); - IF_ENABLED_CURVES_OR_POINTS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH8OBBVirtualCurveIntersector1MB)); - IF_ENABLED_CURVES_OR_POINTS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH8OBBVirtualCurveIntersectorRobust1)); - IF_ENABLED_CURVES_OR_POINTS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH8OBBVirtualCurveIntersectorRobust1MB)); + IF_ENABLED_CURVES_OR_POINTS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH8OBBVirtualCurveIntersector1)); + IF_ENABLED_CURVES_OR_POINTS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH8OBBVirtualCurveIntersector1MB)); + IF_ENABLED_CURVES_OR_POINTS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH8OBBVirtualCurveIntersectorRobust1)); + IF_ENABLED_CURVES_OR_POINTS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH8OBBVirtualCurveIntersectorRobust1MB)); - IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH8Triangle4Intersector1Moeller)); - IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH8Triangle4iIntersector1Moeller)); - IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH8Triangle4vIntersector1Pluecker)); - IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH8Triangle4iIntersector1Pluecker)); + IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH8Triangle4Intersector1Moeller)); + IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH8Triangle4iIntersector1Moeller)); + IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH8Triangle4vIntersector1Pluecker)); + IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH8Triangle4iIntersector1Pluecker)); - IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH8Triangle4vIntersector1Woop)); + IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH8Triangle4vIntersector1Woop)); - IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH8Triangle4vMBIntersector1Moeller)); - IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH8Triangle4iMBIntersector1Moeller)); - IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH8Triangle4vMBIntersector1Pluecker)); - IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH8Triangle4iMBIntersector1Pluecker)); + IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH8Triangle4vMBIntersector1Moeller)); + IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH8Triangle4iMBIntersector1Moeller)); + IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH8Triangle4vMBIntersector1Pluecker)); + IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH8Triangle4iMBIntersector1Pluecker)); - IF_ENABLED_QUADS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH8Quad4vIntersector1Moeller)); - IF_ENABLED_QUADS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH8Quad4iIntersector1Moeller)); - IF_ENABLED_QUADS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH8Quad4vIntersector1Pluecker)); - IF_ENABLED_QUADS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH8Quad4iIntersector1Pluecker)); + IF_ENABLED_QUADS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH8Quad4vIntersector1Moeller)); + IF_ENABLED_QUADS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH8Quad4iIntersector1Moeller)); + IF_ENABLED_QUADS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH8Quad4vIntersector1Pluecker)); + IF_ENABLED_QUADS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH8Quad4iIntersector1Pluecker)); - IF_ENABLED_QUADS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH8Quad4iMBIntersector1Moeller)); - IF_ENABLED_QUADS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH8Quad4iMBIntersector1Pluecker)); + IF_ENABLED_QUADS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH8Quad4iMBIntersector1Moeller)); + IF_ENABLED_QUADS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH8Quad4iMBIntersector1Pluecker)); - IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,QBVH8Triangle4iIntersector1Pluecker)); - IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,QBVH8Triangle4Intersector1Moeller)); - IF_ENABLED_QUADS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,QBVH8Quad4iIntersector1Pluecker)); + IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,QBVH8Triangle4iIntersector1Pluecker)); + IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,QBVH8Triangle4Intersector1Moeller)); + IF_ENABLED_QUADS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,QBVH8Quad4iIntersector1Pluecker)); - IF_ENABLED_USER(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH8VirtualIntersector1)); - IF_ENABLED_USER(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH8VirtualMBIntersector1)); + IF_ENABLED_USER(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH8VirtualIntersector1)); + IF_ENABLED_USER(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH8VirtualMBIntersector1)); - IF_ENABLED_INSTANCE(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH8InstanceIntersector1)); - IF_ENABLED_INSTANCE(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH8InstanceMBIntersector1)); + IF_ENABLED_INSTANCE(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH8InstanceIntersector1)); + IF_ENABLED_INSTANCE(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH8InstanceMBIntersector1)); - IF_ENABLED_INSTANCE_ARRAY(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH8InstanceArrayIntersector1)); - IF_ENABLED_INSTANCE_ARRAY(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH8InstanceArrayMBIntersector1)); + IF_ENABLED_INSTANCE_ARRAY(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH8InstanceArrayIntersector1)); + IF_ENABLED_INSTANCE_ARRAY(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH8InstanceArrayMBIntersector1)); - IF_ENABLED_GRIDS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH8GridIntersector1Moeller)); - IF_ENABLED_GRIDS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH8GridMBIntersector1Moeller)) - IF_ENABLED_GRIDS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH8GridIntersector1Pluecker)); + IF_ENABLED_GRIDS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH8GridIntersector1Moeller)); + IF_ENABLED_GRIDS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH8GridMBIntersector1Moeller)) + IF_ENABLED_GRIDS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH8GridIntersector1Pluecker)); #if defined (EMBREE_RAY_PACKETS) /* select intersectors4 */ - IF_ENABLED_CURVES_OR_POINTS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH8OBBVirtualCurveIntersector4Hybrid)); - IF_ENABLED_CURVES_OR_POINTS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH8OBBVirtualCurveIntersector4HybridMB)); - IF_ENABLED_CURVES_OR_POINTS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH8OBBVirtualCurveIntersectorRobust4Hybrid)); - IF_ENABLED_CURVES_OR_POINTS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH8OBBVirtualCurveIntersectorRobust4HybridMB)); - - IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH8Triangle4Intersector4HybridMoeller)); - IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH8Triangle4Intersector4HybridMoellerNoFilter)); - IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH8Triangle4iIntersector4HybridMoeller)); - IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH8Triangle4vIntersector4HybridPluecker)); - IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH8Triangle4iIntersector4HybridPluecker)); - - IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH8Triangle4vMBIntersector4HybridMoeller)); - IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH8Triangle4iMBIntersector4HybridMoeller)); - IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH8Triangle4vMBIntersector4HybridPluecker)); - IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH8Triangle4iMBIntersector4HybridPluecker)); - - IF_ENABLED_QUADS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH8Quad4vIntersector4HybridMoeller)); - IF_ENABLED_QUADS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH8Quad4vIntersector4HybridMoellerNoFilter)); - IF_ENABLED_QUADS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH8Quad4iIntersector4HybridMoeller)); - IF_ENABLED_QUADS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH8Quad4vIntersector4HybridPluecker)); - IF_ENABLED_QUADS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH8Quad4iIntersector4HybridPluecker)); + IF_ENABLED_CURVES_OR_POINTS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH8OBBVirtualCurveIntersector4Hybrid)); + IF_ENABLED_CURVES_OR_POINTS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH8OBBVirtualCurveIntersector4HybridMB)); + IF_ENABLED_CURVES_OR_POINTS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH8OBBVirtualCurveIntersectorRobust4Hybrid)); + IF_ENABLED_CURVES_OR_POINTS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH8OBBVirtualCurveIntersectorRobust4HybridMB)); + + IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH8Triangle4Intersector4HybridMoeller)); + IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH8Triangle4Intersector4HybridMoellerNoFilter)); + IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH8Triangle4iIntersector4HybridMoeller)); + IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH8Triangle4vIntersector4HybridPluecker)); + IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH8Triangle4iIntersector4HybridPluecker)); + + IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH8Triangle4vMBIntersector4HybridMoeller)); + IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH8Triangle4iMBIntersector4HybridMoeller)); + IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH8Triangle4vMBIntersector4HybridPluecker)); + IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH8Triangle4iMBIntersector4HybridPluecker)); + + IF_ENABLED_QUADS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH8Quad4vIntersector4HybridMoeller)); + IF_ENABLED_QUADS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH8Quad4vIntersector4HybridMoellerNoFilter)); + IF_ENABLED_QUADS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH8Quad4iIntersector4HybridMoeller)); + IF_ENABLED_QUADS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH8Quad4vIntersector4HybridPluecker)); + IF_ENABLED_QUADS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH8Quad4iIntersector4HybridPluecker)); IF_ENABLED_QUADS(SELECT_SYMBOL_INIT_AVX_AVX2(features,BVH8Quad4iMBIntersector4HybridMoeller)); IF_ENABLED_QUADS(SELECT_SYMBOL_INIT_AVX_AVX2(features,BVH8Quad4iMBIntersector4HybridPluecker)); - IF_ENABLED_USER(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH8VirtualIntersector4Chunk)); - IF_ENABLED_USER(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH8VirtualMBIntersector4Chunk)); + IF_ENABLED_USER(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH8VirtualIntersector4Chunk)); + IF_ENABLED_USER(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH8VirtualMBIntersector4Chunk)); - IF_ENABLED_INSTANCE(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH8InstanceIntersector4Chunk)); - IF_ENABLED_INSTANCE(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH8InstanceMBIntersector4Chunk)); + IF_ENABLED_INSTANCE(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH8InstanceIntersector4Chunk)); + IF_ENABLED_INSTANCE(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH8InstanceMBIntersector4Chunk)); - IF_ENABLED_INSTANCE_ARRAY(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH8InstanceArrayIntersector4Chunk)); - IF_ENABLED_INSTANCE_ARRAY(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH8InstanceArrayMBIntersector4Chunk)); + IF_ENABLED_INSTANCE_ARRAY(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH8InstanceArrayIntersector4Chunk)); + IF_ENABLED_INSTANCE_ARRAY(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH8InstanceArrayMBIntersector4Chunk)); - IF_ENABLED_GRIDS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH8GridIntersector4HybridMoeller)); - IF_ENABLED_GRIDS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH8GridIntersector4HybridPluecker)); + IF_ENABLED_GRIDS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH8GridIntersector4HybridMoeller)); + IF_ENABLED_GRIDS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH8GridIntersector4HybridPluecker)); /* select intersectors8 */ - IF_ENABLED_CURVES_OR_POINTS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH8OBBVirtualCurveIntersector8Hybrid)); - IF_ENABLED_CURVES_OR_POINTS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH8OBBVirtualCurveIntersector8HybridMB)); - IF_ENABLED_CURVES_OR_POINTS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH8OBBVirtualCurveIntersectorRobust8Hybrid)); - IF_ENABLED_CURVES_OR_POINTS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH8OBBVirtualCurveIntersectorRobust8HybridMB)); - - IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH8Triangle4Intersector8HybridMoeller)); - IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH8Triangle4Intersector8HybridMoellerNoFilter)); - IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH8Triangle4iIntersector8HybridMoeller)); - IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH8Triangle4vIntersector8HybridPluecker)); - IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH8Triangle4iIntersector8HybridPluecker)); - - IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH8Triangle4vMBIntersector8HybridMoeller)); - IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH8Triangle4iMBIntersector8HybridMoeller)); - IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH8Triangle4vMBIntersector8HybridPluecker)); - IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH8Triangle4iMBIntersector8HybridPluecker)); - - IF_ENABLED_QUADS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH8Quad4vIntersector8HybridMoeller)); - IF_ENABLED_QUADS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH8Quad4vIntersector8HybridMoellerNoFilter)); - IF_ENABLED_QUADS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH8Quad4iIntersector8HybridMoeller)); - IF_ENABLED_QUADS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH8Quad4vIntersector8HybridPluecker)); - IF_ENABLED_QUADS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH8Quad4iIntersector8HybridPluecker)); + IF_ENABLED_CURVES_OR_POINTS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH8OBBVirtualCurveIntersector8Hybrid)); + IF_ENABLED_CURVES_OR_POINTS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH8OBBVirtualCurveIntersector8HybridMB)); + IF_ENABLED_CURVES_OR_POINTS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH8OBBVirtualCurveIntersectorRobust8Hybrid)); + IF_ENABLED_CURVES_OR_POINTS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH8OBBVirtualCurveIntersectorRobust8HybridMB)); + + IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH8Triangle4Intersector8HybridMoeller)); + IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH8Triangle4Intersector8HybridMoellerNoFilter)); + IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH8Triangle4iIntersector8HybridMoeller)); + IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH8Triangle4vIntersector8HybridPluecker)); + IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH8Triangle4iIntersector8HybridPluecker)); + + IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH8Triangle4vMBIntersector8HybridMoeller)); + IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH8Triangle4iMBIntersector8HybridMoeller)); + IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH8Triangle4vMBIntersector8HybridPluecker)); + IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH8Triangle4iMBIntersector8HybridPluecker)); + + IF_ENABLED_QUADS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH8Quad4vIntersector8HybridMoeller)); + IF_ENABLED_QUADS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH8Quad4vIntersector8HybridMoellerNoFilter)); + IF_ENABLED_QUADS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH8Quad4iIntersector8HybridMoeller)); + IF_ENABLED_QUADS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH8Quad4vIntersector8HybridPluecker)); + IF_ENABLED_QUADS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH8Quad4iIntersector8HybridPluecker)); IF_ENABLED_QUADS(SELECT_SYMBOL_INIT_AVX_AVX2(features,BVH8Quad4iMBIntersector8HybridMoeller)); IF_ENABLED_QUADS(SELECT_SYMBOL_INIT_AVX_AVX2(features,BVH8Quad4iMBIntersector8HybridPluecker)); - IF_ENABLED_USER(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH8VirtualIntersector8Chunk)); - IF_ENABLED_USER(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH8VirtualMBIntersector8Chunk)); + IF_ENABLED_USER(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH8VirtualIntersector8Chunk)); + IF_ENABLED_USER(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH8VirtualMBIntersector8Chunk)); - IF_ENABLED_INSTANCE(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH8InstanceIntersector8Chunk)); - IF_ENABLED_INSTANCE(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH8InstanceMBIntersector8Chunk)); + IF_ENABLED_INSTANCE(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH8InstanceIntersector8Chunk)); + IF_ENABLED_INSTANCE(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH8InstanceMBIntersector8Chunk)); - IF_ENABLED_INSTANCE_ARRAY(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH8InstanceArrayIntersector8Chunk)); - IF_ENABLED_INSTANCE_ARRAY(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH8InstanceArrayMBIntersector8Chunk)); + IF_ENABLED_INSTANCE_ARRAY(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH8InstanceArrayIntersector8Chunk)); + IF_ENABLED_INSTANCE_ARRAY(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH8InstanceArrayMBIntersector8Chunk)); - IF_ENABLED_GRIDS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH8GridIntersector8HybridMoeller)); - IF_ENABLED_GRIDS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH8GridIntersector8HybridPluecker)); + IF_ENABLED_GRIDS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH8GridIntersector8HybridMoeller)); + IF_ENABLED_GRIDS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,BVH8GridIntersector8HybridPluecker)); /* select intersectors16 */ - IF_ENABLED_CURVES_OR_POINTS(SELECT_SYMBOL_INIT_AVX512(features,BVH8OBBVirtualCurveIntersector16Hybrid)); - IF_ENABLED_CURVES_OR_POINTS(SELECT_SYMBOL_INIT_AVX512(features,BVH8OBBVirtualCurveIntersector16HybridMB)); - IF_ENABLED_CURVES_OR_POINTS(SELECT_SYMBOL_INIT_AVX512(features,BVH8OBBVirtualCurveIntersectorRobust16Hybrid)); - IF_ENABLED_CURVES_OR_POINTS(SELECT_SYMBOL_INIT_AVX512(features,BVH8OBBVirtualCurveIntersectorRobust16HybridMB)); - - IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX512(features,BVH8Triangle4Intersector16HybridMoeller)); - IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX512(features,BVH8Triangle4Intersector16HybridMoellerNoFilter)); - IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX512(features,BVH8Triangle4iIntersector16HybridMoeller)); - IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX512(features,BVH8Triangle4vIntersector16HybridPluecker)); - IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX512(features,BVH8Triangle4iIntersector16HybridPluecker)); - - IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX512(features,BVH8Triangle4vMBIntersector16HybridMoeller)); - IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX512(features,BVH8Triangle4iMBIntersector16HybridMoeller)); - IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX512(features,BVH8Triangle4vMBIntersector16HybridPluecker)); - IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX512(features,BVH8Triangle4iMBIntersector16HybridPluecker)); - - IF_ENABLED_QUADS(SELECT_SYMBOL_INIT_AVX512(features,BVH8Quad4vIntersector16HybridMoeller)); - IF_ENABLED_QUADS(SELECT_SYMBOL_INIT_AVX512(features,BVH8Quad4vIntersector16HybridMoellerNoFilter)); - IF_ENABLED_QUADS(SELECT_SYMBOL_INIT_AVX512(features,BVH8Quad4iIntersector16HybridMoeller)); - IF_ENABLED_QUADS(SELECT_SYMBOL_INIT_AVX512(features,BVH8Quad4vIntersector16HybridPluecker)); - IF_ENABLED_QUADS(SELECT_SYMBOL_INIT_AVX512(features,BVH8Quad4iIntersector16HybridPluecker)); - - IF_ENABLED_QUADS(SELECT_SYMBOL_INIT_AVX512(features,BVH8Quad4iMBIntersector16HybridMoeller)); - IF_ENABLED_QUADS(SELECT_SYMBOL_INIT_AVX512(features,BVH8Quad4iMBIntersector16HybridPluecker)); - - IF_ENABLED_USER(SELECT_SYMBOL_INIT_AVX512(features,BVH8VirtualIntersector16Chunk)); - IF_ENABLED_USER(SELECT_SYMBOL_INIT_AVX512(features,BVH8VirtualMBIntersector16Chunk)); - - IF_ENABLED_INSTANCE(SELECT_SYMBOL_INIT_AVX512(features,BVH8InstanceIntersector16Chunk)); - IF_ENABLED_INSTANCE(SELECT_SYMBOL_INIT_AVX512(features,BVH8InstanceMBIntersector16Chunk)); - - IF_ENABLED_INSTANCE_ARRAY(SELECT_SYMBOL_INIT_AVX512(features,BVH8InstanceArrayIntersector16Chunk)); - IF_ENABLED_INSTANCE_ARRAY(SELECT_SYMBOL_INIT_AVX512(features,BVH8InstanceArrayMBIntersector16Chunk)); - - IF_ENABLED_GRIDS(SELECT_SYMBOL_INIT_AVX512(features,BVH8GridIntersector16HybridMoeller)); - IF_ENABLED_GRIDS(SELECT_SYMBOL_INIT_AVX512(features,BVH8GridIntersector16HybridPluecker)); + IF_ENABLED_CURVES_OR_POINTS(SELECT_SYMBOL_INIT_AVX512_AVX10_1_AVX10_2_APX(features,BVH8OBBVirtualCurveIntersector16Hybrid)); + IF_ENABLED_CURVES_OR_POINTS(SELECT_SYMBOL_INIT_AVX512_AVX10_1_AVX10_2_APX(features,BVH8OBBVirtualCurveIntersector16HybridMB)); + IF_ENABLED_CURVES_OR_POINTS(SELECT_SYMBOL_INIT_AVX512_AVX10_1_AVX10_2_APX(features,BVH8OBBVirtualCurveIntersectorRobust16Hybrid)); + IF_ENABLED_CURVES_OR_POINTS(SELECT_SYMBOL_INIT_AVX512_AVX10_1_AVX10_2_APX(features,BVH8OBBVirtualCurveIntersectorRobust16HybridMB)); + + IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX512_AVX10_1_AVX10_2_APX(features,BVH8Triangle4Intersector16HybridMoeller)); + IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX512_AVX10_1_AVX10_2_APX(features,BVH8Triangle4Intersector16HybridMoellerNoFilter)); + IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX512_AVX10_1_AVX10_2_APX(features,BVH8Triangle4iIntersector16HybridMoeller)); + IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX512_AVX10_1_AVX10_2_APX(features,BVH8Triangle4vIntersector16HybridPluecker)); + IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX512_AVX10_1_AVX10_2_APX(features,BVH8Triangle4iIntersector16HybridPluecker)); + + IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX512_AVX10_1_AVX10_2_APX(features,BVH8Triangle4vMBIntersector16HybridMoeller)); + IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX512_AVX10_1_AVX10_2_APX(features,BVH8Triangle4iMBIntersector16HybridMoeller)); + IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX512_AVX10_1_AVX10_2_APX(features,BVH8Triangle4vMBIntersector16HybridPluecker)); + IF_ENABLED_TRIS(SELECT_SYMBOL_INIT_AVX512_AVX10_1_AVX10_2_APX(features,BVH8Triangle4iMBIntersector16HybridPluecker)); + + IF_ENABLED_QUADS(SELECT_SYMBOL_INIT_AVX512_AVX10_1_AVX10_2_APX(features,BVH8Quad4vIntersector16HybridMoeller)); + IF_ENABLED_QUADS(SELECT_SYMBOL_INIT_AVX512_AVX10_1_AVX10_2_APX(features,BVH8Quad4vIntersector16HybridMoellerNoFilter)); + IF_ENABLED_QUADS(SELECT_SYMBOL_INIT_AVX512_AVX10_1_AVX10_2_APX(features,BVH8Quad4iIntersector16HybridMoeller)); + IF_ENABLED_QUADS(SELECT_SYMBOL_INIT_AVX512_AVX10_1_AVX10_2_APX(features,BVH8Quad4vIntersector16HybridPluecker)); + IF_ENABLED_QUADS(SELECT_SYMBOL_INIT_AVX512_AVX10_1_AVX10_2_APX(features,BVH8Quad4iIntersector16HybridPluecker)); + + IF_ENABLED_QUADS(SELECT_SYMBOL_INIT_AVX512_AVX10_1_AVX10_2_APX(features,BVH8Quad4iMBIntersector16HybridMoeller)); + IF_ENABLED_QUADS(SELECT_SYMBOL_INIT_AVX512_AVX10_1_AVX10_2_APX(features,BVH8Quad4iMBIntersector16HybridPluecker)); + + IF_ENABLED_USER(SELECT_SYMBOL_INIT_AVX512_AVX10_1_AVX10_2_APX(features,BVH8VirtualIntersector16Chunk)); + IF_ENABLED_USER(SELECT_SYMBOL_INIT_AVX512_AVX10_1_AVX10_2_APX(features,BVH8VirtualMBIntersector16Chunk)); + + IF_ENABLED_INSTANCE(SELECT_SYMBOL_INIT_AVX512_AVX10_1_AVX10_2_APX(features,BVH8InstanceIntersector16Chunk)); + IF_ENABLED_INSTANCE(SELECT_SYMBOL_INIT_AVX512_AVX10_1_AVX10_2_APX(features,BVH8InstanceMBIntersector16Chunk)); + + IF_ENABLED_INSTANCE_ARRAY(SELECT_SYMBOL_INIT_AVX512_AVX10_1_AVX10_2_APX(features,BVH8InstanceArrayIntersector16Chunk)); + IF_ENABLED_INSTANCE_ARRAY(SELECT_SYMBOL_INIT_AVX512_AVX10_1_AVX10_2_APX(features,BVH8InstanceArrayMBIntersector16Chunk)); + + IF_ENABLED_GRIDS(SELECT_SYMBOL_INIT_AVX512_AVX10_1_AVX10_2_APX(features,BVH8GridIntersector16HybridMoeller)); + IF_ENABLED_GRIDS(SELECT_SYMBOL_INIT_AVX512_AVX10_1_AVX10_2_APX(features,BVH8GridIntersector16HybridPluecker)); #endif } diff --git a/kernels/common/isa.h b/kernels/common/isa.h index 323c770da4..251d242a0d 100644 --- a/kernels/common/isa.h +++ b/kernels/common/isa.h @@ -129,107 +129,195 @@ namespace embree #endif +// Macro expansion helpers: define ISA combo macros from ISA lists. +// Usage: ISA_EXPAND_N(features,intersector, ISA1, ISA2, ..., ISAN) +// Example: ISA_EXPAND_3(f,i, DEFAULT, SSE42, AVX) expands to: +// SELECT_SYMBOL_DEFAULT(f,i); SELECT_SYMBOL_SSE42(f,i); SELECT_SYMBOL_AVX(f,i); +#define ISA_EXPAND_2(f,i, A,B) \ + SELECT_SYMBOL_##A(f,i); SELECT_SYMBOL_##B(f,i) +#define ISA_EXPAND_3(f,i, A,B,C) \ + SELECT_SYMBOL_##A(f,i); SELECT_SYMBOL_##B(f,i); SELECT_SYMBOL_##C(f,i) +#define ISA_EXPAND_4(f,i, A,B,C,D) \ + SELECT_SYMBOL_##A(f,i); SELECT_SYMBOL_##B(f,i); SELECT_SYMBOL_##C(f,i); SELECT_SYMBOL_##D(f,i) +#define ISA_EXPAND_5(f,i, A,B,C,D,E) \ + SELECT_SYMBOL_##A(f,i); SELECT_SYMBOL_##B(f,i); SELECT_SYMBOL_##C(f,i); SELECT_SYMBOL_##D(f,i); SELECT_SYMBOL_##E(f,i) +#define ISA_EXPAND_6(f,i, A,B,C,D,E,F) \ + SELECT_SYMBOL_##A(f,i); SELECT_SYMBOL_##B(f,i); SELECT_SYMBOL_##C(f,i); SELECT_SYMBOL_##D(f,i); SELECT_SYMBOL_##E(f,i); SELECT_SYMBOL_##F(f,i) +#define ISA_EXPAND_7(f,i, A,B,C,D,E,F,G) \ + SELECT_SYMBOL_##A(f,i); SELECT_SYMBOL_##B(f,i); SELECT_SYMBOL_##C(f,i); SELECT_SYMBOL_##D(f,i); SELECT_SYMBOL_##E(f,i); SELECT_SYMBOL_##F(f,i); SELECT_SYMBOL_##G(f,i) +#define ISA_EXPAND_8(f,i, A,B,C,D,E,F,G,H) \ + SELECT_SYMBOL_##A(f,i); SELECT_SYMBOL_##B(f,i); SELECT_SYMBOL_##C(f,i); SELECT_SYMBOL_##D(f,i); SELECT_SYMBOL_##E(f,i); SELECT_SYMBOL_##F(f,i); SELECT_SYMBOL_##G(f,i); SELECT_SYMBOL_##H(f,i) + +// Helper for initializer-style macros (INIT_, ZERO_) +#define INIT_EXPAND_2(f,i, A,B) \ + INIT_SYMBOL(f,i); SELECT_SYMBOL_##A(f,i); SELECT_SYMBOL_##B(f,i) +#define INIT_EXPAND_3(f,i, A,B,C) \ + INIT_SYMBOL(f,i); SELECT_SYMBOL_##A(f,i); SELECT_SYMBOL_##B(f,i); SELECT_SYMBOL_##C(f,i) +#define INIT_EXPAND_4(f,i, A,B,C,D) \ + INIT_SYMBOL(f,i); SELECT_SYMBOL_##A(f,i); SELECT_SYMBOL_##B(f,i); SELECT_SYMBOL_##C(f,i); SELECT_SYMBOL_##D(f,i) +#define INIT_EXPAND_5(f,i, A,B,C,D,E) \ + INIT_SYMBOL(f,i); SELECT_SYMBOL_##A(f,i); SELECT_SYMBOL_##B(f,i); SELECT_SYMBOL_##C(f,i); SELECT_SYMBOL_##D(f,i); SELECT_SYMBOL_##E(f,i) +#define INIT_EXPAND_6(f,i, A,B,C,D,E,F) \ + INIT_SYMBOL(f,i); SELECT_SYMBOL_##A(f,i); SELECT_SYMBOL_##B(f,i); SELECT_SYMBOL_##C(f,i); SELECT_SYMBOL_##D(f,i); SELECT_SYMBOL_##E(f,i); SELECT_SYMBOL_##F(f,i) +#define INIT_EXPAND_7(f,i, A,B,C,D,E,F,G) \ + INIT_SYMBOL(f,i); SELECT_SYMBOL_##A(f,i); SELECT_SYMBOL_##B(f,i); SELECT_SYMBOL_##C(f,i); SELECT_SYMBOL_##D(f,i); SELECT_SYMBOL_##E(f,i); SELECT_SYMBOL_##F(f,i); SELECT_SYMBOL_##G(f,i) + +#define ZERO_EXPAND_5(f,i, A,B,C,D,E) \ + ZERO_SYMBOL(f,i); SELECT_SYMBOL_##A(f,i); SELECT_SYMBOL_##B(f,i); SELECT_SYMBOL_##C(f,i); SELECT_SYMBOL_##D(f,i); SELECT_SYMBOL_##E(f,i) + +// ISA combination macros (add new combos here by defining with ISA_EXPAND_N or INIT_EXPAND_N) #define SELECT_SYMBOL_DEFAULT_SSE42(features,intersector) \ - SELECT_SYMBOL_DEFAULT(features,intersector); \ - SELECT_SYMBOL_SSE42(features,intersector); - + ISA_EXPAND_2(features,intersector, DEFAULT,SSE42) #define SELECT_SYMBOL_DEFAULT_SSE42_AVX(features,intersector) \ - SELECT_SYMBOL_DEFAULT(features,intersector); \ - SELECT_SYMBOL_SSE42(features,intersector); \ - SELECT_SYMBOL_AVX(features,intersector); - + ISA_EXPAND_3(features,intersector, DEFAULT,SSE42,AVX) #define SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2(features,intersector) \ - SELECT_SYMBOL_DEFAULT(features,intersector); \ - SELECT_SYMBOL_SSE42(features,intersector); \ - SELECT_SYMBOL_AVX(features,intersector); \ - SELECT_SYMBOL_AVX2(features,intersector); - + ISA_EXPAND_4(features,intersector, DEFAULT,SSE42,AVX,AVX2) #define SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX512(features,intersector) \ - SELECT_SYMBOL_DEFAULT(features,intersector); \ - SELECT_SYMBOL_SSE42(features,intersector); \ - SELECT_SYMBOL_AVX(features,intersector); \ - SELECT_SYMBOL_AVX512(features,intersector); - -#define SELECT_SYMBOL_DEFAULT_AVX_AVX2_AVX512(features,intersector) \ - SELECT_SYMBOL_DEFAULT(features,intersector); \ - SELECT_SYMBOL_AVX(features,intersector); \ - SELECT_SYMBOL_AVX2(features,intersector); \ - SELECT_SYMBOL_AVX512(features,intersector); - -#define SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512(features,intersector) \ - SELECT_SYMBOL_DEFAULT(features,intersector); \ - SELECT_SYMBOL_SSE42(features,intersector); \ - SELECT_SYMBOL_AVX(features,intersector); \ - SELECT_SYMBOL_AVX2(features,intersector); \ - SELECT_SYMBOL_AVX512(features,intersector); - + ISA_EXPAND_4(features,intersector, DEFAULT,SSE42,AVX,AVX512) #define SELECT_SYMBOL_DEFAULT_AVX(features,intersector) \ - SELECT_SYMBOL_DEFAULT(features,intersector); \ - SELECT_SYMBOL_AVX(features,intersector); - + ISA_EXPAND_2(features,intersector, DEFAULT,AVX) #define SELECT_SYMBOL_DEFAULT_AVX_AVX2(features,intersector) \ - SELECT_SYMBOL_DEFAULT(features,intersector); \ - SELECT_SYMBOL_AVX(features,intersector); \ - SELECT_SYMBOL_AVX2(features,intersector); - + ISA_EXPAND_3(features,intersector, DEFAULT,AVX,AVX2) #define SELECT_SYMBOL_DEFAULT_AVX_AVX512(features,intersector) \ - SELECT_SYMBOL_DEFAULT(features,intersector); \ - SELECT_SYMBOL_AVX(features,intersector); \ - SELECT_SYMBOL_AVX512(features,intersector); + ISA_EXPAND_3(features,intersector, DEFAULT,AVX,AVX512) +#define SELECT_SYMBOL_DEFAULT_AVX_AVX2_AVX512(features,intersector) \ + ISA_EXPAND_4(features,intersector, DEFAULT,AVX,AVX2,AVX512) +#define SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512(features,intersector) \ + ISA_EXPAND_5(features,intersector, DEFAULT,SSE42,AVX,AVX2,AVX512) #define SELECT_SYMBOL_INIT_AVX(features,intersector) \ - INIT_SYMBOL(features,intersector); \ - SELECT_SYMBOL_AVX(features,intersector); - + INIT_EXPAND_1(features,intersector, AVX) #define SELECT_SYMBOL_INIT_AVX_AVX2(features,intersector) \ - INIT_SYMBOL(features,intersector); \ - SELECT_SYMBOL_AVX(features,intersector); \ - SELECT_SYMBOL_AVX2(features,intersector); - + INIT_EXPAND_2(features,intersector, AVX,AVX2) +#define SELECT_SYMBOL_INIT_AVX_AVX512(features,intersector) \ + INIT_EXPAND_2(features,intersector, AVX,AVX512) #define SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,intersector) \ - INIT_SYMBOL(features,intersector); \ - SELECT_SYMBOL_AVX(features,intersector); \ - SELECT_SYMBOL_AVX2(features,intersector); \ - SELECT_SYMBOL_AVX512(features,intersector); + INIT_EXPAND_3(features,intersector, AVX,AVX2,AVX512) #define SELECT_SYMBOL_INIT_SSE42_AVX_AVX2(features,intersector) \ - INIT_SYMBOL(features,intersector); \ - SELECT_SYMBOL_SSE42(features,intersector); \ - SELECT_SYMBOL_AVX(features,intersector); \ - SELECT_SYMBOL_AVX2(features,intersector); - -#define SELECT_SYMBOL_INIT_AVX_AVX512(features,intersector) \ - INIT_SYMBOL(features,intersector); \ - SELECT_SYMBOL_AVX(features,intersector); \ - SELECT_SYMBOL_AVX512(features,intersector); - + INIT_EXPAND_3(features,intersector, SSE42,AVX,AVX2) #define SELECT_SYMBOL_INIT_SSE42_AVX_AVX2_AVX512(features,intersector) \ - INIT_SYMBOL(features,intersector); \ - SELECT_SYMBOL_SSE42(features,intersector); \ - SELECT_SYMBOL_AVX(features,intersector); \ - SELECT_SYMBOL_AVX2(features,intersector); \ - SELECT_SYMBOL_AVX512(features,intersector); + INIT_EXPAND_4(features,intersector, SSE42,AVX,AVX2,AVX512) #define SELECT_SYMBOL_ZERO_SSE42_AVX_AVX2_AVX512(features,intersector) \ - ZERO_SYMBOL(features,intersector); \ - SELECT_SYMBOL_SSE42(features,intersector); \ - SELECT_SYMBOL_AVX(features,intersector); \ - SELECT_SYMBOL_AVX2(features,intersector); \ - SELECT_SYMBOL_AVX512(features,intersector); + ZERO_EXPAND_5(features,intersector, DEFAULT,SSE42,AVX,AVX2,AVX512) -#define SELECT_SYMBOL_DEFAULT_AVX_AVX2_AVX512(features,intersector) \ - SELECT_SYMBOL_DEFAULT(features,intersector); \ - SELECT_SYMBOL_AVX(features,intersector); \ - SELECT_SYMBOL_AVX2(features,intersector); \ - SELECT_SYMBOL_AVX512(features,intersector); - #define SELECT_SYMBOL_INIT_AVX512(features,intersector) \ - INIT_SYMBOL(features,intersector); \ - SELECT_SYMBOL_AVX512(features,intersector); - + INIT_EXPAND_1(features,intersector, AVX512) + +// AVX10_1 combinations +#define SELECT_SYMBOL_DEFAULT_AVX10_1(features,intersector) \ + ISA_EXPAND_2(features,intersector, DEFAULT,AVX10_1) +#define SELECT_SYMBOL_DEFAULT_AVX_AVX10_1(features,intersector) \ + ISA_EXPAND_3(features,intersector, DEFAULT,AVX,AVX10_1) +#define SELECT_SYMBOL_DEFAULT_AVX_AVX2_AVX10_1(features,intersector) \ + ISA_EXPAND_4(features,intersector, DEFAULT,AVX,AVX2,AVX10_1) +#define SELECT_SYMBOL_DEFAULT_AVX_AVX2_AVX512_AVX10_1(features,intersector) \ + ISA_EXPAND_5(features,intersector, DEFAULT,AVX,AVX2,AVX512,AVX10_1) +#define SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512_AVX10_1(features,intersector) \ + ISA_EXPAND_6(features,intersector, DEFAULT,SSE42,AVX,AVX2,AVX512,AVX10_1) + +// AVX10_2 combinations +#define SELECT_SYMBOL_DEFAULT_AVX10_2(features,intersector) \ + ISA_EXPAND_2(features,intersector, DEFAULT,AVX10_2) +#define SELECT_SYMBOL_DEFAULT_AVX_AVX10_2(features,intersector) \ + ISA_EXPAND_3(features,intersector, DEFAULT,AVX,AVX10_2) +#define SELECT_SYMBOL_DEFAULT_AVX_AVX2_AVX10_2(features,intersector) \ + ISA_EXPAND_4(features,intersector, DEFAULT,AVX,AVX2,AVX10_2) +#define SELECT_SYMBOL_DEFAULT_AVX_AVX2_AVX512_AVX10_2(features,intersector) \ + ISA_EXPAND_5(features,intersector, DEFAULT,AVX,AVX2,AVX512,AVX10_2) +#define SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512_AVX10_2(features,intersector) \ + ISA_EXPAND_6(features,intersector, DEFAULT,SSE42,AVX,AVX2,AVX512,AVX10_2) + +// APX combinations +#define SELECT_SYMBOL_DEFAULT_APX(features,intersector) \ + ISA_EXPAND_2(features,intersector, DEFAULT,APX) +#define SELECT_SYMBOL_DEFAULT_AVX_APX(features,intersector) \ + ISA_EXPAND_3(features,intersector, DEFAULT,AVX,APX) +#define SELECT_SYMBOL_DEFAULT_AVX_AVX2_APX(features,intersector) \ + ISA_EXPAND_4(features,intersector, DEFAULT,AVX,AVX2,APX) +#define SELECT_SYMBOL_DEFAULT_AVX_AVX2_AVX512_APX(features,intersector) \ + ISA_EXPAND_5(features,intersector, DEFAULT,AVX,AVX2,AVX512,APX) +#define SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512_APX(features,intersector) \ + ISA_EXPAND_6(features,intersector, DEFAULT,SSE42,AVX,AVX2,AVX512,APX) + +// INIT_AVX10_1 combinations +#define SELECT_SYMBOL_INIT_AVX10_1(features,intersector) \ + INIT_EXPAND_1(features,intersector, AVX10_1) +#define SELECT_SYMBOL_INIT_AVX_AVX10_1(features,intersector) \ + INIT_EXPAND_2(features,intersector, AVX,AVX10_1) +#define SELECT_SYMBOL_INIT_AVX_AVX2_AVX10_1(features,intersector) \ + INIT_EXPAND_3(features,intersector, AVX,AVX2,AVX10_1) +#define SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1(features,intersector) \ + INIT_EXPAND_4(features,intersector, AVX,AVX2,AVX512,AVX10_1) +#define SELECT_SYMBOL_INIT_SSE42_AVX_AVX2_AVX512_AVX10_1(features,intersector) \ + INIT_EXPAND_5(features,intersector, SSE42,AVX,AVX2,AVX512,AVX10_1) + +// INIT_AVX10_2 combinations +#define SELECT_SYMBOL_INIT_AVX10_2(features,intersector) \ + INIT_EXPAND_1(features,intersector, AVX10_2) +#define SELECT_SYMBOL_INIT_AVX_AVX10_2(features,intersector) \ + INIT_EXPAND_2(features,intersector, AVX,AVX10_2) +#define SELECT_SYMBOL_INIT_AVX_AVX2_AVX10_2(features,intersector) \ + INIT_EXPAND_3(features,intersector, AVX,AVX2,AVX10_2) +#define SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_2(features,intersector) \ + INIT_EXPAND_4(features,intersector, AVX,AVX2,AVX512,AVX10_2) +#define SELECT_SYMBOL_INIT_SSE42_AVX_AVX2_AVX512_AVX10_2(features,intersector) \ + INIT_EXPAND_5(features,intersector, SSE42,AVX,AVX2,AVX512,AVX10_2) + +// INIT_APX combinations +#define SELECT_SYMBOL_INIT_APX(features,intersector) \ + INIT_EXPAND_1(features,intersector, APX) +#define SELECT_SYMBOL_INIT_AVX_APX(features,intersector) \ + INIT_EXPAND_2(features,intersector, AVX,APX) +#define SELECT_SYMBOL_INIT_AVX_AVX2_APX(features,intersector) \ + INIT_EXPAND_3(features,intersector, AVX,AVX2,APX) +#define SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_APX(features,intersector) \ + INIT_EXPAND_4(features,intersector, AVX,AVX2,AVX512,APX) +#define SELECT_SYMBOL_INIT_AVX512_AVX10_1_AVX10_2_APX(features,intersector) \ + INIT_EXPAND_4(features,intersector, AVX512,AVX10_1,AVX10_2,APX) +#define SELECT_SYMBOL_INIT_SSE42_AVX_AVX2_AVX512_APX(features,intersector) \ + INIT_EXPAND_5(features,intersector, SSE42,AVX,AVX2,AVX512,APX) + +// AVX10_1 + AVX10_2 combinations +#define SELECT_SYMBOL_DEFAULT_AVX10_1_AVX10_2(features,intersector) \ + ISA_EXPAND_3(features,intersector, DEFAULT,AVX10_1,AVX10_2) +#define SELECT_SYMBOL_DEFAULT_AVX_AVX10_1_AVX10_2(features,intersector) \ + ISA_EXPAND_4(features,intersector, DEFAULT,AVX,AVX10_1,AVX10_2) +#define SELECT_SYMBOL_INIT_AVX10_1_AVX10_2(features,intersector) \ + INIT_EXPAND_2(features,intersector, AVX10_1,AVX10_2) +#define SELECT_SYMBOL_INIT_AVX_AVX10_1_AVX10_2(features,intersector) \ + INIT_EXPAND_3(features,intersector, AVX,AVX10_1,AVX10_2) + +// AVX10_1 + AVX10_2 + APX combinations +#define SELECT_SYMBOL_DEFAULT_AVX10_1_AVX10_2_APX(features,intersector) \ + ISA_EXPAND_4(features,intersector, DEFAULT,AVX10_1,AVX10_2,APX) +#define SELECT_SYMBOL_DEFAULT_AVX_AVX10_1_AVX10_2_APX(features,intersector) \ + ISA_EXPAND_5(features,intersector, DEFAULT,AVX,AVX10_1,AVX10_2,APX) +#define SELECT_SYMBOL_INIT_AVX10_1_AVX10_2_APX(features,intersector) \ + INIT_EXPAND_3(features,intersector, AVX10_1,AVX10_2,APX) +#define SELECT_SYMBOL_INIT_AVX_AVX10_1_AVX10_2_APX(features,intersector) \ + INIT_EXPAND_4(features,intersector, AVX,AVX10_1,AVX10_2,APX) + +// Full chains: DEFAULT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX and SSE42 variants +#define SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512_AVX10_1_AVX10_2(features,intersector) \ + ISA_EXPAND_7(features,intersector, DEFAULT,SSE42,AVX,AVX2,AVX512,AVX10_1,AVX10_2) +#define SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,intersector) \ + ISA_EXPAND_8(features,intersector, DEFAULT,SSE42,AVX,AVX2,AVX512,AVX10_1,AVX10_2,APX) +#define SELECT_SYMBOL_DEFAULT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,intersector) \ + ISA_EXPAND_7(features,intersector, DEFAULT,AVX,AVX2,AVX512,AVX10_1,AVX10_2,APX) +#define SELECT_SYMBOL_INIT_SSE42_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,intersector) \ + INIT_EXPAND_7(features,intersector, SSE42,AVX,AVX2,AVX512,AVX10_1,AVX10_2,APX) +#define SELECT_SYMBOL_INIT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(features,intersector) \ + INIT_EXPAND_6(features,intersector, AVX,AVX2,AVX512,AVX10_1,AVX10_2,APX) + +// Micro helpers for 1-ISA initializers +#define INIT_EXPAND_1(f,i, A) \ + INIT_SYMBOL(f,i); SELECT_SYMBOL_##A(f,i) + #define SELECT_SYMBOL_SSE42_AVX_AVX2(features,intersector) \ - SELECT_SYMBOL_SSE42(features,intersector); \ - SELECT_SYMBOL_AVX(features,intersector); \ + SELECT_SYMBOL_SSE42(features,intersector); \ + SELECT_SYMBOL_AVX(features,intersector); \ SELECT_SYMBOL_AVX2(features,intersector); struct VerifyMultiTargetLinking { diff --git a/kernels/common/rtcore.cpp b/kernels/common/rtcore.cpp index 5f8ec82c7e..e0ea0d7108 100644 --- a/kernels/common/rtcore.cpp +++ b/kernels/common/rtcore.cpp @@ -1546,7 +1546,7 @@ RTC_API void rtcSetGeometryTransform(RTCGeometry hgeometry, unsigned int timeSte { #if defined(EMBREE_GEOMETRY_TRIANGLE) createTriangleMeshTy createTriangleMesh = nullptr; - SELECT_SYMBOL_DEFAULT_AVX_AVX2_AVX512(device->enabled_cpu_features,createTriangleMesh); + SELECT_SYMBOL_DEFAULT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(device->enabled_cpu_features,createTriangleMesh); Geometry* geom = createTriangleMesh(device); return (RTCGeometry) geom->refInc(); #else @@ -1558,7 +1558,7 @@ RTC_API void rtcSetGeometryTransform(RTCGeometry hgeometry, unsigned int timeSte { #if defined(EMBREE_GEOMETRY_QUAD) createQuadMeshTy createQuadMesh = nullptr; - SELECT_SYMBOL_DEFAULT_AVX_AVX2_AVX512(device->enabled_cpu_features,createQuadMesh); + SELECT_SYMBOL_DEFAULT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(device->enabled_cpu_features,createQuadMesh); Geometry* geom = createQuadMesh(device); return (RTCGeometry) geom->refInc(); #else @@ -1572,7 +1572,7 @@ RTC_API void rtcSetGeometryTransform(RTCGeometry hgeometry, unsigned int timeSte { #if defined(EMBREE_GEOMETRY_POINT) createPointsTy createPoints = nullptr; - SELECT_SYMBOL_DEFAULT_AVX_AVX2_AVX512(device->enabled_builder_cpu_features, createPoints); + SELECT_SYMBOL_DEFAULT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(device->enabled_builder_cpu_features, createPoints); Geometry *geom; switch(type) { @@ -1617,9 +1617,9 @@ RTC_API void rtcSetGeometryTransform(RTCGeometry hgeometry, unsigned int timeSte { #if defined(EMBREE_GEOMETRY_CURVE) createLineSegmentsTy createLineSegments = nullptr; - SELECT_SYMBOL_DEFAULT_AVX_AVX2_AVX512(device->enabled_cpu_features,createLineSegments); + SELECT_SYMBOL_DEFAULT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(device->enabled_cpu_features,createLineSegments); createCurvesTy createCurves = nullptr; - SELECT_SYMBOL_DEFAULT_AVX_AVX2_AVX512(device->enabled_cpu_features,createCurves); + SELECT_SYMBOL_DEFAULT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(device->enabled_cpu_features,createCurves); Geometry* geom; switch (type) { @@ -1656,7 +1656,7 @@ RTC_API void rtcSetGeometryTransform(RTCGeometry hgeometry, unsigned int timeSte #if defined(EMBREE_GEOMETRY_SUBDIVISION) createSubdivMeshTy createSubdivMesh = nullptr; SELECT_SYMBOL_DEFAULT_AVX(device->enabled_cpu_features,createSubdivMesh); - //SELECT_SYMBOL_DEFAULT_AVX_AVX2_AVX512(device->enabled_cpu_features,createSubdivMesh); // FIXME: this does not work for some reason? + //SELECT_SYMBOL_DEFAULT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(device->enabled_cpu_features,createSubdivMesh); // FIXME: this does not work for some reason? Geometry* geom = createSubdivMesh(device); return (RTCGeometry) geom->refInc(); #else @@ -1668,7 +1668,7 @@ RTC_API void rtcSetGeometryTransform(RTCGeometry hgeometry, unsigned int timeSte { #if defined(EMBREE_GEOMETRY_USER) createUserGeometryTy createUserGeometry = nullptr; - SELECT_SYMBOL_DEFAULT_AVX_AVX2_AVX512(device->enabled_cpu_features,createUserGeometry); + SELECT_SYMBOL_DEFAULT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(device->enabled_cpu_features,createUserGeometry); Geometry* geom = createUserGeometry(device); return (RTCGeometry) geom->refInc(); #else @@ -1680,7 +1680,7 @@ RTC_API void rtcSetGeometryTransform(RTCGeometry hgeometry, unsigned int timeSte { #if defined(EMBREE_GEOMETRY_INSTANCE) createInstanceTy createInstance = nullptr; - SELECT_SYMBOL_DEFAULT_AVX_AVX2_AVX512(device->enabled_cpu_features,createInstance); + SELECT_SYMBOL_DEFAULT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(device->enabled_cpu_features,createInstance); Geometry* geom = createInstance(device); return (RTCGeometry) geom->refInc(); #else @@ -1692,7 +1692,7 @@ RTC_API void rtcSetGeometryTransform(RTCGeometry hgeometry, unsigned int timeSte { #if defined(EMBREE_GEOMETRY_INSTANCE_ARRAY) createInstanceArrayTy createInstanceArray = nullptr; - SELECT_SYMBOL_DEFAULT_AVX_AVX2_AVX512(device->enabled_cpu_features,createInstanceArray); + SELECT_SYMBOL_DEFAULT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(device->enabled_cpu_features,createInstanceArray); Geometry* geom = createInstanceArray(device); return (RTCGeometry) geom->refInc(); #else @@ -1704,7 +1704,7 @@ RTC_API void rtcSetGeometryTransform(RTCGeometry hgeometry, unsigned int timeSte { #if defined(EMBREE_GEOMETRY_GRID) createGridMeshTy createGridMesh = nullptr; - SELECT_SYMBOL_DEFAULT_AVX_AVX2_AVX512(device->enabled_cpu_features,createGridMesh); + SELECT_SYMBOL_DEFAULT_AVX_AVX2_AVX512_AVX10_1_AVX10_2_APX(device->enabled_cpu_features,createGridMesh); Geometry* geom = createGridMesh(device); return (RTCGeometry) geom->refInc(); #else