Index: /trunk/src/VBox/Devices/Graphics/DevVGA-SVGA3d-ogl.cpp
===================================================================
--- /trunk/src/VBox/Devices/Graphics/DevVGA-SVGA3d-ogl.cpp	(revision 54764)
+++ /trunk/src/VBox/Devices/Graphics/DevVGA-SVGA3d-ogl.cpp	(revision 54765)
@@ -20,4 +20,8 @@
 *   Header Files                                                               *
 *******************************************************************************/
+/* Enable to disassemble defined shaders. (Windows host only) */
+#if defined(RT_OS_WINDOWS) && defined(DEBUG)
+# define DUMP_SHADER_DISASSEMBLY
+#endif
 #ifdef DEBUG_bird
 # define RTMEM_WRAP_TO_EF_APIS
@@ -81,4 +85,7 @@
 # include <GL/glext.h>
 # define VBOX_VMSVGA3D_GL_HACK_LEVEL 0x103
+#endif
+#ifdef DUMP_SHADER_DISASSEMBLY
+# include <d3dx9shader.h>
 #endif
 #include "vmsvga_glext/glext.h"
@@ -1486,5 +1493,5 @@
 
 
-    if (vmsvga3dCheckGLExtension(pState, 3.0, " GL_ARB_framebuffer_object "))
+    if (vmsvga3dCheckGLExtension(pState, 3.0f, " GL_ARB_framebuffer_object "))
     {
         pState->ext.glIsRenderbuffer = (PFNGLISRENDERBUFFERPROC)OGLGETPROCADDRESS("glIsRenderbuffer");
@@ -1574,7 +1581,7 @@
 #if defined(RT_OS_DARWIN)
     /** @todo OpenGL version history suggest this, verify...  */
-    pState->ext.fEXT_stencil_two_side = vmsvga3dCheckGLExtension(pState, 2.0, " GL_EXT_stencil_two_side ");
+    pState->ext.fEXT_stencil_two_side = vmsvga3dCheckGLExtension(pState, 2.0f, " GL_EXT_stencil_two_side ");
 #else
-    pState->ext.fEXT_stencil_two_side = vmsvga3dCheckGLExtension(pState, 0.0, " GL_EXT_stencil_two_side ");
+    pState->ext.fEXT_stencil_two_side = vmsvga3dCheckGLExtension(pState, 0.0f, " GL_EXT_stencil_two_side ");
 #endif
 
@@ -1629,5 +1636,5 @@
                                                                  &pState->caps.maxVertexShaderInstructions));
     }
-    pState->caps.fS3TCSupported = vmsvga3dCheckGLExtension(pState, 0.0, " GL_EXT_texture_compression_s3tc ");
+    pState->caps.fS3TCSupported = vmsvga3dCheckGLExtension(pState, 0.0f, " GL_EXT_texture_compression_s3tc ");
 
     /* http://http://www.opengl.org/wiki/Detecting_the_Shader_Model
@@ -1641,5 +1648,5 @@
      */
     /** @todo: distinguish between vertex and pixel shaders??? */
-    if (   vmsvga3dCheckGLExtension(pState, 0.0, " GL_NV_gpu_program4 ")
+    if (   vmsvga3dCheckGLExtension(pState, 0.0f, " GL_NV_gpu_program4 ")
         || strstr(pState->pszOtherExtensions, " GL_NV_gpu_program4 "))
     {
@@ -1648,7 +1655,7 @@
     }
     else
-    if (   vmsvga3dCheckGLExtension(pState, 0.0, " GL_NV_vertex_program3 ")
+    if (   vmsvga3dCheckGLExtension(pState, 0.0f, " GL_NV_vertex_program3 ")
         || strstr(pState->pszOtherExtensions, " GL_NV_vertex_program3 ")
-        || vmsvga3dCheckGLExtension(pState, 0.0, " GL_ARB_shader_texture_lod ")  /* Wine claims this suggests SM 3.0 support */
+        || vmsvga3dCheckGLExtension(pState, 0.0f, " GL_ARB_shader_texture_lod ")  /* Wine claims this suggests SM 3.0 support */
         || strstr(pState->pszOtherExtensions, " GL_ARB_shader_texture_lod ")
         )
@@ -1658,5 +1665,5 @@
     }
     else
-    if (   vmsvga3dCheckGLExtension(pState, 0.0, " GL_ARB_fragment_program ")
+    if (   vmsvga3dCheckGLExtension(pState, 0.0f, " GL_ARB_fragment_program ")
         || strstr(pState->pszOtherExtensions, " GL_ARB_fragment_program "))
     {
@@ -3390,7 +3397,7 @@
 
     if (pSurface->flags & SVGA3D_SURFACE_HINT_TEXTURE)
-        Log(("vmsvga3dSurfaceDMA TEXTURE guestptr gmr=%x offset=%x pitch=%x host sid=%x face=%d mipmap=%d transfer=%x cCopyBoxes=%d\n", guest.ptr.gmrId, guest.ptr.offset, guest.pitch, host.sid, host.face, host.mipmap, transfer, cCopyBoxes));
+        Log(("vmsvga3dSurfaceDMA TEXTURE guestptr gmr=%x offset=%x pitch=%x host sid=%x face=%d mipmap=%d transfer=%s cCopyBoxes=%d\n", guest.ptr.gmrId, guest.ptr.offset, guest.pitch, host.sid, host.face, host.mipmap, (transfer == SVGA3D_WRITE_HOST_VRAM) ? "READ" : "WRITE", cCopyBoxes));
     else
-        Log(("vmsvga3dSurfaceDMA guestptr gmr=%x offset=%x pitch=%x host sid=%x face=%d mipmap=%d transfer=%x cCopyBoxes=%d\n", guest.ptr.gmrId, guest.ptr.offset, guest.pitch, host.sid, host.face, host.mipmap, transfer, cCopyBoxes));
+        Log(("vmsvga3dSurfaceDMA guestptr gmr=%x offset=%x pitch=%x host sid=%x face=%d mipmap=%d transfer=%s cCopyBoxes=%d\n", guest.ptr.gmrId, guest.ptr.offset, guest.pitch, host.sid, host.face, host.mipmap, (transfer == SVGA3D_WRITE_HOST_VRAM) ? "READ" : "WRITE", cCopyBoxes));
 
     if (pSurface->oglId.texture == OPENGL_INVALID_ID)
@@ -4595,5 +4602,5 @@
         }
 #ifdef RT_OS_WINDOWS
-        wglMakeCurrent(NULL, NULL);
+        wglMakeCurrent(pContext->hdc, NULL);
         wglDeleteContext(pContext->hglrc);
         ReleaseDC(pContext->hwnd, pContext->hdc);
@@ -4930,5 +4937,5 @@
     {
         GLenum enableCap = ~0U;
-        Log(("vmsvga3dSetRenderState: cid=%d state=%s (%d) val=%x\n", cid, vmsvga3dGetRenderStateName(pRenderState[i].state), pRenderState[i].state, pRenderState[i].uintValue));
+        Log(("vmsvga3dSetRenderState: cid=%x state=%s (%d) val=%x\n", cid, vmsvga3dGetRenderStateName(pRenderState[i].state), pRenderState[i].state, pRenderState[i].uintValue));
         /* Save the render state for vm state saving. */
         if (pRenderState[i].state < SVGA3D_RS_MAX)
@@ -6221,8 +6228,33 @@
 
         case SVGA3D_TS_MIPFILTER:                   /* SVGA3dTextureFilter */
-            //AssertFailed(); /* @todo */
-            //samplerType = D3DSAMP_MIPFILTER;
-            val = vmsvga3dTextureFilter2OGL((SVGA3dTextureFilter)pTextureState[i].value);
-            break;
+        case SVGA3D_TS_MINFILTER:                   /* SVGA3dTextureFilter */
+        {
+            uint32_t mipFilter = pContext->state.aTextureState[currentStage][SVGA3D_TS_MIPFILTER].value;
+            uint32_t minFilter = pContext->state.aTextureState[currentStage][SVGA3D_TS_MINFILTER].value;
+
+            /* If SVGA3D_TS_MIPFILTER is set to NONE, then use SVGA3D_TS_MIPFILTER, otherwise SVGA3D_TS_MIPFILTER enables mipmap minification. */
+            textureType = GL_TEXTURE_MIN_FILTER;
+            if (mipFilter != SVGA3D_TEX_FILTER_NONE)
+            {
+                if (minFilter == SVGA3D_TEX_FILTER_NEAREST)
+                {
+                    if (mipFilter == SVGA3D_TEX_FILTER_LINEAR)
+                        val = GL_NEAREST_MIPMAP_LINEAR;
+                    else
+                        val = GL_NEAREST_MIPMAP_NEAREST;
+                }
+                else
+                {
+                    if (mipFilter == SVGA3D_TEX_FILTER_LINEAR)
+                        val = GL_LINEAR_MIPMAP_LINEAR;
+                    else
+                        val = GL_LINEAR_MIPMAP_NEAREST;
+                }
+            }
+            else
+                val = vmsvga3dTextureFilter2OGL((SVGA3dTextureFilter)minFilter);
+
+            break;
+        }
 
         case SVGA3D_TS_MAGFILTER:                   /* SVGA3dTextureFilter */
@@ -6232,9 +6264,4 @@
             break;
 
-        case SVGA3D_TS_MINFILTER:                   /* SVGA3dTextureFilter */
-            textureType = GL_TEXTURE_MIN_FILTER;
-            val = vmsvga3dTextureFilter2OGL((SVGA3dTextureFilter)pTextureState[i].value);
-            break;
-
         case SVGA3D_TS_BORDERCOLOR:                 /* SVGA3dColor */
         {
@@ -6254,6 +6281,6 @@
 
         case SVGA3D_TS_TEXTURE_MIPMAP_LEVEL:        /* uint32_t */
-            textureType = GL_TEXTURE_MAX_LEVEL;
-            val = pTextureState[i].value;   /* Identical?? */
+            textureType = GL_TEXTURE_BASE_LEVEL;
+            val = pTextureState[i].value;
             break;
 
@@ -7439,4 +7466,15 @@
     memcpy(pShader->pShaderProgram, pShaderData, cbData);
 
+#ifdef DUMP_SHADER_DISASSEMBLY
+    LPD3DXBUFFER pDisassembly;
+
+    HRESULT hr = D3DXDisassembleShader((const DWORD *)pShaderData, FALSE, NULL, &pDisassembly);
+    if (hr == D3D_OK)
+    {
+        Log(("Shader disassembly:\n%s\n", pDisassembly->GetBufferPointer()));
+        pDisassembly->Release();
+    }
+#endif
+
     switch (type)
     {
@@ -7451,4 +7489,10 @@
     default:
         AssertFailedReturn(VERR_INVALID_PARAMETER);
+    }
+    if (rc != VINF_SUCCESS)
+    {
+        RTMemFree(pShader->pShaderProgram);
+        memset(pShader, 0, sizeof(*pShader));
+        pShader->id = SVGA3D_INVALID_ID;
     }
 
Index: /trunk/src/VBox/Devices/Graphics/DevVGA-SVGA3d-shared.cpp
===================================================================
--- /trunk/src/VBox/Devices/Graphics/DevVGA-SVGA3d-shared.cpp	(revision 54764)
+++ /trunk/src/VBox/Devices/Graphics/DevVGA-SVGA3d-shared.cpp	(revision 54765)
@@ -329,4 +329,7 @@
      */
     case SVGA3D_BUFFER:
+        return 1;
+
+    case SVGA3D_NV12:
         return 1;
 
Index: /trunk/src/VBox/Devices/Graphics/DevVGA-SVGA3d-win.cpp
===================================================================
--- /trunk/src/VBox/Devices/Graphics/DevVGA-SVGA3d-win.cpp	(revision 54764)
+++ /trunk/src/VBox/Devices/Graphics/DevVGA-SVGA3d-win.cpp	(revision 54765)
@@ -48,5 +48,7 @@
 
 /* Enable to disassemble defined shaders. */
-//#define DUMP_SHADER_DISASSEMBLY
+#ifdef DEBUG
+#define DUMP_SHADER_DISASSEMBLY
+#endif
 
 #ifdef DUMP_SHADER_DISASSEMBLY
@@ -2323,7 +2325,7 @@
 
     if (pSurface->flags & SVGA3D_SURFACE_HINT_TEXTURE)
-        Log(("vmsvga3dSurfaceDMA TEXTURE guestptr gmr=%x offset=%x pitch=%x host sid=%x face=%d mipmap=%d transfer=%x cCopyBoxes=%d\n", guest.ptr.gmrId, guest.ptr.offset, guest.pitch, host.sid, host.face, host.mipmap, transfer, cCopyBoxes));
+        Log(("vmsvga3dSurfaceDMA TEXTURE guestptr gmr=%x offset=%x pitch=%x host sid=%x face=%d mipmap=%d transfer=%s cCopyBoxes=%d\n", guest.ptr.gmrId, guest.ptr.offset, guest.pitch, host.sid, host.face, host.mipmap, (transfer == SVGA3D_WRITE_HOST_VRAM) ? "READ" : "WRITE", cCopyBoxes));
     else
-        Log(("vmsvga3dSurfaceDMA guestptr gmr=%x offset=%x pitch=%x host sid=%x face=%d mipmap=%d transfer=%x cCopyBoxes=%d\n", guest.ptr.gmrId, guest.ptr.offset, guest.pitch, host.sid, host.face, host.mipmap, transfer, cCopyBoxes));
+        Log(("vmsvga3dSurfaceDMA guestptr gmr=%x offset=%x pitch=%x host sid=%x face=%d mipmap=%d transfer=%s cCopyBoxes=%d\n", guest.ptr.gmrId, guest.ptr.offset, guest.pitch, host.sid, host.face, host.mipmap, (transfer == SVGA3D_WRITE_HOST_VRAM) ? "READ" : "WRITE", cCopyBoxes));
 
     if (!pSurface->u.pSurface)
@@ -3577,5 +3579,5 @@
     AssertReturn(pState, VERR_NO_MEMORY);
 
-    Log(("vmsvga3dSetRenderState %x cRenderStates=%d\n", cid, cRenderStates));
+    Log(("vmsvga3dSetRenderState cid=%x cRenderStates=%d\n", cid, cRenderStates));
 
     if (    cid >= pState->cContexts
@@ -4543,4 +4545,7 @@
         if (pContext->state.u32UpdateFlags & VMSVGA3D_UPDATE_VIEWPORT)
             vmsvga3dSetViewPort(pThis, cid, &pContext->state.RectViewPort);
+        /* Changing the render target also resets the scissor rectangle; restore it as well. */
+        if (pContext->state.u32UpdateFlags & VMSVGA3D_UPDATE_SCISSORRECT)
+            vmsvga3dSetScissorRect(pThis, cid, &pContext->state.RectScissor);
 
         break;
@@ -5307,4 +5312,6 @@
             AssertMsgReturn(hr == D3D_OK, ("vmsvga3dDrawPrimitives: CreateVertexBuffer failed with %x\n", hr), VERR_INTERNAL_ERROR);
 
+            pVertexSurface->idAssociatedContext = pContext->id;
+
             if (pVertexSurface->fDirty)
             {
@@ -5754,4 +5761,14 @@
     memcpy(pShader->pShaderProgram, pShaderData, cbData);
 
+#ifdef DUMP_SHADER_DISASSEMBLY
+    LPD3DXBUFFER pDisassembly;
+
+    hr = D3DXDisassembleShader((const DWORD *)pShaderData, FALSE, NULL, &pDisassembly);
+    if (hr == D3D_OK)
+    {
+        Log(("Shader disassembly:\n%s\n", pDisassembly->GetBufferPointer()));
+        pDisassembly->Release();
+    }
+#endif
     switch (type)
     {
@@ -5767,14 +5784,4 @@
         AssertFailedReturn(VERR_INVALID_PARAMETER);
     }
-#ifdef DUMP_SHADER_DISASSEMBLY
-    LPD3DXBUFFER pDisassembly;
-
-    hr = D3DXDisassembleShader((const DWORD *)pShaderData, FALSE, NULL, &pDisassembly);
-    if (hr == D3D_OK)
-    {
-        Log(("Shader disassembly:\n%s\n", pDisassembly->GetBufferPointer()));
-        pDisassembly->Release();
-    }
-#endif
     if (hr != D3D_OK)
     {
@@ -6293,4 +6300,5 @@
         LogRel((" - D3DTEXOPCAPS_LERP\n"));
 
+
     LogRel(("\n"));
     LogRel(("PixelShaderVersion:  %#x (%u.%u)\n", pCaps->PixelShaderVersion,
Index: /trunk/src/VBox/Devices/Graphics/shaderlib/glsl_shader.c
===================================================================
--- /trunk/src/VBox/Devices/Graphics/shaderlib/glsl_shader.c	(revision 54764)
+++ /trunk/src/VBox/Devices/Graphics/shaderlib/glsl_shader.c	(revision 54765)
@@ -1318,4 +1318,7 @@
     shader_addline(buffer, "vec4 tmp0;\n");
     shader_addline(buffer, "vec4 tmp1;\n");
+#ifdef VBOX_WITH_VMSVGA
+    shader_addline(buffer, "bool p0[4];\n");
+#endif
 
     /* Local constants use a different name so they can be loaded once at shader link time
@@ -1630,4 +1633,10 @@
             break;
 
+#ifdef VBOX_WITH_VMSVGA
+        case WINED3DSPR_PREDICATE:
+            sprintf(register_name, "p0");
+            break;
+#endif
+
         default:
             FIXME("Unhandled register name Type(%d)\n", reg->type);
@@ -1659,4 +1668,20 @@
     else
     {
+#ifdef VBOX_WITH_VMSVGA
+        if (param->reg.type == WINED3DSPR_PREDICATE)
+        {
+            *write_mask++ = '[';
+            if (mask & WINED3DSP_WRITEMASK_0) *write_mask++ = '0';
+            else
+            if (mask & WINED3DSP_WRITEMASK_1) *write_mask++ = '1';
+            else
+            if (mask & WINED3DSP_WRITEMASK_2) *write_mask++ = '2';
+            else
+            if (mask & WINED3DSP_WRITEMASK_3) *write_mask++ = '3';
+            *write_mask++ = ']';
+            *write_mask = '\0';
+        }
+        else
+#endif
         shader_glsl_write_mask_to_str(mask, write_mask);
     }
@@ -2161,6 +2186,38 @@
 }
 
+#ifdef VBOX_WITH_VMSVGA
+static void shader_glsl_mov_impl(const struct wined3d_shader_instruction *ins, int p0_idx);
+
 /* Process the WINED3DSIO_MOV opcode using GLSL (dst = src) */
 static void shader_glsl_mov(const struct wined3d_shader_instruction *ins)
+{
+    if (ins->predicate)
+    {
+        int i;
+        DWORD dst_mask = ins->dst[0].write_mask;
+        struct wined3d_shader_dst_param *dst = (struct wined3d_shader_dst_param *)&ins->dst[0];
+
+        for (i = 0; i < 4; i++)
+        {
+            if (dst_mask & RT_BIT(i))
+            {
+                dst->write_mask = RT_BIT(i);
+
+                shader_glsl_mov_impl(ins, i);
+            }
+        }
+        dst->write_mask = dst_mask;
+    }
+    else
+        shader_glsl_mov_impl(ins, 0);
+}
+
+/* Process the WINED3DSIO_MOV opcode using GLSL (dst = src) */
+static void shader_glsl_mov_impl(const struct wined3d_shader_instruction *ins, int p0_idx)
+
+#else
+/* Process the WINED3DSIO_MOV opcode using GLSL (dst = src) */
+static void shader_glsl_mov(const struct wined3d_shader_instruction *ins)
+#endif
 {
     const struct wined3d_gl_info *gl_info = ins->ctx->gl_info;
@@ -2168,4 +2225,11 @@
     glsl_src_param_t src0_param;
     DWORD write_mask;
+
+#ifdef VBOX_WITH_VMSVGA
+    if (ins->predicate)
+    {
+        shader_addline(buffer, "if (p0[%d]) {\n", p0_idx);
+    }
+#endif
 
     write_mask = shader_glsl_append_dst(buffer, ins);
@@ -2212,4 +2276,10 @@
         shader_addline(buffer, "%s);\n", src0_param.param_str);
     }
+#ifdef VBOX_WITH_VMSVGA
+    if (ins->predicate)
+    {
+        shader_addline(buffer, "}\n");
+    }
+#endif
 }
 
@@ -2468,4 +2538,35 @@
     }
 }
+
+#ifdef VBOX_WITH_VMSVGA
+static void shader_glsl_setp(const struct wined3d_shader_instruction *ins)
+{
+    struct wined3d_shader_buffer *buffer = ins->ctx->buffer;
+    glsl_src_param_t src_param1, src_param2;
+    DWORD write_mask;
+
+    int i;
+    DWORD dst_mask = ins->dst[0].write_mask;
+    struct wined3d_shader_dst_param dst = ins->dst[0];
+
+    /* Cycle through all source0 channels */
+    for (i=0; i<4; i++) {
+        if (dst_mask & RT_BIT(i))
+        {
+            write_mask = WINED3DSP_WRITEMASK_0 << i;
+            dst.write_mask = dst_mask & write_mask;
+
+            write_mask = shader_glsl_append_dst_ext(ins->ctx->buffer, ins, &dst);
+            Assert(write_mask);
+
+            shader_glsl_add_src_param(ins, &ins->src[0], write_mask, &src_param1);
+            shader_glsl_add_src_param(ins, &ins->src[1], write_mask, &src_param2);
+
+            shader_addline(buffer, "%s %s %s);\n",
+                    src_param1.param_str, shader_get_comp_op(ins->flags), src_param2.param_str);
+        }
+    }
+}
+#endif
 
 /** Process signed comparison opcodes in GLSL. */
@@ -5314,5 +5415,9 @@
     /* WINED3DSIH_RET           */ shader_glsl_ret,
     /* WINED3DSIH_RSQ           */ shader_glsl_rsq,
+#ifdef VBOX_WITH_VMSVGA
+    /* WINED3DSIH_SETP          */ shader_glsl_setp,
+#else
     /* WINED3DSIH_SETP          */ NULL,
+#endif
     /* WINED3DSIH_SGE           */ shader_glsl_compare,
     /* WINED3DSIH_SGN           */ shader_glsl_sgn,
Index: /trunk/src/VBox/Devices/Graphics/shaderlib/shader.c
===================================================================
--- /trunk/src/VBox/Devices/Graphics/shaderlib/shader.c	(revision 54764)
+++ /trunk/src/VBox/Devices/Graphics/shaderlib/shader.c	(revision 54765)
@@ -1163,5 +1163,7 @@
         if (ins.predicate)
         {
+#ifndef VBOX_WITH_VMSVGA
             FIXME("Predicates not implemented.\n");
+#endif
             ins.predicate = *ptr++;
         }
Index: /trunk/src/VBox/Devices/Graphics/shaderlib/shader_sm1.c
===================================================================
--- /trunk/src/VBox/Devices/Graphics/shaderlib/shader_sm1.c	(revision 54764)
+++ /trunk/src/VBox/Devices/Graphics/shaderlib/shader_sm1.c	(revision 54765)
@@ -246,6 +246,10 @@
     {WINED3D_SM1_OP_POW,      1, 3, WINED3DSIH_POW,          0,                           0                          },
     {WINED3D_SM1_OP_CRS,      1, 3, WINED3DSIH_CRS,          0,                           0                          },
+#ifdef VBOX_WITH_VMSVGA /* appears incorrect */
+    {WINED3D_SM1_OP_SGN,      1, 4, WINED3DSIH_SGN,          0,                           0                          },
+#else
     {WINED3D_SM1_OP_SGN,      1, 4, WINED3DSIH_SGN,          WINED3D_SHADER_VERSION(2,0), WINED3D_SHADER_VERSION(2,1)},
     {WINED3D_SM1_OP_SGN,      1, 2, WINED3DSIH_SGN,          WINED3D_SHADER_VERSION(3,0), -1                         },
+#endif
     {WINED3D_SM1_OP_NRM,      1, 2, WINED3DSIH_NRM,          0,                           0                          },
     {WINED3D_SM1_OP_SINCOS,   1, 4, WINED3DSIH_SINCOS,       WINED3D_SHADER_VERSION(2,0), WINED3D_SHADER_VERSION(2,1)},
Index: /trunk/src/VBox/Devices/Graphics/shaderlib/wined3d_private.h
===================================================================
--- /trunk/src/VBox/Devices/Graphics/shaderlib/wined3d_private.h	(revision 54764)
+++ /trunk/src/VBox/Devices/Graphics/shaderlib/wined3d_private.h	(revision 54765)
@@ -3197,6 +3197,12 @@
         case WINED3DSPR_CONSTBOOL:  /* b# */
         case WINED3DSPR_LOOP:       /* aL */
+#ifndef VBOX_WITH_VMSVGA
         case WINED3DSPR_PREDICATE:  /* p0 */
             return TRUE;
+#else
+            return TRUE;
+        case WINED3DSPR_PREDICATE:  /* p0 */
+            return FALSE;
+#endif
 
         case WINED3DSPR_MISCTYPE:
Index: /trunk/src/VBox/Devices/Makefile.kmk
===================================================================
--- /trunk/src/VBox/Devices/Makefile.kmk	(revision 54764)
+++ /trunk/src/VBox/Devices/Makefile.kmk	(revision 54765)
@@ -257,5 +257,5 @@
   ifeq ($(KBUILD_TARGET),win) # (Disable this to work with OpenGL on Windows.)
    VBoxDD_SOURCES       += Graphics/DevVGA-SVGA3d-win.cpp
-   VBoxDD_LIBS.win      += d3d9.lib $(PATH_TOOL_$(VBOX_VCC_TOOL)_LIB)/delayimp.lib
+   VBoxDD_LIBS.win      += d3d9.lib d3dx9.lib $(PATH_TOOL_$(VBOX_VCC_TOOL)_LIB)/delayimp.lib
    VBoxDD_LDFLAGS.win   += /DELAYLOAD:d3d9.dll
   else
@@ -276,5 +276,5 @@
 
    VBoxDD_LIBS.linux    += GL X11
-   VBoxDD_LIBS.win      += $(PATH_SDK_$(VBOX_WINPSDK)_LIB)/Opengl32.lib
+   VBoxDD_LIBS.win      += d3dx9.lib $(PATH_SDK_$(VBOX_WINPSDK)_LIB)/Opengl32.lib
    VBoxDD_LDFLAGS.darwin += -framework OpenGL
    VBoxDD_DEFS.darwin    += VBOX_VMSVGA3D_DUAL_OPENGL_PROFILE
