下载
赞助
已知问题
MSVC 和 MinGW 包之间的差异
Mingw 和 MSVC 包内容
OpenGL 和 OpenGL ES 通用共享库
Microsoft CLonD3D12、GLonD3D12、Dozen Vulkan 驱动程序和 D3D12 VA-API 公共依赖项
桌面 OpenGL 驱动程序
OpenGL离屏渲染驱动
OpenGL ES 驱动程序和 EGL 库
Vulkan 驱动程序
OpenCL 驱动程序、编译器和后端
Direct3D 驱动程序、库和工具
VA-API 驱动程序
测试库和工具
开发包
调试包
自己构建 Mesa3D
安装与使用
使用说明
卸载 Mesa3D
旧版软件兼容性
OpenGL 上下文配置覆盖
如何设置环境变量
使用 Visual Studio 和 MSYS2 Mingw-w64 构建的 Mesa 24.2.6 现已在发布部分提供。
mesa-dist-win 项目获得了延长至 2024 年 11 月 1 日的赞助。赞助包括法国节点上的免费 VPS,可用作具有 12 GB RAM、6 线程 AMD EPYC 7763 和来自 Petrosky 的 150 GB NVMe SSD 的构建机器,感谢@Directox01,一家虚拟专用服务器托管公司。
这是所有常见问题以及已知解决方案或解决方法的列表。特定版本仅受其中一部分的影响。
Mesa3D OpenGL ES 和桌面 OpenGL 驱动程序出现libgallium_wgl.dll
缺失错误
当更新到 21.3.0 或更高版本时,使用 21.2.x 或更早版本进行的现有每个应用程序部署会遇到这种情况。只需重做每个应用程序部署即可修复它。 Gallium megadriver 与opengl32.dll
的分离是一项非常具有侵入性的更改,现有的每个应用程序部署没有机会反对。如果您不记得受影响的程序是 32 位还是 64 位,请右键单击程序可执行文件所在文件夹中的opengl32.dll
快捷方式,然后选择打开文件位置。如果位置以 x64 结尾,则它是 64 位,否则它是 32 位。
Mesa3D OpenGL ES 出现libEGL.dll
丢失错误
当更新到 21.3.0 或更高版本时,使用 21.2.x 或更早版本进行的现有每个应用程序部署会遇到这种情况。只需重做每个应用程序部署即可修复它。 EGL 支持是一项非常具有侵入性的更改,现有的每个应用程序部署都无法抵抗。如果您不记得受影响的程序是 32 位还是 64 位,请右键单击程序可执行文件所在文件夹中的opengl32.dll
快捷方式,然后选择打开文件位置。如果位置以 x64 结尾,则它是 64 位,否则它是 32 位。
MinGW 发行包中的 Mesa3D opengl32.dll
缺少libvulkan-1.dll
错误
仅 22.2.0 之前的版本(使用 MSYS2 MinGW-W64 vulkan-devel 软件包组构建 zink 驱动程序)会受到影响。从 MinGW 发行包中运行fix-libvulkan-1.dll-missing-error.cmd
来更正它。该工具支持通过auto
命令行选项进行无人值守执行。该工具仅在需要时才捆绑在 MinGW 发行包中,否则会故意丢失。决定使用此 Vulkan SDK 而不是 LunarG 的 SDK 是基于更新的加载器和标头。
MSVC 和 MinGW 软件包中的 64 位二进制文件需要具有 AVX 的 CPU,尽管它们不应该
从 Mesa 22.0 或更高版本开始,这不再是问题。此问题是由包含 swr 驱动程序的 64 位二进制文件引起的,该驱动程序会将 AVX 的使用泄漏到公共代码中。这是此处、此处和此处报告的上游错误。
MinGW 包中的 Mesa opengl32.dll
自 21.0.0 起依赖于 Vulkan 运行时
通过包含 zink 驱动程序显式使用的要求,此问题在 22.2.0 中得到修复。这是在修补 zink 驱动程序以支持 Windows 时引入的上游回归。
从 21.0.0 开始,使用 Mesa opengl32.dll
时,程序的行为可能就像没有 OpenGL 支持一样
这不是缺陷,而是环境变量配置错误时 Mesa 的行为变化。这种情况通常发生在选择使用的发行包中不存在的 Mesa 驱动程序或由于主机系统不满足硬件要求或缺少依赖项而无法初始化时。阅读 MSVC 和 MinGW 包之间的差异以及 Mingw 和 MSVC 包内容应该有助于故障排除。
有关与缺少libglapi.dll
相关的错误的重要说明
您可以通过每个应用程序部署工具使用任何 Mesa3D 桌面 OpenGL 驱动程序的程序来体验它们,系统范围的部署不受影响。如果在引入共享 glapi 支持之前完成每个应用程序部署,您可能会遇到这些问题。自 20.0.2 起,共享 glapi 一直在 MSVC 和 MinGW 软件包中可用。
无论出于何种原因,要纠正这些错误,您都必须重新部署。如果您不记得受影响的程序是 32 位还是 64 位,请右键单击程序可执行文件所在文件夹中的opengl32.dll
快捷方式,然后选择打开文件位置。如果位置以 x64 结尾,则它是 64 位,否则它是 32 位。
如果您从 17.3.5.501-1 或更早版本升级,则 osmesa 也会出现相同的问题和相同的解决方案。
MinGW 包需要具有 SSSE3 的 CPU,其优点是通过软件渲染驱动程序提供 3-5% 的性能提升;
21.2.0 中引入的 d3d10sw 仅在 MSVC 包中可用。
如果您需要从 Mingw 迁移到 MSVC 二进制文件,您只需将 Mingw 包中的 Mesa 二进制文件文件夹替换为 MSVC 对应文件夹即可。
每个版本中均附带以下 Mesa3D 驱动程序和构建工件:
GLAPI 共享库。文件名: libglapi.dll
。在提供 OpenGL 和 OpenGL ES 支持时需要它的存在。 Mesa3D 离屏渲染器以及所有 Mesa3D OpenGL 和 OpenGL ES 驱动程序在存在时都依赖于它。自 20.0.2 起,它在 MSVC 和 MSYS2 Mingw-w64 软件包中均可用。
镓 OpenGL 超级驱动器。文件名: libgallium_wgl.dll
。如果存在,它包含所有 Mesa3D 桌面 OpenGL 驱动程序,而不是opengl32.dll
。它于 21.3.0 首次亮相。 Mesa3D EGL 库和 OpenGL ES 驱动程序依赖于它(如果存在)。
Mesa3D WGL 运行时。文件名: opengl32.dll
。它曾经包含所有 Mesa3D 桌面 OpenGL 驱动程序和 OpenGL ES 依赖于它,但自 21.3.0 以来,它被简化为仅作为镓 OpenGL megadriver 的加载程序,因此只有通过每个应用程序部署使用 Mesa3D 桌面 OpenGL 驱动程序的程序依赖于它现在。
用于重新分发的 DirectX IL。文件名: dxil.dll
。此二进制可再发行组件在 Windows SDK 和 DirectX Shader Compiler 中提供,并在发布过程中打包。部署工具根据需要安装它。
llvm管道。 llvmpipe 是一个桌面 OpenGL 软件渲染器,旨在在无法进行硬件加速时作为后备。它只能以良好的性能处理非常轻的游戏。当 GLonD3D12 不可用或无法加载时,这是默认的 Mesa3D 桌面 OpenGL 驱动程序。它作为 Mesa3D 桌面 OpenGL 捆绑包opengl32.dll
或libgallium_wgl.dll
(如果后者可用)的一部分适用于 x86 和 x64。如果它不是默认驱动程序,请通过设置环境变量GALLIUM_DRIVER=llvmpipe
来选择它。
softpipe 是桌面 OpenGL 软件渲染器的参考实现,不关注游戏性能。它作为 Mesa3D 桌面 OpenGL 捆绑包opengl32.dll
或libgallium_wgl.dll
(如果后者可用)的一部分适用于 x86 和 x64。通过设置环境变量GALLIUM_DRIVER=softpipe
来选择它。
GLonD3D12。它可用于 MSVC 包中的 x86 和 x64,自 22.2.0 起可用于 MinGW 包,以及 Mesa3D 桌面 OpenGL 包opengl32.dll
或libgallium_wgl.dll
的一部分(如果后者可用)且在 22.3.0 之前作为独立openglon12.dll
以及。除了官方要求 Windows 10 v10.0.19041.488 或更高版本外,还依赖 DirectX IL 进行重新分发 - dxil.dll
进行加载,可以通过部署工具安装。如果可用并且可以加载,这是 D3D12 GPU 加速系统上的默认 Mesa3D 桌面 OpenGL 驱动程序。 21.0.0 中引入的此驱动程序作为返回 D3D12 API 调用的包装器运行。由于这种性质,它可以使用 GPU 加速。如果默认情况下未选择它,您可以通过设置GALLIUM_DRIVER=d3d12
和LIBGL_ALWAYS_SOFTWARE=1
环境变量,使用 Windows 内置的 Direct3D WARP 软件渲染器进行测试。独立副本不需要设置GALLIUM_DRIVER=d3d12
,并且只能通过系统范围的部署工具安装。使用系统范围的部署工具时,独立的 GLonD3D12 和 Mesa3D Desktop OpenGL 捆绑包会相互替换,但您可以随时反转。
锌。该驱动程序在 21.0.0 中的 MinGW 包和 21.2.0 中的 MSVC 包中引入,它可作为 Mesa3D 桌面 OpenGL 包opengl32.dll
或libgallium_wgl.dll
(如果后者可用)的一部分用于 x86 和 x64。与 GLonD3D12 类似,它作为返回 Vulkan API 调用的包装器运行。由于这种性质,它默认使用 GPU 加速,但也支持软件渲染。通过GALLIUM_DRIVER=zink
环境变量选择它,但请注意,它至少需要 1 个 Vulkan 设备和 Vulkan 加载器/运行时才能初始化。 zink 在 22.1.0 之前默认忽略 Vulkan CPU 类型设备。现在,它使用优先级系统,如果不存在更高优先级的 Vulkan 类型设备,该系统会自动选择 Vulkan CPU 类型设备。您只能通过设置LIBGL_ALWAYS_SOFTWARE=1
(Mesa 22.1.0 及更高版本)或ZINK_USE_LAVAPIPE=true
(在 Mesa 22.1.0 中已弃用)来测试使用 Vulkan CPU 类型设备的 zink。
swr。该驱动程序在 Mesa 22.0 及更高版本中不再可用。文件名: swrAVX.dll
、 swrAVX2.dll
、 swrSKX.dll
、 swrKNL.dll
。即使它驻留在 Mesa3D Desktop OpenGL 包opengl32.dll
或libgallium_wgl.dll
之外(如果后者可用),它仍然依赖于它。这种由英特尔开发的替代桌面 OpenGL 软件渲染驱动程序针对可视化软件进行了优化。它可以在 MSVC 包中使用,从 20.1.7 开始也可以在 MinGW 包中使用。它只支持x64,官方不支持x86。目前有 4 个 DLL,仅根据用户 CPU 的功能加载一个。您可以通过将 GALLIUM_DRIVER 环境变量值设置为 swr 来切换到 swr。
奥斯梅萨。文件名: osmesa.dll
。适用于 x86 和 x64。该驱动程序在特殊情况下由设计为使用 Mesa 代码进行渲染而无需任何类型的窗口系统或操作系统依赖性的软件使用。自 21.0.0 起,仅保留 osmesa 镓。它支持 OpenGL 3.x 及更高版本。自 20.0.2 起,MSVC 和 MSYS2 Mingw-w64 软件包中都可以使用 osmesa 与独立 GLLES 驱动程序集成,在此过程中需要libglapi.dll
。
EGL 库。文件名: libEGL.dll
。 OpenGL ES 驱动程序使用的 Mesa3D EGL 库。它在 21.3.0 中首次亮相,可用于 MSVC 和 MSYS2 软件包中的 32 位和 64 位应用程序。它取决于桌面 OpenGL 包opengl32.dll
或libgallium_wgl.dll
(如果后者可用)。
OpenGL ES 独立驱动程序。文件名: libGLESv1_CM.dll
和libGLESv2.dll
。 OpenGL ES 1.x、2.x 和 3.x 独立驱动程序可用于 32 位和 64 位应用程序。自 20.0.2 起,它们在 MSVC 和 MSYS2 Mingw-w64 软件包中均可用。它们依赖于 Mesa3D EGL 库(如果可用)和桌面 OpenGL 捆绑包opengl32.dll
或libgallium_wgl.dll
如果后者可用)。
自 21.1.0 起,lavapipe Vulkan CPU 驱动程序在 MSVC 和 MinGW 软件包中均可用。文件名: lvp_icd.x86_64.json
、 lvp_icd.x86.json
、 vulkan_lvp.dll
。请注意,某些程序可能会故意忽略 Vulkan CPU 类型的设备。有关如何部署的信息,请参阅使用说明。
Microsoft 十几个 Vulkan 驱动程序自 22.1.0 起在 MSVC 软件包中提供,自 22.2.0 起也在 MinGW 软件包中提供。该驱动程序依赖于 D3D12 API 来运行,并且可以在支持的系统上使用 GPU 加速。文件名: dzn_icd.x86_64.json
、 dzn_icd.x86.json
、 vulkan_dzn.dll
。有关如何部署的信息,请参阅使用说明。
根据 @zmike 建议,自 22.1.0 起,AMD 显卡 (radv) 的 Vulkan 驱动程序不再可用,因为它很快就无法工作。自 21.2.0 起,RADV 在 MSVC 和 MinGW 软件包中均可用。自 Mesa 22.0 起,它的 32 位二进制文件就可用了。文件名: radeon_icd.x86_64.json
、 radeon_icd.x86.json
、 libvulkan_radeon.dll
和vulkan_radeon.dll
。有关如何部署的信息,请参阅使用说明。
Microsoft OpenCL 堆栈。文件名: clon12compiler.dll
(编译器)、 openclon12.dll
(ICD)和WinPixEventRuntime.dll
(仅限 x64 依赖项)。 21.0.0 中引入的这些组件最终分别从 21.3.0(仅编译器)和 21.3.6-2 开始由 mesa-dist-win 提供。 CLonD3D12 驱动程序可作为 OpenCL ICD 使用。有关如何部署的信息,请参阅使用说明。 CLonD3D12 官方要求 Windows 10 v10.0.19041.488 或更高版本,它依赖于 DirectX IL 进行重新分发 - dxil.dll
来加载,可以通过部署工具安装。 CLonD3D12 作为返回 D3D12 API 调用的包装器运行。由于这种性质,它可以使用 D3D12 GPU 加速(如果可用),否则使用 Windows 内置的 WARP 软件渲染。使用 WARP 时,CLonD3D12 用于通告 CL_DEVICE_TYPE_GPU,但在 23.0.0 中更改为 CL_DEVICE_TYPE_CPU,请参阅 microsoft/OpenCLOn12#19。有些程序会忽略故意设置 CL_DEVICE_TYPE_CPU 的驱动程序。自 Mesa 24.0.3 起,可以通过将CLON12_WARP_IS_HARDWARE
环境变量值设置为 1 来恢复 23.0.0 之前的旧行为。
clover OpenCL 堆栈已从 22.1.1 的发行包中删除,直到 Windows 支持最终确定,因为它目前不可用。文件名: MesaOpenCL.dll
(ICD)、 OpenCL.dll
(独立运行时)和pipe_swrast.dll
(管道加载程序)。自 21.3.7 起,可以使用每个应用程序部署工具来部署运行时,也可以通过复制粘贴及其依赖的所有可用管道加载程序在旧版本上部署运行时。部署时,运行时会隐藏系统上存在的所有其他 OpenCL ICD,并且仅允许软件使用 Mesa3D clover 作为唯一的 OpenCL 驱动程序。有关如何部署 ICD 的信息,请参阅使用说明。
自 21.2.0 起,D3D10 软件渲染器在 MSVC 包中提供。文件名: d3d10sw.dll
。这是 Microsoft WARP 的替代品,不幸的是没有干净的方法来部署它。
SPIR-V 到 DXIL 工具和库自 21.0.0 起在 MSVC 软件包中提供,自 22.2.0 起也在 MinGW 软件包中提供。文件名: libspirv_to_dxil.dll
、 spirv_to_dxil.dll
和spirv2dxil.exe
。
VA-API D3D12 驱动程序。文件名: vaon12_drv_video.dll
。该驱动程序在 22.3.0 中提供。就像 GLonD3D12、CLonD3D12 等一样,这是一个运行在 Direct3D 12 API 之上的分层驱动程序,因此它可以使用 GPU 加速(如果可用)。 Microsoft 已记录部署说明。每个应用程序部署工具已更新以协助此过程。
镓原始界面。这个已弃用的组件已在 Mesa3D 22.3.0 中删除。文件名: graw.dll
、 graw_null.dll
。这是一个虚拟的镓驱动程序,没有任何图形 API,主要用于测试。适用于 x86 和 x64 以及完整(支持窗口系统)和无头(无窗口)版本。自 20.0.2 起,MSVC 和 MSYS2 Mingw-w64 软件包中都提供了窗口版本和无窗口版本。
测试套件。许多可执行的单元测试。
32 位和 64 位版本的标头和库位于称为开发包的单独存档中。
从 22.2.0 开始,包含 PDB 格式的调试符号的 MSVC 调试信息包和 MinGW 断言启用的调试优化构建包可用。 MinGW 调试二进制文件可以用作其发布版本的直接替代品。对于使用每个应用程序部署的软件,这应该是无缝的,但对于系统范围的部署,需要重新部署才能从发布版本切换到调试版本,反之亦然。有关 MinGW 调试的更多信息,请参阅 debug/mingw-start-debugging.sh
如果您想复制我的构建,可以在此处找到构建说明。
首先在 Mingw 和 MSVC 包之间进行选择。有关详细信息,请参阅 MSVC 和 MinGW 包之间的差异部分。在提取发行包之前,请关闭所有使用 Mesa 的程序(如果有)正在运行。解压后,您将可以访问 2 个部署选项,它们都位于您安装 Mesa 的目录中。这两种部署实用程序都具有启动机制,因此您可以在一个会话中完成所需的所有部署。部署工具仅支持 Mesa3D 的 OpenGL 和 OpenGL ES 组件以及独立的 OpenCL clover。
一个系统范围的部署工具。虽然适用于缺乏硬件加速 OpenGL 支持的系统(例如云环境中的虚拟机),但它也可以在任何 Windows 系统上使用,以替换内置软件渲染 OpenGL 1.1 驱动程序,从而扩展 OpenGL 支持,以适用于硬件加速 OpenGL 不可用(例如 RDP 连接)的用例。由于运行 Windows 的 Virtualbox VM 存在潜在问题,如果使用系统范围的部署工具在其中安装了 Mesa3D 桌面 OpenGL 驱动程序,建议在此类 VM 中禁用 3D 加速,请参阅 #9。
每个应用程序部署工具,用于为单个程序部署 Mesa3D,无论是否存在硬件加速 OpenGL 支持。每个应用程序部署实用程序的更改是持久的,并且在升级和重新安装过程中都会保留。每个应用程序部署实用程序可帮助您节省存储空间并使事情变得更容易,因为您无需从 Mesa 安装目录手动复制 DLL,因为它会创建指向您选择使用的任何 Mesa 驱动程序的符号链接。此行为可确保使用 Mesa 的所有程序都使用相同的最新版本。如果应用程序是 64 位或32 位和您需要的驱动程序。 32 位应用程序在运行时会在任务管理器中标记其名称。无论 GPU 功能如何,大多数应用程序都会使用 Mesa,但某些应用程序可能足够智能,仅从系统目录加载 OpenGL。通过提供应用程序文件名,会生成一个 .local 文件,以尝试强制应用程序在不需要时使用 Mesa3D。此外,Federico Dossena 的 Mesainjector 也可用于解决此问题。 Mesainjector 的构建说明。
200x 及更早版本的旧应用程序可能需要设置 MESA_EXTENSION_MAX_YEAR 环境变量,请参阅旧版软件兼容性部分。
需要 OpenGL 3.2 或更高版本的应用程序可能需要 OpenGL 上下文配置覆盖。
此处提供了有关 OpenGL 上下文配置覆盖、切换到其他驱动程序和旧应用程序兼容性的示例。
官方 Mesa3D 文档可在此处获取。
OpenCL ICD 部署是通过使用系统 OpenCL 运行时(例如Windowssystem32
中的opencl.dll
)注册 ICD 文件来完成的。如果您没有系统 OpenCL 运行时,您可以通过安装 Intel OpenCL CPU 运行时来获取它。它也适用于 AMD CPU。
Vulkan 驱动程序的部署是使用 ICD 发现方法通过 Vulkan 运行时完成的。请注意,Vulkan 运行时与支持 Vulkan 的图形驱动程序捆绑在一起,因此可能不需要手动安装它。
运行系统范围的部署并执行卸载操作(如果可用),然后退出;
下载并运行 Everything 工具(任何风格都可以);
运行每个应用程序部署工具并使其保持运行状态;
在 Everything 工具中,在菜单下的文本字段中输入libgallium_wgl.dll attrib:L
并保持 Everything 工具运行;
对于 Everything 工具中的每个搜索结果:
通过“打开路径”或“打开文件位置”上下文菜单选项在 Windows 资源管理器中打开其位置;
查找 *.local 文件并删除它们,但前提是您确定在部署到该位置期间指定了文件名;
从地址栏复制位置并将其提供给每个应用程序部署工具;
向所有部署发送“否”,直到要求您进行更多部署为止,然后在那里发送“是”。
分别使用 osmesa.dll 和 graw.dll 文件名重复步骤 4 和 5,与 libgallium_wgl.dll 的操作方式相同;
关闭每个应用程序部署和 Everything 工具;
恢复任何注册表更改以及配置 Vulkan 运行时以使用任何 Mesa3D Vulkan 驱动程序的任何环境变量,请参阅使用说明以获取有关您可能需要恢复哪些潜在更改的线索;
重复步骤 8,但对于 OpenCL。
警告:某些文件已被每个应用程序部署工具覆盖的程序可能需要重新安装/修复。自 22.0.0 起,每个应用程序部署工具都会检测此部署场景并发出警告。
200x 及更早版本的旧应用程序可能需要设置 MESA_EXTENSION_MAX_YEAR 环境变量以避免缓冲区溢出。它期望年份数字作为值,最常用的是 2001。它将 Mesa3D 返回的扩展列表修剪为截至并包括提供的年份发布的扩展,因为 Mesa3D 扩展列表按年份排序。
例如: set MESA_EXTENSION_MAX_YEAR=2001
。请参阅如何设置环境变量。
随着 OpenGL 3.1 的发布,OpenGL 3.0 中标记为弃用的许多功能已被删除,并且自 OpenGL 3.2 发布以来,该 OpenGL 规范分支被称为 OpenGL 核心配置文件。此外,在 OpenGL 3.3 中,还引入了 OpenGL 规范的一个新分支(称为前向兼容上下文),该分支删除了 OpenGL 3.0 弃用的功能(这些功能在 OpenGL 3.1 中未删除)。大多数专有驱动程序都以 OpenGL 3.1 的 GL_ARB_compatibility 扩展和 OpenGL 3.2 及更高版本的兼容性上下文的形式实现了这些更改的豁免。由于复杂性,尤其是缺乏对 GL_ARB_compatibility 和兼容性上下文的正确实现测试,Mesa3D 开发人员选择推迟该领域的工作,直到 Mesa 18.1 引入 GL_ARB_compatibility 支持,然后 Mesa 21.3 将兼容性上下文支持提高到 llvmpipe 的 OpenGL 4.5。总之,请求 OpenGL 兼容性上下文的程序将无法达到 Mesa 18.0 的 OpenGL 3.0、Mesa 18.1 的 3.1 和 Mesa 21.3 及更高版本的 4.5 以上。不幸的是,此类程序在 Windows 上很普遍,开发人员往往避免使用核心配置文件所需的上下文标志。幸运的是,Mesa3D 提供了一种机制来覆盖所请求的 OpenGL 上下文。有 2 个环境变量会覆盖 OpenGL 上下文配置:
MESA_GL_VERSION_OVERRIDE
它用于指定OpenGL上下文版本和类型。它需要以下格式的值
OpenGLMajorVersion.OpenGLMinorVersion{FC|COMPAT]。
FC 表示前向兼容上下文。 COMPAT 表示 OpenGL 3.2 及更高版本的兼容性上下文,并且为 OpenGL 3.1 启用 GL_ARB_compatibility。版本号后缺少任何字符串表示指定的 OpenGL 版本的 Mesa3D 默认上下文类型如下:为 OpenGL 3.0 启用的已弃用功能、自 Mesa 18.1 起为 OpenGL 3.1 启用的 GL_ARB_compatibility 以及 OpenGL 3.2 及更高版本的核心配置文件。示例:3.3FC 表示 OpenGL 3.3 向前兼容上下文,3.1COMPAT 表示具有 GL_ARB_compatibility 的 OpenGL 3.1,3.2 表示 OpenGL 3.2 核心配置文件。 llvmpipe 驱动程序的默认值为 4.5COMPAT(Mesa>=21.3)、3.1COMPAT(Mesa>=18.1)和 3.0COMPAT(Mesa<=18.0)。
该变量提供的一个非常重要的功能是可以配置不完整的 OpenGL 上下文。程序只能从正在使用的 Mesa3D 驱动程序请求具有 Khronos 认证的最高 OpenGL 上下文。目前,llvmpipe 在所有 OpenGL 配置文件中都经过了 OpenGL 4.5 认证。目前,swr 和 GLonD3D12 在核心配置文件/前向兼容上下文中已通过 OpenGL 3.3 认证,在兼容性配置文件中已通过 OpenGL 3.1 认证。 zink OpenGL 支持取决于底层 Vulkan 驱动程序。由于 Mesa 17.3 的值适用于 OpenGL 4.6,因此可以被识别。
MESA_GLSL_VERSION_OVERRIDE
用于指定着色语言版本。支持的值是转换为整数的版本号:110、120、130、140。150、330、400、410、420、430、440、450 和 460。仅自 Mesa 17.3 起才识别值 460。例如,值 130 与 GLSL 1.30 匹配。保持 OpenGL 上下文和着色语言版本同步始终是一个好主意,以避免程序混乱,从而导致崩溃或故障。发生这种情况是因为大多数应用程序依赖于同步 OpenGL 和 GLSL 版本的专有驱动程序行为。这是 OpenGL - GLSL 关联表。 llvmpipe 的默认值:如果 MESA_GL_VERSION_OVERRIDE 未定义或与核心配置文件匹配,则 Mesa 21.3 为 450,Mesa 18.1 为 140,Mesa 18.0 为 130。
在 Windows 下,设置环境变量的最简单方法是编写批处理文件。您很可能需要这样做:
对于每个需要比所选 Mesa3D 驱动程序默认公开的版本更高的 OpenGL 和 GLSL 版本的应用程序;
如果您想为桌面 OpenGL 选择非默认驱动程序;
如果您需要修剪扩展列表以实现旧程序兼容性。
只需打开记事本,编写批处理脚本即可。保存时,文件名以 .bat 或 .cmd 结尾,将保存类型更改为所有文件,并将保存位置更改为应用程序可执行文件所在的位置。如果您对批处理脚本有一定的了解,您可以在脚本执行期间使用 CD 命令更改当前目录,从而可以将脚本保存在您想要的任何位置,如 rpcs3 和 GPU Caps Viewer 示例中所示。 Mesa 使用的大多数环境变量的文档可在此处找到。完整的例子可以在这里找到。
您可以在同一个批处理脚本上设置多个环境变量以混合 Mesa3D 提供的功能。