I'm sure many if you have been waiting for this for a while and its finally here, 3D Hardware acceleration in Linux!
I just got openSUSE 12.1 working with GNOME 3 experience and wanted to share it here with you. This is experimental so I would recommend you make a new VM if you want to try it.
I started with opensuse 12.1 32bit liveCD
Don't forget to turn on 3D acceleration
VM > Settings > Display > Accelerate 3D graphics
Start the liveCD and Install opensuse under
Applications > System Tools > Live Installer
You need to fully update by running:
sudo zypper update
Reboot after updating
Install the following dependencies that are needed to build:
Getting the Latest Source Code
Mesa/Gallium master branch. This code is used to build libGL, and the direct rendering svga driver for libGL, vmwgfx_dri.so, and the X acceleration library libxatracker.so.x.x.x.
git clone git://anongit.freedesktop.org/git/mesa/mesa
VMware Linux guest kernel module. Note that this repo contains the complete DRM and TTM code. The vmware-specific driver is really only the files prefixed with vmwgfx.
git clone git://anongit.freedesktop.org/git/mesa/vmwgfx
libdrm, A user-space library that interfaces with drm. Most distros ship with this driver. Safest bet is really to replace the system one. Optionally you can point LIBDRM_CFLAGS and LIBDRM_LIBS to the libdrm-2.4.22 package in toolchain. But here, we replace:
git clone git://anongit.freedesktop.org/git/mesa/drm
xf86-video-vmware. The chainloading driver, vmware_drv.so, the legacy driver vmwlegacy_drv.so, and the vmwgfx driver vmwgfx_drv.so.
git clone git://anongit.freedesktop.org/git/xorg/driver/xf86-video-vmware
Building the Code
Build libdrm: If you're on a 32-bit system, you should skip the --libdir configure option. Note also the comment about toolchain libdrm above.
cd drm
./autogen.sh --prefix=/usr --enable-vmwgfx-experimental-api --libdir=/usr/lib64
make
sudo make install
cd ..
Build Mesa and the vmwgfx_dri.so driver, the vmwgfx_drv.so xorg driver, the X acceleration library libxatracker. The vmwgfx_dri.so is used by the OpenGL libraries during direct rendering, and by the Xorg server during accelerated indirect GL rendering. The libxatracker library is used exclusively by the X server to do render, copy and video acceleration: The following configure options doesn't build the EGL system. As before, if you're on a 32-bit system, you should skip the --libdir configure option.
cd mesa
./autogen.sh --prefix=/usr --libdir=/usr/lib64 --with-gallium-drivers=svga --with-dri-drivers= --enable-xa
gmake
sudo make install
cd ..
Build xf86-video-vmware: Now, once libxatracker is installed, we proceed with building and replacing the current Xorg driver. First check if your system is 32- or 64-bit. If you're building for a 32-bit system, you will not be needing the --libdir=/usr/lib64 option to autogen.
cd xf86-video-vmware
./autogen.sh --prefix=/usr --libdir=/usr/lib64
make
sudo make install
cd ..
Build vmwgfx kernel module. First make sure that any old version of this kernel module is removed from the system by issuing
sudo rm /lib/modules/`uname -r`/kernel/drivers/gpu/drm/vmwgfx/vmwgfx.ko*
then build
cd vmwgfx
make
sudo make install
sudo cp 00-vmwgfx.rules /etc/udev/rules.d
You need to enter root to run depmod and modprobe, sudo wont work
su
depmod -ae
Now try to load the kernel module by issuing:
modprobe vmwgfx
exit
Then type dmesg and look at the output. you should see:
If you run into any problems post the errors you get here and I will try to help but this is pretty new to me. In 64bit you probably need to get some different dependencies. I went though the guide again and made some adjustments so it should work now if you were having any problems.
made corrections to guide:
-added make to dependencies
-run gmake instead of make for mesa
-removed xorg-x11-devel from dependencies (it gets installed by another package anyways)
-added info about su for depmod and modprobe
Message was edited by: khogan made corrections to guide -added make to dependencies -run gmake instead of make for mesa -removed xorg-x11-devel from dependencies (it gets installed by another package anyways) -added info about su for depmod and modprobe
UPDATE: I have it working now. I wrote up a step-by-step guide for anyone else who is trying to get this to work on Kubuntu. I still ran into the big fonts problem. I also found that VMware tools cannot be reinstalled once you update to the new kernel, and that Shared Folders no longer appear in /mnt/hgfs.
I followed your guide for Kubuntu 11.10 x64 (with some modifications, e.g. --libdir=/usr/lib64 did not work for me). I got everything to build and install, but something is still not right. Specifically, after I install the Kubuntu specific build dependencies from packages I do
cd drm
./autogen.sh --enable-vmwgfx-experimental-api --prefix=/usr
make
sudo make install
cd ..
cd mesa
./autogen.sh --with-gallium-drivers=svga --with-dri-drivers= --enable-xa --prefix=/usr
make
sudo make install
cd ..
cd xf86-video-vmware
./autogen.sh --prefix=/usr
make
sudo make install
cd ..
sudo rm /lib/modules/`uname -r`/kernel/drivers/gpu/drm/vmwgfx/vmwgfx.ko*
cd vmwgfx
make
sudo make install
sudo cp 00-vmwgfx.rules /etc/udev/rules.d
sudo cp vmwgfx.ko /lib/modules/`uname -r`/kernel/drivers/gpu/drm/vmwgfx/vmwgfx.ko
sudo chmod 644 /usr/lib/xorg/modules/drivers/vmware_drv.*
Then I reboot. First problem is that the text is huge. I can work around this by forcing the DPI in the font settings, but this is not ideal. The main problem is that although I think it's using the new driver, I don't think 3D acceleration is working right. Many of the desktops effects fail to enable. Although Xorg log says "Direct rendering (3D) is enabled.", glxinfo says
OpenGL version string: 2.1 Mesa 7.11
Here are links to the output of dmesg, glxinfo, and the Xorg.0.log file.
I've also tried creating an xorg.conf with
Section "Device"
Identifier "SVGA Graphics Device"
Driver "vmware"
Option "2DAccel" "TRUE"
Option "3DAccel" "TRUE"
EndSection
But this doesn't seems to change anything. I just get "Option "2DAccel" is not used" and "Option "3DAccel" is not used".
Any ideas or assistance would be great. Maybe if I can get this working we will have a real guide to setting up 3D on the Ubuntu variants.
Hi,
We independantly created the same howto, but I wanted to contribute as I saw you were looking for specific instructions for Ubuntu, which is the platform I used.
Please find the procedure I created for Ubuntu 11.10 here:
http://joostlek.nl/vmware-linux-guest-with-3d-accelerated-graphics
Joost
Nice guide. I must have missed it since it is so recent. Looks like we came up with a similar method except you do autogen and configure. Also, I bet getting the updated kernel is the key step I'm missing. I'll give it a try later and post my resutls here.
UPDATE: I tried to follow your guide but I ran into a build error. I loaded a VM snapshot of my closest attempt and installed the kernel as you prescribed and I think it's finally working! I'm going to do it again from scratch and write up what worked for me. I'll be sure to add a link to your guide once it's done.
@Joost
Great guide! Unfortunately I had problems with it on Mint 12. There's only a black screen after the login and the only way around is GNOME classic. It seems like I'm not alone with this problem so any ideas or tips would be greatly appreciated.
Thanks in advance.
Can you post the log of Xorg to something like pastebin?
I'm not sure if this will help you in any way. I first tried to start my test Mint with the installed driver normally and got my black screen. After a reset I started it with GNOME classic. And now I have a Xorg.0.log and Xorg.0.log.old. As I deleted all Xorg logs before the .old log should be from the black screen session and the other one from the working GNOME classic session (unless my understanding of the Xorg logging is wrong - which could be very easily :p).
Both logs nearly don't differ. The .old has only one line more (drmOpenDevice: open result is 12, (OK)) but I guess this is irrelevant.
However, here are the links (they will expire in one month): http://pastebin.com/7g3NjECV http://pastebin.com/CThiAgCh
Mybe also noteable (I first recognized it by reading the log) I don't have a 16:9 resolution in GNOME classic anymore. But I'm sure there was one before I installed the driver (1920x1080).
I think when I tried to install the new kernel first I got a black screen as well. When I wrote up my guide I made that the last step since otherwise it didn't work.
I thought I would give openSUSE a try. Everything worked great, except when I reboot, hardware acceleration does not enable.
The weird thing is that after I login, dmesg shows vmwgfx was loaded. It just never switches over from the software renderer. If I do glxinfo I get
libGL error: failed to load driver: vmwgfx
But, if I do su and then glxinfo it magically switches on the hardware acceleration. Then, if I exit to a normal user prompt and run glxinfo again it goes back to software. Any ideas? Is this some kind of permissions issue?
The real issue seems to be that hardware acceleration is only working for root. If I run say, glxgears as root, then hardware acceleration is reported to work, but if I run it as a normal user, it reports hardware acceleration is not enabled.
UPDATE: Looks like a permission issue:
libGL: OpenDriver: trying /usr/lib64/dri/vmwgfx_dri.so
libGL error: failed to open drm device: Permission denied
libGL error: failed to load driver: vmwgfx
libGL: OpenDriver: trying /usr/lib64/dri/swrast_dri.so
SOLVED: You need to make sure your user is in the video group.
Hello,
After some compiling and patching I finally have everything set up in Ubuntu 10.04 Lucid Lynx, I'm using git from 2012/03/20 and but I'm unable to get 3D support. Although vmwgfx is loaded I get the following when loading the vmware_drv.so
(II) LoadModule: "vmware" (II) Loading /usr/local/gallium/lib/xorg/modules/drivers/vmware_drv.so (II) Module vmware: vendor="X.Org Foundation" compiled for 1.7.6, module version = 12.0.1 Module class: X.Org Video Driver ABI class: X.Org Video Driver, version 6.0 (II) vmware: driver for VMware SVGA: vmware0405, vmware0710 (II) Primary Device is: PCI 00@00:0f:0 drmOpenDevice: node name is /dev/dri/card0 drmOpenDevice: open result is 10, (OK) drmOpenByBusid: Searching for BusID PCI:0:15:0 drmOpenDevice: node name is /dev/dri/card0 drmOpenDevice: open result is 10, (OK) drmOpenByBusid: drmOpenMinor returns 10 drmOpenByBusid: Interface 1.4 failed, trying 1.1 drmOpenByBusid: drmGetBusid reports pci:0000:00:0f.0 (--) vmware(0): DRM driver version is 2.4.0 (EE) vmware(0): Device is not screen object capable. (WW) vmware(0): Disabling 3D support. (WW) vmware(0): Disabling Render Acceleration. (WW) vmware(0): Disabling RandR12+ support. (--) vmware(0): VMware SVGA regs at (0x10d0, 0x10d1)
vmwgfx] Initialized drm 1.1.0 20060810 [vmwgfx] Capabilities: [vmwgfx] Rect copy. [vmwgfx] Cursor. [vmwgfx] Cursor bypass. [vmwgfx] Cursor bypass 2. [vmwgfx] 8bit emulation. [vmwgfx] Alpha cursor. [vmwgfx] 3D. [vmwgfx] Extended Fifo. [vmwgfx] Multimon. [vmwgfx] Pitchlock. [vmwgfx] Irq mask. [vmwgfx] Display Topology. [vmwgfx] GMR. [vmwgfx] Max GMR ids is 128 [vmwgfx] Max GMR descriptors is 4096 [vmwgfx] VRAM at 0xd0000000 size is 131072 kiB [vmwgfx] MMIO at 0xd8000000 size is 2048 kiB [vmwgfx] global init. [TTM] Zone kernel: Available graphics memory: 2025434 kiB. [TTM] Initializing pool allocator. mtrr: type mismatch for d8000000,200000 old: write-back new: write-combining [vmwgfx] width 1280 [vmwgfx] height 800 [vmwgfx] bpp 32 [vmwgfx] Fifo max 0x00200000 min 0x00001000 cap 0x0000007f [vmwgfx] Not using screen objects, missing cap SCREEN_OBJECT_2 [vmwgfx] Supports vblank timestamp caching Rev 1 (10.10.2010). [vmwgfx] No driver support for vblank timestamp query. [vmwgfx] Detected no device 3D availability. [vmwgfx] Initialized vmwgfx 2.4.0 20120209 for 0000:00:0f.0 on minor 0 VMware memory control driver initialized vmmemctl: started kernel thread pid=3431 [vmwgfx] width 1280 [vmwgfx] height 800 [vmwgfx] bpp 32 [vmwgfx] Fifo max 0x00200000 min 0x00001000 cap 0x0000007f
I'm using VMWare Workstation 7.1.5 as 8.0.2 don't let me access a physical disk shared with the host (Windows 7 x64). The strange thing is that if I use the vmwgfx.ko included with VMware Tools from 7.1.5 I get the following:
[vmwgfx] Initialized drm 1.1.0 20060810 [vmwgfx] Capabilities: [vmwgfx] Rect copy. [vmwgfx] Cursor. [vmwgfx] Cursor bypass. [vmwgfx] Cursor bypass 2. [vmwgfx] 8bit emulation. [vmwgfx] Alpha cursor. [vmwgfx] 3D. [vmwgfx] Extended Fifo. [vmwgfx] Multimon. [vmwgfx] Pitchlock. [vmwgfx] Irq mask. [vmwgfx] Display Topology. [vmwgfx] GMR. [vmwgfx] Max GMR ids is 128 [vmwgfx] Max GMR descriptors is 4096 [vmwgfx] VRAM at 0xd0000000 size is 131072 kiB [vmwgfx] MMIO at 0xd8000000 size is 2048 kiB [vmwgfx] global init. [TTM] Zone kernel: Available graphics memory: 2025434 kiB. mtrr: type mismatch for d8000000,200000 old: write-back new: write-combining [vmwgfx] width 1280 [vmwgfx] height 800 [vmwgfx] bpp 32 [vmwgfx] Fifo max 0x00200000 min 0x00001000 cap 0x0000007f [vmwgfx] Have 3D [vmwgfx] Initialized vmwgfx 1.1.0 20100209 for 0000:00:0f.0 on minor 0 Console: switching to colour frame buffer device 100x37
And loading Ubuntu 10.04 vmware_drv.so seems to work, at least glxinfo inform about DRI Enabled. Although the speed of for example glxgears is quite low. Other strage thing is that the git version of vmwgfx.ko can be unloaded and seems to not be used (lsmod reports used by 0) and the VMware Tools version is used by 1 and cannot be unloaded (even without Xorg running).
Any clue? It seems that sometime in the past the SCREEN_OBJECT_2 capability becomes mandatory and for some reason with Workstation 7.1.5 we don't have that capability.
I've attached the full Xorg.0.log when running with git vmwgfx.ko, just in case.
Regards
I do not think this is going to work in WS 7. You should use WS 8 or better yet try the WS Tech Preview as compatibility and performance is imporved there. http://communities.vmware.com/community/vmtn/beta/workstationtp2012
I made another post there about how to report your issues so if you are having issues with the tech preview please make a post there.
It seems that there is no posibility with WS 7.1.5, I have tried with latest version that does not need HWv8, 1.4.1 20100928, but using this with current gallium git gives an error about the need for version 2.3.0.
Do you know if the Technology Preview has solved the Physical Disk issue? I have dual boot on the physical disk and would like to boot the linux partition both within VMware and in the usual way. It seems that the problem while booting from the physical disk is well documented and has been there during 8.0.0, 8.0.1 and 8.0.2.
Regards,
I am not sure if this is resolved yet. You would be better off asking in the tech preview forum, and/or reproducing the issue and making a post about it so it will get more exposure.
Runnign Debian 6 3.2.0-0.bpo.3 with the latest release Workstation 9. I cannot get this to work and I would love to see if anyone has had any luck with this over the past 5 months or so
Most of the same symptoms as above although the installation process for Debian is might different than Ubuntu it would seem as mesa cannot be installed from source as it keeps looking for packages like x11 which debian are libx11. Luckily the latest mesa build can be installed via sid repositories and that's all good.. Once it's done I get the aforementioned dmesg:
glxgears will load the gears up just fine however compiz won't run and glxinfo produces the following in lieu of that neat and tidy little message telling me all is right in the world:
name of display: :smileylaugh:
display: :smileylaugh: screen: 0
direct rendering: No (If you want to find out why, try setting LIBGL_DEBUG=verbose)
server glx vendor string: SGI
server glx version string: 1.4
server glx extensions:
GLX_ARB_multisample, GLX_EXT_visual_info, GLX_EXT_visual_rating,
GLX_EXT_import_context, GLX_EXT_texture_from_pixmap, GLX_OML_swap_method,
GLX_SGI_make_current_read, GLX_SGIS_multisample, GLX_SGIX_fbconfig,
GLX_SGIX_pbuffer, GLX_MESA_copy_sub_buffer, GLX_INTEL_swap_event
client glx vendor string: NVIDIA Corporation
client glx version string: 1.4
client glx extensions:
GLX_ARB_get_proc_address, GLX_ARB_multisample, GLX_EXT_visual_info,
GLX_EXT_visual_rating, GLX_EXT_import_context, GLX_SGI_video_sync,
GLX_NV_swap_group, GLX_NV_video_out, GLX_SGIX_fbconfig, GLX_SGIX_pbuffer,
GLX_SGI_swap_control, GLX_EXT_swap_control, GLX_ARB_create_context,
GLX_ARB_create_context_profile, GLX_NV_float_buffer,
GLX_ARB_fbconfig_float, GLX_EXT_fbconfig_packed_float,
GLX_EXT_texture_from_pixmap, GLX_EXT_framebuffer_sRGB,
GLX_NV_present_video, GLX_NV_copy_image, GLX_NV_multisample_coverage,
GLX_NV_video_capture, GLX_EXT_create_context_es2_profile,
GLX_ARB_create_context_robustness
GLX version: 1.4
GLX extensions:
GLX_ARB_multisample, GLX_EXT_visual_info, GLX_EXT_visual_rating,
GLX_EXT_import_context, GLX_EXT_texture_from_pixmap, GLX_SGIX_fbconfig,
GLX_SGIX_pbuffer, GLX_ARB_get_proc_address
OpenGL vendor string: Mesa Project
OpenGL renderer string: Software Rasterizer
OpenGL version string: 1.4 (2.1 Mesa 7.10.3)
OpenGL extensions:
GL_ARB_depth_texture, GL_ARB_draw_buffers, GL_ARB_fragment_program,
GL_ARB_fragment_program_shadow, GL_ARB_multisample, GL_ARB_multitexture,
GL_ARB_occlusion_query, GL_ARB_point_parameters, GL_ARB_point_sprite,
GL_ARB_shadow, GL_ARB_texture_border_clamp, GL_ARB_texture_compression,
GL_ARB_texture_cube_map, GL_ARB_texture_env_add,
GL_ARB_texture_env_combine, GL_ARB_texture_env_crossbar,
GL_ARB_texture_env_dot3, GL_ARB_texture_mirrored_repeat,
GL_ARB_texture_non_power_of_two, GL_ARB_transpose_matrix,
GL_ARB_vertex_program, GL_ARB_window_pos, GL_EXT_abgr, GL_EXT_bgra,
GL_EXT_blend_color, GL_EXT_blend_equation_separate,
GL_EXT_blend_func_separate, GL_EXT_blend_minmax, GL_EXT_blend_subtract,
GL_EXT_draw_range_elements, GL_EXT_fog_coord, GL_EXT_framebuffer_object,
GL_EXT_multi_draw_arrays, GL_EXT_packed_pixels, GL_EXT_point_parameters,
GL_EXT_rescale_normal, GL_EXT_secondary_color,
GL_EXT_separate_specular_color, GL_EXT_shadow_funcs,
GL_EXT_stencil_two_side, GL_EXT_stencil_wrap, GL_EXT_texture3D,
GL_EXT_texture_edge_clamp, GL_EXT_texture_env_add,
GL_EXT_texture_env_combine, GL_EXT_texture_env_dot3,
GL_EXT_texture_lod_bias, GL_EXT_texture_mirror_clamp,
GL_EXT_texture_object, GL_EXT_vertex_array, GL_ATI_texture_mirror_once,
GL_IBM_texture_mirrored_repeat, GL_NV_blend_square, GL_NV_depth_clamp,
GL_NV_fragment_program, GL_NV_fragment_program_option,
GL_NV_light_max_exponent, GL_NV_point_sprite, GL_NV_texgen_reflection,
GL_NV_texture_env_combine4, GL_NV_texture_rectangle,
GL_NV_vertex_program1_1, GL_NV_vertex_program, GL_SGIS_generate_mipmap,
GL_SGIS_texture_lod
The bottom line is that my compiz-check fails with this:
Gathering information about your system...
Distribution: Debian GNU/Linux (6.0.5)
Desktop environment: GNOME
Graphics chip: VMware SVGA II Adapter
Driver in use: vmware
Rendering method: AIGLX
Checking if it's possible to run Compiz on your system...
Checking for texture_from_pixmap... [ OK ]
Checking for non power of two support... [ OK ]
Checking for composite extension... [ OK ]
Checking for FBConfig... [ OK ]
Checking for hardware/setup problems... [FAIL]
There has been (at least) one error detected with your setup:
Error: Software Rasterizer in use
and everything else is telling me I should be good to go with 3D support however I can't turn the rasterizer off and I have no idea why.. Going on 3 days of bashing my head into a bloody pulp against a concrete wall and I'm about to loose my mind.. Any help would be greatly appreciated
Wow, as in all problems that seem impossible the solution usually comes out of the blue and is totally accidental. So after surrendering any hope to having mesa or 3D acceleration working I decided to ditch compiz and install emerald. In purging compiz from my system there was a left over libdecorator1 package that was supposed to be deleted but the damndest thing was that it couldn't be deleted because of some silly error that went a ltitle bit like this: No diversion 'diversion of /usr/lib/libGL.so.1.2 to /usr/lib/nvidia/diversions/libGL.so.1.2 by libgl1-nvidia-alternatives', none removed.
Turns out there was a symlink in /usr/lib/nvidia/diversions that was linked to a non-existent file and although I'd gone through synaptic and searched for any nvidiea or other driver and uninstalled them it kepted this one for some reason.. The solution was to manually delete the entire /usr/lib/nvidia directory by hand and then it was able to uninstall that. After this I just thought I'd run compiz-check to see if that changed anything and sure enough my last error turned into a [warn] and then asked me if I wanted to blacklist some driver which I said no to. Reinstalled compiz at this point, ran compiz-check and what do you know it comes out clean, but compiz still refuses to start saying that software rasterizing has been detected. I can have metacity as my compositor and it makes my docks look great and gives me proper icon transparency but I still can't have any 3D effects in terms of compiz. Compiz still doesn't load at all.
I signed up just to tell you OP... you're a beast. This worked perfect on openSUSE more than a year later. THANK YOU SO MUCH.