【Vmware】虚拟机Solidworks卡顿,显卡调用问题。

4. 第一步:VMware 虚拟机配置

4.1 VMware 图形界面设置

  1. 关闭虚拟机
  2. 虚拟机设置 → 显示器
  3. 勾选 「加速 3D 图形」
  4. 「图形内存」拉到最大(本例为 8GB)
  5. 显示器数量可以先设为 1 个(多屏会加重虚拟显卡的像素填充负担,调试阶段先单屏确认)

4.2 编辑 .vmx 文件

在虚拟机文件目录下找到 .vmx 文件(如 Windows 11 x64.vmx),用文本编辑器打开。

重要:必须先关机再编辑,否则 vmx 修改会在关机时被覆盖。

检查并确保以下配置存在:

ini 复制代码
mks.enable3d = "TRUE"
svga.graphicsMemoryKB = "8388608"

然后追加以下四行(我的显卡是AMD 的 7900xtx,如果你是英伟达或AMD其他型号,请不要照抄,去问AI核实):

ini 复制代码
mks.gl.allowBlacklistedDrivers = "TRUE"
mks.enableDX12Renderer = "FALSE"
mks.enableDX11Renderer = "FALSE"
mks.enableGLRenderer = "TRUE"

逐条解释:

配置项 含义
mks.gl.allowBlacklistedDrivers = "TRUE" 核心。允许 AMD 消费级显卡(RX 系列)参与 3D 加速。VMware 默认只信任专业卡(Radeon Pro / Quadro),消费卡在它眼里是"黑名单驱动"。
mks.enableDX12Renderer = "FALSE" 关闭 DirectX 12 渲染路径。
mks.enableDX11Renderer = "FALSE" 关闭 DirectX 11 渲染路径。
mks.enableGLRenderer = "TRUE" 强制走 OpenGL 渲染路径。SOLIDWORKS 的生命线是 OpenGL,不是 DirectX。

为什么关 DX11/DX12?因为 VMware 的 DX 渲染后端在某些 AMD 卡上有兼容性问题。

且 SOLIDWORKS 本身只用 OpenGL,开着 DX 渲染路径会让 mksSandbox.exe 初始化额外的无用管线,消耗资源还可能导致不稳定。

4.3 调整虚拟显存

此外建议调整:

ini 复制代码
svga.vramSize = "536870912"

svga.vramSize 是虚拟显卡上报给客户机的显存容量,单位字节。536870912 = 512MB,对 SOLIDWORKS 中等模型足够。

注意:这个值必须能被 65536 整除(Windows 客户机要求)。536870912 / 65536 = 8192,整除成立。

4.4 完整操作序列

复制代码
1. 关闭虚拟机
2. 编辑 .vmx,添加上述配置行
3. 保存 .vmx
4. 启动虚拟机

5. 第二步:SOLIDWORKS 注册表修复

5.1 背景

SOLIDWORKS 启动时会检查 GPU 的 Vendor ID 和 Device ID,与内部白名单比对。VMware SVGA 3D 不在名单里,所以它强制打开「使用软件 OpenGL」并灰掉该选项(不可取消)。

注册表里的 Workarounds 值是一个位掩码,控制 SOLIDWORKS 对特定 GPU 的兼容性行为。其中某一位控制是否允许该 GPU 走硬件 OpenGL。

5.2 操作步骤

  1. 关闭 SOLIDWORKS(必须,否则注册表更改不会生效)

  2. Win + R,输入 regedit,回车

  3. 导航到:

    复制代码
    HKEY_CURRENT_USER\Software\SolidWorks\SOLIDWORKS 20XX\Performance\Graphics\Hardware\VMware, Inc.

    20XX 换成你的版本号,比如 2023 → SOLIDWORKS 2023

  4. 在右侧找到 Workarounds(DWORD 类型)

  5. 双击修改,将值从 10(十六进制 0x10)改为 9(十六进制 0x09)

    复制代码
    原值:0x00000010 (16)
    改后:0x00000009 (9)
  6. 点击确定,关闭注册表编辑器

5.3 含义注解

0x10 = 二进制 0001 0000

0x09 = 二进制 0000 1001

改动了两个 bit:

  • bit 0 (1) → 启用了某种通用兼容模式
  • bit 3 (8) → 关掉了"强制软件渲染"标记
  • bit 4 (16) → 原本置位的一个限制标记被清除

这是社区广泛验证过的值。如果 0x09 在你的版本上不生效,可以尝试 0x080x010x00 逐个测试。


开始建模吧