The VFX Reference Platform is a set of tool and library versions to be used as a common target platform for building software for the VFX industry. More information can be found here: https://vfxplatform.com/
This page specifically covers the 2025 version, which is the first (mostly) compliant version of the spec to run on Windows on Arm, mainly due to OneTBB being held back in previous iterations.
Program Elements:
Name | Status |
---|---|
Python (3.11.x) | Enabled, works out of the box, downloadable from https://www.python.org/downloads/windows/ |
Qt (6.5.x) | Working, installer https://d13lb3tujbc8s0.cloudfront.net/onlineinstallers/qt-online-installer-windows-arm64-4.8.1.exe (requires login) or alternatively install via vcpkg |
PyQt (6.5.x) | Installable via |
Blocked on missing LLVM CMake files | |
NumPy (1.26.x) | Working, installable via pip |
Enabled, works out of the box | |
Enabled, works out of the box | |
Enabled, works out of the box | |
Enabled, works out of the box | |
Enabled, works out of the box | |
OpenColorIO (2.4.x) | PR in progress: https://github.com/AcademySoftwareFoundation/OpenColorIO/pull/2089 |
Enabled, works out of the box | |
Enabled, works out of the box as OneTBB (not 2020u3, so earlier versions of the reference platform do not work) | |
OneMKL (2024) | Not applicable (only runs on x64) |
Adjacent elements:
Name | Status |
---|---|
OpenUSD | PR in progress: https://github.com/PixarAnimationStudios/OpenUSD/pull/3430 |
FreeGLUT | Enabled, works out of the box |
Enabled, works out of the box | |
Enabled, works out of the box | |
Enabled, works out of the box | |
OpenImageIO | Enabled, works out of the box |
OSL | Enabled, works out of the box |
Enabled, works out of the box | |
hdf5 | Enabled, works out of the box (tested via conan) |
Notes on specific projects
There is an asumption for these instructions that you have a normal development environment set up (Visual Studio, CMake, Git, etc), alongside LLVM 18.1.8 on an ARM64 machine. Cross-compilation has not been validated.
All code blocks are run from a “ARM64 Native Tools Command Prompt for VS 2022” window.
As part of these examples, the libraries are built statically (as it made running ctest to verify them easier) - it is possible (and encouraged in many cases) to build them dynamically.
There is a considerable performance boost (up to 46% observed in blender) when using clang-cl
instead of MSVC - consider using that instead of MSVC via -DCMAKE_C_COMPILER="clang-cl"
and -DCMAKE_CXX_COMPILER="clang-cl"
Not all programs mentioned in the “Adjacent” table above are covered here, but they are known to be working (usually as part of Blender). Upon request, they can be manually verified.
PySide
This is currently not working, due how the CMake files are shipped with the Windows ARM64 installer for LLVM - meaning Clang cannot be found via CMake package discovery. Upon release of ARM64 github actions, tarball releases of LLVM will be created for these devices, which in turn will allow for a further investigation of PySide to take place.
OpenEXR
OpenEXR is an easier one to build compared to some of the other packages, as it downloads any dependencies it needs itself, as opposed to failing, like most of the other ones.
This can be built with the following instructions:
git clone https://github.com/AcademySoftwareFoundation/openexr cd openexr git checkout v3.3.2 mkdir build cd build cmake -G"Ninja" .. cmake --build . --config Release
With the above instructions, a ctest
returns all tests passing.
A real-world example of it being built can be seen in the blender source: https://projects.blender.org/blender/blender/src/branch/main/build_files/build_environment/cmake/openexr.cmake
Ptex
This was tested via the conan package manager as part of some other work - it builds and appears to run.
Alternatively, Ptex can be built directly from source:
First, build zlib with the following instructions: https://linaro.atlassian.net/wiki/spaces/WOAR/pages/29693247491/VFX+Reference+Platform+2025#zlib
Then, Ptex can be built with the following instructions:
https://github.com/wdas/ptex cd ptex git checkout v2.4.3 mkdir build cd build cmake .. -DPTEX_BUILD_SHARED_LIBS=OFF -DCMAKE_BUILD_TYPE=Release -DZLIB_ROOT=<zlib install dir> -DCMAKE_INSTALL_PREFIX=<ptex install dir> cmake --build . --config Release
“ctest” is broken for ptex on Windows, due to a mismatch of CRLF and LF with the test data - manually checking the difference reveals the tests pass
OpenSubdiv
First build OneTBB with the following instructions: https://linaro.atlassian.net/wiki/spaces/WOAR/pages/29693247491/VFX+Reference+Platform+2025#OneTBB
Then, built Ptex with the following instructions: https://linaro.atlassian.net/wiki/spaces/WOAR/pages/29693247491/VFX+Reference+Platform+2025#Ptex
After building those, OpenSubdiv can be built with the following instructions:
https://github.com/PixarAnimationStudios/OpenSubdiv cd OpenSubdiv git checkout v3_6_0 mkdir build cd build cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=<opensubdiv install dir> -DTBB_DIR=<path to tbb install>\lib\cmake\tbb -DPTEX_LOCATION=<ptex install dir> -DNO_CUDA=ON -DNO_GLEW=ON -DNO_GLFW=ON -DNO_OPENCL=ON -DNO_DX=ON cmake --build . --config Release
With the above instructions, a ctest
returns all tests passing.
A real-world example of it being built can be seen in the blender source: https://projects.blender.org/blender/blender/src/branch/main/build_files/build_environment/cmake/opensubdiv.cmake
OpenVDB
First, build zlib with the following instructions: https://linaro.atlassian.net/wiki/spaces/WOAR/pages/29693247491/VFX+Reference+Platform+2025#zlib
Then, build OneTBB with the following instructions: https://linaro.atlassian.net/wiki/spaces/WOAR/pages/29693247491/VFX+Reference+Platform+2025#OneTBB
Then, build boost with the following instructions: https://linaro.atlassian.net/wiki/spaces/WOAR/pages/29693247491/VFX+Reference+Platform+2025#Boost
Then, build blosc with the following instructions: https://linaro.atlassian.net/wiki/spaces/WOAR/pages/29693247491/VFX+Reference+Platform+2025#Blosc
git clone https://github.com/AcademySoftwareFoundation/openvdb cd openvdb git checkout v12.0.0 mkdir build cd build cmake -G"Ninja" .. -DCMAKE_BUILD_TYPE=Release -DZLIB_ROOT=<zlib install dir> -DBOOST_ROOT=<boost install dir> -DTBB_ROOT=<tbb install dir> -DBLOSC_ROOT=<blosc install dir> cmake --build . --config Release
ctest does not run when compiled with the above instructions - it requires more dependencies, and is considered beyond the scope of this page.
However - upon running it though with the additional requirements, all tests pass.
A real-world example of it being built can be seen in the blender source: https://projects.blender.org/blender/blender/src/branch/main/build_files/build_environment/cmake/openvdb.cmake
Alembic
First, build Imath, with the following instructions: https://linaro.atlassian.net/wiki/spaces/WOAR/pages/29693247491/VFX+Reference+Platform+2025#Imath
Then, alembic can be built with these instructions:
git clone https://github.com/alembic/alembic cd alembic git checkout 1.8.8 mkdir build cd build cmake -G"Ninja" .. -DCMAKE_BUILD_TYPE=Release -DImath_DIR=<imath build dir>\config -DCMAKE_INSTALL_PREFIX=<alembic install dir> -DALEMBIC_SHARED_LIBS=OFF cmake --build . --config Release
With the above instructions, a ctest
returns all tests passing.
A real-world example of it being built can be seen in the blender source: https://projects.blender.org/blender/blender/src/branch/main/build_files/build_environment/cmake/alembic.cmake
Imath
Imath can be built with the following instructions:
git clone https://github.com/AcademySoftwareFoundation/IMath cd Imath mkdir build cd build cmake -G"Ninja" .. -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=OFF cmake --build . --config Release
With the above instructions, a ctest
returns all tests passing.
OneTBB
Only OneTBB as specified in the 2025 standard works. TBB 2020.3 as defined in older versions does not work without a large patch - an example can be seen in Blender: https://projects.blender.org/blender/blender/src/branch/main/build_files/build_environment/patches/tbb.diff
Note that things such as TBBmalloc do not work with the Blender patch, and would require further engineering effort to enable
oneTBB can be built with the following instructions:
git clone https://github.com/uxlfoundation/oneTBB cd oneTBB git checkout v2021.13.0 mkdir build cd build cmake -G"Ninja" .. -DBUILD_SHARED_LIBS=OFF -DCMAKE_INSTALL_PREFIX=<oneTBB install dir> -DCMAKE_BUILD_TYPE=Release cmake --build . --config Release --target install
With the above instructions, a ctest
returns all tests passing.
zlib
zlib appears to generate shared libraries, ignoring instructions not to - if you want to force static libraries, delete “zlib.dll” and “zlib.lib” from your installation directory
zlib can be built with the following instructions:
git clone https://github.com/madler/zlib cd zlib mkdir build cd build cmake -G"Ninja" .. -DBUILD_SHARED_LIBS=OFF -DCMAKE_INSTALL_PREFIX=<zlib install dir> -DCMAKE_BUILD_TYPE=Release cmake --build . --config Release --target install
With the above instructions, a ctest
returns the single test that zlib has as passing.
Blosc
First, build zlib, with the following instructions: https://linaro.atlassian.net/wiki/spaces/WOAR/pages/29693247491/VFX+Reference+Platform+2025#zlib
Then, blosc can be build with the following instructions:
git clone https://github.com/Blosc/c-blosc cd c-blosc mkdir build cd build cmake -G"Ninja" .. -DBUILD_SHARED_LIBS=OFF -DPREFER_EXTERNAL_ZLIB=ON -DZLIB_LIBRARY=<zlib_install_dir>\lib\zlibstatic.lib -DZLIB_INCLUDE_DIR=<zlib_install_dir>\include -DCMAKE_INSTALL_PREFIX=<blosc install dir> cmake --build . --config Release --target install
With the above instructions, a ctest
returns all tests passing.
Boost
Boost can be built with the following instructions:
git clone --recursive https://github.com/boostorg/boost.git cd boost git checkout boost-1.85.0 bootstrap.bat --prefix=<boost install dir> b2 install architecture=arm address-model=64 --prefix=<boost install dir>
OpenTimelineIO
While not necessarily part of VFX2025, it is an adjacent program - it can be built with the following instructions (much like OpenEXR, it downloads any dependencies itself):
git clone https://github.com/AcademySoftwareFoundation/OpenTimelineIO cd OpenTimelineIO mkdir build cd build cmake -G"Ninja" .. -DCMAKE_INSTALL_PREFIX=<otio install dir> -DCMAKE_BUILD_TYPE=Release -DOTIO_SHARED_LIBS=OFF cmake --build . --config Release
With the above instructions, a ctest
returns all tests passing.
Add Comment