Index: /trunk/src/VBox/Devices/Graphics/DevVGA-SVGA3d-ogl.cpp
===================================================================
--- /trunk/src/VBox/Devices/Graphics/DevVGA-SVGA3d-ogl.cpp	(revision 54770)
+++ /trunk/src/VBox/Devices/Graphics/DevVGA-SVGA3d-ogl.cpp	(revision 54771)
@@ -3085,16 +3085,18 @@
     VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
 
+    /* Set the unpacking parameters. */
+    VMSVGAPACKPARAMS SavedParams;
+    vmsvga3dSetUnpackParams(pState, pContext, pSurface, &SavedParams);
+
     if (pSurface->fDirty)
     {
-        /* Set the unacpking parameters. */
-        VMSVGAPACKPARAMS SavedParams;
-        vmsvga3dSetUnpackParams(pState, pContext, pSurface, &SavedParams);
-
         Log(("vmsvga3dCreateTexture: sync dirty texture\n"));
         for (uint32_t i = 0; i < pSurface->faces[0].numMipLevels; i++)
         {
-            if (pSurface->pMipmapLevels[i].fDirty)
+            /* Paranoia: Always do level 0 here to mirror the non-dirty case. */
+            if (pSurface->pMipmapLevels[i].fDirty || i == 0)
             {
-                Log(("vmsvga3dCreateTexture: sync dirty texture mipmap level %d (pitch %x)\n", i, pSurface->pMipmapLevels[i].cbSurfacePitch));
+                if (pSurface->pMipmapLevels[i].fDirty)
+                    Log(("vmsvga3dCreateTexture: sync dirty texture mipmap level %d (pitch %x)\n", i, pSurface->pMipmapLevels[i].cbSurfacePitch));
 
                 glTexImage2D(GL_TEXTURE_2D,
@@ -3114,11 +3116,9 @@
         }
         pSurface->fDirty = false;
-
-        /* Restore packing parameters. */
-        vmsvga3dRestoreUnpackParams(pState, pContext, pSurface, &SavedParams);
     }
     else
     {
-        /* Reserve texture memory. */
+        /* Allocate and initialize texture memory.  (Passing the zero filled pSurfaceData solves
+           the fedora 21 corruption issues (launchpad, background, search field, login).) */
         glTexImage2D(GL_TEXTURE_2D,
                      0,
@@ -3129,7 +3129,10 @@
                      pSurface->formatGL,
                      pSurface->typeGL,
-                     NULL);
+                     pSurface->pMipmapLevels[0].pSurfaceData);
         VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
     }
+
+    /* Restore unpacking parameters. */
+    vmsvga3dRestoreUnpackParams(pState, pContext, pSurface, &SavedParams);
 
     /* Restore the old active texture. */
