- add implementation for FindDevice function
- some miscellaneous clean-ups / additions

diff --git a/dlls/ddraw/d3ddevice/mesa.c b/dlls/ddraw/d3ddevice/mesa.c
index 13a01ec..c8fb8fd 100644
--- a/dlls/ddraw/d3ddevice/mesa.c
+++ b/dlls/ddraw/d3ddevice/mesa.c
@@ -66,13 +66,6 @@
   { 0x82,0x2d,0xa8,0xd5,0x31,0x87,0xca,0xfd }
 };
 
-const GUID IID_D3DDEVICE_Default = {
-  0x00000000,
-  0x0000,
-  0x0000,
-  { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }
-};
-
 /* Define this variable if you have an unpatched Mesa 3.0 (patches are available
    on Mesa's home page) or version 3.1b.
 
@@ -201,9 +194,9 @@
     d1->dwMaxStippleHeight = 32;
 }
 
+#if 0 /* TODO : fix this... */
 static void fill_device_capabilities(IDirectDrawImpl* ddraw)
 {
-#if 0 /* TODO : fix this... */
     x11_dd_private *private = (x11_dd_private *) ddraw->d->private;
     const char *ext_string;
     Mesa_DeviceCapabilities *devcap;
@@ -221,12 +214,12 @@
         TRACE("Color table extension not found.\n");
     }
     LEAVE_GL();
-#endif
 }
+#endif
 
 
 
-HRESULT d3device_enumerate(LPD3DENUMDEVICESCALLBACK cb, LPVOID context, DWORD interface_version)
+HRESULT d3ddevice_enumerate(LPD3DENUMDEVICESCALLBACK cb, LPVOID context, DWORD interface_version)
 {
     D3DDEVICEDESC d1, d2;
     char buf[256];
@@ -290,7 +283,7 @@
     memset(lpD3DHELDevDesc, 0, dwSize);
     memcpy(lpD3DHELDevDesc, &desc, (dwSize <= desc.dwSize ? dwSize : desc.dwSize));
 
-    TRACE(" returning caps : TODO\n");
+    TRACE(" returning caps : (no dump function yet)\n");
 
     return DD_OK;
 }
@@ -398,6 +391,52 @@
     return DD_OK;
 }
 
+
+HRESULT
+d3ddevice_find(IDirect3DImpl *d3d,
+	       LPD3DFINDDEVICESEARCH lpD3DDFS,
+	       LPD3DFINDDEVICERESULT lplpD3DDevice,
+	       DWORD interface_version)
+{
+    DWORD dwSize;
+    D3DDEVICEDESC desc;
+  
+    if ((lpD3DDFS->dwFlags & D3DFDS_COLORMODEL) &&
+	(lpD3DDFS->dcmColorModel != D3DCOLOR_RGB)) {
+        TRACE(" trying to request a non-RGB D3D color model. Not supported.\n");
+	return DDERR_INVALIDPARAMS; /* No real idea what to return here :-) */
+    }
+    if (lpD3DDFS->dwFlags & D3DFDS_GUID) {
+        TRACE(" trying to match guid %s.\n", debugstr_guid(&(lpD3DDFS->guid)));
+	if ((IsEqualGUID( &IID_D3DDEVICE_OpenGL, &(lpD3DDFS->guid)) == 0) &&
+	    (IsEqualGUID( &IID_D3DDEVICE2_OpenGL, &(lpD3DDFS->guid)) == 0) &&
+	    (IsEqualGUID( &IID_D3DDEVICE3_OpenGL, &(lpD3DDFS->guid)) == 0) &&
+	    (IsEqualGUID( &IID_D3DDEVICE7_OpenGL, &(lpD3DDFS->guid)) == 0) &&
+	    (IsEqualGUID(&IID_IDirect3DHALDevice, &(lpD3DDFS->guid)) == 0)) {
+	    TRACE(" no match for this GUID.\n");
+	    return DDERR_INVALIDPARAMS;
+	}
+    }
+
+    /* Now return our own GUIDs according to Direct3D version */
+    if (interface_version == 1) {
+        lplpD3DDevice->guid = IID_D3DDEVICE_OpenGL;
+    } else if (interface_version == 2) {
+        lplpD3DDevice->guid = IID_D3DDEVICE2_OpenGL;
+    } else if (interface_version == 3) {
+        lplpD3DDevice->guid = IID_D3DDEVICE3_OpenGL;
+    }
+    fill_opengl_caps(&desc);
+    dwSize = lplpD3DDevice->ddHwDesc.dwSize;
+    memset(&(lplpD3DDevice->ddHwDesc), 0, dwSize);
+    memcpy(&(lplpD3DDevice->ddHwDesc), &desc, (dwSize <= desc.dwSize ? dwSize : desc.dwSize));
+    dwSize = lplpD3DDevice->ddSwDesc.dwSize;
+    memset(&(lplpD3DDevice->ddSwDesc), 0, dwSize);
+    memcpy(&(lplpD3DDevice->ddSwDesc), &desc, (dwSize <= desc.dwSize ? dwSize : desc.dwSize));
+    
+    return D3D_OK;
+}
+
 HRESULT WINAPI
 GL_IDirect3DDeviceImpl_2_1T_EnumTextureFormats(LPDIRECT3DDEVICE2 iface,
 					       LPD3DENUMTEXTUREFORMATSCALLBACK lpD3DEnumTextureProc,