VirtualBox

Ticket #475 (new defect)

Opened 1 year ago

Last modified 1 month ago

3D acceleration support for VBox guests

Reported by: sandervl73 Assigned to:
Priority: major Component: other
Version: VirtualBox 1.4.0 Keywords:
Cc: Guest type: other
Host type: other

Description (Last modified by sandervl73)

This ticket is used to track development of 3d acceleration support.

I have committed my initial OpenGL guest support to the public SVN tree:

Current status:

  • communication framework between guest and host is present
  • simple OpenGL samples are functional; they display their rendered output in an external window on the host for testing purposes)
  • supported are only Windows guests combined with a Windows host
  • not all OpenGL commands are implemented; most simple ones are

Plans:

  • Linux host and guest OpenGL support
  • Add OpenGL extensions as reported by the host OS
  • Direct3D emulation using OpenGL

We are looking for external developers with an interest to help us out to complete this work.

Installation instructions:

To enable it you must add the following registry keys:

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\OpenGLDrivers\VBoxOGL]
"Version"=dword:00000002
"DriverVersion"=dword:00000001
"Flags"=dword:00000001
"Dll"="VBoxOGL.dll" 

You need to build the latest additions from SVN as the OpenGL ICD mechanism needs a change in the display driver.

VBoxOGL.dll needs to be present in \Windows\System32.

TEMPORARY requirement: to enable OpenGL you must change src\VBox\Main\VMMDevInterface.cpp at line 606.

You can also directly link the OpenGL test cases with VBoxOGL.lib to test them directly.

  • replace $(PATH_SDK_W2K3DDKX86_LIB)/opengl32.lib with $(PATH_LIB)/VBoxOGL.lib in the makefile of the test cases
  • add VBOX_WITH_WGL_EXPORTS to VBoxOGL_DEFS in the VBoxOGL makefile

Enabling logging can be of invaluable help while debugging problems.

  • export the VBOX_LOG variable and set it to -all+shared_opengl+dev_vmm_backdoor
  • build the debug version of VBox

The full debug version of VBox adds quite a bit of overhead and might assert from time to time. For OpenGL debugging you only need to use the debug binaries of the hardware Devices (VBoxDD*.*). You can simply copy them into the directory with the full release version. (both must be at the same SVN level of course)

Change History

07/02/07 14:00:10 changed by sandervl73

  • description changed.

07/02/07 14:00:21 changed by sandervl73

  • description changed.

07/02/07 14:00:49 changed by sandervl73

  • description changed.

07/02/07 14:02:37 changed by sandervl73

  • description changed.

07/02/07 14:20:05 changed by sandervl73

  • description changed.

07/03/07 08:52:34 changed by sandervl73

Even Rouault wrote in http://forums.virtualbox.org/viewtopic.php?p=2588#2588:

Looks like we're working on complementary things... I've updated tonight my QEMU (Linux) OpenGL patch : http://qemu-forum.ipi.fi/viewtopic.php?t=2984

I guess it could be possible to reuse my client and server stubs even if you use a different guest/host data transmission protocol. I think I'm done with most of the core OpenGL API and the vendor extensions.

07/06/07 10:19:44 changed by sandervl73

  • description changed.

07/09/07 11:13:30 changed by sandervl73

  • description changed.

07/09/07 11:14:00 changed by sandervl73

  • description changed.

07/09/07 11:42:20 changed by aeichner

Porting the OpenGL to Linux host is in work.
It doesn't work at the moment but the important functions are implemented.
This includes:
vboxglDrvCreateContext
vboxglDrvDeleteContext
vboxglDrvSetContext
vboxglDrvCopyContext
vboxglDrvReleaseContext
vboxglDrvSetPixelFormat
vboxglDrvDescribePixelFormat
vboxDrvIsExtensionAvailable

The newest patch is available at http://aleichner.homepage.t-online.de/gllin.patch

07/09/07 21:14:47 changed by aeichner

tstShOpenGL.exe runs without crashing and showing extensions available on the host. Updated patch at the above mentioned URL. The biggest problem now is that we don't have a global variable Display and we can only have one per application. libX11 is also not threadsafe.

07/10/07 20:46:19 changed by Even Rouault

At http://qemu-forum.ipi.fi/viewtopic.php?t=2984, you'll find an updated version of the OpenGL patch that adds Win32 guest TCP/IP support.

See GL_README.txt for use and compilation details. Extract :

NEWS :

* 2007/07/09 :

- Add support of TCP/IP for Win32 guest (see 'How to use it ?' and 'Debugging infrastructure' below for compilation and configuration details)

- Add support for missing calls : glEnableVariantClientStateEXT,glDisableVariantClientStateEXT, glVariantPointerEXT, glGetVariantPointerEXT

- Improve a bit XGL support.It runs now smoothly but with the HACK_XGL environment variable defined (still need to figure out why this hack is necessary)

- Add command-line documentation for opengl_server and opengl_player. Among them : an added option to opengl_server, namely -parent-xid=XXXXX, enables you to attach the created OpenGL window as a child of XXXXX (can be obtained thanks by xwininfo by a click on the emulator window), which gives a satisfactory visual integration. Except the fact that Windows cursor (which is emulated) will be invisible, because behind the OpenGL window... The Windows trick equivalent to XFixesGetCursorImage is still to be found to display a soft cursor upon the OpenGL window.

- In the head of opengl_client.c, a summary list of useful environment variables

(in reply to: ↑ description ) 07/12/07 06:30:42 changed by Fenix*NBK*

I want to add myself as CC to this bug. I hope it will do so automatically with this message.

07/13/07 12:29:28 changed by sandervl73

I have turned off OpenGL acceleration by default. I'll make it configurable in the future, but for now you'll have to change src\VBox\Main\VMMDevInterface.cpp at line 606.

07/13/07 12:31:50 changed by sandervl73

I'll merge the Linux changes next week. Work is also currently underway to provide VRAM heap allocation, so we can remove the test code to display OpenGL output in a seperate window.

With VRAM we will have a simple method of maintaining a single display buffer in the guest and host. There will be no more need for copying.

07/13/07 12:35:10 changed by sandervl73

When the VRAM heap allocation code is finished, I'll update the Windows host backend to make use of it, so it can be easily ported to Linux.

Then the basics will be ready and we'll need to decide which parts of the QEmu OpenGL part we can reuse. In its current form that code is not very portable nor cleanly separated. Yet doing everything from scratch is a rather big (and annoying) task. Especially taking all the OpenGL extensions into account.

07/13/07 12:37:34 changed by sandervl73

  • description changed.

07/17/07 14:20:24 changed by aeichner

I Think I found a way to avoid the global display variable and to prevent nvidia drivrs to crash (tstShOpenGL.exe works). But it is not really finished. Can you wait with merging my code until i send a new patch to the development list?

(follow-up: ↓ 21 ) 07/17/07 17:19:19 changed by aeichner

The new code works without a global display variable now and it doesn't crash with nvidia drivers but i want to test it with the mesa library. Unfortunately I have not enough time today to test it but i hope to send the new patch to the mailinglist tomorrow (maybe tonight).

10/20/07 18:54:48 changed by Fenix*NBK*

This needs to be changed from "defect" to "enhancement".

Is there any progress here planned for next version ? I don't see commits since July.

(in reply to: ↑ 19 ) 11/18/07 06:31:22 changed by petershe

Is all the work still focusing just on Windows 3D as a guest? I am very keen just to have 3D desktop effects for Linux guests on a Windows XP host. I assume that is easier than trying to support games on a XP guest.. any feedback update on support for OpenGL on a Linux guest?

Thanks Replying to aeichner:

The new code works without a global display variable now and it doesn't crash with nvidia drivers but i want to test it with the mesa library. Unfortunately I have not enough time today to test it but i hope to send the new patch to the mailinglist tomorrow (maybe tonight).

11/20/07 09:47:11 changed by Romashka

Just FYI there's a new entry on KVM TODO list now: * Add vmgl support to qemu. Port to virtio. Write a Windows driver. It's in the "For the adventurous" section though.

01/06/08 00:43:16 changed by Fenix*NBK*

Romashka: Ohh, please, let's continue discussing those rumors on the forum. This thread should be kept for development.

-Technologov, 06.01.2008.

02/17/08 17:39:44 changed by jfd

I want to add myself as CC to this bug. I hope it will do so automatically with this message.

06/30/08 01:10:44 changed by Stoffe

I want to add myself as CC to this bug. I hope it will do so automatically with this message.

07/24/08 14:37:55 changed by scheler

I want to add myself as CC to this bug. I hope it will do so automatically with this message.

07/31/08 10:16:33 changed by henrik242

© 2008 Sun Microsystems, Inc.
ContactPrivacy policy