Windows: Add ARM64 support

* Only works on machines with a Qualcomm Snapdragon 8cx Gen3 or above.
  Older generation devices are not and will not be supported due to
  some driver issues
* Requires VS2022 for building.
* Uses new MSVC preprocessor for sse2neon compatibility.
* SIMD is not enabled, waiting on conversion of blenlib to C++.

Ref #119126

Pull Request: https://projects.blender.org/blender/blender/pulls/117036
This commit is contained in:
Anthony Roberts 2024-03-06 15:46:43 +01:00 committed by Brecht Van Lommel
parent 3d5fa7698f
commit 445fd42c61
32 changed files with 233 additions and 53 deletions

@ -640,7 +640,7 @@ mark_as_advanced(WITH_CYCLES_PRECOMPUTE)
mark_as_advanced(CYCLES_TEST_DEVICES)
# NVIDIA CUDA & OptiX
if(NOT APPLE)
if(NOT APPLE AND NOT (WIN32 AND CMAKE_SYSTEM_PROCESSOR MATCHES ARM64))
option(WITH_CYCLES_DEVICE_CUDA "Enable Cycles NVIDIA CUDA compute support" ON)
option(WITH_CYCLES_DEVICE_OPTIX "Enable Cycles NVIDIA OptiX support" ON)
mark_as_advanced(WITH_CYCLES_DEVICE_CUDA)
@ -675,7 +675,7 @@ When set, this path will be used at runtime to compile OptiX kernels."
endif()
# AMD HIP
if(NOT APPLE)
if(NOT APPLE AND NOT (WIN32 AND CMAKE_SYSTEM_PROCESSOR MATCHES ARM64))
option(WITH_CYCLES_DEVICE_HIP "Enable Cycles AMD HIP support" ON)
option(WITH_CYCLES_HIP_BINARIES "Build Cycles AMD HIP binaries" OFF)
# Radeon VII (gfx906) not currently working with HIP SDK, so left out of the list.
@ -702,7 +702,7 @@ if(APPLE)
endif()
# oneAPI
if(NOT APPLE)
if(NOT APPLE AND NOT (WIN32 AND CMAKE_SYSTEM_PROCESSOR MATCHES ARM64))
option(WITH_CYCLES_DEVICE_ONEAPI "Enable Cycles oneAPI compute support" OFF)
option(WITH_CYCLES_ONEAPI_BINARIES "\
Enable Ahead-Of-Time compilation for Cycles oneAPI device"
@ -2140,8 +2140,14 @@ set(CMAKE_CXX_EXTENSIONS OFF)
# Make MSVC properly report the value of the __cplusplus preprocessor macro
# Available MSVC 15.7 (1914) and up, without this it reports 199711L regardless
# of the C++ standard chosen above.
# In addition, for ARM64 devices, we need to tell MSVC to use the new preprocessor
# This is because sse2neon requires it.
if(MSVC)
string(APPEND CMAKE_CXX_FLAGS " /Zc:__cplusplus")
if(CMAKE_SYSTEM_PROCESSOR MATCHES ARM64)
string(APPEND CMAKE_CXX_FLAGS " /Zc:preprocessor")
string(APPEND CMAKE_C_FLAGS " /Zc:preprocessor")
endif()
endif()
# Visual Studio has all standards it supports available by default

@ -87,12 +87,17 @@ endif()
if(NOT APPLE)
set(WITH_XR_OPENXR ON CACHE BOOL "" FORCE)
# Can't use CMAKE_SYSTEM_PROCESSOR here as it's not set yet,
# so fall back to checking the env for vcvarsall's VSCMD_ARG_TGT_ARCH
if(NOT (WIN32 AND "$ENV{VSCMD_ARG_TGT_ARCH}" STREQUAL "arm64"))
set(WITH_CYCLES_DEVICE_OPTIX ON CACHE BOOL "" FORCE)
set(WITH_CYCLES_CUDA_BINARIES ON CACHE BOOL "" FORCE)
set(WITH_CYCLES_HIP_BINARIES ON CACHE BOOL "" FORCE)
set(WITH_CYCLES_DEVICE_ONEAPI ON CACHE BOOL "" FORCE)
set(WITH_CYCLES_ONEAPI_BINARIES ON CACHE BOOL "" FORCE)
endif()
endif()
if(WIN32)
if(WIN32 AND NOT (WIN32 AND "$ENV{VSCMD_ARG_TGT_ARCH}" STREQUAL "arm64"))
set(WITH_CYCLES_DEVICE_HIPRT ON CACHE BOOL "" FORCE)
endif()

@ -257,7 +257,11 @@ set(PLATFORM_LINKFLAGS_RELEASE "${PLATFORM_LINKFLAGS} ${PDB_INFO_OVERRIDE_LINKER
string(APPEND CMAKE_STATIC_LINKER_FLAGS " /ignore:4221")
if(CMAKE_CL_64)
if(CMAKE_SYSTEM_PROCESSOR MATCHES ARM64)
string(PREPEND PLATFORM_LINKFLAGS "/MACHINE:ARM64 ")
else()
string(PREPEND PLATFORM_LINKFLAGS "/MACHINE:X64 ")
endif()
else()
string(PREPEND PLATFORM_LINKFLAGS "/MACHINE:IX86 /LARGEADDRESSAWARE ")
endif()
@ -266,7 +270,11 @@ if(NOT DEFINED LIBDIR)
# Setup 64bit and 64bit windows systems
if(CMAKE_CL_64)
message(STATUS "64 bit compiler detected.")
if(CMAKE_SYSTEM_PROCESSOR MATCHES ARM64)
set(LIBDIR_BASE "windows_arm64")
else()
set(LIBDIR_BASE "windows_x64")
endif()
else()
message(FATAL_ERROR "32 bit compiler detected, blender no longer provides pre-build libraries for 32 bit windows, please set the LIBDIR cmake variable to your own library folder")
endif()
@ -604,9 +612,15 @@ if(NOT WITH_WINDOWS_FIND_MODULES)
if(NOT BOOST_VERSION)
message(FATAL_ERROR "Unable to determine Boost version")
endif()
if(CMAKE_SYSTEM_PROCESSOR MATCHES ARM64)
set(BOOST_POSTFIX "vc143-mt-a64-${BOOST_VERSION}")
set(BOOST_DEBUG_POSTFIX "vc143-mt-gyd-a64-${BOOST_VERSION}")
set(BOOST_PREFIX "")
else()
set(BOOST_POSTFIX "vc142-mt-x64-${BOOST_VERSION}")
set(BOOST_DEBUG_POSTFIX "vc142-mt-gyd-x64-${BOOST_VERSION}")
set(BOOST_PREFIX "")
endif()
endif()
if(WITH_BOOST)
@ -625,8 +639,9 @@ if(WITH_BOOST)
if(NOT Boost_FOUND)
warn_hardcoded_paths(BOOST)
# This is file new in 3.4 if it does not exist, assume we are building against 3.3 libs
# Note, as ARM64 was introduced in 4.x, this check is not needed
set(BOOST_34_TRIGGER_FILE ${BOOST_LIBPATH}/${BOOST_PREFIX}boost_python${_PYTHON_VERSION_NO_DOTS}-${BOOST_DEBUG_POSTFIX}.lib)
if(NOT EXISTS ${BOOST_34_TRIGGER_FILE})
if (NOT EXISTS ${BOOST_34_TRIGGER_FILE})
set(BOOST_DEBUG_POSTFIX "vc142-mt-gd-x64-${BOOST_VERSION}")
set(BOOST_PREFIX "lib")
endif()
@ -893,6 +908,15 @@ if(WITH_CODEC_SNDFILE)
endif()
endif()
if(WITH_CPU_SIMD AND SUPPORT_NEON_BUILD)
windows_find_package(sse2neon)
if(NOT SSE2NEON_FOUND)
set(SSE2NEON_ROOT_DIR ${LIBDIR}/sse2neon)
set(SSE2NEON_INCLUDE_DIRS ${LIBDIR}/sse2neon)
set(SSE2NEON_FOUND True)
endif()
endif()
if(WITH_CYCLES AND WITH_CYCLES_OSL)
set(CYCLES_OSL ${LIBDIR}/osl CACHE PATH "Path to OpenShadingLanguage installation")
set(OSL_SHADER_DIR ${CYCLES_OSL}/shaders)

@ -1,4 +1,8 @@
set BUILD_VS_LIBDIR=lib/windows_x64
if "%BUILD_ARCH%" == "arm64" (
set BUILD_VS_LIBDIR=lib/windows_arm64
) else (
set BUILD_VS_LIBDIR=lib/windows_x64
)
if NOT "%verbose%" == "" (
echo Library Directory = "%BUILD_VS_LIBDIR%"

@ -19,6 +19,11 @@ if "%WITH_PYDEBUG%"=="1" (
set PYDEBUG_CMAKE_ARGS=-DWINDOWS_PYTHON_DEBUG=On
)
if "%BUILD_ARCH%"=="arm64" (
set MSBUILD_PLATFORM=arm64
set BUILD_PLATFORM_SELECT=-A ARM64
)
set BUILD_CMAKE_ARGS=%BUILD_CMAKE_ARGS% -G "Visual Studio %BUILD_VS_VER% %BUILD_VS_YEAR%%BUILD_GENERATOR_POST%" %BUILD_PLATFORM_SELECT% %TESTS_CMAKE_ARGS% %CLANG_CMAKE_ARGS% %ASAN_CMAKE_ARGS% %PYDEBUG_CMAKE_ARGS%
if NOT EXIST %BUILD_DIR%\nul (

@ -5,12 +5,18 @@ if "%BUILD_ARCH%"=="" (
) else if "%PROCESSOR_ARCHITEW6432%" == "AMD64" (
set WINDOWS_ARCH= Win64
set BUILD_ARCH=x64
) else if "%PROCESSOR_ARCHITECTURE%" == "ARM64" (
set WINDOWS_ARCH= arm64
set BUILD_ARCH=arm64
) else (
echo Error: 32 bit builds of blender are no longer supported.
goto ERR
)
) else if "%BUILD_ARCH%"=="x64" (
set WINDOWS_ARCH= Win64
) else if "%BUILD_ARCH%"=="arm64" (
set WINDOWS_ARCH= arm64
set BUILD_ARCH=arm64
)
:EOF
exit /b 0

@ -23,6 +23,24 @@ if EXIST %PYTHON% (
goto detect_python_done
)
rem Additionally check for the ARM64 version
set PYTHON=%BLENDER_DIR%\lib\windows_arm64\python\310\bin\python.exe
if EXIST %PYTHON% (
goto detect_python_done
)
set PYTHON=%BLENDER_DIR%\lib\windows_arm64\python\311\bin\python.exe
if EXIST %PYTHON% (
goto detect_python_done
)
set PYTHON=%BLENDER_DIR%\lib\windows_arm64\python\312\bin\python.exe
if EXIST %PYTHON% (
goto detect_python_done
)
set PYTHON=%BLENDER_DIR%\lib\windows_arm64\python\39\bin\python.exe
if EXIST %PYTHON% (
goto detect_python_done
)
if NOT EXIST %PYTHON% (
if EXIST %BLENDER_DIR%\lib\windows_x64\.git (
echo Warning: Python not found, there is likely an issue with the library folder

@ -3,6 +3,11 @@ if EXIST %BLENDER_DIR%\lib\windows_x64\llvm\bin\clang-format.exe (
goto detect_done
)
if EXIST %BLENDER_DIR%\lib\windows_arm64\llvm\bin\clang-format.exe (
set CF_PATH=lib\windows_arm64\llvm\bin
goto detect_done
)
echo clang-format not found
exit /b 1

@ -50,6 +50,8 @@ if NOT "%1" == "" (
goto ERR
) else if "%1" == "x64" (
set BUILD_ARCH=x64
) else if "%1" == "arm64" (
set BUILD_ARCH=arm64
) else if "%1" == "2019" (
set BUILD_VS_YEAR=2019
) else if "%1" == "2019pre" (

@ -9,7 +9,11 @@ cd "%BLENDER_DIR%/scripts/addons"
for /f "delims=" %%i in ('"%GIT%" rev-parse --abbrev-ref HEAD') do echo Addons_Branch_name=%%i
for /f "delims=" %%i in ('"%GIT%" rev-parse HEAD') do echo Addons_Branch_hash=%%i
cd "%BLENDER_DIR%/lib/windows_x64"
if "%BUILD_ARCH%" == "arm64" (
cd "%BLENDER_DIR%/lib/windows_arm64"
) else (
cd "%BLENDER_DIR%/lib/windows_x64"
)
for /f "delims=" %%i in ('"%GIT%" rev-parse --abbrev-ref HEAD') do echo Libs_Branch_name=%%i
for /f "delims=" %%i in ('"%GIT%" rev-parse HEAD') do echo Libs_Branch_hash=%%i

@ -127,7 +127,7 @@ typedef uint32_t cuuint32_t;
typedef uint64_t cuuint64_t;
#endif
#if defined(__x86_64) || defined(AMD64) || defined(_M_AMD64) || defined (__aarch64__) || defined(__ppc64__) || defined(__PPC64__)
#if defined(__x86_64) || defined(AMD64) || defined(_M_AMD64) || defined (__aarch64__) || defined(_M_ARM64) || defined(__ppc64__) || defined(__PPC64__)
typedef unsigned long long CUdeviceptr;
#else
typedef unsigned int CUdeviceptr;

@ -86,7 +86,7 @@ typedef uint32_t hipuint32_t;
typedef uint64_t hipuint64_t;
#endif
#if defined(__x86_64) || defined(AMD64) || defined(_M_AMD64) || defined (__aarch64__) || defined(__ppc64__) || defined(__PPC64__)
#if defined(__x86_64) || defined(AMD64) || defined(_M_AMD64) || defined (__aarch64__) || defined(_M_ARM64) || defined(__ppc64__) || defined(__PPC64__)
typedef unsigned long long hipDeviceptr_t;
#else
typedef unsigned int hipDeviceptr_t;

@ -2,4 +2,4 @@ Project: miniLZO - mini subset of the LZO real-time data compression librar
URL: http://www.oberhumer.com/opensource/lzo/
License: GPLv2+
Upstream version: 2.08
Local modifications: None
Local modifications: Add #ifdef for Windows ARM64 (MSVC) platforms

@ -770,7 +770,7 @@
#elif (LZO_OS_DOS16 || LZO_OS_OS216 || LZO_OS_WIN16)
# define LZO_ARCH_I086 1
# define LZO_INFO_ARCH "i086"
#elif defined(__aarch64__)
#elif defined(__aarch64__) || defined(_M_ARM64)
# define LZO_ARCH_ARM64 1
# define LZO_INFO_ARCH "arm64"
#elif defined(__alpha__) || defined(__alpha) || defined(_M_ALPHA)

@ -790,7 +790,7 @@
#elif (LZO_OS_DOS16 || LZO_OS_OS216 || LZO_OS_WIN16)
# define LZO_ARCH_I086 1
# define LZO_INFO_ARCH "i086"
#elif defined(__aarch64__)
#elif defined(__aarch64__) || defined(_M_ARM64)
# define LZO_ARCH_ARM64 1
# define LZO_INFO_ARCH "arm64"
#elif defined(__alpha__) || defined(__alpha) || defined(_M_ALPHA)

@ -22,6 +22,10 @@
# include "GHOST_ContextVK.hh"
#endif
#ifdef WIN32
# include "BLI_path_util.h"
#endif
#include <Dwmapi.h>
#include <assert.h>
@ -127,7 +131,18 @@ GHOST_WindowWin32::GHOST_WindowWin32(GHOST_SystemWin32 *system,
if (!setDrawingContextType(type)) {
const char *title = "Blender - Unsupported Graphics Card Configuration";
const char *text =
const char *text = "";
#if defined(WIN32)
if (strncmp(BLI_getenv("PROCESSOR_IDENTIFIER"), "ARM", 3) == 0) {
text =
"A driver with support for OpenGL 4.3 or higher is required.\n\n"
"If you are on a Qualcomm 8cx Gen3 device or newer, you need to download the"
"\"OpenCL™, OpenGL®, and Vulkan® Compatibility Pack\" from the MS Store.";
}
else
#endif
{
text =
"A graphics card and driver with support for OpenGL 4.3 or higher is "
"required.\n\nInstalling the latest driver for your graphics card might resolve the "
"issue.";
@ -137,6 +152,7 @@ GHOST_WindowWin32::GHOST_WindowWin32(GHOST_SystemWin32 *system,
"required.\n\nPlugging all monitors into your primary graphics card might resolve "
"this issue. Installing the latest driver for your graphics card could also help.";
}
}
MessageBox(m_hWnd, text, title, MB_OK | MB_ICONERROR);
::ReleaseDC(m_hWnd, m_hDC);
::DestroyWindow(m_hWnd);

@ -28,13 +28,23 @@
#define PACKETMODE 0
#include <pktdef.h>
#define WINTAB_PRINTF(x, ...) \
#if !defined(_MSVC_TRADITIONAL) || _MSVC_TRADITIONAL
# define WINTAB_PRINTF(x, ...) \
{ \
if (GHOST_Wintab::getDebug()) { \
printf(x, __VA_ARGS__); \
} \
} \
(void)0
#else
# define WINTAB_PRINTF(x, ...) \
{ \
if (GHOST_Wintab::getDebug()) { \
printf(x, ##__VA_ARGS__); \
} \
} \
(void)0
#endif
/* Typedefs for Wintab functions to allow dynamic loading. */
typedef UINT(API *GHOST_WIN32_WTInfo)(UINT, UINT, LPVOID);

@ -86,7 +86,7 @@
/* Alignment directive */
#ifdef _WIN64
# define ALIGN_STRUCT __declspec(align(64))
# define BLI_ALIGN_STRUCT __declspec(align(64))
#else
# define ALIGN_STRUCT
# define BLI_ALIGN_STRUCT
#endif

@ -10,7 +10,9 @@
* SIMD instruction support.
*/
#if defined(__ARM_NEON) && defined(WITH_SSE2NEON)
// TODO: Re-enable this once blenlib is converted to C++
#if (defined(__ARM_NEON) /* || (defined(_M_ARM64) && defined(_MSC_VER))*/) && \
defined(WITH_SSE2NEON)
/* SSE/SSE2 emulation on ARM Neon. Match SSE precision. */
# if !defined(SSE2NEON_PRECISE_MINMAX)
# define SSE2NEON_PRECISE_MINMAX 1

@ -127,6 +127,7 @@ static void __cpuid(
char *BLI_cpu_brand_string(void)
{
#if !defined(_M_ARM64)
char buf[49] = {0};
int result[4] = {0};
__cpuid(result, 0x80000000);
@ -138,11 +139,27 @@ char *BLI_cpu_brand_string(void)
/* TODO(sergey): Make it a bit more presentable by removing trademark. */
return brand;
}
#else
// No CPUID on ARM64, so we pull from the registry (on Windows) instead
DWORD vendorIdentifierLength = 255;
char vendorIdentifier[255];
if (RegGetValueA(HKEY_LOCAL_MACHINE,
"HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0",
"VendorIdentifier",
RRF_RT_REG_SZ,
NULL,
&vendorIdentifier,
&vendorIdentifierLength) == ERROR_SUCCESS)
{
return BLI_strdup(vendorIdentifier);
}
#endif
return NULL;
}
int BLI_cpu_support_sse42(void)
{
#if !defined(_M_ARM64)
int result[4], num;
__cpuid(result, 0);
num = result[0];
@ -151,6 +168,7 @@ int BLI_cpu_support_sse42(void)
__cpuid(result, 0x00000001);
return (result[2] & ((int)1 << 20)) != 0;
}
#endif
return 0;
}

@ -144,15 +144,27 @@ static bool BLI_windows_system_backtrace_run_trace(FILE *fp, HANDLE hThread, PCO
symbolinfo->SizeOfStruct = sizeof(SYMBOL_INFO);
STACKFRAME frame = {0};
DWORD machineType = 0;
#if defined(_M_AMD64)
frame.AddrPC.Offset = context->Rip;
frame.AddrPC.Mode = AddrModeFlat;
frame.AddrFrame.Offset = context->Rsp;
frame.AddrFrame.Mode = AddrModeFlat;
frame.AddrStack.Offset = context->Rsp;
frame.AddrStack.Mode = AddrModeFlat;
machineType = IMAGE_FILE_MACHINE_AMD64;
#elif defined(_M_ARM64)
frame.AddrPC.Offset = context->Pc;
frame.AddrPC.Mode = AddrModeFlat;
frame.AddrFrame.Offset = context->Fp;
frame.AddrFrame.Mode = AddrModeFlat;
frame.AddrStack.Offset = context->Sp;
frame.AddrStack.Mode = AddrModeFlat;
machineType = IMAGE_FILE_MACHINE_ARM64;
#endif
while (true) {
if (StackWalk64(IMAGE_FILE_MACHINE_AMD64,
if (StackWalk64(machineType,
GetCurrentProcess(),
hThread,
&frame,

@ -410,7 +410,13 @@ void BLI_spin_lock(SpinLock *spin)
#elif defined(__APPLE__)
BLI_mutex_lock(spin);
#elif defined(_MSC_VER)
# if defined(_M_ARM64)
// InterlockedExchangeAcquire takes a long arg on MSVC ARM64
static_assert(sizeof(long) == sizeof(SpinLock));
while (InterlockedExchangeAcquire((volatile long *)spin, 1)) {
# else
while (InterlockedExchangeAcquire(spin, 1)) {
# endif
while (*spin) {
/* Spin-lock hint for processors with hyper-threading. */
YieldProcessor();

@ -28,6 +28,13 @@
errtot++; \
} \
(void)0
# elif defined(_MSVC_TRADITIONAL) && !_MSVC_TRADITIONAL
# define ERRMSG(format, ...) \
{ \
fprintf(stderr, "%s: " format ", " AT "\n", __func__, ##__VA_ARGS__); \
errtot++; \
} \
(void)0
# else
# define ERRMSG(format, ...) \
{ \

@ -47,7 +47,9 @@ void Manager::begin_sync()
acquired_textures.clear();
layer_attributes.clear();
#ifndef NDEBUG
// For some reason, if this uninitialised data pattern was enabled (ie release asserts enabled),
// The viewport just gives up rendering objects on ARM64 devices. Possibly Mesa GLOn12-related.
#if !defined(NDEBUG) && !defined(_M_ARM64)
/* Detect uninitialized data. */
memset(matrix_buf.current().data(),
0xF0,

@ -431,12 +431,16 @@ static void detect_workarounds()
}
}
/* Right now draw shader parameters are broken on Qualcomm devices
* regardless of driver version */
/* Draw shader parameters are broken on Qualcomm Windows ARM64 devices
* on Mesa version < 24.0.0 */
if (GPU_type_matches(GPU_DEVICE_QUALCOMM, GPU_OS_WIN, GPU_DRIVER_ANY)) {
if (strstr(version, "Mesa 20.") || strstr(version, "Mesa 21.") ||
strstr(version, "Mesa 22.") || strstr(version, "Mesa 23."))
{
GCaps.shader_draw_parameters_support = false;
GLContext::shader_draw_parameters_support = false;
}
}
/* Some Intel drivers have issues with using mips as frame-buffer targets if
* GL_TEXTURE_MAX_LEVEL is higher than the target MIP.

@ -102,8 +102,8 @@ else()
endif()
# Keep until APPLE/ARM libraries are updated.
if(APPLE)
if(CMAKE_OSX_ARCHITECTURES MATCHES arm64)
if(APPLE OR WIN32)
if(CMAKE_OSX_ARCHITECTURES MATCHES arm64 OR CMAKE_SYSTEM_PROCESSOR MATCHES ARM64)
list(APPEND INC_SYS
${IMATH_INCLUDE_DIRS}
)

@ -45,8 +45,8 @@ if(WITH_IMAGE_OPENEXR)
endif()
# Keep until APPLE/ARM libraries are updated.
if(APPLE)
if(CMAKE_OSX_ARCHITECTURES MATCHES arm64)
if(APPLE OR WIN32)
if(CMAKE_OSX_ARCHITECTURES MATCHES arm64 OR CMAKE_SYSTEM_PROCESSOR MATCHES ARM64)
list(APPEND INC_SYS
${IMATH_INCLUDE_DIRS}
)

@ -52,6 +52,11 @@ if(WIN32)
# warning alert.
# Silence them by restore warn C4100 back to w4
remove_cc_flag("/w34100")
if(CMAKE_SYSTEM_PROCESSOR MATCHES ARM64)
# USD currently does not support the new preprocessor,
# and does not use sse2neon, so we can remove it here
remove_cc_flag("/Zc:preprocessor")
endif()
endif()
set(INC

@ -791,6 +791,9 @@ StructRNA *ID_code_to_RNA_type(short idcode);
/* macro which inserts the function name */
#if defined __GNUC__
# define RNA_warning(format, args...) _RNA_warning("%s: " format "\n", __func__, ##args)
#elif defined(_MSVC_TRADITIONAL) && \
!_MSVC_TRADITIONAL // The "new preprocessor" is enabled via /Zc:preprocessor
# define RNA_warning(format, ...) _RNA_warning("%s: " format "\n", __FUNCTION__, ##__VA_ARGS__)
#else
# define RNA_warning(format, ...) _RNA_warning("%s: " format "\n", __FUNCTION__, __VA_ARGS__)
#endif

@ -31,7 +31,7 @@
#define BEND_EPS 0.000001f
ALIGN_STRUCT struct DeformUserData {
BLI_ALIGN_STRUCT struct DeformUserData {
bool invert_vgroup;
char mode;
char deform_axis;

@ -33,6 +33,11 @@ if(WIN32)
# warning alert.
# Silence them by restore warn C4100 back to w4
remove_cc_flag("/w34100")
if(CMAKE_SYSTEM_PROCESSOR MATCHES ARM64)
# USD currently does not support the new preprocessor,
# and does not use sse2neon, so we can remove it here
remove_cc_flag("/Zc:preprocessor")
endif()
endif()
set(INC

@ -619,6 +619,11 @@ if(WIN32)
${LIBDIR}/OpenImageDenoise/bin/OpenImageDenoise.dll
${LIBDIR}/OpenImageDenoise/bin/OpenImageDenoise_core.dll
${LIBDIR}/OpenImageDenoise/bin/OpenImageDenoise_device_cpu.dll
)
endif()
if(EXISTS ${LIBDIR}/OpenImageDenoise/bin/OpenImageDenoise_device_sycl.dll) # Platforms that have SyCL support
windows_install_shared_manifest(
FILES
${LIBDIR}/OpenImageDenoise/bin/OpenImageDenoise_device_sycl.dll
)
endif()
@ -1345,14 +1350,20 @@ elseif(WIN32)
endif()
# this will exist for 4.1 lib folders
if(EXISTS ${LIBDIR}/openvdb/python/pyopenvdb_d.cp${_PYTHON_VERSION_NO_DOTS}-win_amd64.pyd)
if(CMAKE_SYSTEM_PROCESSOR MATCHES ARM64)
set(_openvdb_arch arm64)
else()
set(_openvdb_arch amd64)
endif()
if(EXISTS ${LIBDIR}/openvdb/python/pyopenvdb_d.cp${_PYTHON_VERSION_NO_DOTS}-win_${_openvdb_arch}.pyd)
install(
FILES ${LIBDIR}/openvdb/python/pyopenvdb_d.cp${_PYTHON_VERSION_NO_DOTS}-win_amd64.pyd
FILES ${LIBDIR}/openvdb/python/pyopenvdb_d.cp${_PYTHON_VERSION_NO_DOTS}-win_${_openvdb_arch}.pyd
DESTINATION ${TARGETDIR_VER}/python/lib/site-packages
CONFIGURATIONS Debug
)
install(
FILES ${LIBDIR}/openvdb/python/pyopenvdb.cp${_PYTHON_VERSION_NO_DOTS}-win_amd64.pyd
FILES ${LIBDIR}/openvdb/python/pyopenvdb.cp${_PYTHON_VERSION_NO_DOTS}-win_${_openvdb_arch}.pyd
DESTINATION ${TARGETDIR_VER}/python/lib/site-packages
CONFIGURATIONS Release;RelWithDebInfo;MinSizeRel
)