VFX Reference Platform 2025
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 Python Releases for 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 |
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 | |
Enabled, works out of the box | |
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: Add support for building for Windows ARM64 devices by anthony-linaro · Pull Request #3430 · PixarAnimationStudios/OpenUSD |
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 | |
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 (release mode only) |
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: blender/openexr.cmake at main
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: 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: VFX Reference Platform 2025 | OneTBB
Then, built Ptex with the following instructions: 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: blender/opensubdiv.cmake at main
OpenVDB
First, build zlib with the following instructions: VFX Reference Platform 2025 | zlib
Then, build OneTBB with the following instructions: VFX Reference Platform 2025 | OneTBB
Then, build boost with the following instructions: VFX Reference Platform 2025 | Boost
Then, build blosc with the following instructions: 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: 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 (this has since been removed, as Blender now follows the 2025 spec): https://projects.blender.org/blender/blender/src/commit/d5823ad8959abe611fd4dac8125ed0921dbf7276/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: 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.
OpenColorIO
OpenColorIO is another easy one that downloads most of its own dependencies, and can be build with the following instructions:
git clone https://github.com/AcademySoftwareFoundation/OpenColorIO
cd OpenColorIO
mkdir build
cd build
cmake .. -G"Ninja" -DCMAKE_BUILD_TYPE=Release
cmake --build . --config Release
OpenImageIO
OpenImageIO is also an adjacent program, and has a large number of dependencies - luckily it can build them by itself:
git clone https://github.com/AcademySoftwareFoundation/OpenImageIO
cd OpenImageIO
mkdir build
cd build
cmake .. -G"Ninja" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=<OIIO install dir> -DOpenImageIO_BUILD_MISSING_DEPS=all -Dminizip-ng_INCLUDE_DIR=%CD%\deps\dist\include\minizip-ng -DBUILD_SHARED_LIBS=OFF
cmake --build . --config Release
Line 5 might need to be run twice, as the first attempt may end in an unknown failure - it should still build though
OSL (Open Shader Language)
OSL is another adjacent project to the VFX reference platform - build instructions are not included here, as they require building your own copy of LLVM. An example of how it can be build can be seen as part of the Blender build files: https://projects.blender.org/blender/blender/src/branch/main/build_files/build_environment/cmake/osl.cmake