ddraw: Set ddraw caps in wined3d.

Currently the ddraw capabilities were almost static, except of D3D
support. When overlay support is added, the caps depend on certain
settings in WineD3D or capabilities available from OpenGL and Xv. So
set those caps in wined3d as well.
diff --git a/dlls/ddraw/ddraw.c b/dlls/ddraw/ddraw.c
index 8b0ad9b..5a8ea0e 100644
--- a/dlls/ddraw/ddraw.c
+++ b/dlls/ddraw/ddraw.c
@@ -700,6 +700,10 @@
                         DDCAPS *HELCaps)
 {
     ICOM_THIS_FROM(IDirectDrawImpl, IDirectDraw7, iface);
+    DDCAPS caps;
+    WINED3DCAPS winecaps;
+    HRESULT hr;
+    DDSCAPS2 ddscaps = {0, 0, 0, 0};
     TRACE("(%p)->(%p,%p)\n", This, DriverCaps, HELCaps);
 
     /* One structure must be != NULL */
@@ -709,9 +713,55 @@
         return DDERR_INVALIDPARAMS;
     }
 
+    memset(&caps, 0, sizeof(caps));
+    memset(&winecaps, 0, sizeof(winecaps));
+    caps.dwSize = sizeof(caps);
+    EnterCriticalSection(&ddraw_cs);
+    hr = IWineD3DDevice_GetDeviceCaps(This->wineD3DDevice, &winecaps);
+    if(FAILED(hr)) {
+        WARN("IWineD3DDevice::GetDeviceCaps failed\n");
+        LeaveCriticalSection(&ddraw_cs);
+        return hr;
+    }
+
+    hr = IDirectDraw7_GetAvailableVidMem(iface, &ddscaps, &caps.dwVidMemTotal, &caps.dwVidMemFree);
+    LeaveCriticalSection(&ddraw_cs);
+    if(FAILED(hr)) {
+        WARN("IDirectDraw7::GetAvailableVidMem failed\n");
+        return hr;
+    }
+
+    caps.dwCaps = winecaps.DirectDrawCaps.Caps;
+    caps.dwCaps2 = winecaps.DirectDrawCaps.Caps2;
+    caps.dwCKeyCaps = winecaps.DirectDrawCaps.CKeyCaps;
+    caps.dwFXCaps = winecaps.DirectDrawCaps.FXCaps;
+    caps.dwPalCaps = winecaps.DirectDrawCaps.PalCaps;
+    caps.ddsCaps.dwCaps = winecaps.DirectDrawCaps.ddsCaps;
+    caps.dwSVBCaps = winecaps.DirectDrawCaps.SVBCaps;
+    caps.dwSVBCKeyCaps = winecaps.DirectDrawCaps.SVBCKeyCaps;
+    caps.dwSVBFXCaps = winecaps.DirectDrawCaps.SVBFXCaps;
+    caps.dwVSBCaps = winecaps.DirectDrawCaps.VSBCaps;
+    caps.dwVSBCKeyCaps = winecaps.DirectDrawCaps.VSBCKeyCaps;
+    caps.dwVSBFXCaps = winecaps.DirectDrawCaps.VSBFXCaps;
+    caps.dwSSBCaps = winecaps.DirectDrawCaps.SSBCaps;
+    caps.dwSSBCKeyCaps = winecaps.DirectDrawCaps.SSBCKeyCaps;
+    caps.dwSSBFXCaps = winecaps.DirectDrawCaps.SSBFXCaps;
+
+    /* Even if WineD3D supports 3D rendering, remove the cap if ddraw is configured
+     * not to use it
+     */
+    if(DefaultSurfaceType == SURFACE_GDI) {
+        caps.dwCaps &= ~DDCAPS_3D;
+        caps.ddsCaps.dwCaps &= ~(DDSCAPS_3DDEVICE | DDSCAPS_MIPMAP | DDSCAPS_TEXTURE | DDSCAPS_ZBUFFER);
+    }
+    if(winecaps.DirectDrawCaps.StrideAlign != 0) {
+        caps.dwCaps |= DDCAPS_ALIGNSTRIDE;
+        caps.dwAlignStrideAlign = winecaps.DirectDrawCaps.StrideAlign;
+    }
+
     if(DriverCaps)
     {
-        DD_STRUCT_COPY_BYSIZE(DriverCaps, &This->caps);
+        DD_STRUCT_COPY_BYSIZE(DriverCaps, &caps);
         if (TRACE_ON(ddraw))
         {
             TRACE("Driver Caps :\n");
@@ -721,7 +771,7 @@
     }
     if(HELCaps)
     {
-        DD_STRUCT_COPY_BYSIZE(HELCaps, &This->caps);
+        DD_STRUCT_COPY_BYSIZE(HELCaps, &caps);
         if (TRACE_ON(ddraw))
         {
             TRACE("HEL Caps :\n");
diff --git a/dlls/ddraw/ddraw_private.h b/dlls/ddraw/ddraw_private.h
index bde2bae..56908cb 100644
--- a/dlls/ddraw/ddraw_private.h
+++ b/dlls/ddraw/ddraw_private.h
@@ -128,8 +128,6 @@
     DWORD                   orig_width, orig_height;
     DWORD                   orig_bpp;
 
-    DDCAPS                  caps;
-
     /* D3D things */
     IDirectDrawSurfaceImpl  *d3d_target;
     HWND                    d3d_window;
diff --git a/dlls/ddraw/main.c b/dlls/ddraw/main.c
index d03a89c..5f04fea 100644
--- a/dlls/ddraw/main.c
+++ b/dlls/ddraw/main.c
@@ -281,59 +281,6 @@
     /* Get the amount of video memory */
     This->total_vidmem = IWineD3DDevice_GetAvailableTextureMem(This->wineD3DDevice);
 
-    /* Initialize the caps */
-    This->caps.dwSize = sizeof(This->caps);
-/* do not report DDCAPS_OVERLAY and friends since we don't support overlays */
-#define BLIT_CAPS (DDCAPS_BLT | DDCAPS_BLTCOLORFILL | DDCAPS_BLTDEPTHFILL \
-          | DDCAPS_BLTSTRETCH | DDCAPS_CANBLTSYSMEM | DDCAPS_CANCLIP	  \
-          | DDCAPS_CANCLIPSTRETCHED | DDCAPS_COLORKEY			  \
-          | DDCAPS_COLORKEYHWASSIST | DDCAPS_ALIGNBOUNDARYSRC )
-#define CKEY_CAPS (DDCKEYCAPS_DESTBLT | DDCKEYCAPS_SRCBLT)
-#define FX_CAPS (DDFXCAPS_BLTALPHA | DDFXCAPS_BLTMIRRORLEFTRIGHT	\
-                | DDFXCAPS_BLTMIRRORUPDOWN | DDFXCAPS_BLTROTATION90	\
-                | DDFXCAPS_BLTSHRINKX | DDFXCAPS_BLTSHRINKXN		\
-                | DDFXCAPS_BLTSHRINKY | DDFXCAPS_BLTSHRINKXN		\
-                | DDFXCAPS_BLTSTRETCHX | DDFXCAPS_BLTSTRETCHXN		\
-                | DDFXCAPS_BLTSTRETCHY | DDFXCAPS_BLTSTRETCHYN)
-    This->caps.dwCaps |= DDCAPS_GDI | DDCAPS_PALETTE | BLIT_CAPS;
-
-    This->caps.dwCaps2 |= DDCAPS2_CERTIFIED | DDCAPS2_NOPAGELOCKREQUIRED |
-                          DDCAPS2_PRIMARYGAMMA | DDCAPS2_WIDESURFACES |
-                          DDCAPS2_CANRENDERWINDOWED;
-    This->caps.dwCKeyCaps |= CKEY_CAPS;
-    This->caps.dwFXCaps |= FX_CAPS;
-    This->caps.dwPalCaps |= DDPCAPS_8BIT | DDPCAPS_PRIMARYSURFACE;
-    This->caps.dwVidMemTotal = This->total_vidmem;
-    This->caps.dwVidMemFree = This->total_vidmem;
-    This->caps.dwSVBCaps |= BLIT_CAPS;
-    This->caps.dwSVBCKeyCaps |= CKEY_CAPS;
-    This->caps.dwSVBFXCaps |= FX_CAPS;
-    This->caps.dwVSBCaps |= BLIT_CAPS;
-    This->caps.dwVSBCKeyCaps |= CKEY_CAPS;
-    This->caps.dwVSBFXCaps |= FX_CAPS;
-    This->caps.dwSSBCaps |= BLIT_CAPS;
-    This->caps.dwSSBCKeyCaps |= CKEY_CAPS;
-    This->caps.dwSSBFXCaps |= FX_CAPS;
-    This->caps.ddsCaps.dwCaps |= DDSCAPS_ALPHA | DDSCAPS_BACKBUFFER |
-                                 DDSCAPS_FLIP | DDSCAPS_FRONTBUFFER |
-                                 DDSCAPS_OFFSCREENPLAIN | DDSCAPS_PALETTE |
-                                 DDSCAPS_PRIMARYSURFACE | DDSCAPS_SYSTEMMEMORY |
-                                 DDSCAPS_VIDEOMEMORY | DDSCAPS_VISIBLE;
-    /* Hacks for D3D code */
-    /* TODO: Check if WineD3D has 3D enabled
-       Need opengl surfaces or auto for 3D
-     */
-    if(This->ImplType == 0 || This->ImplType == SURFACE_OPENGL)
-    {
-        This->caps.dwCaps |= DDCAPS_3D;
-        This->caps.ddsCaps.dwCaps |= DDSCAPS_3DDEVICE | DDSCAPS_MIPMAP | DDSCAPS_TEXTURE | DDSCAPS_ZBUFFER;
-    }
-    This->caps.ddsOldCaps.dwCaps = This->caps.ddsCaps.dwCaps;
-
-#undef BLIT_CAPS
-#undef CKEY_CAPS
-#undef FX_CAPS
-
     list_init(&This->surface_list);
     list_add_head(&global_ddraw_list, &This->ddraw_list_entry);
 
diff --git a/dlls/wined3d/directx.c b/dlls/wined3d/directx.c
index 9cbb406..4b5a8c0 100644
--- a/dlls/wined3d/directx.c
+++ b/dlls/wined3d/directx.c
@@ -29,7 +29,6 @@
 #define DEBUG_SINGLE_MODE 0
 #endif
 
-
 #include "config.h"
 #include <assert.h>
 #include "wined3d_private.h"
@@ -2942,6 +2941,7 @@
     struct fragment_caps fragment_caps;
     const shader_backend_t *shader_backend;
     const struct fragment_pipeline *frag_pipeline = NULL;
+    DWORD ckey_caps, blit_caps, fx_caps;
 
     TRACE_(d3d_caps)("(%p)->(Adptr:%d, DevType: %x, pCaps: %p)\n", This, Adapter, DeviceType, pCaps);
 
@@ -3428,6 +3428,67 @@
     } else
         pCaps->DeclTypes                         = 0;
 
+    /* Set DirectDraw helper Caps */
+    ckey_caps =                         WINEDDCKEYCAPS_DESTBLT              |
+                                        WINEDDCKEYCAPS_SRCBLT;
+    fx_caps =                           WINEDDFXCAPS_BLTALPHA               |
+                                        WINEDDFXCAPS_BLTMIRRORLEFTRIGHT     |
+                                        WINEDDFXCAPS_BLTMIRRORUPDOWN        |
+                                        WINEDDFXCAPS_BLTROTATION90          |
+                                        WINEDDFXCAPS_BLTSHRINKX             |
+                                        WINEDDFXCAPS_BLTSHRINKXN            |
+                                        WINEDDFXCAPS_BLTSHRINKY             |
+                                        WINEDDFXCAPS_BLTSHRINKXN            |
+                                        WINEDDFXCAPS_BLTSTRETCHX            |
+                                        WINEDDFXCAPS_BLTSTRETCHXN           |
+                                        WINEDDFXCAPS_BLTSTRETCHY            |
+                                        WINEDDFXCAPS_BLTSTRETCHYN;
+    blit_caps =                         WINEDDCAPS_BLT                      |
+                                        WINEDDCAPS_BLTCOLORFILL             |
+                                        WINEDDCAPS_BLTDEPTHFILL             |
+                                        WINEDDCAPS_BLTSTRETCH               |
+                                        WINEDDCAPS_CANBLTSYSMEM             |
+                                        WINEDDCAPS_CANCLIP                  |
+                                        WINEDDCAPS_CANCLIPSTRETCHED         |
+                                        WINEDDCAPS_COLORKEY                 |
+                                        WINEDDCAPS_COLORKEYHWASSIST         |
+                                        WINEDDCAPS_ALIGNBOUNDARYSRC;
+
+    /* Fill the ddraw caps structure */
+    pCaps->DirectDrawCaps.Caps =        WINEDDCAPS_GDI                      |
+                                        WINEDDCAPS_PALETTE                  |
+                                        blit_caps                           |
+                                        WINEDDCAPS_3D; /* TODO: Make conditional */
+    pCaps->DirectDrawCaps.Caps2 =       WINEDDCAPS2_CERTIFIED                |
+                                        WINEDDCAPS2_NOPAGELOCKREQUIRED       |
+                                        WINEDDCAPS2_PRIMARYGAMMA             |
+                                        WINEDDCAPS2_WIDESURFACES             |
+                                        WINEDDCAPS2_CANRENDERWINDOWED;
+    pCaps->DirectDrawCaps.SVBCaps =     blit_caps;
+    pCaps->DirectDrawCaps.SVBCKeyCaps = ckey_caps;
+    pCaps->DirectDrawCaps.SVBFXCaps =   fx_caps;
+    pCaps->DirectDrawCaps.VSBCaps =     blit_caps;
+    pCaps->DirectDrawCaps.VSBCKeyCaps = ckey_caps;
+    pCaps->DirectDrawCaps.VSBFXCaps =   fx_caps;
+    pCaps->DirectDrawCaps.SSBCaps =     blit_caps;
+    pCaps->DirectDrawCaps.SSBCKeyCaps = ckey_caps;
+    pCaps->DirectDrawCaps.SSBFXCaps =   fx_caps;
+
+    pCaps->DirectDrawCaps.ddsCaps =     WINEDDSCAPS_ALPHA                   |
+                                        WINEDDSCAPS_BACKBUFFER              |
+                                        WINEDDSCAPS_FLIP                    |
+                                        WINEDDSCAPS_FRONTBUFFER             |
+                                        WINEDDSCAPS_OFFSCREENPLAIN          |
+                                        WINEDDSCAPS_PALETTE                 |
+                                        WINEDDSCAPS_PRIMARYSURFACE          |
+                                        WINEDDSCAPS_SYSTEMMEMORY            |
+                                        WINEDDSCAPS_VIDEOMEMORY             |
+                                        WINEDDSCAPS_VISIBLE                 |
+                                        WINEDDSCAPS_3DDEVICE                | /* TODO: Make conditional */
+                                        WINEDDSCAPS_MIPMAP                  | /* TODO: Make conditional */
+                                        WINEDDSCAPS_TEXTURE                 | /* TODO: Make conditional */
+                                        WINEDDSCAPS_ZBUFFER;                  /* TODO: Make conditional */
+    pCaps->DirectDrawCaps.StrideAlign = 0; /* TODO: SURFACE_ALIGNMENT */
     return WINED3D_OK;
 }
 
diff --git a/include/wine/wined3d_caps.h b/include/wine/wined3d_caps.h
index 95b400e..91fa788 100644
--- a/include/wine/wined3d_caps.h
+++ b/include/wine/wined3d_caps.h
@@ -168,4 +168,144 @@
 
 #define WINED3DVS20CAPS_PREDICATION                         0x00000001
 
+/* DirectDraw Caps */
+#define WINEDDSCAPS_RESERVED1               0x00000001
+#define WINEDDSCAPS_ALPHA                   0x00000002
+#define WINEDDSCAPS_BACKBUFFER              0x00000004
+#define WINEDDSCAPS_COMPLEX                 0x00000008
+#define WINEDDSCAPS_FLIP                    0x00000010
+#define WINEDDSCAPS_FRONTBUFFER             0x00000020
+#define WINEDDSCAPS_OFFSCREENPLAIN          0x00000040
+#define WINEDDSCAPS_OVERLAY                 0x00000080
+#define WINEDDSCAPS_PALETTE                 0x00000100
+#define WINEDDSCAPS_PRIMARYSURFACE          0x00000200
+#define WINEDDSCAPS_PRIMARYSURFACELEFT      0x00000400
+#define WINEDDSCAPS_SYSTEMMEMORY            0x00000800
+#define WINEDDSCAPS_TEXTURE                 0x00001000
+#define WINEDDSCAPS_3DDEVICE                0x00002000
+#define WINEDDSCAPS_VIDEOMEMORY             0x00004000
+#define WINEDDSCAPS_VISIBLE                 0x00008000
+#define WINEDDSCAPS_WRITEONLY               0x00010000
+#define WINEDDSCAPS_ZBUFFER                 0x00020000
+#define WINEDDSCAPS_OWNDC                   0x00040000
+#define WINEDDSCAPS_LIVEVIDEO               0x00080000
+#define WINEDDSCAPS_HWCODEC                 0x00100000
+#define WINEDDSCAPS_MODEX                   0x00200000
+#define WINEDDSCAPS_MIPMAP                  0x00400000
+#define WINEDDSCAPS_RESERVED2               0x00800000
+#define WINEDDSCAPS_ALLOCONLOAD             0x04000000
+#define WINEDDSCAPS_VIDEOPORT               0x08000000
+#define WINEDDSCAPS_LOCALVIDMEM             0x10000000
+#define WINEDDSCAPS_NONLOCALVIDMEM          0x20000000
+#define WINEDDSCAPS_STANDARDVGAMODE         0x40000000
+#define WINEDDSCAPS_OPTIMIZED               0x80000000
+
+#define WINEDDCKEYCAPS_DESTBLT                      0x00000001
+#define WINEDDCKEYCAPS_DESTBLTCLRSPACE              0x00000002
+#define WINEDDCKEYCAPS_DESTBLTCLRSPACEYUV           0x00000004
+#define WINEDDCKEYCAPS_DESTBLTYUV                   0x00000008
+#define WINEDDCKEYCAPS_DESTOVERLAY                  0x00000010
+#define WINEDDCKEYCAPS_DESTOVERLAYCLRSPACE          0x00000020
+#define WINEDDCKEYCAPS_DESTOVERLAYCLRSPACEYUV       0x00000040
+#define WINEDDCKEYCAPS_DESTOVERLAYONEACTIVE         0x00000080
+#define WINEDDCKEYCAPS_DESTOVERLAYYUV               0x00000100
+#define WINEDDCKEYCAPS_SRCBLT                       0x00000200
+#define WINEDDCKEYCAPS_SRCBLTCLRSPACE               0x00000400
+#define WINEDDCKEYCAPS_SRCBLTCLRSPACEYUV            0x00000800
+#define WINEDDCKEYCAPS_SRCBLTYUV                    0x00001000
+#define WINEDDCKEYCAPS_SRCOVERLAY                   0x00002000
+#define WINEDDCKEYCAPS_SRCOVERLAYCLRSPACE           0x00004000
+#define WINEDDCKEYCAPS_SRCOVERLAYCLRSPACEYUV        0x00008000
+#define WINEDDCKEYCAPS_SRCOVERLAYONEACTIVE          0x00010000
+#define WINEDDCKEYCAPS_SRCOVERLAYYUV                0x00020000
+#define WINEDDCKEYCAPS_NOCOSTOVERLAY                0x00040000
+
+#define WINEDDFXCAPS_BLTALPHA               0x00000001
+#define WINEDDFXCAPS_OVERLAYALPHA           0x00000004
+#define WINEDDFXCAPS_BLTARITHSTRETCHYN      0x00000010
+#define WINEDDFXCAPS_BLTARITHSTRETCHY       0x00000020
+#define WINEDDFXCAPS_BLTMIRRORLEFTRIGHT     0x00000040
+#define WINEDDFXCAPS_BLTMIRRORUPDOWN        0x00000080
+#define WINEDDFXCAPS_BLTROTATION            0x00000100
+#define WINEDDFXCAPS_BLTROTATION90          0x00000200
+#define WINEDDFXCAPS_BLTSHRINKX             0x00000400
+#define WINEDDFXCAPS_BLTSHRINKXN            0x00000800
+#define WINEDDFXCAPS_BLTSHRINKY             0x00001000
+#define WINEDDFXCAPS_BLTSHRINKYN            0x00002000
+#define WINEDDFXCAPS_BLTSTRETCHX            0x00004000
+#define WINEDDFXCAPS_BLTSTRETCHXN           0x00008000
+#define WINEDDFXCAPS_BLTSTRETCHY            0x00010000
+#define WINEDDFXCAPS_BLTSTRETCHYN           0x00020000
+#define WINEDDFXCAPS_OVERLAYARITHSTRETCHY   0x00040000
+#define WINEDDFXCAPS_OVERLAYARITHSTRETCHYN  0x00000008
+#define WINEDDFXCAPS_OVERLAYSHRINKX         0x00080000
+#define WINEDDFXCAPS_OVERLAYSHRINKXN        0x00100000
+#define WINEDDFXCAPS_OVERLAYSHRINKY         0x00200000
+#define WINEDDFXCAPS_OVERLAYSHRINKYN        0x00400000
+#define WINEDDFXCAPS_OVERLAYSTRETCHX        0x00800000
+#define WINEDDFXCAPS_OVERLAYSTRETCHXN       0x01000000
+#define WINEDDFXCAPS_OVERLAYSTRETCHY        0x02000000
+#define WINEDDFXCAPS_OVERLAYSTRETCHYN       0x04000000
+#define WINEDDFXCAPS_OVERLAYMIRRORLEFTRIGHT 0x08000000
+#define WINEDDFXCAPS_OVERLAYMIRRORUPDOWN    0x10000000
+
+#define WINEDDCAPS_3D                       0x00000001
+#define WINEDDCAPS_ALIGNBOUNDARYDEST        0x00000002
+#define WINEDDCAPS_ALIGNSIZEDEST            0x00000004
+#define WINEDDCAPS_ALIGNBOUNDARYSRC         0x00000008
+#define WINEDDCAPS_ALIGNSIZESRC             0x00000010
+#define WINEDDCAPS_ALIGNSTRIDE              0x00000020
+#define WINEDDCAPS_BLT                      0x00000040
+#define WINEDDCAPS_BLTQUEUE                 0x00000080
+#define WINEDDCAPS_BLTFOURCC                0x00000100
+#define WINEDDCAPS_BLTSTRETCH               0x00000200
+#define WINEDDCAPS_GDI                      0x00000400
+#define WINEDDCAPS_OVERLAY                  0x00000800
+#define WINEDDCAPS_OVERLAYCANTCLIP          0x00001000
+#define WINEDDCAPS_OVERLAYFOURCC            0x00002000
+#define WINEDDCAPS_OVERLAYSTRETCH           0x00004000
+#define WINEDDCAPS_PALETTE                  0x00008000
+#define WINEDDCAPS_PALETTEVSYNC             0x00010000
+#define WINEDDCAPS_READSCANLINE             0x00020000
+#define WINEDDCAPS_STEREOVIEW               0x00040000
+#define WINEDDCAPS_VBI                      0x00080000
+#define WINEDDCAPS_ZBLTS                    0x00100000
+#define WINEDDCAPS_ZOVERLAYS                0x00200000
+#define WINEDDCAPS_COLORKEY                 0x00400000
+#define WINEDDCAPS_ALPHA                    0x00800000
+#define WINEDDCAPS_COLORKEYHWASSIST         0x01000000
+#define WINEDDCAPS_NOHARDWARE               0x02000000
+#define WINEDDCAPS_BLTCOLORFILL             0x04000000
+#define WINEDDCAPS_BANKSWITCHED             0x08000000
+#define WINEDDCAPS_BLTDEPTHFILL             0x10000000
+#define WINEDDCAPS_CANCLIP                  0x20000000
+#define WINEDDCAPS_CANCLIPSTRETCHED         0x40000000
+#define WINEDDCAPS_CANBLTSYSMEM             0x80000000
+
+#define WINEDDCAPS2_CERTIFIED               0x00000001
+#define WINEDDCAPS2_NO2DDURING3DSCENE       0x00000002
+#define WINEDDCAPS2_VIDEOPORT               0x00000004
+#define WINEDDCAPS2_AUTOFLIPOVERLAY         0x00000008
+#define WINEDDCAPS2_CANBOBINTERLEAVED       0x00000010
+#define WINEDDCAPS2_CANBOBNONINTERLEAVED    0x00000020
+#define WINEDDCAPS2_COLORCONTROLOVERLAY     0x00000040
+#define WINEDDCAPS2_COLORCONTROLPRIMARY     0x00000080
+#define WINEDDCAPS2_CANDROPZ16BIT           0x00000100
+#define WINEDDCAPS2_NONLOCALVIDMEM          0x00000200
+#define WINEDDCAPS2_NONLOCALVIDMEMCAPS      0x00000400
+#define WINEDDCAPS2_NOPAGELOCKREQUIRED      0x00000800
+#define WINEDDCAPS2_WIDESURFACES            0x00001000
+#define WINEDDCAPS2_CANFLIPODDEVEN          0x00002000
+#define WINEDDCAPS2_CANBOBHARDWARE          0x00004000
+#define WINEDDCAPS2_COPYFOURCC              0x00008000
+#define WINEDDCAPS2_PRIMARYGAMMA            0x00020000
+#define WINEDDCAPS2_CANRENDERWINDOWED       0x00080000
+#define WINEDDCAPS2_CANCALIBRATEGAMMA       0x00100000
+#define WINEDDCAPS2_FLIPINTERVAL            0x00200000
+#define WINEDDCAPS2_FLIPNOVSYNC             0x00400000
+#define WINEDDCAPS2_CANMANAGETEXTURE        0x00800000
+#define WINEDDCAPS2_TEXMANINNONLOCALVIDMEM  0x01000000
+#define WINEDDCAPS2_STEREO                  0x02000000
+#define WINEDDCAPS2_SYSTONONLOCAL_AS_SYSTOLOCAL   0x04000000
+
 #endif /* __WINE_WINED3D_CAPS_H */
diff --git a/include/wine/wined3d_types.h b/include/wine/wined3d_types.h
index c67c311..c4d10f5 100644
--- a/include/wine/wined3d_types.h
+++ b/include/wine/wined3d_types.h
@@ -1112,6 +1112,27 @@
   INT    NumInstructionSlots;
 } WINED3DPSHADERCAPS2_0;
 
+typedef struct _WINEDDCAPS {
+    DWORD Caps;
+    DWORD Caps2;
+    DWORD CKeyCaps;
+    DWORD FXCaps;
+    DWORD FXAlphaCaps;
+    DWORD PalCaps;
+    DWORD SVCaps;
+    DWORD SVBCaps;
+    DWORD SVBCKeyCaps;
+    DWORD SVBFXCaps;
+    DWORD VSBCaps;
+    DWORD VSBCKeyCaps;
+    DWORD VSBFXCaps;
+    DWORD SSBCaps;
+    DWORD SSBCKeyCaps;
+    DWORD SSBFXCaps;
+    DWORD ddsCaps;
+    DWORD StrideAlign;
+} WINEDDCAPS;
+
 typedef struct _WINED3DCAPS {
   WINED3DDEVTYPE      DeviceType;
   UINT                AdapterOrdinal;
@@ -1204,6 +1225,7 @@
   DWORD               Reserved2;/* Not in the microsoft headers but documented */
   DWORD               Reserved3;
 
+  WINEDDCAPS          DirectDrawCaps;
 } WINED3DCAPS;
 
 typedef enum _WINED3DSTATEBLOCKTYPE {