Windows Build Instructions
The instructions below describe how to build Mesa with OpenSWR for Windows.
On Windows, OpenSWR is built using the Meson package as described in Mesa's installation page.
As of March 2022, OpenSWR has been moved to the Amber branch of Mesa. This walkthrough uses the Amber branch (21.3.x), as committed to Mesa 21.3.7. OpenSWR has been removed from the primary Mesa branch. The Mesa 22.x branch and higher has OpenSWR removed. Review the latest Mesa branches for more information.
Prerequisites
Building Mesa with OpenSWR requires:
- Microsoft Visual Studio 2019.
                    
- Building Mesa with OpenSWR from the Microsoft Visual Studio 2022 build system is not recommended at time of publication
 
 - CMake
 - Decompression Utility such as 7-zip or Winzip
 - Chocolatey and Chocolatey prerequisites for Mesa
 - Python 3
 - Meson
 - Git
 - 
                    LLVM 12
                    built from source
                    
- Building Mesa with OpenSWR from LLVM 13 or higher tools is not recommended at time of publication
 
 - Mesa Amber Branch source
 - Target systems with Advanced Vector Extensions (AVX) or higher
 
These instructions describe acquisition of all above prerequisites except Microsoft Visual Studio.
Note: 32-bit builds of Mesa with OpenSWR are possible but not described here. Use 32-bit targeting from Microsoft Visual Studio and LLVM to build Mesa with OpenSWR 32-bit.
Download and Install Prerequisite Tools
CMake
LLVM requires CMake to build and install. CMake is available for Windows as an executable installer on CMake's download page. The latest version should be fine. CMake is also distributed with Microsoft Visual Studio 2019.
Archive Tool
You will need a utility that can open and decompress
            tar.gz and/or tar.xz files.
            An easy-to-use (and free) graphical option for Windows
            is 7-zip, available on 7-zip's download
            page.
Chocolatey
Chocolatey is an easier way to get Mesa build time dependencies deployed. Install Chocolatey. Follow the Installing Chocolatey instructions.
Install Mesa build requirements from Chocolatey from a Command Prompt. You may wish to run this Command Prompt with Administrator Privileges (Right Click->Run As Administrator):
choco.exe install python3 winflexbison pkgconfiglite
            Python 3
Install Python 3 via one of these options:
- As a standalone
 - Using the Microsoft Visual Studio distribution
                
py.exeutility - Using Chocolatey
 
The walkthrough uses the Python 3.10 standalone.
Meson
Mesa with OpenSWR uses the Meson package to build and install. Meson is available to download and install via the Python 3 pip utility. The latest version should be fine. Meson 0.61.2 is used in this walkthrough.
Install Meson from a Command Prompt. You may wish to
            run this Command Prompt with Administrator Privileges
            (Right Click->Run As Administrator). The Python 3
            pip.exe utility is found in the Python 3
            Scripts directory. Install Meson via
            pip:
pip.exe install meson mako
            Git
Install Git or look for it as distributed with Microsoft Visual Studio.
Download, Build, and Install LLVM
Mesa with OpenSWR relies on LLVM, so you will need to build and install it first if you do not already have it. The Mesa build relies the llvm-config.exe utility. llvm-config.exe does not ship with precompiled releases of LLVM at time of publication. Build LLVM to generate all needed LLVM tools to build Mesa. Please refer to the LLVM Windows build instructions with Visual Studio for a general overview, located here.
This walkthrough uses LLVM 12.0.1 (llvm-12.0.1.src.tar.xz). LLVM 13 was observed to fail when building the Mesa Amber branch.
Once LLVM source is downloaded and decompressed, create a build directory to contain the built LLVM distribution. In this example, we build both the release and debug version of LLVM, though you can choose to only have one or the other.
The Mesa Windows Meson build has the peculiarity that you cannot mix debug and release versions of libs (see link error LNK2038). If you are planning of building both versions of Mesa, you should also build both versions of LLVM. Below, it is assumed that we are building both.
Suppose we have LLVM extracted to
            C:\LLVM\src with build directories
            C:\LLVM\build-release and
            C:\LLVM\build-debug. We will install to
            C:\LLVM\install-release and
            C:\LLVM\install-debug, respectively.
Launch a fresh x64 Native Tools Command Prompt for
            VS 2019. You may wish to run this Command Prompt with
            Administrator Privileges (Right Click->Run As
            Administrator). Use cmake to generate MSVC
            .sln files, as follows: The release
            version:
cd C:\LLVM\build-release
cmake -D CMAKE_GENERATOR_PLATFORM=x64 ^
      -D LLVM_TARGETS_TO_BUILD=X86 ^
      -D LLVM_ENABLE_RTTI=1 ^
      -D LLVM_USE_CRT_DEBUG=MTd ^
      -D LLVM_USE_CRT_RELEASE=MT ^
      -D LLVM_ENABLE_TERMINFO=OFF ^
      -D CMAKE_INSTALL_PREFIX=C:\LLVM\install-release ^
      -Thost=x64 ^
      C:\LLVM\src
cmake --build . --config Release -Thost=x64
cmake --build . --config Release --target install -Thost=x64
            and the debug version:
cd C:\LLVM\build-debug
cmake -D CMAKE_GENERATOR_PLATFORM=x64 ^
      -D LLVM_TARGETS_TO_BUILD=X86 ^
      -D LLVM_ENABLE_RTTI=1 ^
      -D LLVM_USE_CRT_DEBUG=MTd ^
      -D LLVM_USE_CRT_RELEASE=MT ^
      -D LLVM_ENABLE_TERMINFO=OFF ^
      -D CMAKE_INSTALL_PREFIX=C:\LLVM\install-debug ^
      -Thost=x64 ^
      C:\LLVM\src
cmake --build . --config Debug -Thost=x64
cmake --build . --config Debug --target install -Thost=x64
            Note that, in theory, you only need to use one of
            LLVM_USE_CRT_DEBUG or
            LLVM_USE_CRT_RELEASE, depending on whether
            you are building Debug or Release, but it doesn't hurt
            to always include both in the cmake line.
Time and Space
On an Intel® Core™ i7-8665U Processor, build time for Release mode may be approximately 45 minutes. Intel® Xeon® based systems with larger caches are expected to build LLVM significantly faster. The build and install directories required less than 3 GB of disk space for release mode on the walkthrough system. The debug build requires significantly more disk storage (10s of GB).
Build Mesa with OpenSWR
If not already using the previous x64 Native Tools Command Prompt for VS 2019, launch a fresh instance. You may wish to run this Command Prompt with Administrator Privileges (Right Click->Run As Administrator).
If your system is behind a proxy then set the proxy. Many challenging connectivity errors may occur if the proxy is not set:
set HTTP_PROXY=<http://your.proxy:port>
set HTTPS_PROXY=<http://your.proxy:port>
            Clone the mesa repo. Full instructions are available on Mesa's repository page.
git clone --no-checkout https://gitlab.freedesktop.org/mesa/mesa.git mesa
cd mesa
git checkout mesa-21.3.7
            Add the Meson directory to your PATH. Meson is
            typically in your Scripts subfolder of the
            Python directory:
set PATH=<Path-to-Meson>;%PATH%
            When building Mesa with OpenSWR, you must specify
            where LLVM is installed. In doing this, we can also
            specify the type of build. For a debug Mesa build, link
            to the debug LLVM installation. Similarly, use a
            release LLVM for building release Mesa. For release
            builds, add the release llvm-config.exe
            directory to your path.:
set PATH=C:\LLVM\install-release\bin;%PATH%
            and for debug builds:
set PATH=C:\LLVM\install-release\bin;%PATH%
            Create the Release build files:
mkdir build
meson setup --backend=vs2019 build/ \
-Dswr-arches=avx,avx2 \
-Dbuildtype=release \
-Dgallium-drivers=swrast,swr \
-Dvulkan-drivers= \
-Ddri-drivers= \
            If you want to compile OSMesa (for off-screen
            rendering support), add -Dosmesa=true to
            the setup. Example:
meson setup --backend=vs2019 build/ \
-Dswr-arches=avx,avx2 \
-Dbuildtype=release \
-Dgallium-drivers=swrast,swr \
-Dvulkan-drivers= \
-Ddri-drivers= \
-Dosmesa=true
            Important: Systems with
            Advanced Vector Extenstions 512 (AVX 512) support
            should add AVX 512 support to their
            configuration with the skx flag:
-Dswr-arches=avx,avx2,skx
            Note: Check your target system architectural capabilities by visiting the Intel ARK database.
To see your Mesa build configuration:
meson configure build
            To build Mesa with OpenSWR:
meson compile -C build
            On an Intel® Core™ i7-8665U Processor, build time for Release mode may be approximately 30 minutes. Intel® Xeon® based systems with larger caches are expected to build LLVM significantly faster. The release build and install directories required less than 500 MB of disk space for release mode on the walkthrough system.
Deploy Mesa to your preferred directory:
meson install -C build --destdir C:\swr
            Troubleshoot
Systems with prebuild issues related to ZLIB are typically seeing connectivity or proxy issues. Check your proxy settings. Use fresh, unaltered Mesa build directories. Try again.
Using Mesa with OpenSWR
The -Dosmesa=true, avx,
            avx2 build results in these library
            files:
Runtime libraries:
bin\libgallium_wgl.dll
bin\opengl32.dll
bin\osmesa.dll
bin\swrAVX.dll
bin\swrAVX2.dll
bin\z.dll
            Header files:
include\GL\gl.h
include\GL\glcorearb.h
include\GL\glext.h
include\GL\osmesa.h
include\KHR\khrplatform.h
include\zconf.h
include\zlib.h
            Stub link libraries and pkgconfig references:
lib\libgallium_wgl.lib
lib\opengl32.lib
lib\osmesa.lib
lib\pkgconfig\osmesa.pc
lib\pkgconfig\zlib.pc
lib\swrAVX.lib
lib\swrAVX2.lib
lib\z.lib
            Application configuration file:
share\drirc.d\00-mesa-defaults.conf
            To make these libraries usable across the system,
            first make a backup of any libraries listed in 'Runtime
            Libraries' in C:\Windows\system32, then
            place the above DLLs in
            C:\Windows\system32. If you plan to just
            run simple command line tests, you can simply place
            them in your application or current directory.
To use Mesa with OpenSWR, you will need to set
            OpenSWR as the gallium driver to use with the
            GALLIUM_DRIVER environment variable:
set GALLIUM_DRIVER=swr
Without this environment variable set, the default
            Mesa llvmpipe driver will be used.
Instrument OpenSWR-based applications with useful
            environment variables. In particular, review the
            GALLIUM_ prefixed variables. Refer to the
            enviornment
            variable document on mesa3d.org for details on
            variables like:
GALLIUM_HUD
GALLIUM_LOG_FILE
GALLIUM_PRINT_OPTIONS
GALLIUM_DUMP_CPU
LIBGL_ALWAYS_SOFTWARE
            To send any runtime information to stderr, ensure GALLIUM_PRINT_OPTIONS is set!:
set GALLIUM_PRINT_OPTIONS=1
            SWR_PRINT_INFO can cause the runtime to
            emit SWR status. Documentation is limited since OpenSWR
            has moved to the Amber Branch. You may set it before
            running a program:
set SWR_PRINT_INFO=1
            Look for a message like:
SWR detected AVX2 instruction support (using: swrAVX2.dll).
            Hello GL Quickstart
Many users employ the glxgears and
            glxinfo from the Mesa demos repository to
            check that their distribution of Mesa is running. Note:
            The performance advantages of OpenSWR tend to be
            realized in scenes with much more geometry than
            glxgears. View the Mesa demos
            for more information.
To try these applications you may wish to build them in an MinGW environment as the MSVC build path is not maintained (per the CMakeLists.txt file). For a hint to build wglinfo from within the Mesa Demos repository, this shorthand command was used on the walkthrough system:
cl wglinfo.c ..\xdemos\glinfo_common.c ..\glad\src\glad.c ..\glad\src\glad_wgl.c -I..\glad\include -I..\xdemos "C:\Program Files (x86)\Windows Kits\10\Lib\10.0.19041.0\um\x64\gdi32.lib" "C:\Program Files (x86)\Windows Kits\10\Lib\10.0.19041.0\um\x64\user32.lib" C:\swr\lib\opengl32.lib /Fe:wglinfo.exe
            There also may be quick to build windows ports of glxgears and glinfo on Github.
OpenSWR maintained by OpenSWR
            For information about compiler optimizations, see our
            
            Optimization Notice.
            ©2009-2022 Intel Corporation
            Privacy