diff --git a/dlls/ddraw/ddraw.c b/dlls/ddraw/ddraw.c
index ac95ddf..5b451cd 100644
--- a/dlls/ddraw/ddraw.c
+++ b/dlls/ddraw/ddraw.c
@@ -1158,6 +1158,13 @@ IDirectDrawImpl_GetGDISurface(IDirectDraw7 *iface,
  *  DDERR_INVALIDPARAMS if the callback wasn't set
  *
  *****************************************************************************/ 
+
+/* FIXME: Find the actual list of supported formats for DDraw */
+static const WINED3DFORMAT formatlist[] = {
+     WINED3DFMT_X8R8G8B8, WINED3DFMT_R5G6B5, WINED3DFMT_P8,
+     WINED3DFMT_UNKNOWN /* list terminator */
+};
+
 static HRESULT WINAPI
 IDirectDrawImpl_EnumDisplayModes(IDirectDraw7 *iface,
                                  DWORD Flags,
@@ -1166,10 +1173,11 @@ IDirectDrawImpl_EnumDisplayModes(IDirectDraw7 *iface,
                                  LPDDENUMMODESCALLBACK2 cb)
 {
     ICOM_THIS_FROM(IDirectDrawImpl, IDirectDraw7, iface);
-    unsigned int modenum = 0;
-    WINED3DFORMAT pixelformat = WINED3DFMT_UNKNOWN;
-    WINED3DDISPLAYMODE mode;
+    const WINED3DFORMAT *nextmode = formatlist;
+    WINED3DFORMAT pixelformat = *(nextmode++);
     DDSURFACEDESC2 callback_sd;
+    WINED3DDISPLAYMODE mode;
+    unsigned int modenum;
 
     TRACE("(%p)->(%p,%p,%p): Relay\n", This, DDSD, Context, cb);
 
@@ -1179,44 +1187,51 @@ IDirectDrawImpl_EnumDisplayModes(IDirectDraw7 *iface,
     if(DDSD)
     {
         if ((DDSD->dwFlags & DDSD_PIXELFORMAT) && (DDSD->u4.ddpfPixelFormat.dwFlags & DDPF_RGB) )
+        {
             pixelformat = PixelFormat_DD2WineD3D(&DDSD->u4.ddpfPixelFormat);
+            nextmode = NULL;
+        }
     }
 
-    while(IWineD3D_EnumAdapterModes(This->wineD3D,
-                                    WINED3DADAPTER_DEFAULT,
-                                    pixelformat,
-                                    modenum++,
-                                    &mode) == WINED3D_OK) {
-        if(DDSD)
-        {
-            if(DDSD->dwFlags & DDSD_WIDTH && mode.Width != DDSD->dwWidth) continue;
-            if(DDSD->dwFlags & DDSD_HEIGHT && mode.Height != DDSD->dwHeight) continue;
-        }
+    do {
+        modenum = 0;
+        while(IWineD3D_EnumAdapterModes(This->wineD3D,
+                                        WINED3DADAPTER_DEFAULT,
+                                        pixelformat,
+                                        modenum++,
+                                        &mode) == WINED3D_OK) {
+            if(DDSD)
+            {
+                if(DDSD->dwFlags & DDSD_WIDTH && mode.Width != DDSD->dwWidth) continue;
+                if(DDSD->dwFlags & DDSD_HEIGHT && mode.Height != DDSD->dwHeight) continue;
+            }
 
-        memset(&callback_sd, 0, sizeof(callback_sd));
-        callback_sd.dwSize = sizeof(callback_sd);
-        callback_sd.u4.ddpfPixelFormat.dwSize = sizeof(DDPIXELFORMAT);
+            memset(&callback_sd, 0, sizeof(callback_sd));
+            callback_sd.dwSize = sizeof(callback_sd);
+            callback_sd.u4.ddpfPixelFormat.dwSize = sizeof(DDPIXELFORMAT);
 
-        callback_sd.dwFlags = DDSD_HEIGHT|DDSD_WIDTH|DDSD_PIXELFORMAT|DDSD_PITCH;
-        if(Flags & DDEDM_REFRESHRATES)
-        {
-            callback_sd.dwFlags |= DDSD_REFRESHRATE;
-            callback_sd.u2.dwRefreshRate = mode.RefreshRate;
-        }
+            callback_sd.dwFlags = DDSD_HEIGHT|DDSD_WIDTH|DDSD_PIXELFORMAT|DDSD_PITCH;
+            if(Flags & DDEDM_REFRESHRATES)
+            {
+                callback_sd.dwFlags |= DDSD_REFRESHRATE;
+                callback_sd.u2.dwRefreshRate = mode.RefreshRate;
+            }
 
-        callback_sd.dwWidth = mode.Width;
-        callback_sd.dwHeight = mode.Height;
+            callback_sd.dwWidth = mode.Width;
+            callback_sd.dwHeight = mode.Height;
 
-        PixelFormat_WineD3DtoDD(&callback_sd.u4.ddpfPixelFormat, mode.Format);
+            PixelFormat_WineD3DtoDD(&callback_sd.u4.ddpfPixelFormat, mode.Format);
 
-        TRACE("Enumerating %dx%d@%d\n", callback_sd.dwWidth, callback_sd.dwHeight, callback_sd.u4.ddpfPixelFormat.u1.dwRGBBitCount);
+            TRACE("Enumerating %dx%d@%d\n", callback_sd.dwWidth, callback_sd.dwHeight, callback_sd.u4.ddpfPixelFormat.u1.dwRGBBitCount);
 
-        if(cb(&callback_sd, Context) == DDENUMRET_CANCEL)
-        {
-            TRACE("Application asked to terminate the enumeration\n");
-            return DD_OK;
+            if(cb(&callback_sd, Context) == DDENUMRET_CANCEL)
+            {
+                TRACE("Application asked to terminate the enumeration\n");
+                return DD_OK;
+            }
         }
-    }
+    } while (nextmode != NULL && (pixelformat=*(nextmode++)) != WINED3DFMT_UNKNOWN);
+
     TRACE("End of enumeration\n");
     return DD_OK;
 }
