Mesa opengl windows 7
If you just need prebuilt binaries, click here.
Introduction
Let’s start by answering an obvious question: why would you want Mesa3D on Windows?
The answer is simple: old software. You see, sometimes old apps and games that use OpenGL do not work on modern systems because the implementation of older OpenGL versions in modern video drivers (especially AMD’s) is dreadful. Mesa3D comes with a software renderer, which means it can run those applications by emulating OpenGL on the CPU. Of course, it’s slow, but it’s fast enough to play Quake 3 and Star Trek Voyager Elite Force (on an i7), so that’s good enough. It’s also good if you have an old GPU that doesn’t support modern OpenGL.
Please excuse me if I’ll refer to Mesa3D, Gallium, Gallium, LLVMpipe, etc. simply as «Mesa».
For this tutorial we need:
- A really fast CPU
- 4GB of RAM
- 30GB of disk space
- Windows 10 x64, fully updated. I seriously recommend using a virtual machine, as we’ll be making a bit of a mess in the system.
- 7-Zip or another archive manager (Winrar, etc.)
- A few hours to spare
This tutorial is valid for both 32 and 64 bit versions of Mesa3D, but you will need 2 separate VMs to build both.
Preparation
We will need the following things to build LLVM first and then Mesa:
- Visual Studio 2019 with C++
- Win flex-bison
- Python 2.7 64bit with pip, mako, setuptools, scons
- pywin32 64bit for Python 2.7
- CMake for Windows x64
If you already have these installed, skip to Building LLVM, if you don’t, let’s install them.
Visual Studio
We will be using Visual Studio 2019 Community Edition, which is free and can be downloaded from Visual Studio website.
Run the installer and select Desktop development with C++. Nothing else is required. This will take a while to download and install.
Win Flex-Bison
Make a new folder in your C drive called winflexbison and extract the downloaded archive into it using 7-zip.

Press start and type «Environment variables», select Edit the system environment variables, and click Environment variables (at the bottom).
In the system variables, select PATH and click Edit.
Add C:\winflexbison at the end and press OK.

CMake
Choose to add CMake to the system PATH for all users, and create the desktop icon.
Python
Go to the Python website and get the latest version of Python 2.7 64bit.

Run the installer and choose to install Python to all users and to add it to the PATH variable.
Pywin32
Go to the pywin32 github page and get the latest release for Python 2.7 64bit.

Install the downloaded file.
Mako, setuptools, scons
Press start, type «command prompt», and run it (not as administrator). Type the following commands:
Building LLVM
Get the LLVM source code tar from their website and extract it to your desktop using 7-zip.

Run CMake from the shortcut on your desktop, select the LLVM source directory for the source code, and a new llvmbuild directory on your dekstop for the binaries.
It will look like this:
Now use the Add Entry button and add the following parameters that tell LLVM what the target system is.
Be careful when copying them. It is case sensitive, and do not add spaces by accident.
| Name | Type | Value (64 bit builds) | Value (32 bit builds) |
|---|---|---|---|
| LLVM_DEFAULT_TARGET_TRIPLE | STRING | x86_64-pc-windows-msvc19 | i686-pc-win32 |
| LLVM_HOST_TRIPLE | STRING | x86_64-pc-windows | i686-pc-win32 |
| LLVM_TARGETS_TO_BUILD | STRING | X86 | X86 |
| LLVM_TARGET_ARCH | STRING | x86_64 | i686 |
| LLVM_USE_CRT_DEBUG | STRING | MTd | MTd |
| LLVM_USE_CRT_RELEASE | STRING | MT | MT |
When you’re done and it looks like this, press Configure.
It will ask which version of Visual Studio you’re using and which platform. Select Visual Studio 16 2019, and x64 for 64bit builds or Win32 for 32bit builds.
It will take a few minutes.
When it’s done, it will add a bunch of parameters of its own. Click Generate and wait a few seconds.
Click Open Project to load the project in Visual Studio.
It will take some time to load. When it’s done, select Release for compiling. It will take some time to switch.
Right click the LLVM solution and select Build Solution.
This process takes about a hour. Perfect time to watch a Star Trek episode while sipping a nice cup of Earl Grey.
Now that LLVM is ready, we need to move some files. Be very careful here as it’s easy to get wrong:
- Open llvmbuild\Release and copy the lib folder to the llvmbuild folder, overwriting the existing files (if any)
- Open the LLVM source folder and copy the include folder to the llvmbuild folder, overwriting the existing files (if any)
Now open the Environment Variables again and add a new system variable called LLVM, that points to the llvmbuild directory on your desktop.
LLVM is now configured and ready. If you plan to build Mesa on this machine again, you will not need to repeat these steps.
Building Mesa
Download the latest Mesa source tar from their website and extract it to your desktop using 7-zip.

To get better performance in games that use the S3TC texture format, open the Mesa folder, edit src\gallium\drivers\llvmpipe\lp_tex_sample.h and set LP_USE_TEXTURE_CACHE to 1.

Go back to the Mesa folder on your desktop, select File and run PowerShell (not as administrator).
For a 64 bit build, use this command:
For a 32 bit build, use this command:
Watch the rest of your Star Trek episode, and when it’s over it should be done compiling.
Inside the Mesa folder, browse to build\windows-x86_64\gallium\targets\libgl-gdi (64bit build) or build\windows-x86\gallium\targets\libgl-gdi (32bit build), and here you will find opengl32.dll. This DLL is Mesa.
And there you have it, Mesa on Windows!


Credits
Thanks to Lorenzo «lowenz» Donizetti for figuring out some of the cryptic stuff going on with LLVM.
The Mesa 3D Graphics Library
Open source implementations of OpenGL, OpenGL ES, Vulkan, OpenCL, and more!
Featured APIs
OpenGL is a cross-platform, industry standard graphics programming API for 3D graphics.
OpenGL ES is the mobile subset of OpenGL. It’s supported on all major mobile platforms, and is also the base for WebGL.
Vulkan is the next-generation graphics programming API from The Khronos® Group.
EGL is an interface between Khronos rendering APIs such as OpenGL or OpenVG and the underlying native platform window system.
OpenMAX is a non-proprietary and royalty-free cross-platform set of C-language programming interfaces, provides abstractions for processing of audio, video, and still images.
OpenCL
OpenCL is a framework for writing programs that execute across heterogeneous platforms consisting of CPUs, GPUs, DSPs, FPGAs and other processors or hardware accelerators.
VDPAU
VDPAU is the Video Decode and Presentation API for UNIX. It provides an interface to video decode acceleration and presentation hardware present in modern GPUs.
VA API
VA API is an open-source library and API specification, which provides access to graphics hardware acceleration capabilities for video processing.
XvMC is an extension of the X video extension (Xv) for the X Window System. The XvMC API allows video programs to offload portions of the video decoding process to the GPU hardware.
Even though Mesa provides implementations of the APIs listed above, not all combinations of drivers and APIs are formally conformant to their respective specifications.
Supported Drivers
The R600 driver supports AMD’s Radeon HD 2000 GPU series. It’s officially supported by AMD, and is one of two Linux drivers for the hardware.
The RadeonSI driver supports AMD’s Southern Island GPUs and later. It’s officially supported by AMD, and is one of two Linux drivers for the hardware.
The AMD RADV driver supports AMD’s Southern Island GPUs and later. It’s not officially supported by AMD, but it’s based on public information provided by AMD.
The V3D driver supports Broadcom’s VC5 and later GPUs, which is found in the Raspberry Pi 4. It’s officially supported by Broadcom, and is the official Linux driver for the hardware.
The VC4 driver supports Broadcom’s VC4 GPU, which is found among other other things in most of the Raspberry Pis. It’s officially supported by Broadcom, and is one of two Linux drivers for the hardware. More information…
The Etnaviv driver supports the Vivante GCxxx series of embedded GPUs. It’s a reverse-engineered, community-developed driver, and is not endorsed by Vivante. More information…
The Freedreno driver supports the Qualcomm Adreno GPUs, from the A2xx series to the A6xx series. It’s a reverse-engineered, community-developed driver, and is not endorsed by Qualcomm. More information…
The ANV vulkan driver supports Intel’s Gen 7 hardware and later. It’s officially supported by Intel and is their official Vulkan driver for Linux. More information…
The i965 driver supports Intel’s Gen 4 hardware and later. It’s officially supported by Intel and is their default OpenGL driver for Linux. More information…
The Iris driver supports Intel’s Gen 8 hardware and later. It’s officially supported by Intel and is their next-generation Linux OpenGL driver. More information…
Lima is a free and open source driver for the ARM Mali-4xx family of GPUs. It’s reverse-engineered, community-developed driver, and is not endorsed by ARM. More information…
The LLVMPipe driver is a high-performance software renderer. It’s useful for systems without a dedicated GPU, or in the process of bringing up a platform. It uses LLVM as a code-generator to dynamically compile efficient machine code for the CPU. More information…
The Nouveau drivers supports a large set of NVIDIA chips, ranging from NV04 found in the Riva TNT card to NVF0 found in the GeForce GTX 780, as well as most of the Tegra GPUs. It’s a reverse-engineered, community-developed driver, and is not endorsed by NVIDIA. More information…
Panfrost is a free and open source driver for the ARM Mali Midgard and Bifrost GPUs. It’s reverse-engineered, community-developed driver, and is not endorsed by ARM. More information…
The VirGL driver is a virtual GPU driver for sharing a GPU with a host for virtual machines. It uses OpenGL or OpenGL ES on the host to accelerate rendering. More information…
The Zink driver is a Gallium driver that emits Vulkan API calls instead of targeting a specific GPU architecture. This can be used to get full desktop OpenGL support on devices that only support Vulkan. More information…
The R200 driver supports AMD’s Radeon R200 GPU series. Due to the age of the hardware, it’s no longer very actively developed, and it’s entirely community maintained.
The R300 driver supports AMD’s Radeon R300 GPU series. Due to the age of the hardware, it’s no longer very actively developed, and it’s entirely community maintained.
The i915 driver supports Intel’s GMA 916G as well as the i830, i845 and i865 integrated GPU series. Due to the age of the hardware, it’s no longer very actively developed, and it’s entirely community maintained.
Mesa3D для чего вообще?
OpenGL — графическая библиотека, пишут игры, программа. Понятно. Но зачем нужна Mesa3D. Это копия OpenGL, щас вроде поддерживает версия OpenGL 3.3, полная копия получается, но взаимодействие с ОС и железом другое. Но для чего это нужно, кто этим пользуется? Только для более глубокого изучения OpenGL или ещё для чего? Кто-то известный использует Mesa3D?
Nawy
> Но зачем нужна Mesa3D. Это копия OpenGL
OpenGL не библиотека, это стандарт. А Mesa3d уже библиотека — одна из реализаций стандарта, причем открытая.
Незаменима там, где вендор по разным причинам отказывается поддерживать 3d.
Энтузиасты могут отреверсить как карточка растризует полики (nouveau), или взять полные спеки чипа, если они открыты (как в случае с AMD).
Но сам чип только предоставляет средства для реализации какого-то 3d api, которое ещё надо отдельно писать. На борту нет никакого OpenGL или D3D.
Вот mesa3d и есть уже написанное api, уже готовая реализация OpenGL, которой только надо предоставить самый базовый функционал карточки.
В самом крайнем случае mesa3d вообще нарисует всё софтово, своими силами, без поддержки железа.
А кстати, где взять последнюю mesa3d dll’ку под винду? Хочу отладить свой движок на ней, а то он не везде работает, видимо я что-то делаю не по спецификации или эксплуатирую какой-то баг проприетарного драйвера AMD.
Я бы это и на Linux’е сделал, но там уже проприетарный стоит, удалять его не хочется.
Кстати, я у них так и не понял какую OpenGL версию поддерживает софтовый рендер (по сравнению с r600 и прочими).
RPGman
> OpenGL не библиотека, это стандарт. А Mesa3d уже библиотека — одна из
> реализаций стандарта, причем открытая.
Была же sgi версия
innuendo
> Была же sgi версия
Была. Но теперь это таки стандарт. API, а не конкретная реализация.
http://www.opengl.org/about/
Поставила на своем линуксе проприетарный драйвер, а проверить поддержку 3.3 в новой версии mesa забыла.
В 10-й версии mesa есть поддержка 3.3? Или это только слухи?
Про i915 там ничего нет 🙁
gammaker
> А кстати, где взять последнюю mesa3d dll’ку под винду?
arprog
> 32: http://www.mirrorservice.org/sites/downloads.sourceforge.net/m/ms…
> ny.pkg.tar.xz
Скачал. Только почему-то GL_VERSION показывает 2.1. А на экране mesa рендерит месиво какое-то :). И выдаёт предупреждения, ругаясь на эти строчки:
gammaker
хз, я запускал urho3d на нем, все работает.
arprog
> хз, я запускал urho3d на нем, все работает.
А какой там GL? А то моему движку требуется то ли 3.2, то ли 3.3. Но mesa, показывая 2.1, поддерживает расширения, которые заменяют часть функционала 3.3 и которых движку достаточно. Но с такой реализацией GL мой движок сталкивается впервые. Видимо, я забыл активировать какие-то расширения в шейдерах, а она молчит.
Надо наконец-то добавить в движок поддержку debug output, и смотреть, есть ли какие-нибудь сообщения.
Пару лет назад я запускал свой движок в месе и всё работало правильно. Но тогда я не использовал ничего новее 2.0. У меня была смесь FFP и самого первого GLSL и не было генерации текстур на gpu.
programina
> В 10-й версии mesa есть поддержка 3.3? Или это только слухи?
Вообще там уже довольно давно поддерживается всё кроме геометрических шейдеров, поэтому если они не используются можно легко выставить MESA_GL_VERSION_OVERRIDE=3.3 и игра/софт будет работать.
По геометрическим шейдера и «официальной» поддержке 3.3:
В последнем стабильном релизе (10.0.3) поддержка 3.3 реализована только для Intel: Ivy Bridge и Haswell. В текущей версии из git уже реализована поддержка для карт AMD, при этом для GS на старых картах (3XXX 4XXX) нужно ещё и ядро 3.14. И даже для Nvidia запилили, правда с некоторыми картами Nouveau умрёт даже от SuperTuxKart, а кое где крешнется ещё при загрузке системы.
programina
> Про i915 там ничего нет 🙁
i915 это говно мамонта, оно и на винде OpenGL 3 не поддерживают.
Первые интеграшки Intel c поддержкой OpenGL 3 были Sandy Bridge и HD2XXX/3XXX.



























