Index: /trunk/src/VBox/Additions/common/crOpenGL/pack/packspu_context.c
===================================================================
--- /trunk/src/VBox/Additions/common/crOpenGL/pack/packspu_context.c	(revision 42527)
+++ /trunk/src/VBox/Additions/common/crOpenGL/pack/packspu_context.c	(revision 42528)
@@ -36,6 +36,5 @@
 
 #if defined(VBOX_WITH_CRHGSMI) && defined(IN_GUEST)
-    /* this is not true for packSPUInit, but will be fixed shortly */
-//    CRASSERT(!CRPACKSPU_IS_WDDM_CRHGSMI() == !pHgsmi);
+    CRASSERT(!CRPACKSPU_IS_WDDM_CRHGSMI() == !pHgsmi);
 #endif
 
@@ -75,5 +74,5 @@
     else {
         /* a new pthread */
-        crNetNewClient(pack_spu.thread[pack_spu.idxThreadInUse].netServer.conn, &(thread->netServer)
+        crNetNewClient(&(thread->netServer)
 #if defined(VBOX_WITH_CRHGSMI) && defined(IN_GUEST)
                 , pHgsmi
Index: /trunk/src/VBox/Additions/common/crOpenGL/pack/packspu_get.py
===================================================================
--- /trunk/src/VBox/Additions/common/crOpenGL/pack/packspu_get.py	(revision 42527)
+++ /trunk/src/VBox/Additions/common/crOpenGL/pack/packspu_get.py	(revision 42528)
@@ -93,5 +93,5 @@
         if (func_name in easy_swaps.keys() and easy_swaps[func_name] != '0') or func_name in simple_funcs or func_name in hard_funcs.keys():
             print '\tunsigned int i;'
-        print '\tif (!(pack_spu.thread[pack_spu.idxThreadInUse].netServer.conn->actual_network))'
+        print '\tif (!CRPACKSPU_IS_WDDM_CRHGSMI() && !(pack_spu.thread[pack_spu.idxThreadInUse].netServer.conn->actual_network))'
         print '\t{'
         print '\t\tcrError( "packspu_%s doesn\'t work when there\'s no actual network involved!\\nTry using the simplequery SPU in your chain!" );' % func_name
Index: /trunk/src/VBox/Additions/common/crOpenGL/pack/packspu_glsl.c
===================================================================
--- /trunk/src/VBox/Additions/common/crOpenGL/pack/packspu_glsl.c	(revision 42527)
+++ /trunk/src/VBox/Additions/common/crOpenGL/pack/packspu_glsl.c	(revision 42528)
@@ -29,5 +29,5 @@
     int writeback = 1;
     GLuint return_val = (GLuint) 0;
-    if (!(pack_spu.thread[pack_spu.idxThreadInUse].netServer.conn->actual_network))
+    if (!CRPACKSPU_IS_WDDM_CRHGSMI() && !(pack_spu.thread[pack_spu.idxThreadInUse].netServer.conn->actual_network))
     {
         crError("packspu_CreateProgram doesn't work when there's no actual network involved!\nTry using the simplequery SPU in your chain!");
@@ -58,5 +58,5 @@
     int writeback = 1;
     GLint return_val = (GLint) 0;
-    if (!(pack_spu.thread[pack_spu.idxThreadInUse].netServer.conn->actual_network))
+    if (!CRPACKSPU_IS_WDDM_CRHGSMI() && !(pack_spu.thread[pack_spu.idxThreadInUse].netServer.conn->actual_network))
     {
         crError("packspu_GetUniformLocation doesn't work when there's no actual network involved!\nTry using the simplequery SPU in your chain!");
Index: /trunk/src/VBox/Additions/common/crOpenGL/pack/packspu_init.c
===================================================================
--- /trunk/src/VBox/Additions/common/crOpenGL/pack/packspu_init.c	(revision 42527)
+++ /trunk/src/VBox/Additions/common/crOpenGL/pack/packspu_init.c	(revision 42528)
@@ -51,16 +51,19 @@
 #endif
 
-    /* This connects to the server, sets up the packer, etc. */
-    thread = packspuNewThread(
+    if (!CRPACKSPU_IS_WDDM_CRHGSMI())
+    {
+        /* This connects to the server, sets up the packer, etc. */
+        thread = packspuNewThread(
 #if defined(VBOX_WITH_CRHGSMI) && defined(IN_GUEST)
             NULL
 #endif
-             );
+                 );
 
-    if (!thread) {
-        return NULL;
+        if (!thread) {
+            return NULL;
+        }
+        CRASSERT( thread == &(pack_spu.thread[0]) );
+        pack_spu.idxThreadInUse = 0;
     }
-    CRASSERT( thread == &(pack_spu.thread[0]) );
-    pack_spu.idxThreadInUse = 0;
 
     packspuCreateFunctions();
Index: /trunk/src/VBox/Additions/common/crOpenGL/pack/packspu_misc.c
===================================================================
--- /trunk/src/VBox/Additions/common/crOpenGL/pack/packspu_misc.c	(revision 42527)
+++ /trunk/src/VBox/Additions/common/crOpenGL/pack/packspu_misc.c	(revision 42528)
@@ -76,5 +76,5 @@
 {
     GET_THREAD(thread);
-    GLint writeback = pack_spu.thread[pack_spu.idxThreadInUse].netServer.conn->actual_network;
+    GLint writeback = CRPACKSPU_IS_WDDM_CRHGSMI() ? 1 : pack_spu.thread[pack_spu.idxThreadInUse].netServer.conn->actual_network;
 
     if (pack_spu.swap)
@@ -182,5 +182,5 @@
     GET_THREAD(thread);
     static int num_calls = 0;
-    int writeback = pack_spu.thread[pack_spu.idxThreadInUse].netServer.conn->actual_network;
+    int writeback = CRPACKSPU_IS_WDDM_CRHGSMI() ? 1 : pack_spu.thread[pack_spu.idxThreadInUse].netServer.conn->actual_network;
     GLint return_val = (GLint) 0;
     ThreadInfo *curThread = thread;
@@ -264,5 +264,5 @@
     GLsizei i;
 
-    if (!(pack_spu.thread[pack_spu.idxThreadInUse].netServer.conn->actual_network))
+    if (!CRPACKSPU_IS_WDDM_CRHGSMI() && !(pack_spu.thread[pack_spu.idxThreadInUse].netServer.conn->actual_network))
     {
         crError( "packspu_AreTexturesResident doesn't work when there's no actual network involved!\nTry using the simplequery SPU in your chain!" );
@@ -304,5 +304,5 @@
     GLsizei i;
 
-    if (!(pack_spu.thread[pack_spu.idxThreadInUse].netServer.conn->actual_network))
+    if (!CRPACKSPU_IS_WDDM_CRHGSMI() && !(pack_spu.thread[pack_spu.idxThreadInUse].netServer.conn->actual_network))
     {
         crError( "packspu_AreProgramsResidentNV doesn't work when there's no actual network involved!\nTry using the simplequery SPU in your chain!" );
@@ -467,6 +467,6 @@
     crLockMutex(&_PackMutex);
     {
-        CRASSERT((pack_spu.numThreads>0) && (pack_spu.numThreads<MAX_THREADS));
-
+        CRASSERT(CRPACKSPU_IS_WDDM_CRHGSMI() || (pack_spu.numThreads>0));
+        CRASSERT(pack_spu.numThreads<MAX_THREADS);
         for (i=0; i<MAX_THREADS; ++i)
         {
@@ -490,5 +490,5 @@
         thread->netServer.buffer_size = 64 * 1024;
 
-        crNetNewClient(pack_spu.thread[pack_spu.idxThreadInUse].netServer.conn, &(thread->netServer)
+        crNetNewClient(&(thread->netServer)
 #if defined(VBOX_WITH_CRHGSMI) && defined(IN_GUEST)
                 , pHgsmi
Index: /trunk/src/VBox/GuestHost/OpenGL/include/cr_netserver.h
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/include/cr_netserver.h	(revision 42527)
+++ /trunk/src/VBox/GuestHost/OpenGL/include/cr_netserver.h	(revision 42528)
@@ -27,5 +27,5 @@
 #endif
                 );
-DECLEXPORT(void) crNetNewClient( CRConnection *conn, CRNetServer *ns
+DECLEXPORT(void) crNetNewClient( CRNetServer *ns
 #if defined(VBOX_WITH_CRHGSMI) && defined(IN_GUEST)
                 , struct VBOXUHGSMI *pHgsmi
Index: /trunk/src/VBox/GuestHost/OpenGL/util/net.c
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/util/net.c	(revision 42527)
+++ /trunk/src/VBox/GuestHost/OpenGL/util/net.c	(revision 42528)
@@ -305,5 +305,5 @@
  * We send a CR_MESSAGE_NEWCLIENT packet, then call crNetServerConnect.
  */
-void crNetNewClient( CRConnection *conn, CRNetServer *ns
+void crNetNewClient( CRNetServer *ns
 #if defined(VBOX_WITH_CRHGSMI) && defined(IN_GUEST)
                 , struct VBOXUHGSMI *pHgsmi
