Index: /trunk/src/VBox/Additions/WINNT/Graphics/Video/Makefile.kmk
===================================================================
--- /trunk/src/VBox/Additions/WINNT/Graphics/Video/Makefile.kmk	(revision 78407)
+++ /trunk/src/VBox/Additions/WINNT/Graphics/Video/Makefile.kmk	(revision 78408)
@@ -105,19 +105,9 @@
    	$(PATH_TARGET)/VBoxWddmCat.dir/VBoxOGL.dll \
    	$(PATH_TARGET)/VBoxWddmCat.dir/VBoxD3D9wddm.dll \
-   	$(PATH_TARGET)/VBoxWddmCat.dir/wined3dwddm.dll \
-   	$(PATH_TARGET)/VBoxWddmCat.dir/VBoxOGLcrutil.dll \
-   	$(PATH_TARGET)/VBoxWddmCat.dir/VBoxOGLerrorspu.dll \
-   	$(PATH_TARGET)/VBoxWddmCat.dir/VBoxOGLfeedbackspu.dll \
-   	$(PATH_TARGET)/VBoxWddmCat.dir/VBoxOGLpackspu.dll \
-   	$(PATH_TARGET)/VBoxWddmCat.dir/VBoxOGLpassthroughspu.dll
+   	$(PATH_TARGET)/VBoxWddmCat.dir/wined3dwddm.dll
    VBoxWddm-inf_SOURCES.amd64 += \
    	$(PATH_TARGET)/VBoxWddmCat.dir/VBoxOGL-x86.dll \
    	$(PATH_TARGET)/VBoxWddmCat.dir/VBoxD3D9wddm-x86.dll \
-   	$(PATH_TARGET)/VBoxWddmCat.dir/wined3dwddm-x86.dll \
-   	$(PATH_TARGET)/VBoxWddmCat.dir/VBoxOGLcrutil-x86.dll \
-   	$(PATH_TARGET)/VBoxWddmCat.dir/VBoxOGLerrorspu-x86.dll \
-   	$(PATH_TARGET)/VBoxWddmCat.dir/VBoxOGLfeedbackspu-x86.dll \
-   	$(PATH_TARGET)/VBoxWddmCat.dir/VBoxOGLpackspu-x86.dll \
-   	$(PATH_TARGET)/VBoxWddmCat.dir/VBoxOGLpassthroughspu-x86.dll
+   	$(PATH_TARGET)/VBoxWddmCat.dir/wined3dwddm-x86.dll
   endif # VBOXWDDM_WITH_GL
  endif # VBOX_SIGN_ADDITIONS
@@ -183,19 +173,4 @@
 	$(INSTALL) -m 644 $< $(@D)
 
-  $(PATH_TARGET)/VBoxWddmCat.dir/VBoxOGLcrutil.dll: $(PATH_OBJ)/VBoxOGLcrutil/VBoxOGLcrutil.dll | $$(dir $$@)
-	$(INSTALL) -m 644 $< $(@D)
-
-  $(PATH_TARGET)/VBoxWddmCat.dir/VBoxOGLerrorspu.dll: $(PATH_OBJ)/VBoxOGLerrorspu/VBoxOGLerrorspu.dll | $$(dir $$@)
-	$(INSTALL) -m 644 $< $(@D)
-
-  $(PATH_TARGET)/VBoxWddmCat.dir/VBoxOGLfeedbackspu.dll: $(PATH_OBJ)/VBoxOGLfeedbackspu/VBoxOGLfeedbackspu.dll | $$(dir $$@)
-	$(INSTALL) -m 644 $< $(@D)
-
-  $(PATH_TARGET)/VBoxWddmCat.dir/VBoxOGLpackspu.dll: $(PATH_OBJ)/VBoxOGLpackspu/VBoxOGLpackspu.dll | $$(dir $$@)
-	$(INSTALL) -m 644 $< $(@D)
-
-  $(PATH_TARGET)/VBoxWddmCat.dir/VBoxOGLpassthroughspu.dll: $(PATH_OBJ)/VBoxOGLpassthroughspu/VBoxOGLpassthroughspu.dll | $$(dir $$@)
-	$(INSTALL) -m 644 $< $(@D)
-
   ifeq ($(KBUILD_TARGET_ARCH),amd64)
    $(PATH_TARGET)/VBoxWddmCat.dir/VBoxOGL-x86.dll: $(PATH_OBJ)/VBoxOGL-x86/VBoxOGL-x86.dll | $$(dir $$@)
@@ -208,18 +183,4 @@
 	$(INSTALL) -m 644 $< $(@D)
 
-   $(PATH_TARGET)/VBoxWddmCat.dir/VBoxOGLcrutil-x86.dll: $(PATH_OBJ)/VBoxOGLcrutil-x86/VBoxOGLcrutil-x86.dll | $$(dir $$@)
-	$(INSTALL) -m 644 $< $(@D)
-
-   $(PATH_TARGET)/VBoxWddmCat.dir/VBoxOGLerrorspu-x86.dll: $(PATH_OBJ)/VBoxOGLerrorspu-x86/VBoxOGLerrorspu-x86.dll | $$(dir $$@)
-	$(INSTALL) -m 644 $< $(@D)
-
-   $(PATH_TARGET)/VBoxWddmCat.dir/VBoxOGLfeedbackspu-x86.dll: $(PATH_OBJ)/VBoxOGLfeedbackspu-x86/VBoxOGLfeedbackspu-x86.dll | $$(dir $$@)
-	$(INSTALL) -m 644 $< $(@D)
-
-   $(PATH_TARGET)/VBoxWddmCat.dir/VBoxOGLpackspu-x86.dll: $(PATH_OBJ)/VBoxOGLpackspu-x86/VBoxOGLpackspu-x86.dll | $$(dir $$@)
-	$(INSTALL) -m 644 $< $(@D)
-
-   $(PATH_TARGET)/VBoxWddmCat.dir/VBoxOGLpassthroughspu-x86.dll: $(PATH_OBJ)/VBoxOGLpassthroughspu-x86/VBoxOGLpassthroughspu-x86.dll | $$(dir $$@)
-	$(INSTALL) -m 644 $< $(@D)
   endif # ($(KBUILD_TARGET_ARCH), amd64)
  endif # VBOXWDDM_WITH_GL
@@ -242,19 +203,9 @@
 		$(if $(VBOXWDDM_WITH_GL),  $(PATH_TARGET)/VBoxWddmCat.dir/VBoxOGL.dll \
 					   $(PATH_TARGET)/VBoxWddmCat.dir/VBoxD3D9wddm.dll \
-					   $(PATH_TARGET)/VBoxWddmCat.dir/wined3dwddm.dll \
-					   $(PATH_TARGET)/VBoxWddmCat.dir/VBoxOGLcrutil.dll \
-					   $(PATH_TARGET)/VBoxWddmCat.dir/VBoxOGLerrorspu.dll \
-					   $(PATH_TARGET)/VBoxWddmCat.dir/VBoxOGLfeedbackspu.dll \
-					   $(PATH_TARGET)/VBoxWddmCat.dir/VBoxOGLpackspu.dll \
-					   $(PATH_TARGET)/VBoxWddmCat.dir/VBoxOGLpassthroughspu.dll, ) \
+					   $(PATH_TARGET)/VBoxWddmCat.dir/wined3dwddm.dll, ) \
 		$(if $(VBOXWDDM_WITH_GL), $(if-expr "$(KBUILD_TARGET_ARCH)" == "amd64", \
 					   $(PATH_TARGET)/VBoxWddmCat.dir/VBoxOGL-x86.dll \
 					   $(PATH_TARGET)/VBoxWddmCat.dir/VBoxD3D9wddm-x86.dll \
-					   $(PATH_TARGET)/VBoxWddmCat.dir/wined3dwddm-x86.dll \
-					   $(PATH_TARGET)/VBoxWddmCat.dir/VBoxOGLcrutil-x86.dll \
-					   $(PATH_TARGET)/VBoxWddmCat.dir/VBoxOGLerrorspu-x86.dll \
-					   $(PATH_TARGET)/VBoxWddmCat.dir/VBoxOGLfeedbackspu-x86.dll \
-					   $(PATH_TARGET)/VBoxWddmCat.dir/VBoxOGLpackspu-x86.dll \
-					   $(PATH_TARGET)/VBoxWddmCat.dir/VBoxOGLpassthroughspu-x86.dll, ), )
+					   $(PATH_TARGET)/VBoxWddmCat.dir/wined3dwddm-x86.dll, ), )
 	$(call MSG_TOOL,Inf2Cat,VBoxWddm-inf,$@,$<)
 	$(call VBOX_MAKE_CAT_FN, $(@D),$@)
Index: /trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxWddm.inf
===================================================================
--- /trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxWddm.inf	(revision 78407)
+++ /trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxWddm.inf	(revision 78408)
@@ -71,9 +71,4 @@
 ;gl VBoxD3D9wddm.dll,,,0x00004000  ; COPYFLG_IN_USE_TRY_RENAME
 ;gl wined3dwddm.dll,,,0x00004000  ; COPYFLG_IN_USE_TRY_RENAME
-;gl VBoxOGLcrutil.dll,,,0x00004000  ; COPYFLG_IN_USE_TRY_RENAME
-;gl VBoxOGLerrorspu.dll,,,0x00004000  ; COPYFLG_IN_USE_TRY_RENAME
-;gl VBoxOGLfeedbackspu.dll,,,0x00004000  ; COPYFLG_IN_USE_TRY_RENAME
-;gl VBoxOGLpackspu.dll,,,0x00004000  ; COPYFLG_IN_USE_TRY_RENAME
-;gl VBoxOGLpassthroughspu.dll,,,0x00004000  ; COPYFLG_IN_USE_TRY_RENAME
 
 ;amd64 [VBoxVideo.GL_wow64]
@@ -81,9 +76,4 @@
 ;amd64 ;gl VBoxD3D9wddm-x86.dll,,,0x00004000  ; COPYFLG_IN_USE_TRY_RENAME
 ;amd64 ;gl wined3dwddm-x86.dll,,,0x00004000  ; COPYFLG_IN_USE_TRY_RENAME
-;amd64 ;gl VBoxOGLcrutil-x86.dll,,,0x00004000  ; COPYFLG_IN_USE_TRY_RENAME
-;amd64 ;gl VBoxOGLerrorspu-x86.dll,,,0x00004000  ; COPYFLG_IN_USE_TRY_RENAME
-;amd64 ;gl VBoxOGLfeedbackspu-x86.dll,,,0x00004000  ; COPYFLG_IN_USE_TRY_RENAME
-;amd64 ;gl VBoxOGLpackspu-x86.dll,,,0x00004000  ; COPYFLG_IN_USE_TRY_RENAME
-;amd64 ;gl VBoxOGLpassthroughspu-x86.dll,,,0x00004000  ; COPYFLG_IN_USE_TRY_RENAME
 
 [VBoxVideo_SoftwareDeviceSettings]
@@ -140,14 +130,4 @@
 ;amd64 ;gl wined3dwddm-x86.dll = 1
 ;gl wined3dwddm.dll = 1
-;amd64 ;gl VBoxOGLcrutil-x86.dll = 1
-;gl VBoxOGLcrutil.dll = 1
-;amd64 ;gl VBoxOGLerrorspu-x86.dll = 1
-;gl VBoxOGLerrorspu.dll = 1
-;amd64 ;gl VBoxOGLfeedbackspu-x86.dll = 1
-;gl VBoxOGLfeedbackspu.dll = 1
-;amd64 ;gl VBoxOGLpackspu-x86.dll = 1
-;gl VBoxOGLpackspu.dll = 1
-;amd64 ;gl VBoxOGLpassthroughspu-x86.dll = 1
-;gl VBoxOGLpassthroughspu.dll = 1
 
 [Strings]
Index: /trunk/src/VBox/Additions/WINNT/Installer/Makefile.kmk
===================================================================
--- /trunk/src/VBox/Additions/WINNT/Installer/Makefile.kmk	(revision 78407)
+++ /trunk/src/VBox/Additions/WINNT/Installer/Makefile.kmk	(revision 78408)
@@ -102,9 +102,4 @@
 ifdef VBOX_WITH_CROGL
 DRIVER_FILES += \
-	$(PATH_STAGE_BIN)/additions/VBoxOGLcrutil.dll \
-	$(PATH_STAGE_BIN)/additions/VBoxOGLerrorspu.dll \
-	$(PATH_STAGE_BIN)/additions/VBoxOGLpackspu.dll \
-	$(PATH_STAGE_BIN)/additions/VBoxOGLpassthroughspu.dll \
-	$(PATH_STAGE_BIN)/additions/VBoxOGLfeedbackspu.dll \
 	$(PATH_STAGE_BIN)/additions/VBoxOGL.dll \
 	$(PATH_STAGE_BIN)/additions/wined3d.dll \
@@ -115,14 +110,8 @@
 	# running 32-bit OpenGL apps on that.
 	DRIVER_FILES += \
-		$(VBOX_PATH_ADDITIONS.win.x86)/VBoxOGLcrutil.dll \
-		$(VBOX_PATH_ADDITIONS.win.x86)/VBoxOGLerrorspu.dll \
-		$(VBOX_PATH_ADDITIONS.win.x86)/VBoxOGLpackspu.dll \
-		$(VBOX_PATH_ADDITIONS.win.x86)/VBoxOGLpassthroughspu.dll \
-		$(VBOX_PATH_ADDITIONS.win.x86)/VBoxOGLfeedbackspu.dll \
 		$(VBOX_PATH_ADDITIONS.win.x86)/VBoxOGL.dll \
 		$(VBOX_PATH_ADDITIONS.win.x86)/wined3d.dll \
 		$(VBOX_PATH_ADDITIONS.win.x86)/VBoxD3D9.dll \
 		$(VBOX_PATH_ADDITIONS.win.x86)/VBoxD3D8.dll
-
  endif
 endif
@@ -162,14 +151,8 @@
 	$(PATH_STAGE_BIN)/additions/wined3dwddm-x86.dll \
 	$(PATH_STAGE_BIN)/additions/VBoxD3D9wddm-x86.dll \
-	$(PATH_STAGE_BIN)/additions/VBoxOGL-x86.dll \
-	$(PATH_STAGE_BIN)/additions/VBoxOGLcrutil-x86.dll \
-	$(PATH_STAGE_BIN)/additions/VBoxOGLerrorspu-x86.dll \
-	$(PATH_STAGE_BIN)/additions/VBoxOGLfeedbackspu-x86.dll \
-	$(PATH_STAGE_BIN)/additions/VBoxOGLpackspu-x86.dll \
-	$(PATH_STAGE_BIN)/additions/VBoxOGLpassthroughspu-x86.dll
+	$(PATH_STAGE_BIN)/additions/VBoxOGL-x86.dll
   endif
  endif
 endif
-
 VB_WIN_ADD_NSIS_ENV := \
 	-E 'PATH_OUT=$(subst /,\,$(PATH_OUT))' \
Index: /trunk/src/VBox/Additions/WINNT/Installer/VBoxGuestAdditionsCommon.nsh
===================================================================
--- /trunk/src/VBox/Additions/WINNT/Installer/VBoxGuestAdditionsCommon.nsh	(revision 78407)
+++ /trunk/src/VBox/Additions/WINNT/Installer/VBoxGuestAdditionsCommon.nsh	(revision 78408)
@@ -64,9 +64,4 @@
 !if $%VBOX_WITH_CROGL% == "1"
   ; crOpenGL
-  FILE "$%PATH_OUT%\bin\additions\VBoxOGLcrutil.dll"
-  FILE "$%PATH_OUT%\bin\additions\VBoxOGLerrorspu.dll"
-  FILE "$%PATH_OUT%\bin\additions\VBoxOGLpackspu.dll"
-  FILE "$%PATH_OUT%\bin\additions\VBoxOGLpassthroughspu.dll"
-  FILE "$%PATH_OUT%\bin\additions\VBoxOGLfeedbackspu.dll"
   FILE "$%PATH_OUT%\bin\additions\VBoxOGL.dll"
 
@@ -83,9 +78,4 @@
     FILE "$%VBOX_PATH_ADDITIONS_WIN_X86%\d3d8.dll"
     FILE "$%VBOX_PATH_ADDITIONS_WIN_X86%\d3d9.dll"
-    FILE "$%VBOX_PATH_ADDITIONS_WIN_X86%\VBoxOGLcrutil.dll"
-    FILE "$%VBOX_PATH_ADDITIONS_WIN_X86%\VBoxOGLerrorspu.dll"
-    FILE "$%VBOX_PATH_ADDITIONS_WIN_X86%\VBoxOGLpackspu.dll"
-    FILE "$%VBOX_PATH_ADDITIONS_WIN_X86%\VBoxOGLpassthroughspu.dll"
-    FILE "$%VBOX_PATH_ADDITIONS_WIN_X86%\VBoxOGLfeedbackspu.dll"
     FILE "$%VBOX_PATH_ADDITIONS_WIN_X86%\VBoxOGL.dll"
     FILE "$%VBOX_PATH_ADDITIONS_WIN_X86%\VBoxD3D8.dll"
@@ -113,9 +103,4 @@
 
   !if $%VBOX_WITH_CROGL% == "1"
-    FILE "$%PATH_OUT%\bin\additions\VBoxOGLcrutil.dll"
-    FILE "$%PATH_OUT%\bin\additions\VBoxOGLerrorspu.dll"
-    FILE "$%PATH_OUT%\bin\additions\VBoxOGLpackspu.dll"
-    FILE "$%PATH_OUT%\bin\additions\VBoxOGLpassthroughspu.dll"
-    FILE "$%PATH_OUT%\bin\additions\VBoxOGLfeedbackspu.dll"
     FILE "$%PATH_OUT%\bin\additions\VBoxOGL.dll"
 
@@ -134,9 +119,4 @@
 
     !if $%VBOX_WITH_CROGL% == "1"
-      FILE "$%PATH_OUT%\bin\additions\VBoxOGLcrutil-x86.dll"
-      FILE "$%PATH_OUT%\bin\additions\VBoxOGLerrorspu-x86.dll"
-      FILE "$%PATH_OUT%\bin\additions\VBoxOGLpackspu-x86.dll"
-      FILE "$%PATH_OUT%\bin\additions\VBoxOGLpassthroughspu-x86.dll"
-      FILE "$%PATH_OUT%\bin\additions\VBoxOGLfeedbackspu-x86.dll"
       FILE "$%PATH_OUT%\bin\additions\VBoxOGL-x86.dll"
 
Index: /trunk/src/VBox/Additions/WINNT/Installer/VBoxGuestAdditionsW2KXP.nsh
===================================================================
--- /trunk/src/VBox/Additions/WINNT/Installer/VBoxGuestAdditionsW2KXP.nsh	(revision 78407)
+++ /trunk/src/VBox/Additions/WINNT/Installer/VBoxGuestAdditionsW2KXP.nsh	(revision 78408)
@@ -248,9 +248,4 @@
 
     !if $%VBOX_WITH_CROGL% == "1"
-      FILE "$%PATH_OUT%\bin\additions\VBoxOGLcrutil.dll"
-      FILE "$%PATH_OUT%\bin\additions\VBoxOGLerrorspu.dll"
-      FILE "$%PATH_OUT%\bin\additions\VBoxOGLpackspu.dll"
-      FILE "$%PATH_OUT%\bin\additions\VBoxOGLpassthroughspu.dll"
-      FILE "$%PATH_OUT%\bin\additions\VBoxOGLfeedbackspu.dll"
       FILE "$%PATH_OUT%\bin\additions\VBoxOGL.dll"
 
@@ -269,9 +264,4 @@
 
       !if $%VBOX_WITH_CROGL% == "1"
-        FILE "$%PATH_OUT%\bin\additions\VBoxOGLcrutil-x86.dll"
-        FILE "$%PATH_OUT%\bin\additions\VBoxOGLerrorspu-x86.dll"
-        FILE "$%PATH_OUT%\bin\additions\VBoxOGLpackspu-x86.dll"
-        FILE "$%PATH_OUT%\bin\additions\VBoxOGLpassthroughspu-x86.dll"
-        FILE "$%PATH_OUT%\bin\additions\VBoxOGLfeedbackspu-x86.dll"
         FILE "$%PATH_OUT%\bin\additions\VBoxOGL-x86.dll"
 
@@ -292,9 +282,4 @@
   StrCpy $0 "$TEMP\VBoxGuestAdditions\VBoxOGL"
   CreateDirectory "$0"
-  !insertmacro InstallLib DLL NOTSHARED REBOOT_PROTECTED "$%PATH_OUT%\bin\additions\VBoxOGLcrutil.dll"         "$g_strSystemDir\VBoxOGLcrutil.dll"         "$0"
-  !insertmacro InstallLib DLL NOTSHARED REBOOT_PROTECTED "$%PATH_OUT%\bin\additions\VBoxOGLerrorspu.dll"       "$g_strSystemDir\VBoxOGLerrorspu.dll"       "$0"
-  !insertmacro InstallLib DLL NOTSHARED REBOOT_PROTECTED "$%PATH_OUT%\bin\additions\VBoxOGLpackspu.dll"        "$g_strSystemDir\VBoxOGLpackspu.dll"        "$0"
-  !insertmacro InstallLib DLL NOTSHARED REBOOT_PROTECTED "$%PATH_OUT%\bin\additions\VBoxOGLpassthroughspu.dll" "$g_strSystemDir\VBoxOGLpassthroughspu.dll" "$0"
-  !insertmacro InstallLib DLL NOTSHARED REBOOT_PROTECTED "$%PATH_OUT%\bin\additions\VBoxOGLfeedbackspu.dll"    "$g_strSystemDir\VBoxOGLfeedbackspu.dll"    "$0"
   !insertmacro InstallLib DLL NOTSHARED REBOOT_PROTECTED "$%PATH_OUT%\bin\additions\VBoxOGL.dll"               "$g_strSystemDir\VBoxOGL.dll"               "$0"
   !if $%BUILD_TARGET_ARCH% == "amd64"
@@ -309,9 +294,4 @@
     ; path after calling EnableX64FSRedirection
     ${EnableX64FSRedirection}
-    !insertmacro InstallLib DLL NOTSHARED REBOOT_PROTECTED "$%VBOX_PATH_ADDITIONS_WIN_X86%\VBoxOGLcrutil.dll"         "$SYSDIR\VBoxOGLcrutil.dll"         "$0"
-    !insertmacro InstallLib DLL NOTSHARED REBOOT_PROTECTED "$%VBOX_PATH_ADDITIONS_WIN_X86%\VBoxOGLerrorspu.dll"       "$SYSDIR\VBoxOGLerrorspu.dll"       "$0"
-    !insertmacro InstallLib DLL NOTSHARED REBOOT_PROTECTED "$%VBOX_PATH_ADDITIONS_WIN_X86%\VBoxOGLpackspu.dll"        "$SYSDIR\VBoxOGLpackspu.dll"        "$0"
-    !insertmacro InstallLib DLL NOTSHARED REBOOT_PROTECTED "$%VBOX_PATH_ADDITIONS_WIN_X86%\VBoxOGLpassthroughspu.dll" "$SYSDIR\VBoxOGLpassthroughspu.dll" "$0"
-    !insertmacro InstallLib DLL NOTSHARED REBOOT_PROTECTED "$%VBOX_PATH_ADDITIONS_WIN_X86%\VBoxOGLfeedbackspu.dll"    "$SYSDIR\VBoxOGLfeedbackspu.dll"    "$0"
     !insertmacro InstallLib DLL NOTSHARED REBOOT_PROTECTED "$%VBOX_PATH_ADDITIONS_WIN_X86%\VBoxOGL.dll"               "$SYSDIR\VBoxOGL.dll"               "$0"
     ${DisableX64FSRedirection}
@@ -540,4 +520,5 @@
   !endif
 
+    ; Obsolete files begin (they were merged into VBoxOGL.dll)
     Delete /REBOOTOK "$INSTDIR\VBoxOGLcrutil.dll"
     Delete /REBOOTOK "$INSTDIR\VBoxOGLarrayspu.dll"
@@ -546,4 +527,6 @@
     Delete /REBOOTOK "$INSTDIR\VBoxOGLpassthroughspu.dll"
     Delete /REBOOTOK "$INSTDIR\VBoxOGLfeedbackspu.dll"
+    ; Obsolete files end
+
     Delete /REBOOTOK "$INSTDIR\VBoxOGL.dll"
 
@@ -562,4 +545,5 @@
     !endif
 
+      ; Obsolete files begin (they were merged into VBoxOGL-x86.dll)
       Delete /REBOOTOK "$INSTDIR\VBoxOGLcrutil-x86.dll"
       Delete /REBOOTOK "$INSTDIR\VBoxOGLarrayspu-x86.dll"
@@ -568,4 +552,6 @@
       Delete /REBOOTOK "$INSTDIR\VBoxOGLpassthroughspu-x86.dll"
       Delete /REBOOTOK "$INSTDIR\VBoxOGLfeedbackspu-x86.dll"
+      ; Obsolete files end
+
       Delete /REBOOTOK "$INSTDIR\VBoxOGL-x86.dll"
 
@@ -661,4 +647,5 @@
   ${EndIf}
 
+  ; Obsolete files begin (they were merged into VBoxOGL.dll)
   Delete /REBOOTOK "$g_strSystemDir\VBoxOGLcrutil.dll"
   Delete /REBOOTOK "$g_strSystemDir\VBoxOGLarrayspu.dll"
@@ -667,4 +654,6 @@
   Delete /REBOOTOK "$g_strSystemDir\VBoxOGLpassthroughspu.dll"
   Delete /REBOOTOK "$g_strSystemDir\VBoxOGLfeedbackspu.dll"
+  ; Obsolete files end
+
   Delete /REBOOTOK "$g_strSystemDir\VBoxOGL.dll"
 
@@ -698,4 +687,5 @@
   !if $%BUILD_TARGET_ARCH% == "amd64"
     ; Only 64-bit installer: Also remove 32-bit DLLs on 64-bit target arch in Wow64 node
+    ; Obsolete files begin (they were merged into VBoxOGL-x86.dll)
     Delete /REBOOTOK "$g_strSysWow64\VBoxOGLcrutil-x86.dll"
     Delete /REBOOTOK "$g_strSysWow64\VBoxOGLarrayspu-x86.dll"
@@ -704,4 +694,6 @@
     Delete /REBOOTOK "$g_strSysWow64\VBoxOGLpassthroughspu-x86.dll"
     Delete /REBOOTOK "$g_strSysWow64\VBoxOGLfeedbackspu-x86.dll"
+    ; Obsolete files end
+
     Delete /REBOOTOK "$g_strSysWow64\VBoxOGL-x86.dll"
 
Index: /trunk/src/VBox/Additions/common/VBoxService/VBoxServiceVMInfo-win.cpp
===================================================================
--- /trunk/src/VBox/Additions/common/VBoxService/VBoxServiceVMInfo-win.cpp	(revision 78407)
+++ /trunk/src/VBox/Additions/common/VBoxService/VBoxServiceVMInfo-win.cpp	(revision 78408)
@@ -1347,16 +1347,6 @@
     So just enumerate the 32-bit files in the SYSWOW directory. */
 #ifdef RT_ARCH_AMD64
-        { szSysWowDir,  "VBoxOGLcrutil.dll" },
-        { szSysWowDir,  "VBoxOGLerrorspu.dll" },
-        { szSysWowDir,  "VBoxOGLpackspu.dll" },
-        { szSysWowDir,  "VBoxOGLpassthroughspu.dll" },
-        { szSysWowDir,  "VBoxOGLfeedbackspu.dll" },
-        { szSysWowDir,  "VBoxOGL.dll" },
+        { szSysWowDir,  "VBoxOGL-x86.dll" },
 #else  /* !RT_ARCH_AMD64 */
-        { szSysDir,     "VBoxOGLcrutil.dll" },
-        { szSysDir,     "VBoxOGLerrorspu.dll" },
-        { szSysDir,     "VBoxOGLpackspu.dll" },
-        { szSysDir,     "VBoxOGLpassthroughspu.dll" },
-        { szSysDir,     "VBoxOGLfeedbackspu.dll" },
         { szSysDir,     "VBoxOGL.dll" },
 #endif /* !RT_ARCH_AMD64 */
Index: /trunk/src/VBox/Additions/common/crOpenGL/Makefile.kmk
===================================================================
--- /trunk/src/VBox/Additions/common/crOpenGL/Makefile.kmk	(revision 78407)
+++ /trunk/src/VBox/Additions/common/crOpenGL/Makefile.kmk	(revision 78408)
@@ -27,5 +27,7 @@
 if1of ($(KBUILD_TARGET), win linux solaris freebsd)
  DLLS += \
-    VBoxOGL \
+    VBoxOGL
+
+ LIBRARIES += \
     VBoxOGLpassthroughspu \
     VBoxOGLpackspu \
@@ -34,5 +36,7 @@
 
 VBOX_OGL_X86_GUEST_DLLS = \
-     VBoxOGL-x86 \
+     VBoxOGL-x86
+
+VBOX_OGL_X86_GUEST_LIBRARIES = \
      VBoxOGLpassthroughspu-x86 \
      VBoxOGLpackspu-x86 \
@@ -41,4 +45,5 @@
 ifdef VBOX_WITH_WDDM
  DLLS.win.amd64 += $(VBOX_OGL_X86_GUEST_DLLS)
+ LIBRARIES.win.amd64 += $(VBOX_OGL_X86_GUEST_LIBRARIES)
 endif
 
@@ -202,11 +207,15 @@
  endif
 endif
-# VBoxOGL_LIBS = \  # VBOX_LIB_OGL_CRUTIL includes these and caused an interesting conflict.
-#	$(VBOX_LIB_IPRT_GUEST_R3_SHARED) \
-#	$(VBOX_LIB_VBGL_R3_SHARED) \
-
 VBoxOGL_LIBS = \
+	$(VBOX_LIB_IPRT_GUEST_R3_SHARED) \
+	$(VBOX_LIB_VBGL_R3_SHARED) \
 	$(VBOX_LIB_OGL_CRUTIL) \
-	$(PATH_STAGE_LIB)/additions/VBoxOGLspuload$(VBOX_SUFF_LIB)
+	$(PATH_STAGE_LIB)/additions/VBoxOGLspuload$(VBOX_SUFF_LIB) \
+	$(PATH_STAGE_LIB)/additions/VBoxOGLcrstate$(VBOX_SUFF_LIB) \
+	$(PATH_STAGE_LIB)/additions/VBoxOGLcrpacker$(VBOX_SUFF_LIB) \
+	$(PATH_STAGE_LIB)/additions/VBoxOGLfeedbackspu$(VBOX_SUFF_LIB) \
+	$(PATH_STAGE_LIB)/additions/VBoxOGLpassthroughspu$(VBOX_SUFF_LIB) \
+	$(PATH_STAGE_LIB)/additions/VBoxOGLpackspu$(VBOX_SUFF_LIB) \
+	$(PATH_STAGE_LIB)/additions/VBoxOGLerrorspu$(VBOX_SUFF_LIB)
 
 VBoxOGL_LIBS.win += \
@@ -256,5 +265,11 @@
 	$(VBOX_LIB_VBGL_R3_SHARED_X86) \
 	$(VBOX_LIB_OGL_CRUTIL_X86) \
-	$(PATH_STAGE_LIB)/additions/VBoxOGLspuload-x86$(VBOX_SUFF_LIB)
+	$(PATH_STAGE_LIB)/additions/VBoxOGLspuload-x86$(VBOX_SUFF_LIB) \
+	$(PATH_STAGE_LIB)/additions/VBoxOGLcrstate-x86$(VBOX_SUFF_LIB) \
+	$(PATH_STAGE_LIB)/additions/VBoxOGLcrpacker-x86$(VBOX_SUFF_LIB) \
+	$(PATH_STAGE_LIB)/additions/VBoxOGLfeedbackspu-x86$(VBOX_SUFF_LIB) \
+	$(PATH_STAGE_LIB)/additions/VBoxOGLpassthroughspu-x86$(VBOX_SUFF_LIB) \
+	$(PATH_STAGE_LIB)/additions/VBoxOGLpackspu-x86$(VBOX_SUFF_LIB) \
+	$(PATH_STAGE_LIB)/additions/VBoxOGLerrorspu-x86$(VBOX_SUFF_LIB)
 
 VBoxOGL-x86_LIBS.win += \
@@ -448,5 +463,5 @@
 # VBoxOGLpassthroughspu
 #
-VBoxOGLpassthroughspu_TEMPLATE    = VBOXCROGLR3GUESTDLL
+VBoxOGLpassthroughspu_TEMPLATE    = VBOXCROGLR3GUESTLIB
 VBoxOGLpassthroughspu_INCS        = \
 	passthrough \
@@ -456,18 +471,9 @@
         $(VBOX_GL_INCS)
 endif
-if defined(VBOX_SIGNING_MODE) && defined(VBOX_WITH_WDDM)
- VBoxOGLpassthroughspu_INSTTYPE.win = none
- VBoxOGLpassthroughspu_DEBUG_INSTTYPE.win = both
-endif
 VBoxOGLpassthroughspu_SOURCES     = \
 	passthrough/passthroughspu_init.c \
 	$(VBOX_PATH_CROGL_GENFILES)/passthroughspu.c
-VBoxOGLpassthroughspu_SOURCES.win = \
-	passthrough/passthrough.def \
-	passthrough/passthroughspu.rc
 VBoxOGLpassthroughspu_CLEAN       = \
 	$(VBOX_PATH_CROGL_GENFILES)/passthroughspu.c
-VBoxOGLpassthroughspu_LIBS        = \
-	$(VBOX_LIB_OGL_CRUTIL)
 ifdef VBOX_WITH_CRHGSMI
 VBoxOGLpassthroughspu_DEFS.win   += VBOX_WITH_CRHGSMI
@@ -497,5 +503,5 @@
 # VBoxOGLpackspu
 #
-VBoxOGLpackspu_TEMPLATE      = VBOXCROGLR3GUESTDLL
+VBoxOGLpackspu_TEMPLATE      = VBOXCROGLR3GUESTLIB
 VBoxOGLpackspu_DEFS          = TRACKS_STATE=1 PACKS=1
 VBoxOGLpackspu_INCS          = \
@@ -505,8 +511,4 @@
  VBoxOGLpackspu_INCS += \
         $(VBOX_GL_INCS)
-endif
-if defined(VBOX_SIGNING_MODE) && defined(VBOX_WITH_WDDM)
- VBoxOGLpackspu_INSTTYPE.win = none
- VBoxOGLpackspu_DEBUG_INSTTYPE.win = both
 endif
 VBoxOGLpackspu_INTERMEDIATES = \
@@ -532,7 +534,4 @@
 	$(VBOX_PATH_CROGL_GENFILES)/packspu_flush.c \
 	$(VBOX_PATH_CROGL_GENFILES)/packspu_beginend.c
-VBoxOGLpackspu_SOURCES.win = \
-	pack/pack.def \
-	pack/packspu.rc
 VBoxOGLpackspu_CLEAN       = \
 	$(VBOX_PATH_CROGL_GENFILES)/packspu_proto.h \
@@ -541,9 +540,4 @@
 	$(VBOX_PATH_CROGL_GENFILES)/packspu_flush.c \
 	$(VBOX_PATH_CROGL_GENFILES)/packspu_beginend.c
-VBoxOGLpackspu_LIBS        = \
-	$(VBOX_LIB_OGL_CRUTIL) \
-	$(PATH_STAGE_LIB)/additions/VBoxOGLspuload$(VBOX_SUFF_LIB) \
-	$(PATH_STAGE_LIB)/additions/VBoxOGLcrstate$(VBOX_SUFF_LIB) \
-	$(PATH_STAGE_LIB)/additions/VBoxOGLcrpacker$(VBOX_SUFF_LIB)
 VBoxOGLpackspu_LIBS.win += \
 	$(PATH_STAGE_LIB)/additions/VBoxDispMpLogger$(VBOX_SUFF_LIB) \
@@ -570,8 +564,4 @@
 VBoxOGLpackspu-x86_EXTENDS = VBoxOGLpackspu
 VBoxOGLpackspu-x86_BLD_TRG_ARCH = x86
-VBoxOGLpackspu-x86_LIBS = $(VBOX_LIB_OGL_CRUTIL_X86) \
-	$(PATH_STAGE_LIB)/additions/VBoxOGLspuload-x86$(VBOX_SUFF_LIB) \
-	$(PATH_STAGE_LIB)/additions/VBoxOGLcrstate-x86$(VBOX_SUFF_LIB) \
-	$(PATH_STAGE_LIB)/additions/VBoxOGLcrpacker-x86$(VBOX_SUFF_LIB)
 VBoxOGLpackspu-x86_LIBS.win += \
 	$(PATH_STAGE_LIB)/additions/VBoxDispMpLogger-x86$(VBOX_SUFF_LIB) \
@@ -607,5 +597,5 @@
 # VBoxOGLfeedbackspu
 #
-VBoxOGLfeedbackspu_TEMPLATE    = VBOXCROGLR3GUESTDLL
+VBoxOGLfeedbackspu_TEMPLATE    = VBOXCROGLR3GUESTLIB
 VBoxOGLfeedbackspu_INCS        = \
 	feedback \
@@ -614,8 +604,4 @@
  VBoxOGLfeedbackspu_INCS += \
         $(VBOX_GL_INCS)
-endif
-if defined(VBOX_SIGNING_MODE) && defined(VBOX_WITH_WDDM)
- VBoxOGLfeedbackspu_INSTTYPE.win = none
- VBoxOGLfeedbackspu_DEBUG_INSTTYPE.win = both
 endif
 VBoxOGLfeedbackspu_INTERMEDIATES = \
@@ -627,7 +613,4 @@
 	$(VBOX_PATH_CROGL_GENFILES)/feedbackspu.c \
 	$(VBOX_PATH_CROGL_GENFILES)/feedbackspu_state.c
-VBoxOGLfeedbackspu_SOURCES.win = \
-	feedback/feedback.def \
-	feedback/feedbackspu.rc
 VBoxOGLfeedbackspu_CLEAN       = \
 	$(VBOX_PATH_CROGL_GENFILES)/feedbackspu_proto.h \
@@ -635,6 +618,4 @@
 	$(VBOX_PATH_CROGL_GENFILES)/feedbackspu_state.c
 VBoxOGLfeedbackspu_LIBS        = \
-	$(VBOX_LIB_OGL_CRUTIL) \
-	$(PATH_STAGE_LIB)/additions/VBoxOGLspuload$(VBOX_SUFF_LIB) \
 	$(PATH_STAGE_LIB)/additions/VBoxOGLcrstate$(VBOX_SUFF_LIB)
 ifdef VBOX_WITH_CRHGSMI
@@ -651,7 +632,4 @@
 VBoxOGLfeedbackspu-x86_EXTENDS = VBoxOGLfeedbackspu
 VBoxOGLfeedbackspu-x86_BLD_TRG_ARCH = x86
-VBoxOGLfeedbackspu-x86_LIBS = $(VBOX_LIB_OGL_CRUTIL_X86) \
-	$(PATH_STAGE_LIB)/additions/VBoxOGLspuload-x86$(VBOX_SUFF_LIB) \
-	$(PATH_STAGE_LIB)/additions/VBoxOGLcrstate-x86$(VBOX_SUFF_LIB)
 VBoxOGLfeedbackspu-x86_DEFS = $(VBoxOGLfeedbackspu_DEFS) VBOX_WDDM_WOW64
 endif
Index: /trunk/src/VBox/Additions/common/crOpenGL/feedback/feedbackspu_init.c
===================================================================
--- /trunk/src/VBox/Additions/common/crOpenGL/feedback/feedbackspu_init.c	(revision 78407)
+++ /trunk/src/VBox/Additions/common/crOpenGL/feedback/feedbackspu_init.c	(revision 78408)
@@ -67,15 +67,17 @@
 }
 
-int SPULoad( char **name, char **super, SPUInitFuncPtr *init,
-	     SPUSelfDispatchFuncPtr *self, SPUCleanupFuncPtr *cleanup,
-	     int *flags )
+DECLHIDDEN(const SPUREG) g_FeedbackSpuReg =
 {
-	*name = "feedback";
-	*super = "passthrough";
-	*init = feedbackSPUInit;
-	*self = feedbackSPUSelfDispatch;
-	*cleanup = feedbackSPUCleanup;
-	*flags = (SPU_NO_PACKER|SPU_NOT_TERMINAL|SPU_MAX_SERVERS_ZERO);
-
-	return 1;
-}
+    /** pszName. */
+    "feedback",
+    /** pszSuperName. */
+    "passthrough",
+    /** fFlags. */
+    SPU_NO_PACKER | SPU_NOT_TERMINAL | SPU_MAX_SERVERS_ZERO,
+    /** pfnInit. */
+    feedbackSPUInit,
+    /** pfnDispatch. */
+    feedbackSPUSelfDispatch, 
+    /** pfnCleanup. */
+    feedbackSPUCleanup
+};
Index: /trunk/src/VBox/Additions/common/crOpenGL/load.c
===================================================================
--- /trunk/src/VBox/Additions/common/crOpenGL/load.c	(revision 78407)
+++ /trunk/src/VBox/Additions/common/crOpenGL/load.c	(revision 78408)
@@ -27,4 +27,6 @@
 # include <unistd.h>
 #endif
+
+#include "VBox/VBoxGuestLib.h"
 
 #ifdef VBOX_WITH_WDDM
@@ -782,10 +784,8 @@
 
     char response[1024];
-    char **spuchain;
-    int num_spus;
-    int *spu_ids;
-    char **spu_names;
+    int aSpuIds[] = {0, 1};
+    const char *apszSpuNames[] = {"feedback", "pack"};
+    PCSPUREG apSpuReg[] = { &g_ErrorSpuReg, &g_FeedbackSpuReg, &g_PassthroughSpuReg,&g_PackSpuReg};
     const char *app_id;
-    int i;
     int disable_sync = 0;
 #if defined(WINDOWS) && defined(VBOX_WITH_WDDM)
@@ -840,16 +840,4 @@
     }
 #endif
-
-    strcpy(response, "2 0 feedback 1 pack");
-    spuchain = crStrSplit( response, " " );
-    num_spus = crStrToInt( spuchain[0] );
-    spu_ids = (int *) crAlloc( num_spus * sizeof( *spu_ids ) );
-    spu_names = (char **) crAlloc( num_spus * sizeof( *spu_names ) );
-    for (i = 0 ; i < num_spus ; i++)
-    {
-        spu_ids[i] = crStrToInt( spuchain[2*i+1] );
-        spu_names[i] = crStrdup( spuchain[2*i+2] );
-        crDebug( "SPU %d/%d: (%d) \"%s\"", i+1, num_spus, spu_ids[i], spu_names[i] );
-    }
 
     stubSetDefaultConfigurationOptions();
@@ -876,11 +864,5 @@
 #endif
 
-    stub.spu = crSPULoadChain( num_spus, spu_ids, spu_names, stub.spu_dir, NULL );
-
-    crFree( spuchain );
-    crFree( spu_ids );
-    for (i = 0; i < num_spus; ++i)
-        crFree(spu_names[i]);
-    crFree( spu_names );
+    stub.spu = crSPUInitChainFromReg(RT_ELEMENTS(aSpuIds), &aSpuIds[0], &apszSpuNames[0], NULL, &apSpuReg[0]);
 
     // spu chain load failed somewhere
@@ -1182,9 +1164,9 @@
         GetModuleFileNameA(hDLLInst, aName, RT_ELEMENTS(aName));
         crDbgCmdSymLoadPrint(aName, hDLLInst);
-
-        hCrUtil = GetModuleHandleA("VBoxOGLcrutil.dll");
-        Assert(hCrUtil);
-        crDbgCmdSymLoadPrint("VBoxOGLcrutil.dll", hCrUtil);
-#endif
+#endif
+
+        int rc = RTR3InitDll(RTR3INIT_FLAGS_UNOBTRUSIVE); CRASSERT(rc==0);
+        rc = VbglR3Init();
+
         crInitTSD(&g_stubCurrentContextTSD);
         crInitMutex(&stub_init_mutex);
@@ -1335,4 +1317,5 @@
             vboxVDbgVEHandlerUnregister();
 #endif
+        VbglR3Term();
         break;
     }
Index: /trunk/src/VBox/Additions/common/crOpenGL/pack/packspu_init.c
===================================================================
--- /trunk/src/VBox/Additions/common/crOpenGL/pack/packspu_init.c	(revision 78407)
+++ /trunk/src/VBox/Additions/common/crOpenGL/pack/packspu_init.c	(revision 78408)
@@ -57,7 +57,5 @@
     (void) self;
 
-#if !defined(WINDOWS)
     crInitMutex(&_PackMutex);
-#endif
 
     crInitTSD(&_PackerTSD);
@@ -122,21 +120,22 @@
     crFreeTSD(&_PackTSD);
     crUnlockMutex(&_PackMutex);
-#ifndef WINDOWS
     crFreeMutex(&_PackMutex);
-#endif
+    crNetTearDown(); /** @todo Why here? */
     return 1;
 }
 
-int SPULoad( char **name, char **super, SPUInitFuncPtr *init,
-         SPUSelfDispatchFuncPtr *self, SPUCleanupFuncPtr *cleanup,
-         int *flags )
-{
-    *name = "pack";
-    *super = NULL;
-    *init = packSPUInit;
-    *self = packSPUSelfDispatch;
-    *cleanup = packSPUCleanup;
-    *flags = (SPU_HAS_PACKER|SPU_IS_TERMINAL|SPU_MAX_SERVERS_ONE);
-
-    return 1;
-}
+DECLHIDDEN(const SPUREG) g_PackSpuReg =
+ {
+    /** pszName. */
+    "pack",
+    /** pszSuperName. */
+    NULL,
+    /** fFlags. */
+    SPU_HAS_PACKER | SPU_IS_TERMINAL | SPU_MAX_SERVERS_ONE,
+    /** pfnInit. */
+    packSPUInit,
+    /** pfnDispatch. */
+    packSPUSelfDispatch, 
+    /** pfnCleanup. */
+    packSPUCleanup
+};
Index: /trunk/src/VBox/Additions/common/crOpenGL/pack/packspu_misc.c
===================================================================
--- /trunk/src/VBox/Additions/common/crOpenGL/pack/packspu_misc.c	(revision 78407)
+++ /trunk/src/VBox/Additions/common/crOpenGL/pack/packspu_misc.c	(revision 78408)
@@ -704,36 +704,4 @@
 }
 
-#ifdef WINDOWS
-#define WIN32_LEAN_AND_MEAN
-#include <windows.h>
-BOOL WINAPI DllMain(HINSTANCE hDLLInst, DWORD fdwReason, LPVOID lpvReserved)
-{
-    (void) lpvReserved;
-
-    switch (fdwReason)
-    {
-        case DLL_PROCESS_ATTACH:
-        {
-            crInitMutex(&_PackMutex);
-            break;
-        }
-
-        case DLL_PROCESS_DETACH:
-        {
-            crFreeMutex(&_PackMutex);
-            crNetTearDown();
-            break;
-        }
-
-        case DLL_THREAD_ATTACH:
-        case DLL_THREAD_DETACH:
-        default:
-            break;
-    }
-
-    return TRUE;
-}
-#endif
-
 void PACKSPU_APIENTRY packspu_VBoxPresentComposition(GLint win, const struct VBOXVR_SCR_COMPOSITOR * pCompositor,
                                                      const struct VBOXVR_SCR_COMPOSITOR_ENTRY *pChangedEntry)
Index: /trunk/src/VBox/Additions/common/crOpenGL/passthrough/passthroughspu_init.c
===================================================================
--- /trunk/src/VBox/Additions/common/crOpenGL/passthrough/passthroughspu_init.c	(revision 78407)
+++ /trunk/src/VBox/Additions/common/crOpenGL/passthrough/passthroughspu_init.c	(revision 78408)
@@ -45,15 +45,17 @@
 
 
-int SPULoad( char **name, char **super, SPUInitFuncPtr *init,
-	     SPUSelfDispatchFuncPtr *self, SPUCleanupFuncPtr *cleanup,
-	     int *flags )
+DECLHIDDEN(const SPUREG) g_PassthroughSpuReg =
 {
-	*name = "passthrough";
-	*super = NULL;
-	*init = passthroughSPUInit;
-	*self = passthroughSPUSelfDispatch;
-	*cleanup = passthroughSPUCleanup;
-	*flags = (SPU_NO_PACKER|SPU_NOT_TERMINAL|SPU_MAX_SERVERS_ZERO);
-
-	return 1;
-}
+    /** pszName. */
+    "passthrough",
+    /** pszSuperName. */
+    NULL,
+    /** fFlags. */
+    SPU_NO_PACKER | SPU_NOT_TERMINAL | SPU_MAX_SERVERS_ZERO,
+    /** pfnInit. */
+    passthroughSPUInit,
+    /** pfnDispatch. */
+    passthroughSPUSelfDispatch, 
+    /** pfnCleanup. */
+    passthroughSPUCleanup
+};
Index: /trunk/src/VBox/Additions/freebsd/Makefile.kmk
===================================================================
--- /trunk/src/VBox/Additions/freebsd/Makefile.kmk	(revision 78407)
+++ /trunk/src/VBox/Additions/freebsd/Makefile.kmk	(revision 78408)
@@ -68,9 +68,4 @@
 	vboxvideo_drv_16.so \
 	vboxvideo_drv_17.so \
-	VBoxOGLcrutil.so \
-	VBoxOGLerrorspu.so \
-	VBoxOGLfeedbackspu.so \
-	VBoxOGLpackspu.so \
-	VBoxOGLpassthroughspu.so \
 	VBoxOGL.so
 
Index: /trunk/src/VBox/Additions/linux/Makefile.kmk
===================================================================
--- /trunk/src/VBox/Additions/linux/Makefile.kmk	(revision 78407)
+++ /trunk/src/VBox/Additions/linux/Makefile.kmk	(revision 78408)
@@ -125,9 +125,4 @@
 ifdef VBOX_WITH_CROGL
 VBOX_LNX_ADD_STRIP_LIB += \
-	VBoxOGLcrutil.so \
-	VBoxOGLerrorspu.so \
-	VBoxOGLfeedbackspu.so \
-	VBoxOGLpackspu.so \
-	VBoxOGLpassthroughspu.so \
 	VBoxOGL.so \
 	VBoxEGL.so
Index: /trunk/src/VBox/Additions/solaris/Makefile.kmk
===================================================================
--- /trunk/src/VBox/Additions/solaris/Makefile.kmk	(revision 78407)
+++ /trunk/src/VBox/Additions/solaris/Makefile.kmk	(revision 78408)
@@ -170,10 +170,5 @@
 
 SOLARIS_ADD_SYSLIBS = \
-	VBoxOGL.so \
-	VBoxOGLcrutil.so \
-	VBoxOGLfeedbackspu.so \
-	VBoxOGLpassthroughspu.so \
-	VBoxOGLerrorspu.so \
-	VBoxOGLpackspu.so
+	VBoxOGL.so
 
 SOLARIS_ADD_DRIVERS = \
Index: /trunk/src/VBox/GuestHost/OpenGL/Makefile.kmk
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/Makefile.kmk	(revision 78407)
+++ /trunk/src/VBox/GuestHost/OpenGL/Makefile.kmk	(revision 78408)
@@ -34,11 +34,9 @@
 
 ifdef VBOX_WITH_CROGL_ADDITIONS
- DLLS      += VBoxOGLcrutil VBoxOGLerrorspu
- LIBRARIES += VBoxOGLcrpacker VBoxOGLspuload VBoxOGLcrstate
+ LIBRARIES += VBoxOGLcrpacker VBoxOGLspuload VBoxOGLcrstate VBoxOGLcrutil VBoxOGLerrorspu
 endif
 
 ifndef VBOX_ONLY_ADDITIONS
- DLLS      += VBoxOGLhostcrutil VBoxOGLhosterrorspu
- LIBRARIES += VBoxOGLhostcrpacker VBoxOGLhostspuload VBoxOGLhostcrstate
+ LIBRARIES += VBoxOGLhostcrpacker VBoxOGLhostspuload VBoxOGLhostcrstate VBoxOGLhostcrutil VBoxOGLhosterrorspu
 endif
 
@@ -46,5 +44,5 @@
 # VBoxOGLcrutil
 #
-VBoxOGLcrutil_TEMPLATE      = VBOXCROGLR3GUESTDLL
+VBoxOGLcrutil_TEMPLATE      = VBOXCROGLR3GUESTLIB
 if defined(VBOX_SIGNING_MODE) && defined(VBOX_WITH_WDDM)
  VBoxOGLcrutil_INSTTYPE.win = none
@@ -77,8 +75,4 @@
 	util/bmpscale.cpp \
 	util/vboxhgcm.c
-VBoxOGLcrutil_SOURCES.win = \
-	util/VBoxOGLcrutil.rc
-VBoxOGLcrutil_SOURCES.win.x86 = \
-	util/util.def
 VBoxOGLcrutil_LIBS.win = \
 	$(PATH_SDK_$(VBOX_WINDDK)_LIB)/ddraw.lib \
@@ -120,6 +114,6 @@
 # VBoxOGLcrutil-x86 - x86 VBoxOGLcrutil version built for amd64 build
 #
-DLLS.win.amd64 += VBoxOGLcrutil-x86
-VBoxOGLcrutil-x86_TEMPLATE      = VBOXCROGLR3GUESTDLL
+LIBRARIES.win.amd64 += VBoxOGLcrutil-x86
+VBoxOGLcrutil-x86_TEMPLATE      = VBOXCROGLR3GUESTLIB
 VBoxOGLcrutil-x86_EXTENDS = VBoxOGLcrutil
 VBoxOGLcrutil-x86_BLD_TRG_ARCH = x86
@@ -150,5 +144,5 @@
 #
 VBoxOGLhostcrutil_EXTENDS  = VBoxOGLcrutil
-VBoxOGLhostcrutil_TEMPLATE = VBOXCROGLR3HOSTDLL
+VBoxOGLhostcrutil_TEMPLATE = VBOXCROGLR3HOSTLIB
 if defined(VBOX_SIGNING_MODE) && defined(VBOX_WITH_WDDM)
  VBoxOGLhostcrutil_INSTTYPE.win = both
@@ -157,6 +151,4 @@
 VBoxOGLhostcrutil_LDFLAGS = $(NO_SUCH_VARIABLE)
 endif
-VBoxOGLhostcrutil_LDFLAGS.darwin = $(VBoxOGLcrutil_LDFLAGS.darwin) \
-	-install_name $(VBOX_DYLD_EXECUTABLE_PATH)/VBoxOGLhostcrutil.dylib
 VBoxOGLhostcrutil_LIBS.win =  \
     $(PATH_SDK_$(VBOX_WINDDK)_LIB)/ddraw.lib \
@@ -470,7 +462,4 @@
 ifdef VBOX_WITH_CRDUMPER
 VBoxOGLcrstate_DEFS        += VBOX_WITH_CRDUMPER
-#VBoxOGLcrutil_LIBS        += \
-    $(PATH_STAGE_LIB)/additions/VBoxOGLcrstate$(VBOX_SUFF_LIB) \
-    $(PATH_STAGE_LIB)/additions/VBoxOGLspuload$(VBOX_SUFF_LIB)
 endif
 
@@ -567,9 +556,5 @@
 #         and glu.h intermediate files on darwin.
 #
-VBoxOGLerrorspu_TEMPLATE = VBOXCROGLR3GUESTDLL
-if defined(VBOX_SIGNING_MODE) && defined(VBOX_WITH_WDDM)
- VBoxOGLerrorspu_INSTTYPE.win = none
- VBoxOGLerrorspu_DEBUG_INSTTYPE.win = both
-endif
+VBoxOGLerrorspu_TEMPLATE = VBOXCROGLR3GUESTLIB
 VBoxOGLerrorspu_INTERMEDIATES = \
 	$(VBOX_PATH_CROGL_GENFILES)/spu_dispatch_table.h
@@ -583,8 +568,4 @@
 	$(VBOX_PATH_CROGL_GENFILES)/errorspu.c \
 	error/errorspu_init.c
-VBoxOGLerrorspu_SOURCES.win = \
-	error/VBoxOGLerrorspu.rc
-VBoxOGLerrorspu_SOURCES.win.x86 = \
-	error/error.def
 VBoxOGLerrorspu_CLEAN = \
 	$(VBOX_PATH_CROGL_GENFILES)/errorspu.c
@@ -603,6 +584,6 @@
 # VBoxOGLerrorspu-x86 - x86 VBoxOGLerrorspu version built for amd64 build
 #
-DLLS.win.amd64 += VBoxOGLerrorspu-x86
-VBoxOGLerrorspu-x86_TEMPLATE = VBOXCROGLR3GUESTDLL
+LIBRARIES.win.amd64 += VBoxOGLerrorspu-x86
+VBoxOGLerrorspu-x86_TEMPLATE = VBOXCROGLR3GUESTLIB
 VBoxOGLerrorspu-x86_EXTENDS = VBoxOGLerrorspu
 VBoxOGLerrorspu-x86_BLD_TRG_ARCH = x86
@@ -616,13 +597,8 @@
 #
 VBoxOGLhosterrorspu_EXTENDS  = VBoxOGLerrorspu
-VBoxOGLhosterrorspu_TEMPLATE = VBOXCROGLR3HOSTDLL
+VBoxOGLhosterrorspu_TEMPLATE = VBOXCROGLR3HOSTLIB
 if defined(VBOX_SIGNING_MODE) && defined(VBOX_WITH_WDDM)
  VBoxOGLhosterrorspu_INSTTYPE.win = both
 endif
-VBoxOGLhosterrorspu_LDFLAGS.darwin += $(VBoxOGLerrorspu_LDFLAGS.darwin) \
-	-install_name $(VBOX_DYLD_EXECUTABLE_PATH)/VBoxOGLhosterrorspu.dylib
-VBoxOGLhosterrorspu_LIBS  = \
-	$(VBOX_LIB_OGL_HOSTCRUTIL) \
-	$(LIB_RUNTIME)
 
 #
Index: /trunk/src/VBox/GuestHost/OpenGL/error/errorspu_init.c
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/error/errorspu_init.c	(revision 78407)
+++ /trunk/src/VBox/GuestHost/OpenGL/error/errorspu_init.c	(revision 78408)
@@ -39,19 +39,21 @@
 
 
-int SPULoad( char **name, char **super, SPUInitFuncPtr *init,
-             SPUSelfDispatchFuncPtr *self, SPUCleanupFuncPtr *cleanup,
-             int *flags )
+DECLHIDDEN(const SPUREG) g_ErrorSpuReg =
 {
+    /** pszName. */
 #ifdef IN_GUEST
-        *name = "error";
+    "error",
 #else
-        *name = "hosterror";
+    "hosterror",
 #endif
-        *super = NULL;
-        *init = errorSPUInit;
-        *self = errorSPUSelfDispatch;
-        *cleanup = errorSPUCleanup;
-        *flags = (SPU_NO_PACKER|SPU_NOT_TERMINAL|SPU_MAX_SERVERS_ZERO);
-        
-        return 1;
-}
+    /** pszSuperName. */
+    NULL,
+    /** fFlags. */
+    SPU_NO_PACKER | SPU_NOT_TERMINAL | SPU_MAX_SERVERS_ZERO,
+    /** pfnInit. */
+    errorSPUInit,
+    /** pfnDispatch. */
+    errorSPUSelfDispatch, 
+    /** pfnCleanup. */
+    errorSPUCleanup
+};
Index: /trunk/src/VBox/GuestHost/OpenGL/include/cr_spu.h
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/include/cr_spu.h	(revision 78407)
+++ /trunk/src/VBox/GuestHost/OpenGL/include/cr_spu.h	(revision 78408)
@@ -76,4 +76,26 @@
 #define SPU_MAX_SERVERS_UNLIMITED 0x8
 
+/**
+ * SPU registration restructure.
+ */
+typedef struct SPUREG
+{
+    /** SPU name. */
+    const char             *pszName;
+    /** Name of the SPU super class. */
+    const char             *pszSuperName;
+    /** SPU flags. */
+    uint32_t               fFlags;
+    /** Init function. */
+    SPUInitFuncPtr         pfnInit;
+    /** Dispatch function. */
+    SPUSelfDispatchFuncPtr pfnDispatch; 
+    /** Cleanup function. */
+    SPUCleanupFuncPtr      pfnCleanup;
+} SPUREG;
+/** Pointer to a SPU registration structure. */
+typedef SPUREG *PSPUREG;
+/** Pointer to a const SPU registration structure. */
+typedef const SPUREG *PCSPUREG;
 
 /**
@@ -346,4 +368,7 @@
 DECLEXPORT(void) crSPUUnloadChain(SPU *headSPU);
 
+DECLEXPORT(SPU *) crSPUInitFromReg(SPU *pSpuChild, int iId, const char *pszName, void *pvServer, PCSPUREG *papSpuReg);
+DECLEXPORT(SPU *) crSPUInitChainFromReg(int cSpus, int *paIds, const char * const *papszNames, void *server, PCSPUREG *papSpuReg);
+
 DECLEXPORT(void) crSPUInitDispatchTable( SPUDispatchTable *table );
 DECLEXPORT(void) crSPUCopyDispatchTable( SPUDispatchTable *dst, SPUDispatchTable *src );
@@ -378,4 +403,13 @@
 #endif
 
+extern DECLHIDDEN(const SPUREG) g_ErrorSpuReg;
+#ifdef IN_GUEST
+extern DECLHIDDEN(const SPUREG) g_FeedbackSpuReg;
+extern DECLHIDDEN(const SPUREG) g_PassthroughSpuReg;
+extern DECLHIDDEN(const SPUREG) g_PackSpuReg;
+#else
+extern DECLHIDDEN(const SPUREG) g_RenderSpuReg;
+#endif
+
 #ifdef __cplusplus
 }
Index: /trunk/src/VBox/GuestHost/OpenGL/include/cr_threads.h
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/include/cr_threads.h	(revision 78407)
+++ /trunk/src/VBox/GuestHost/OpenGL/include/cr_threads.h	(revision 78408)
@@ -110,5 +110,5 @@
 #define VBoxTlsRefSetImpl(_tls, _val) (crSetTSD((CRtsd*)(_tls), (_val)))
 #define VBoxTlsRefAssertImpl CRASSERT
-#include <VBoxVideo3D.h>
+#include <VBox/Graphics/VBoxVideo3D.h>
 
 #ifdef __cplusplus
Index: /trunk/src/VBox/GuestHost/OpenGL/spu_loader/spuload.c
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/spu_loader/spuload.c	(revision 78407)
+++ /trunk/src/VBox/GuestHost/OpenGL/spu_loader/spuload.c	(revision 78408)
@@ -220,4 +220,154 @@
 
 
+/**
+ * Returns the SPU registration record for the given name.
+ *
+ * @returns Pointer to the SPU registration record on success or NULL if not found.
+ * @param   pszName             The name to look for.
+ * @param   papSpuReg           Pointer to the NULL terminated array of builtin SPU registration record pointers.
+ */
+PCSPUREG crSPUGetRegFromName(const char *pszName, PCSPUREG *papSpuReg)
+{
+    while (*papSpuReg)
+    {
+        if (!RTStrCmp(pszName, (*papSpuReg)->pszName))
+            return *papSpuReg;
+        papSpuReg++;
+    }
+
+    return NULL;
+}
+
+
+/**
+ * Creates a SPU chain from the given SPU registration structure (VBox only).
+ *
+ * @returns Pointer to the SPU head in the chain on success.
+ * @param   pSpuChild           Pointer to the child SPU if any.
+ * @param   iId                 ID to assign to the head SPU.
+ * @param   pszName             Name of the SPU to initialize.
+ * @param   pvServer            The server owning the SPU chain.
+ * @param   papSpuReg           Pointer to the NULL terminated array of builtin SPU registration record pointers.
+ */
+SPU * crSPUInitFromReg(SPU *pSpuChild, int iId, const char *pszName, void *pvServer, PCSPUREG *papSpuReg)
+{
+    SPU *pSpu;
+    bool fNeedSuperSPU = false;
+    PCSPUREG pSpuReg = crSPUGetRegFromName(pszName, papSpuReg);
+    AssertPtrReturn(pSpuReg, NULL);
+
+    pSpu = (SPU*)crAlloc(sizeof(*pSpu));
+    crMemset(pSpu, 0, sizeof (*pSpu));
+    pSpu->id = iId;
+    pSpu->privatePtr = NULL;
+
+    /* Init the SPU structure from the SPU registration record. */
+    pSpu->name       = (char *)pSpuReg->pszName;
+    pSpu->super_name = (char *)pSpuReg->pszSuperName;
+    pSpu->init       = pSpuReg->pfnInit;
+    pSpu->self       = pSpuReg->pfnDispatch;
+    pSpu->cleanup    = pSpuReg->pfnCleanup;
+    pSpu->spu_flags  = pSpuReg->fFlags;
+
+#ifdef IN_GUEST
+    if (crStrcmp(pSpu->name,"error"))
+    {
+            /* the default super/base class for an SPU is the error SPU */
+            if (pSpu->super_name == NULL)
+                pSpu->super_name = "error";
+
+            pSpu->superSPU = crSPUInitFromReg(pSpuChild, iId, pSpu->super_name, pvServer, papSpuReg);
+            fNeedSuperSPU = true;
+    }
+#else
+    if (crStrcmp(pSpu->name,"hosterror"))
+    {
+            /* the default super/base class for an SPU is the error SPU */
+            if (pSpu->super_name == NULL)
+                pSpu->super_name = "hosterror";
+
+            pSpu->superSPU = crSPUInitFromReg(pSpuChild, iId, pSpu->super_name, pvServer, papSpuReg);
+            fNeedSuperSPU = true;
+    }
+#endif
+    else
+        pSpu->superSPU = NULL;
+
+    if (fNeedSuperSPU && !pSpu->superSPU)
+    {
+            crError( "Unable to load super SPU \"%s\" of \"%s\"!", pSpu->super_name, pSpuReg->pszName);
+            crSPUUnloadChain(pSpu);
+            return NULL;
+    }
+    crDebug("Initializing %s SPU", pSpuReg->pszName);
+    pSpu->function_table = pSpu->init(iId, pSpuChild, pSpu, 0, 1);
+    if (!pSpu->function_table) {
+            crDebug("Failed to init %s SPU", pSpuReg->pszName);
+            crSPUUnloadChain(pSpu);
+            return NULL;
+    }
+    __buildDispatch( pSpu );
+    /*crDebug( "initializing dispatch table %p (for SPU %s)", (void*)&(pSpu->dispatch_table), name );*/
+    crSPUInitDispatchTable( &(pSpu->dispatch_table) );
+    /*crDebug( "Done initializing the dispatch table for SPU %s, calling the self function", name );*/
+
+    pSpu->dispatch_table.server = pvServer;
+    pSpu->self( &(pSpu->dispatch_table) );
+    /*crDebug( "Done with the self function" );*/
+
+    return pSpu;
+}
+
+
+/**
+ * Initializes a give nchain of SPUs from the builtin SPU registration descriptors (VBox only).
+ *
+ * @returns Pointer to the Head SPU on success or NULL on failure.
+ * @param   cSpus               The number of SPUs to initialize.
+ * @param   paIds               Pointer to the array of IDs.
+ * @param   papszNames          Pointer to the array of SPU names to initalize.
+ * @param   pvServer            The server owning the SPU chain.
+ * @param   papSpuReg           Pointer to the NULL terminated array of builtin SPU registration record pointers.
+ */
+SPU *crSPUInitChainFromReg(int cSpus, int *paIds, const char * const *papszNames, void *pvServer, PCSPUREG *papSpuReg)
+{
+    int i = 0;
+    SPU *pSpuChild = NULL;
+    CRASSERT( cSpus > 0 );
+
+    for (i = cSpus - 1; i >= 0; i--)
+    {
+        int idSpu = paIds[i];
+        const char *pszSpuName = papszNames[i];
+
+        /*
+         * This call passes the previous version of spu, which is the SPU's
+         * "child" in this chain.
+         */
+        SPU *pSpu = crSPUInitFromReg( pSpuChild, idSpu, pszSpuName, pvServer, papSpuReg);
+        if (!pSpu)
+            return NULL; /** @todo Proper rollback. */
+
+        if (pSpuChild != NULL)
+        {
+            SPU *pTmp;
+
+            /* keep track of this so that people can pass functions through but
+             * still get updated when API's change on the fly. */
+            for (pTmp = pSpu ; pTmp ; pTmp = pTmp->superSPU )
+            {
+                struct _copy_list_node *node = (struct _copy_list_node *) crAlloc( sizeof( *node ) );
+                node->copy = &(pTmp->dispatch_table);
+                node->next = pSpuChild->dispatch_table.copyList;
+                pSpuChild->dispatch_table.copyList = node;
+            }
+        }
+        pSpuChild = pSpu;
+    }
+
+    return pSpuChild;
+}
+
+
 #if 00
 /* XXXX experimental code - not used at this time */
@@ -282,5 +432,6 @@
 
                 next_spu = the_spu->superSPU;
-                crDLLClose(the_spu->dll);
+                if (the_spu->dll != NULL)
+                    crDLLClose(the_spu->dll);
                 crFree(the_spu);
                 the_spu = next_spu;
Index: /trunk/src/VBox/GuestHost/OpenGL/util/error.c
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/util/error.c	(revision 78407)
+++ /trunk/src/VBox/GuestHost/OpenGL/util/error.c	(revision 78408)
@@ -31,10 +31,6 @@
 #ifdef RT_OS_WINDOWS
 # include <iprt/win/windows.h>
-# include "cr_error.h"
-# include "VBox/VBoxGuestLib.h"
-# include "iprt/initterm.h"
-#else
-# include "cr_error.h"
 #endif
+#include "cr_error.h"
 
 #include <signal.h>
@@ -179,42 +175,2 @@
     }
 }
-
-#if defined(RT_OS_WINDOWS)
-BOOL WINAPI DllMain(HINSTANCE hDLLInst, DWORD fdwReason, LPVOID lpvReserved)
-{
-    (void) lpvReserved; (void) hDLLInst;
-
-    switch (fdwReason)
-    {
-        case DLL_PROCESS_ATTACH:
-        {
-            int rc;
-            rc = RTR3InitDll(RTR3INIT_FLAGS_UNOBTRUSIVE); CRASSERT(rc==0);
-# ifdef IN_GUEST
-            rc = VbglR3Init();
-# endif
-            LogRel(("crUtil DLL loaded.\n"));
-# if defined(DEBUG_misha)
-            char aName[MAX_PATH];
-            GetModuleFileNameA(hDLLInst, aName, RT_ELEMENTS(aName));
-            crDbgCmdSymLoadPrint(aName, hDLLInst);
-# endif
-             break;
-        }
-
-        case DLL_PROCESS_DETACH:
-        {
-            LogRel(("crUtil DLL unloaded."));
-# ifdef IN_GUEST
-            VbglR3Term();
-# endif
-        }
-
-        default:
-            break;
-    }
-
-    return TRUE;
-}
-#endif
-
Index: /trunk/src/VBox/HostServices/SharedOpenGL/Makefile.kmk
===================================================================
--- /trunk/src/VBox/HostServices/SharedOpenGL/Makefile.kmk	(revision 78407)
+++ /trunk/src/VBox/HostServices/SharedOpenGL/Makefile.kmk	(revision 78408)
@@ -24,6 +24,6 @@
 #
 ifdef VBOX_WITH_MAIN
-DLLS      += VBoxSharedCrOpenGL	VBoxOGLrenderspu
-LIBRARIES += VBoxOGLcrserverlib	VBoxOGLcrunpacker
+DLLS      += VBoxSharedCrOpenGL
+LIBRARIES += VBoxOGLcrserverlib	VBoxOGLcrunpacker VBoxOGLrenderspu
 BLDDIRS   += \
 	$(VBOX_PATH_CROGL_GENFILES)/
@@ -72,5 +72,8 @@
 	$(PATH_STAGE_LIB)/VBoxOGLhostcrpacker$(VBOX_SUFF_LIB) \
 	$(PATH_STAGE_LIB)/VBoxOGLhostspuload$(VBOX_SUFF_LIB) \
-	$(VBOX_LIB_OGL_HOSTCRUTIL) \
+	$(PATH_STAGE_LIB)/VBoxOGLhostcrutil$(VBOX_SUFF_LIB) \
+	$(PATH_STAGE_LIB)/VBoxOGLhostspuload$(VBOX_SUFF_LIB) \
+	$(PATH_STAGE_LIB)/VBoxOGLrenderspu$(VBOX_SUFF_LIB) \
+	$(PATH_STAGE_LIB)/VBoxOGLhosterrorspu$(VBOX_SUFF_LIB) \
 	$(PATH_STAGE_LIB)/VBoxCOM$(VBOX_SUFF_LIB) \
 	$(LIB_RUNTIME) \
@@ -78,11 +81,4 @@
 VBoxSharedCrOpenGL_LIBS.darwin = \
 	$(LIB_REM)
-ifeq ($(KBUILD_TARGET),win)
- VBoxSharedCrOpenGL_LIBS += \
-	$(PATH_OBJ)/VBoxOGLrenderspu/VBoxOGLrenderspu$(VBOX_SUFF_LIB)
-else
- VBoxSharedCrOpenGL_LIBS += \
-	$(PATH_STAGE_BIN)/VBoxOGLrenderspu$(VBOX_SUFF_DLL)
-endif
 ifdef VBOX_WITH_XPCOM
  VBoxSharedCrOpenGL_LIBS += \
@@ -260,5 +256,5 @@
 # VBoxOGLrenderspu
 #
-VBoxOGLrenderspu_TEMPLATE = VBOXCROGLR3HOSTDLL
+VBoxOGLrenderspu_TEMPLATE = VBOXCROGLR3HOSTLIB
 VBoxOGLrenderspu_INTERMEDIATES = \
 	$(VBOX_PATH_CROGL_GENFILES)/state/cr_currentpointers.h \
@@ -270,7 +266,5 @@
 	render/renderspu_init.c
 VBoxOGLrenderspu_SOURCES.win     = \
-	render/renderspu_wgl.c \
-	render/render.def \
-	render/VBoxOGLrenderspu.rc
+	render/renderspu_wgl.c
 VBoxOGLrenderspu_SOURCES.linux   = render/renderspu_glx.c
 VBoxOGLrenderspu_SOURCES.solaris = render/renderspu_glx.c
@@ -287,9 +281,4 @@
 VBoxOGLrenderspu_DEFS += VBOX_WITH_VDMA
 endif
-VBoxOGLrenderspu_LDFLAGS.darwin += -install_name $(VBOX_DYLD_EXECUTABLE_PATH)/VBoxOGLrenderspu.dylib -framework IOKit
-VBoxOGLrenderspu_LIBS = \
-	$(PATH_STAGE_LIB)/VBoxOGLhostspuload$(VBOX_SUFF_LIB) \
-	$(VBOX_LIB_OGL_HOSTCRUTIL) \
-	$(LIB_RUNTIME)
 if1of ($(KBUILD_TARGET), freebsd linux netbsd openbsd solaris) # the X11 gang
  VBoxOGLrenderspu_LIBS += \
@@ -321,4 +310,10 @@
   PROGRAMS += VBoxTestOGL
   VBoxTestOGL_TEMPLATE = $(if $(VBOX_WITH_VIDEOHWACCEL),$(if $(VBOX_WITH_HARDENING),VBOXQTGUI,VBOXQTGUIEXE),VBOXMAINEXE)
+  VBoxTestOGL_INCS     += $(VBOX_PATH_CROGL_INCLUDE) $(VBOX_PATH_CROGL_GENFILES)
+  VBoxTestOGL_DEFS.win         = _WIN32_WINNT=0x0500 WINDOWS=1
+  VBoxTestOGL_DEFS.linux       = Linux=1 _GNU_SOURCE
+  VBoxTestOGL_DEFS.solaris     = SunOS=1 _GNU_SOURCE #GLEXT_64_TYPES_DEFINED
+  VBoxTestOGL_DEFS.darwin      = DARWIN=1 GL_GLEXT_LEGACY _GNU_SOURCE
+  VBoxTestOGL_DEFS.freebsd     = FreeBSD=1 _GNU_SOURCE
   VBoxTestOGL_SOURCES = OpenGLTest/OpenGLTestApp.cpp
   VBoxTestOGL_SOURCES.win = OpenGLTest/VBoxTestOGL.rc
@@ -326,5 +321,7 @@
   	$(if $(VBOX_WITH_CROGL), \
   	    $(PATH_STAGE_LIB)/VBoxOGLhostspuload$(VBOX_SUFF_LIB) \
-  	    $(VBOX_LIB_OGL_HOSTCRUTIL),) \
+  	    $(PATH_STAGE_LIB)/VBoxOGLhosterrorspu$(VBOX_SUFF_LIB) \
+	    $(PATH_STAGE_LIB)/VBoxOGLrenderspu$(VBOX_SUFF_LIB) \
+  	    $(PATH_STAGE_LIB)/VBoxOGLhostcrutil$(VBOX_SUFF_LIB),) \
   	$(if $(VBOX_WITH_VIDEOHWACCEL), $(PATH_STAGE_LIB)/VBoxOGL2D$(VBOX_SUFF_LIB),) \
   	$(LIB_RUNTIME)
Index: /trunk/src/VBox/HostServices/SharedOpenGL/OpenGLTest/OpenGLTestApp.cpp
===================================================================
--- /trunk/src/VBox/HostServices/SharedOpenGL/OpenGLTest/OpenGLTestApp.cpp	(revision 78407)
+++ /trunk/src/VBox/HostServices/SharedOpenGL/OpenGLTest/OpenGLTestApp.cpp	(revision 78408)
@@ -51,15 +51,11 @@
 #ifdef VBOX_WITH_CROGL
 
-extern "C"
-{
-  extern void * crSPULoad(void *, int, char *, char *, void *);
-  extern void crSPUUnloadChain(void *);
-}
-
+#include <cr_spu.h>
 
 static int vboxCheck3DAccelerationSupported()
 {
     LogRel(("Testing 3D Support:\n"));
-    void *spu = crSPULoad(NULL, 0, (char*)"render", NULL, NULL);
+    PCSPUREG aSpuRegs[] = { &g_RenderSpuReg, &g_ErrorSpuReg, NULL};
+    SPU *spu = crSPUInitFromReg(NULL, 0, "render", NULL, &aSpuRegs[0]);
     if (spu)
     {
Index: /trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_config.cpp
===================================================================
--- /trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_config.cpp	(revision 78407)
+++ /trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_config.cpp	(revision 78408)
@@ -99,8 +99,4 @@
 {
     CRMuralInfo *defaultMural;
-
-    int spu_ids[1]     = {0};
-    char *spu_names[1] = {"render"};
-    char *spu_dir = NULL;
     int i;
     GLint dims[4];
@@ -114,7 +110,7 @@
     setDefaults();
     
-    /* Load the SPUs */    
-    cr_server.head_spu = crSPULoadChain(1, spu_ids, spu_names, spu_dir, &cr_server);
-
+    /* Load the SPUs */
+    PCSPUREG aSpuRegs[] = { &g_RenderSpuReg, &g_ErrorSpuReg, NULL};
+    cr_server.head_spu = crSPUInitFromReg(NULL, 0, "render", &cr_server, &aSpuRegs[0]);
     if (!cr_server.head_spu)
         return;
Index: unk/src/VBox/HostServices/SharedOpenGL/render/VBoxOGLrenderspu.rc
===================================================================
--- /trunk/src/VBox/HostServices/SharedOpenGL/render/VBoxOGLrenderspu.rc	(revision 78407)
+++ 	(revision )
@@ -1,51 +1,0 @@
-/* $Id$ */
-/** @file
- * VBoxOGLrenderspu - Resource file containing version info and icon.
- */
-
-/*
- * Copyright (C) 2015-2019 Oracle Corporation
- *
- * This file is part of VirtualBox Open Source Edition (OSE), as
- * available from http://www.virtualbox.org. This file is free software;
- * you can redistribute it and/or modify it under the terms of the GNU
- * General Public License (GPL) as published by the Free Software
- * Foundation, in version 2 as it comes in the "COPYING" file of the
- * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
- * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
- */
-
-#include <windows.h>
-#include <VBox/version.h>
-
-LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
-
-VS_VERSION_INFO VERSIONINFO
-  FILEVERSION      VBOX_RC_FILE_VERSION
-  PRODUCTVERSION   VBOX_RC_FILE_VERSION
-  FILEFLAGSMASK    VS_FFI_FILEFLAGSMASK
-  FILEFLAGS        VBOX_RC_FILE_FLAGS
-  FILEOS           VBOX_RC_FILE_OS
-  FILETYPE         VBOX_RC_TYPE_DLL
-  FILESUBTYPE      VFT2_UNKNOWN
-BEGIN
-  BLOCK "StringFileInfo"
-  BEGIN
-    BLOCK "040904b0" // Lang=US English, CharSet=Unicode
-    BEGIN
-      VALUE "FileDescription",  "VirtualBox crOpenGL ICD\0"
-      VALUE "InternalName",     "VBoxOGLrenderspu\0"
-      VALUE "OriginalFilename", "VBoxOGLrenderspu.dll\0"
-      VALUE "CompanyName",      VBOX_RC_COMPANY_NAME
-      VALUE "FileVersion",      VBOX_RC_FILE_VERSION_STR
-      VALUE "LegalCopyright",   VBOX_RC_LEGAL_COPYRIGHT
-      VALUE "ProductName",      VBOX_RC_PRODUCT_NAME_STR
-      VALUE "ProductVersion",   VBOX_RC_PRODUCT_VERSION_STR
-      VBOX_RC_MORE_STRINGS
-    END
-  END
-  BLOCK "VarFileInfo"
-  BEGIN
-    VALUE "Translation", 0x409, 1200
-  END
-END
Index: unk/src/VBox/HostServices/SharedOpenGL/render/render.def
===================================================================
--- /trunk/src/VBox/HostServices/SharedOpenGL/render/render.def	(revision 78407)
+++ 	(revision )
@@ -1,7 +1,0 @@
-; Copyright (c) 2001, Stanford University
-; All rights reserved.
-;
-; See the file LICENSE.txt for information on redistributing this software.
-EXPORTS
-SPULoad
-renderspuSetWindowId
Index: /trunk/src/VBox/HostServices/SharedOpenGL/render/renderspu.h
===================================================================
--- /trunk/src/VBox/HostServices/SharedOpenGL/render/renderspu.h	(revision 78407)
+++ /trunk/src/VBox/HostServices/SharedOpenGL/render/renderspu.h	(revision 78408)
@@ -411,5 +411,5 @@
 extern "C" {
 #endif
-DECLEXPORT(void) renderspuSetWindowId(uint64_t winId);
+DECLHIDDEN(void) renderspuSetWindowId(uint64_t winId);
 DECLEXPORT(void) renderspuReparentWindow(GLint window);
 DECLEXPORT(void) renderspuSetUnscaledHiDPI(bool fEnable);
Index: /trunk/src/VBox/HostServices/SharedOpenGL/render/renderspu_init.c
===================================================================
--- /trunk/src/VBox/HostServices/SharedOpenGL/render/renderspu_init.c	(revision 78407)
+++ /trunk/src/VBox/HostServices/SharedOpenGL/render/renderspu_init.c	(revision 78408)
@@ -498,21 +498,23 @@
 
 
-int SPULoad( char **name, char **super, SPUInitFuncPtr *init,
-         SPUSelfDispatchFuncPtr *self, SPUCleanupFuncPtr *cleanup,
-         int *flags )
-{
-    *name = "render";
-    *super = NULL;
-    *init = renderSPUInit;
-    *self = renderSPUSelfDispatch;
-    *cleanup = renderSPUCleanup;
-    *flags = (SPU_NO_PACKER|SPU_IS_TERMINAL|SPU_MAX_SERVERS_ZERO);
-
-    return 1;
-}
-
-DECLEXPORT(void) renderspuSetWindowId(uint64_t winId)
+DECLHIDDEN(void) renderspuSetWindowId(uint64_t winId)
 {
     render_spu_parent_window_id = winId;
     crDebug("Set new parent window %p (no actual reparent performed)", winId);
 }
+
+DECLHIDDEN(const SPUREG) g_RenderSpuReg =
+{
+    /** pszName. */
+    "render",
+    /** pszSuperName. */
+    NULL,
+    /** fFlags. */
+    SPU_NO_PACKER | SPU_IS_TERMINAL | SPU_MAX_SERVERS_ZERO,
+    /** pfnInit. */
+    renderSPUInit,
+    /** pfnDispatch. */
+    renderSPUSelfDispatch, 
+    /** pfnCleanup. */
+    renderSPUCleanup
+};
Index: /trunk/src/VBox/Installer/darwin/Makefile.kmk
===================================================================
--- /trunk/src/VBox/Installer/darwin/Makefile.kmk	(revision 78407)
+++ /trunk/src/VBox/Installer/darwin/Makefile.kmk	(revision 78408)
@@ -391,13 +391,5 @@
 ifdef VBOX_WITH_CROGL
  VBOX_DI_VBAPP_DYLIBS += \
- 	MacOS/VBoxOGLhostcrutil.dylib \
- 	MacOS/VBoxOGLhosterrorspu.dylib \
- 	MacOS/VBoxOGLrenderspu.dylib \
  	MacOS/VBoxSharedCrOpenGL.dylib
-
- ifdef VBOX_WITH_CR_DISPLAY_LISTS
-  VBOX_DI_VBAPP_DYLIBS += \
- 	MacOS/VBoxOGLexpandospu.dylib
- endif
 endif
 ifdef VBOX_WITH_DEBUGGER_GUI
Index: /trunk/src/VBox/Installer/freebsd/Makefile.kmk
===================================================================
--- /trunk/src/VBox/Installer/freebsd/Makefile.kmk	(revision 78407)
+++ /trunk/src/VBox/Installer/freebsd/Makefile.kmk	(revision 78408)
@@ -105,7 +105,4 @@
 		components/VBoxC.so,) \
 	$(if $(VBOX_WITH_CROGL),\
-		VBoxOGLhostcrutil.so \
-		VBoxOGLhosterrorspu.so \
-		VBoxOGLrenderspu.so \
 		VBoxTestOGL \
 		VBoxSharedCrOpenGL.so,) \
Index: /trunk/src/VBox/Installer/linux/Makefile.kmk
===================================================================
--- /trunk/src/VBox/Installer/linux/Makefile.kmk	(revision 78407)
+++ /trunk/src/VBox/Installer/linux/Makefile.kmk	(revision 78408)
@@ -168,7 +168,4 @@
 		components/VBoxC.so,) \
 	$(if $(VBOX_WITH_CROGL),\
-		VBoxOGLhostcrutil.so \
-		VBoxOGLhosterrorspu.so \
-		VBoxOGLrenderspu.so \
 		$(if $(VBOX_WITH_QTGUI),VBoxTestOGL,) \
 		VBoxSharedCrOpenGL.so,) \
Index: /trunk/src/VBox/Installer/solaris/Makefile.kmk
===================================================================
--- /trunk/src/VBox/Installer/solaris/Makefile.kmk	(revision 78407)
+++ /trunk/src/VBox/Installer/solaris/Makefile.kmk	(revision 78408)
@@ -336,7 +336,4 @@
 	$(if $(VBOX_WITH_DEBUGGER_GUI),VBoxDbg.so DbgPlugInDiggers.so,) \
 	$(if $(VBOX_WITH_CROGL),\
-	  VBoxOGLhostcrutil.so \
-	  VBoxOGLhosterrorspu.so \
-	  VBoxOGLrenderspu.so \
 	  VBoxSharedCrOpenGL.so) \
 	components/VBoxC.so \
Index: /trunk/src/VBox/Installer/win/VBoxMergeApp.wxi
===================================================================
--- /trunk/src/VBox/Installer/win/VBoxMergeApp.wxi	(revision 78407)
+++ /trunk/src/VBox/Installer/win/VBoxMergeApp.wxi	(revision 78408)
@@ -409,10 +409,4 @@
 <?if $(env.VBOX_WITH_CROGL) = "yes" ?>
     <Component Id="cp_VBoxCROpenGL" Guid="874A1297-835A-491D-8A9D-7E723BC29EE7" Win64="$(var.Property_Win64)">
-        <File Id="file_VBoxOGLhostcrutil.dll" Name="VBoxOGLhostcrutil.dll"
-              Source="$(env.PATH_OUT)\bin\VBoxOGLhostcrutil.dll" />
-        <File Id="file_VBoxOGLhosterrorspu.dll" Name="VBoxOGLhosterrorspu.dll"
-              Source="$(env.PATH_OUT)\bin\VBoxOGLhosterrorspu.dll" />
-        <File Id="file_VBoxOGLrenderspu.dll" Name="VBoxOGLrenderspu.dll"
-              Source="$(env.PATH_OUT)\bin\VBoxOGLrenderspu.dll" />
         <File Id="file_VBoxSharedCrOpenGL.dll" Name="VBoxSharedCrOpenGL.dll"
               Source="$(env.PATH_OUT)\bin\VBoxSharedCrOpenGL.dll" />
