Index: /trunk/src/VBox/Main/include/DisplayImpl.h
===================================================================
--- /trunk/src/VBox/Main/include/DisplayImpl.h	(revision 53747)
+++ /trunk/src/VBox/Main/include/DisplayImpl.h	(revision 53748)
@@ -374,4 +374,7 @@
     int32_t volatile mcVideoAccelVRDPRefs;
 
+    /** Accelerate3DEnabled = true && GraphicsControllerType == VBoxVGA. */
+    bool        mfIsCr3DEnabled;
+
 #ifdef VBOX_WITH_CROGL
     bool        mfCrOglDataHidden;
Index: /trunk/src/VBox/Main/src-client/DisplayImpl.cpp
===================================================================
--- /trunk/src/VBox/Main/src-client/DisplayImpl.cpp	(revision 53747)
+++ /trunk/src/VBox/Main/src-client/DisplayImpl.cpp	(revision 53748)
@@ -92,5 +92,5 @@
 
 Display::Display()
-    : mParent(NULL)
+    : mParent(NULL), mfIsCr3DEnabled(false)
 {
 }
@@ -306,7 +306,5 @@
 #if defined(VBOX_WITH_HGCM) && defined(VBOX_WITH_CROGL)
         BOOL f3DSnapshot = FALSE;
-        BOOL is3denabled;
-        that->mParent->i_machine()->COMGETTER(Accelerate3DEnabled)(&is3denabled);
-        if (   is3denabled
+        if (   that->mfIsCr3DEnabled
             && that->mCrOglCallbacks.pfnHasData
             && that->mCrOglCallbacks.pfnHasData())
@@ -634,4 +632,11 @@
     }
 
+    /* Cache the 3D settings. */
+    BOOL fIs3DEnabled = FALSE;
+    mParent->i_machine()->COMGETTER(Accelerate3DEnabled)(&fIs3DEnabled);
+    GraphicsControllerType_T enmGpuType = (GraphicsControllerType_T)GraphicsControllerType_VBoxVGA;
+    mParent->i_machine()->COMGETTER(GraphicsControllerType)(&enmGpuType);
+    mfIsCr3DEnabled = fIs3DEnabled && enmGpuType == GraphicsControllerType_VBoxVGA;
+
     /* Confirm a successful initialization */
     autoInitSpan.setSucceeded();
@@ -737,12 +742,6 @@
     if (!mhCrOglSvc)
     {
-        /* no 3D or the VMSVGA3d kind. */
-#ifdef VBOX_STRICT
-        BOOL fIs3DEnabled;
-        mParent->i_machine()->COMGETTER(Accelerate3DEnabled)(&fIs3DEnabled);
-        GraphicsControllerType_T enmGraphicsController;
-        mParent->i_machine()->COMGETTER(GraphicsControllerType)(&enmGraphicsController);
-        Assert(!fIs3DEnabled || enmGraphicsController != GraphicsControllerType_VBoxVGA);
-#endif
+        /* No 3D or the VMSVGA3d kind. */
+        Assert(!mfIsCr3DEnabled);
         return VERR_INVALID_STATE;
     }
@@ -791,8 +790,5 @@
         return VINF_SUCCESS; /* nop it */
 
-    BOOL is3denabled;
-    mParent->i_machine()->COMGETTER(Accelerate3DEnabled)(&is3denabled);
-
-    if (is3denabled)
+    if (mfIsCr3DEnabled)
     {
         int rc = VERR_INVALID_STATE;
@@ -802,6 +798,6 @@
             if (pVMMDev)
             {
-                VBOXCRCMDCTL_HGCM *pCtl =
-                    (VBOXCRCMDCTL_HGCM*)RTMemAlloc(sizeof(CRVBOXHGCMDEVRESIZE) + sizeof(VBOXCRCMDCTL_HGCM));
+                VBOXCRCMDCTL_HGCM *pCtl;
+                pCtl = (VBOXCRCMDCTL_HGCM*)RTMemAlloc(sizeof(CRVBOXHGCMDEVRESIZE) + sizeof(VBOXCRCMDCTL_HGCM));
                 if (pCtl)
                 {
@@ -817,5 +813,5 @@
 
                     rc = i_crCtlSubmit(&pCtl->Hdr, sizeof(*pCtl), i_displayCrCmdFree, pCtl);
-                    if (!RT_SUCCESS(rc))
+                    if (RT_FAILURE(rc))
                     {
                         AssertMsgFailed(("crCtlSubmit failed rc %d\n", rc));
@@ -1228,10 +1224,6 @@
 
 #if defined(VBOX_WITH_HGCM) && defined(VBOX_WITH_CROGL)
-    BOOL is3denabled = FALSE;
-
-    mParent->i_machine()->COMGETTER(Accelerate3DEnabled)(&is3denabled);
-
     VMMDev *vmmDev = mParent->i_getVMMDev();
-    if (is3denabled && vmmDev)
+    if (mfIsCr3DEnabled && vmmDev)
     {
         if (mhCrOglSvc)
@@ -1559,8 +1551,5 @@
     {
 #if defined(VBOX_WITH_HGCM) && defined(VBOX_WITH_CROGL)
-        BOOL fIs3DEnabled = FALSE;
-        mParent->i_machine()->COMGETTER(Accelerate3DEnabled)(&fIs3DEnabled);
-
-        if (fIs3DEnabled)
+        if (mfIsCr3DEnabled)
         {
             VBOXCRCMDCTL_HGCM data;
@@ -1605,8 +1594,5 @@
     if (ptrVM.isOk())
     {
-        BOOL fIs3DEnabled = FALSE;
-        mParent->i_machine()->COMGETTER(Accelerate3DEnabled)(&fIs3DEnabled);
-
-        if (fIs3DEnabled)
+        if (mfIsCr3DEnabled)
         {
             VBOXCRCMDCTL_HGCM data;
@@ -1740,10 +1726,6 @@
     if (!enabled)
     {
-        BOOL is3denabled = FALSE;
-
-        mParent->i_machine()->COMGETTER(Accelerate3DEnabled)(&is3denabled);
-
         VMMDev *vmmDev = mParent->i_getVMMDev();
-        if (is3denabled && vmmDev)
+        if (mfIsCr3DEnabled && vmmDev)
         {
             VBOXCRCMDCTL_HGCM *pData = (VBOXCRCMDCTL_HGCM*)RTMemAlloc(sizeof(VBOXCRCMDCTL_HGCM));
@@ -1777,7 +1759,5 @@
                                                 uint32_t u32Width, uint32_t u32Height)
 {
-    BOOL is3denabled;
-    pDisplay->mParent->i_machine()->COMGETTER(Accelerate3DEnabled)(&is3denabled);
-    if (   is3denabled
+    if (   pDisplay->mfIsCr3DEnabled
         && pDisplay->mCrOglCallbacks.pfnHasData
         && pDisplay->mCrOglCallbacks.pfnHasData())
@@ -2610,16 +2590,8 @@
 HRESULT Display::viewportChanged(ULONG aScreenId, ULONG aX, ULONG aY, ULONG aWidth, ULONG aHeight)
 {
+    AssertMsgReturn(aScreenId < mcMonitors, ("aScreendId=%d mcMonitors=%d\n", aScreenId, mcMonitors), E_INVALIDARG);
+
 #if defined(VBOX_WITH_HGCM) && defined(VBOX_WITH_CROGL)
-
-    if (mcMonitors <= aScreenId)
-    {
-        AssertMsgFailed(("invalid screen id\n"));
-        return E_INVALIDARG;
-    }
-
-    BOOL is3denabled;
-    mParent->i_machine()->COMGETTER(Accelerate3DEnabled)(&is3denabled);
-
-    if (is3denabled)
+    if (mfIsCr3DEnabled)
     {
         int rc = i_crViewportNotify(aScreenId, aX, aY, aWidth, aHeight);
@@ -2639,7 +2611,5 @@
     /* The driver might not have been constructed yet */
     if (mpDrv)
-    {
         mpDrv->pUpPort->pfnSetViewPort(mpDrv->pUpPort, aScreenId, aX, aY, aWidth, aHeight);
-    }
 #endif
 
@@ -2870,5 +2840,5 @@
     RTCritSectRwLeaveExcl(&mCrOglLock);
 }
-#endif
+#endif /* VBOX_WITH_CRHGSMI */
 
 /**
@@ -2937,5 +2907,5 @@
  * @thread EMT
  */
-DECLCALLBACK(void) Display::i_displayRefreshCallback(PPDMIDISPLAYCONNECTOR pInterface)
+/*static*/ DECLCALLBACK(void) Display::i_displayRefreshCallback(PPDMIDISPLAYCONNECTOR pInterface)
 {
     PDRVMAINDISPLAY pDrv = PDMIDISPLAYCONNECTOR_2_MAINDISPLAY(pInterface);
@@ -2979,7 +2949,5 @@
         do {
 # if defined(VBOX_WITH_HGCM) && defined(VBOX_WITH_CROGL)
-            BOOL is3denabled;
-            pDisplay->mParent->i_machine()->COMGETTER(Accelerate3DEnabled)(&is3denabled);
-            if (is3denabled)
+            if (pDisplay->mfIsCr3DEnabled)
             {
                 if (ASMAtomicCmpXchgU32(&pDisplay->mfCrOglVideoRecState, CRVREC_STATE_SUBMITTED, CRVREC_STATE_IDLE))
@@ -3000,6 +2968,5 @@
                         if (RT_SUCCESS(rc))
                             break;
-                        else
-                            AssertMsgFailed(("crCtlSubmit failed rc %d\n", rc));
+                        AssertMsgFailed(("crCtlSubmit failed rc %d\n", rc));
                     }
 
