Current version

v1.10.4 (stable)


Main page
Archived news
Plugin SDK
Knowledge base
Contact info
Other projects


Blog Archive

3D acceleration under virtualization

On my last entry about a shader compiler, a commenter asked why I don't use 3D acceleration. One of the problems with this is availability. There are many reasons why 3D acceleration may not be viable, such as:

The one that I forgot, however, is virtualization. Until recently, running in a virtualized CPU environment meant you got no 3D acceleration, because only a 2D display adapter was emulated. This was true for the two majors at the time, VMWare and VirtualPC. This is perhaps most annoying for testing -- I don't know about you, but I don't have any real systems left running Windows 98. Thus, your only options for running under these systems was to have a fallback where you used no 3D acceleration at all.

That's changed, now that both VMWare and Parallels have 3D acceleration support.

I've been curious as to how effective the 3D support is, so out of curiousity, I installed VMWare Player and dumped the Direct3D caps bits from it and my friend's MacBook running Parallels. Just for kicks, I'll throw in the caps from the system I ran VMWare Player on as well:

(Getting DXCapsViewer running on VMWare Player was a bit interesting, as for some reason it wouldn't run -- probably because I tried running it under Windows XP RTM. If you run into errors about problems with application configuration, open DXCapsViewer.exe in Visual Studio in Resource mode and delete the manifest resource.)

Analysis after the jump.

Now, this isn't a fair comparison between the solutions, since I was running VMWare Player on a different system instead of VMWare Fusion. Still, I find the differences between the two solutions interesting. Neither of them will virtualize a 3D card to the point of being usable for GPGPU, at least for Direct3D, but they're getting close. I believe both are translating Direct3D calls into OpenGL, which is going to cause problems that are very hard to fix -- for instance, the rules for which verts control interpolants for flat shaded primitives are very different between OpenGL and Direct3D.

Parallels was the one I looked at first. This was on an ATI Radeon X1300 Mobility:

VMWare Player 2 took a little coaxing to get working: (Native card is an NVIDIA GeForce Go 6800):

So, basically... whether you can get Direct3D-based software running on these is hit-or-miss, considering that the reported feature sets are quite different from what you'd find on real video cards. I haven't dug into OpenGL much, although I suspect it'd be a bit more stable given that it'd be more of a pass-through. Still, even though it's not really viable at this point, it is good to see some progress made on the 3D virtualization front.

(Now, back to CPU land for me....)


This blog was originally open for comments when this entry was first posted, but was later closed and then removed due to spam and after a migration away from the original blog software. Unfortunately, it would have been a lot of work to reformat the comments to republish them. The author thanks everyone who posted comments and added to the discussion.