1. Fixed some vc warings and fault
authorMagnus Olsen <magnus@greatlord.com>
Sun, 5 Nov 2006 21:19:53 +0000 (21:19 +0000)
committerMagnus Olsen <magnus@greatlord.com>
Sun, 5 Nov 2006 21:19:53 +0000 (21:19 +0000)
2. Implement AcquireDDThreadLock, ReleaseDDThreadLock (does not working as it should yet)
3. Start making ddraw thread safe
4. Fixed some mirors bugs

svn path=/trunk/; revision=24690

16 files changed:
reactos/dll/directx/ddraw/clipper.c
reactos/dll/directx/ddraw/color.c
reactos/dll/directx/ddraw/ddraw.def
reactos/dll/directx/ddraw/gamma.c
reactos/dll/directx/ddraw/hal/surface_hal.c
reactos/dll/directx/ddraw/kernel.c
reactos/dll/directx/ddraw/main.c
reactos/dll/directx/ddraw/main/ddraw_main.c
reactos/dll/directx/ddraw/main/surface_main.c
reactos/dll/directx/ddraw/palette.c
reactos/dll/directx/ddraw/rosdraw.h
reactos/dll/directx/ddraw/soft/surface_callbacks_hel.c
reactos/dll/directx/ddraw/soft/surface_hel.c
reactos/dll/directx/ddraw/startup.c
reactos/dll/directx/ddraw/thunks/ddraw_thunk.c
reactos/dll/directx/ddraw/thunks/surface_thunk.c

index b50ac67..bee251c 100644 (file)
 
 ULONG WINAPI 
 DirectDrawClipper_Release(LPDIRECTDRAWCLIPPER iface) 
-{    
-    DX_WINDBG_trace();
+{   
 
     IDirectDrawClipperImpl* This = (IDirectDrawClipperImpl*)iface;
        ULONG ref=0;
+        
+    DX_WINDBG_trace();
 
        if (iface!=NULL)
        {               
@@ -40,12 +41,11 @@ DirectDrawClipper_Release(LPDIRECTDRAWCLIPPER iface)
 
 ULONG WINAPI 
 DirectDrawClipper_AddRef (LPDIRECTDRAWCLIPPER iface)
-{    
-   DX_WINDBG_trace();
-      
-   IDirectDrawClipperImpl * This = (IDirectDrawClipperImpl*)iface;
-   
+{            
+   IDirectDrawClipperImpl * This = (IDirectDrawClipperImpl*)iface;   
    ULONG ref=0;
+
+   DX_WINDBG_trace();
     
    if (iface!=NULL)
    {
index 9e9ef03..184fe1b 100644 (file)
 
 ULONG WINAPI
 DirectDrawColorControl_AddRef( LPDIRECTDRAWCOLORCONTROL iface)
-{   
-   DX_WINDBG_trace();
-      
-   IDirectDrawColorImpl * This = (IDirectDrawColorImpl*)iface;
-   
+{           
+   IDirectDrawColorImpl * This = (IDirectDrawColorImpl*)iface;   
    ULONG ref=0;
+
+   DX_WINDBG_trace();
     
    if (iface!=NULL)
    {
@@ -28,12 +27,12 @@ DirectDrawColorControl_AddRef( LPDIRECTDRAWCOLORCONTROL iface)
 
 ULONG WINAPI
 DirectDrawColorControl_Release( LPDIRECTDRAWCOLORCONTROL iface)
-{
-    DX_WINDBG_trace();
-
+{    
     IDirectDrawColorImpl* This = (IDirectDrawColorImpl*)iface;
        ULONG ref=0;
 
+       DX_WINDBG_trace();
+
        if (iface!=NULL)
        {               
                ref = InterlockedDecrement( (PLONG) &This->ref);
index a077cbd..d08bb41 100644 (file)
@@ -1,7 +1,9 @@
 EXPORTS
-;AcquireDDThreadLock
-;CompleteCreateSysmemSurface
+AcquireDDThreadLock@0
 D3DParseUnknownCommand@8
+ReleaseDDThreadLock@0
+
+;CompleteCreateSysmemSurface
 ;DDGetAttachedSurfaceLcl
 ;DDInternalLock
 ;DDInternalUnlock
@@ -19,4 +21,4 @@ DirectDrawEnumerateW@8
 ;GetOLEThunkData
 ;GetSurfaceFromDC
 ;RegisterSpecialCase
-;ReleaseDDThreadLock
+
index 9954b11..8394f98 100644 (file)
 
 ULONG WINAPI
 DirectDrawGammaControl_AddRef( LPDIRECTDRAWGAMMACONTROL iface)
-{
-   DX_WINDBG_trace();
-      
+{         
    IDirectDrawGammaImpl * This = (IDirectDrawGammaImpl*)iface;
    
    ULONG ref=0;
+
+   DX_WINDBG_trace();
     
    if (iface!=NULL)
    {
@@ -28,11 +28,10 @@ DirectDrawGammaControl_AddRef( LPDIRECTDRAWGAMMACONTROL iface)
 
 ULONG WINAPI
 DirectDrawGammaControl_Release( LPDIRECTDRAWGAMMACONTROL iface)
-{
-    DX_WINDBG_trace();
-
+{    
     IDirectDrawGammaImpl* This = (IDirectDrawGammaImpl*)iface;
        ULONG ref=0;
+       DX_WINDBG_trace();
 
        if (iface!=NULL)
        {               
index e68d6a1..fbdde38 100644 (file)
@@ -8,7 +8,7 @@
  *
  */
 
-#include "rosdraw.h"
+#include "../rosdraw.h"
 
 
 
index cb70ecf..c738596 100644 (file)
 
 ULONG WINAPI 
 DirectDrawKernel_AddRef ( LPDIRECTDRAWKERNEL iface)
-{
-   DX_WINDBG_trace();
+{   
       
    IDirectDrawKernelImpl * This = (IDirectDrawKernelImpl*)iface;
    
    ULONG ref=0;
+
+   DX_WINDBG_trace();
     
    if (iface!=NULL)
    {
@@ -31,12 +32,12 @@ DirectDrawKernel_AddRef ( LPDIRECTDRAWKERNEL iface)
 
 ULONG WINAPI 
 DirectDrawKernel_Release ( LPDIRECTDRAWKERNEL iface)
-{
-    DX_WINDBG_trace();
-
+{    
     IDirectDrawKernelImpl* This = (IDirectDrawKernelImpl*)iface;
        ULONG ref=0;
 
+       DX_WINDBG_trace();
+
        if (iface!=NULL)
        {               
                ref = InterlockedDecrement( (PLONG) &This->ref);
@@ -83,12 +84,11 @@ DirectDrawKernel_ReleaseKernelHandle ( LPDIRECTDRAWKERNEL iface)
 
 ULONG WINAPI 
 DDSurfaceKernel_AddRef ( LPDIRECTDRAWSURFACEKERNEL iface)
-{
-   DX_WINDBG_trace();
-      
+{         
    IDirectDrawSurfaceKernelImpl * This = (IDirectDrawSurfaceKernelImpl*)iface;
    
    ULONG ref=0;
+   DX_WINDBG_trace();
     
    if (iface!=NULL)
    {
@@ -99,12 +99,12 @@ DDSurfaceKernel_AddRef ( LPDIRECTDRAWSURFACEKERNEL iface)
 
 ULONG WINAPI 
 DDSurfaceKernel_Release ( LPDIRECTDRAWSURFACEKERNEL iface)
-{
-    DX_WINDBG_trace();
-
+{    
     IDirectDrawSurfaceKernelImpl* This = (IDirectDrawSurfaceKernelImpl*)iface;
        ULONG ref=0;
 
+       DX_WINDBG_trace();
+
        if (iface!=NULL)
        {               
                ref = InterlockedDecrement( (PLONG) &This->ref);
index 5457aa3..7d49c8d 100644 (file)
@@ -13,6 +13,7 @@
 #include "rosdraw.h"
 #include "d3dhal.h"
 
+CRITICAL_SECTION ddcs;
 
 // This function is exported by the dll
 HRESULT WINAPI DirectDrawCreateClipper (DWORD dwFlags, 
@@ -34,6 +35,13 @@ DirectDrawCreate (LPGUID lpGUID,
                                  LPDIRECTDRAW* lplpDD, 
                                  LPUNKNOWN pUnkOuter) 
 {   
+       DX_WINDBG_trace();
+
+       if (IsBadWritePtr( lplpDD, sizeof( LPVOID )) )
+       {
+               return DDERR_INVALIDPARAMS;
+       }
+
        /* check see if pUnkOuter is null or not */
        if (pUnkOuter)
        {
@@ -55,7 +63,14 @@ DirectDrawCreateEx(LPGUID lpGUID,
                                   LPVOID* lplpDD, 
                                   REFIID id, 
                                   LPUNKNOWN pUnkOuter)
-{      
+{   
+       DX_WINDBG_trace();
+
+       if (IsBadWritePtr( lplpDD, sizeof( LPVOID )) )
+       {
+               return DDERR_INVALIDPARAMS;
+       }
+
        /* check see if pUnkOuter is null or not */
        if (pUnkOuter)
        {
@@ -202,5 +217,44 @@ D3DParseUnknownCommand( LPVOID lpCmd,
     return retCode;
 }
 
 
+VOID 
+WINAPI 
+AcquireDDThreadLock()
+{   
+   EnterCriticalSection(&ddcs);   
+}
+
+VOID 
+WINAPI  
+ReleaseDDThreadLock()
+{
+   LeaveCriticalSection(&ddcs);      
+}
+
+BOOL APIENTRY 
+DllMain( HMODULE hModule, DWORD  ul_reason_for_call, LPVOID lpReserved )
+{
+  BOOL retStatus;
+  switch(ul_reason_for_call)
+  {
+     case DLL_PROCESS_DETACH:                                                                                         
+           DeleteCriticalSection( &ddcs );           
+           retStatus = TRUE;                                              
+           break;
+
+     case DLL_PROCESS_ATTACH:
+                 DisableThreadLibraryCalls( hModule );
+                 InitializeCriticalSection( &ddcs );
+          EnterCriticalSection( &ddcs );
+                 LeaveCriticalSection( &ddcs );     
+                 retStatus = FALSE;
+                 break;
+
+        default:
+                retStatus = TRUE;                                              
+         break;
+  }
+  return retStatus;
+
+}
index 551cfba..daf0437 100644 (file)
  * Status ok
  */
 
-#include "rosdraw.h"
+#include "../rosdraw.h"
 
 HRESULT 
 WINAPI 
 Main_DirectDraw_QueryInterface (LPDIRECTDRAW7 iface, 
                                                                REFIID id, 
                                                                LPVOID *obj) 
-{
-    DX_WINDBG_trace();
-
+{   
     IDirectDrawImpl* This = (IDirectDrawImpl*)iface;
+
+       DX_WINDBG_trace();
     
     if (IsEqualGUID(&IID_IDirectDraw7, id))
     {
@@ -57,10 +57,10 @@ Main_DirectDraw_QueryInterface (LPDIRECTDRAW7 iface,
 ULONG
 WINAPI 
 Main_DirectDraw_AddRef (LPDIRECTDRAW7 iface) 
-{
-    DX_WINDBG_trace();
-
+{    
     IDirectDrawImpl* This = (IDirectDrawImpl*)iface;
+
+       DX_WINDBG_trace();
           
        if (iface!=NULL)
        {
@@ -82,10 +82,10 @@ Main_DirectDraw_AddRef (LPDIRECTDRAW7 iface)
 ULONG 
 WINAPI 
 Main_DirectDraw_Release (LPDIRECTDRAW7 iface) 
-{
-    DX_WINDBG_trace();
-
+{    
     IDirectDrawImpl* This = (IDirectDrawImpl*)iface;
+
+       DX_WINDBG_trace();
        
        if (iface!=NULL)
        {               
@@ -139,12 +139,14 @@ Main_DirectDraw_CreateClipper(LPDIRECTDRAW7 iface,
                               LPDIRECTDRAWCLIPPER *ppClipper, 
                                                          IUnknown *pUnkOuter)
 {
+       IDirectDrawClipperImpl* That; 
+
     DX_WINDBG_trace();
 
     if (pUnkOuter!=NULL) 
         return CLASS_E_NOAGGREGATION; 
 
-    IDirectDrawClipperImpl* That; 
+    
     That = (IDirectDrawClipperImpl*)HeapAlloc(GetProcessHeap(), 0, sizeof(IDirectDrawClipperImpl));
 
     if (That == NULL) 
@@ -278,7 +280,7 @@ HRESULT internal_CreateNewSurface(IDirectDrawImpl* This, IDirectDrawSurfaceImpl*
 HRESULT WINAPI Main_DirectDraw_CreateSurface (LPDIRECTDRAW7 iface, LPDDSURFACEDESC2 pDDSD,
                                             LPDIRECTDRAWSURFACE7 *ppSurf, IUnknown *pUnkOuter) 
 {
-    DX_WINDBG_trace();
+    
 
     DxSurf *surf;
        IDirectDrawImpl* This = (IDirectDrawImpl*)iface;
@@ -286,6 +288,8 @@ HRESULT WINAPI Main_DirectDraw_CreateSurface (LPDIRECTDRAW7 iface, LPDDSURFACEDE
        DEVMODE DevMode; 
        LONG extra_surfaces = 0;
 
+       DX_WINDBG_trace();
+
     if (pUnkOuter!=NULL) 
        {
         return CLASS_E_NOAGGREGATION; 
@@ -548,7 +552,10 @@ HRESULT WINAPI Main_DirectDraw_CreateSurface (LPDIRECTDRAW7 iface, LPDDSURFACEDE
     }
         else if (pDDSD->ddsCaps.dwCaps & DDSCAPS_OVERLAY)
         {       
-                        return internal_CreateNewSurface( This,  That);
+                       DDHAL_CANCREATESURFACEDATA   mDdCanCreateSurface;
+                       DDHAL_CREATESURFACEDATA      mDdCreateSurface;
+
+                       return internal_CreateNewSurface( This,  That);
 
             memset(&That->Surf->mddsdOverlay, 0, sizeof(DDSURFACEDESC));
             memcpy(&That->Surf->mddsdOverlay, pDDSD, sizeof(DDSURFACEDESC));
@@ -564,7 +571,7 @@ HRESULT WINAPI Main_DirectDraw_CreateSurface (LPDIRECTDRAW7 iface, LPDDSURFACEDE
             That->Surf->mddsdOverlay.ddpfPixelFormat.dwFlags = pDDSD->ddpfPixelFormat.dwFlags;
             That->Surf->mddsdOverlay.ddpfPixelFormat.dwRGBBitCount = pDDSD->ddpfPixelFormat.dwRGBBitCount;
                                      
-            DDHAL_CANCREATESURFACEDATA   mDdCanCreateSurface;
+            
             mDdCanCreateSurface.lpDD = &This->mDDrawGlobal;
             mDdCanCreateSurface.CanCreateSurface = This->mCallbacks.HALDD.CanCreateSurface;
             mDdCanCreateSurface.bIsDifferentPixelFormat = TRUE; //isDifferentPixelFormat;
@@ -608,7 +615,7 @@ HRESULT WINAPI Main_DirectDraw_CreateSurface (LPDIRECTDRAW7 iface, LPDDSURFACEDE
             That->Surf->mpOverlayLocals[0] = &That->Surf->mOverlayLocal[0];
             
 
-           DDHAL_CREATESURFACEDATA      mDdCreateSurface;
+           
            mDdCreateSurface.lpDD = &This->mDDrawGlobal;
            mDdCreateSurface.CreateSurface = This->mCallbacks.HALDD.CreateSurface;  
            mDdCreateSurface.lpDDSurfaceDesc = &That->Surf->mddsdOverlay;//pDDSD;
@@ -755,148 +762,148 @@ HRESULT WINAPI Main_DirectDraw_EnumDisplayModes(LPDIRECTDRAW7 iface, DWORD dwFla
      
        DX_STUB_DD_OK;
 
-    IDirectDrawImpl* This = (IDirectDrawImpl*)iface;
-    DDSURFACEDESC2 desc_callback;
-    DEVMODE DevMode;   
-    int iMode=0;
-       
-       RtlZeroMemory(&desc_callback, sizeof(DDSURFACEDESC2));
-                                  
-    desc_callback.dwSize = sizeof(DDSURFACEDESC2);     
-
-    desc_callback.dwFlags = DDSD_HEIGHT|DDSD_WIDTH|DDSD_PIXELFORMAT|DDSD_PITCH;
-
-    if (dwFlags & DDEDM_REFRESHRATES)
-    {
-           desc_callback.dwFlags |= DDSD_REFRESHRATE;
-        desc_callback.dwRefreshRate = This->mDDrawGlobal.dwMonitorFrequency;
-    }
-
-  
-     /* FIXME check if the mode are suppretd before sending it back  */
-
-       memset(&DevMode,0,sizeof(DEVMODE));
-       DevMode.dmSize = (WORD)sizeof(DEVMODE);
-       DevMode.dmDriverExtra = 0;
-
-    while (EnumDisplaySettingsEx(NULL, iMode, &DevMode, 0))
-    {
-       
-          if (pDDSD)
-          {
-              if ((pDDSD->dwFlags & DDSD_WIDTH) && (pDDSD->dwWidth != DevMode.dmPelsWidth))
-              continue; 
-              if ((pDDSD->dwFlags & DDSD_HEIGHT) && (pDDSD->dwHeight != DevMode.dmPelsHeight))
-                  continue; 
-              if ((pDDSD->dwFlags & DDSD_PIXELFORMAT) && (pDDSD->ddpfPixelFormat.dwFlags & DDPF_RGB) &&
-                  (pDDSD->ddpfPixelFormat.dwRGBBitCount != DevMode.dmBitsPerPel))
-                   continue; 
-       } 
-       
-       desc_callback.dwHeight = DevMode.dmPelsHeight;
-          desc_callback.dwWidth = DevMode.dmPelsWidth;
-          
-       if (DevMode.dmFields & DM_DISPLAYFREQUENCY)
-       {
-            desc_callback.dwRefreshRate = DevMode.dmDisplayFrequency;
-       }
-
-          if (desc_callback.dwRefreshRate == 0)
-          {
-                  DX_STUB_str("dwRefreshRate = 0, we hard code it to value 60");
-           desc_callback.dwRefreshRate = 60; /* Maybe the valye should be biger */
-          }
-
-      /* above same as wine */
-         if ((pDDSD->dwFlags & DDSD_PIXELFORMAT) && (pDDSD->ddpfPixelFormat.dwFlags & DDPF_RGB) )
-         {         
-                       switch(DevMode.dmBitsPerPel)
-                       {
-                               case  8:
-                                        desc_callback.ddpfPixelFormat.dwSize = sizeof(DDPIXELFORMAT);
-                                        desc_callback.ddpfPixelFormat.dwFlags = DDPF_RGB;
-                                        desc_callback.ddpfPixelFormat.dwFourCC = 0;
-                                        desc_callback.ddpfPixelFormat.dwRGBBitCount=8;
-                                        /* FIXME right value */
-                                        desc_callback.ddpfPixelFormat.dwRBitMask = 0xFF0000; /* red bitmask */
-                                        desc_callback.ddpfPixelFormat.dwGBitMask = 0; /* Green bitmask */
-                                        desc_callback.ddpfPixelFormat.dwBBitMask = 0; /* Blue bitmask */
-                                       break;
-
-                               case 15:
-                                       desc_callback.ddpfPixelFormat.dwSize = sizeof(DDPIXELFORMAT);
-                                        desc_callback.ddpfPixelFormat.dwFlags = DDPF_RGB;
-                                        desc_callback.ddpfPixelFormat.dwFourCC = 0;
-                                        desc_callback.ddpfPixelFormat.dwRGBBitCount=15;
-                                        /* FIXME right value */
-                                        desc_callback.ddpfPixelFormat.dwRBitMask = 0x7C00; /* red bitmask */
-                                        desc_callback.ddpfPixelFormat.dwGBitMask = 0x3E0; /* Green bitmask */
-                                        desc_callback.ddpfPixelFormat.dwBBitMask = 0x1F; /* Blue bitmask */
-                                       break;
-
-                               case 16: 
-                                        desc_callback.ddpfPixelFormat.dwSize = sizeof(DDPIXELFORMAT);
-                                        desc_callback.ddpfPixelFormat.dwFlags = DDPF_RGB;
-                                        desc_callback.ddpfPixelFormat.dwFourCC = 0;
-                                        desc_callback.ddpfPixelFormat.dwRGBBitCount=16;
-                                        /* FIXME right value */
-                                        desc_callback.ddpfPixelFormat.dwRBitMask = 0xF800; /* red bitmask */
-                                        desc_callback.ddpfPixelFormat.dwGBitMask = 0x7E0; /* Green bitmask */
-                                        desc_callback.ddpfPixelFormat.dwBBitMask = 0x1F; /* Blue bitmask */
-                                       break;
-
-                               case 24: 
-                                        desc_callback.ddpfPixelFormat.dwSize = sizeof(DDPIXELFORMAT);
-                                        desc_callback.ddpfPixelFormat.dwFlags = DDPF_RGB;
-                                        desc_callback.ddpfPixelFormat.dwFourCC = 0;
-                                        desc_callback.ddpfPixelFormat.dwRGBBitCount=24;
-                                        /* FIXME right value */
-                                        desc_callback.ddpfPixelFormat.dwRBitMask = 0xFF0000; /* red bitmask */
-                                        desc_callback.ddpfPixelFormat.dwGBitMask = 0x00FF00; /* Green bitmask */
-                                        desc_callback.ddpfPixelFormat.dwBBitMask = 0x0000FF; /* Blue bitmask */
-                                       break;
-
-                               case 32: 
-                                        desc_callback.ddpfPixelFormat.dwSize = sizeof(DDPIXELFORMAT);
-                                        desc_callback.ddpfPixelFormat.dwFlags = DDPF_RGB;
-                                        desc_callback.ddpfPixelFormat.dwFourCC = 0;
-                                        desc_callback.ddpfPixelFormat.dwRGBBitCount=8;
-                                        /* FIXME right value */
-                                        desc_callback.ddpfPixelFormat.dwRBitMask = 0xFF0000; /* red bitmask */
-                                        desc_callback.ddpfPixelFormat.dwGBitMask = 0x00FF00; /* Green bitmask */
-                                        desc_callback.ddpfPixelFormat.dwBBitMask = 0x0000FF; /* Blue bitmask */
-                                       break;
-
-                               default:
-                                       break;          
-                       }
-                       desc_callback.ddsCaps.dwCaps = 0;
-                   if (desc_callback.ddpfPixelFormat.dwFlags & DDPF_PALETTEINDEXED8) 
-                   {
-                               /* FIXME srt DDCS Caps flag */
-                               desc_callback.ddsCaps.dwCaps |= DDSCAPS_PALETTE;
-                   }    
-         }
-                                 
-         if (DevMode.dmBitsPerPel==15)
-      {           
-                 desc_callback.lPitch =  DevMode.dmPelsWidth + (8 - ( DevMode.dmPelsWidth % 8)) % 8;
-         }
-         else
-         {
-                 desc_callback.lPitch = DevMode.dmPelsWidth * (DevMode.dmBitsPerPel  / 8);
-             desc_callback.lPitch = desc_callback.lPitch + (8 - (desc_callback.lPitch % 8)) % 8;
-         }
-                                                                                 
-      if (callback(&desc_callback, context) == DDENUMRET_CANCEL)
-      {
-         return DD_OK;       
-      }
-       
-      iMode++; 
-    }
-
-    return DD_OK;
//   IDirectDrawImpl* This = (IDirectDrawImpl*)iface;
//   DDSURFACEDESC2 desc_callback;
//   DEVMODE DevMode;   
//   int iMode=0;
+       //
+       //RtlZeroMemory(&desc_callback, sizeof(DDSURFACEDESC2));
+       //                         
+ //   desc_callback.dwSize = sizeof(DDSURFACEDESC2);   
+
//   desc_callback.dwFlags = DDSD_HEIGHT|DDSD_WIDTH|DDSD_PIXELFORMAT|DDSD_PITCH;
+
//   if (dwFlags & DDEDM_REFRESHRATES)
//   {
+       //    desc_callback.dwFlags |= DDSD_REFRESHRATE;
//       desc_callback.dwRefreshRate = This->mDDrawGlobal.dwMonitorFrequency;
//   }
+
+ // 
//    /* FIXME check if the mode are suppretd before sending it back  */
+
+       //memset(&DevMode,0,sizeof(DEVMODE));
+       //DevMode.dmSize = (WORD)sizeof(DEVMODE);
+       //DevMode.dmDriverExtra = 0;
+
//   while (EnumDisplaySettingsEx(NULL, iMode, &DevMode, 0))
//   {
+ //      
+       //   if (pDDSD)
+       //   {
+       //       if ((pDDSD->dwFlags & DDSD_WIDTH) && (pDDSD->dwWidth != DevMode.dmPelsWidth))
+       //       continue; 
+       //       if ((pDDSD->dwFlags & DDSD_HEIGHT) && (pDDSD->dwHeight != DevMode.dmPelsHeight))
+       //         continue; 
+       //       if ((pDDSD->dwFlags & DDSD_PIXELFORMAT) && (pDDSD->ddpfPixelFormat.dwFlags & DDPF_RGB) &&
+       //         (pDDSD->ddpfPixelFormat.dwRGBBitCount != DevMode.dmBitsPerPel))
+       //          continue; 
//      } 
+       //
//      desc_callback.dwHeight = DevMode.dmPelsHeight;
+       //   desc_callback.dwWidth = DevMode.dmPelsWidth;
+       //   
//      if (DevMode.dmFields & DM_DISPLAYFREQUENCY)
//      {
//           desc_callback.dwRefreshRate = DevMode.dmDisplayFrequency;
//      }
+
+       //   if (desc_callback.dwRefreshRate == 0)
+       //   {
+       //         DX_STUB_str("dwRefreshRate = 0, we hard code it to value 60");
//          desc_callback.dwRefreshRate = 60; /* Maybe the valye should be biger */
+       //   }
+
//     /* above same as wine */
+       //  if ((pDDSD->dwFlags & DDSD_PIXELFORMAT) && (pDDSD->ddpfPixelFormat.dwFlags & DDPF_RGB) )
+       //  {         
+       //              switch(DevMode.dmBitsPerPel)
+       //              {
+       //                      case  8:
+       //                               desc_callback.ddpfPixelFormat.dwSize = sizeof(DDPIXELFORMAT);
+       //                               desc_callback.ddpfPixelFormat.dwFlags = DDPF_RGB;
+       //                               desc_callback.ddpfPixelFormat.dwFourCC = 0;
+       //                               desc_callback.ddpfPixelFormat.dwRGBBitCount=8;
+       //                               /* FIXME right value */
+       //                               desc_callback.ddpfPixelFormat.dwRBitMask = 0xFF0000; /* red bitmask */
+       //                               desc_callback.ddpfPixelFormat.dwGBitMask = 0; /* Green bitmask */
+       //                               desc_callback.ddpfPixelFormat.dwBBitMask = 0; /* Blue bitmask */
+       //                              break;
+
+       //                      case 15:
+       //                              desc_callback.ddpfPixelFormat.dwSize = sizeof(DDPIXELFORMAT);
+       //                               desc_callback.ddpfPixelFormat.dwFlags = DDPF_RGB;
+       //                               desc_callback.ddpfPixelFormat.dwFourCC = 0;
+       //                               desc_callback.ddpfPixelFormat.dwRGBBitCount=15;
+       //                               /* FIXME right value */
+       //                               desc_callback.ddpfPixelFormat.dwRBitMask = 0x7C00; /* red bitmask */
+       //                               desc_callback.ddpfPixelFormat.dwGBitMask = 0x3E0; /* Green bitmask */
+       //                               desc_callback.ddpfPixelFormat.dwBBitMask = 0x1F; /* Blue bitmask */
+       //                              break;
+
+       //                      case 16: 
+       //                               desc_callback.ddpfPixelFormat.dwSize = sizeof(DDPIXELFORMAT);
+       //                               desc_callback.ddpfPixelFormat.dwFlags = DDPF_RGB;
+       //                               desc_callback.ddpfPixelFormat.dwFourCC = 0;
+       //                               desc_callback.ddpfPixelFormat.dwRGBBitCount=16;
+       //                               /* FIXME right value */
+       //                               desc_callback.ddpfPixelFormat.dwRBitMask = 0xF800; /* red bitmask */
+       //                               desc_callback.ddpfPixelFormat.dwGBitMask = 0x7E0; /* Green bitmask */
+       //                               desc_callback.ddpfPixelFormat.dwBBitMask = 0x1F; /* Blue bitmask */
+       //                              break;
+
+       //                      case 24: 
+       //                               desc_callback.ddpfPixelFormat.dwSize = sizeof(DDPIXELFORMAT);
+       //                               desc_callback.ddpfPixelFormat.dwFlags = DDPF_RGB;
+       //                               desc_callback.ddpfPixelFormat.dwFourCC = 0;
+       //                               desc_callback.ddpfPixelFormat.dwRGBBitCount=24;
+       //                               /* FIXME right value */
+       //                               desc_callback.ddpfPixelFormat.dwRBitMask = 0xFF0000; /* red bitmask */
+       //                               desc_callback.ddpfPixelFormat.dwGBitMask = 0x00FF00; /* Green bitmask */
+       //                               desc_callback.ddpfPixelFormat.dwBBitMask = 0x0000FF; /* Blue bitmask */
+       //                              break;
+
+       //                      case 32: 
+       //                               desc_callback.ddpfPixelFormat.dwSize = sizeof(DDPIXELFORMAT);
+       //                               desc_callback.ddpfPixelFormat.dwFlags = DDPF_RGB;
+       //                               desc_callback.ddpfPixelFormat.dwFourCC = 0;
+       //                               desc_callback.ddpfPixelFormat.dwRGBBitCount=8;
+       //                               /* FIXME right value */
+       //                               desc_callback.ddpfPixelFormat.dwRBitMask = 0xFF0000; /* red bitmask */
+       //                               desc_callback.ddpfPixelFormat.dwGBitMask = 0x00FF00; /* Green bitmask */
+       //                               desc_callback.ddpfPixelFormat.dwBBitMask = 0x0000FF; /* Blue bitmask */
+       //                              break;
+
+       //                      default:
+       //                              break;          
+       //              }
+       //              desc_callback.ddsCaps.dwCaps = 0;
+       //          if (desc_callback.ddpfPixelFormat.dwFlags & DDPF_PALETTEINDEXED8) 
+       //          {
+       //                      /* FIXME srt DDCS Caps flag */
+       //                      desc_callback.ddsCaps.dwCaps |= DDSCAPS_PALETTE;
+       //          }    
+       //  }
+       //                        
+       //  if (DevMode.dmBitsPerPel==15)
//     {           
+       //        desc_callback.lPitch =  DevMode.dmPelsWidth + (8 - ( DevMode.dmPelsWidth % 8)) % 8;
+       //  }
+       //  else
+       //  {
+       //        desc_callback.lPitch = DevMode.dmPelsWidth * (DevMode.dmBitsPerPel  / 8);
+       //      desc_callback.lPitch = desc_callback.lPitch + (8 - (desc_callback.lPitch % 8)) % 8;
+       //  }
+       //                                                                        
//     if (callback(&desc_callback, context) == DDENUMRET_CANCEL)
//     {
//        return DD_OK;       
//     }
+ //      
//     iMode++; 
//   }
+
//   return DD_OK;
 }
 
 /*
@@ -945,11 +952,13 @@ HRESULT WINAPI
 Main_DirectDraw_GetCaps(LPDIRECTDRAW7 iface, LPDDCAPS pDriverCaps,
             LPDDCAPS pHELCaps) 
 {      
-    DX_WINDBG_trace();
+    
 
     DDSCAPS2 ddscaps = {0};
     DWORD status = DD_FALSE;   
     IDirectDrawImpl *This = (IDirectDrawImpl *)iface;
+
+       DX_WINDBG_trace();
        
     if (pDriverCaps != NULL) 
     {                          
@@ -984,11 +993,11 @@ Main_DirectDraw_GetCaps(LPDIRECTDRAW7 iface, LPDDCAPS pDriverCaps,
  * Status ok
  */
 HRESULT WINAPI Main_DirectDraw_GetDisplayMode(LPDIRECTDRAW7 iface, LPDDSURFACEDESC2 pDDSD) 
-{   
-    DX_WINDBG_trace();
-
+{       
     IDirectDrawImpl *This = (IDirectDrawImpl *)iface;
 
+       DX_WINDBG_trace();
+
     if (pDDSD == NULL)
     {
       return DD_FALSE;
@@ -1048,11 +1057,11 @@ Main_DirectDraw_GetGDISurface(LPDIRECTDRAW7 iface,
  */
 HRESULT WINAPI 
 Main_DirectDraw_GetMonitorFrequency(LPDIRECTDRAW7 iface,LPDWORD freq)
-{  
-    DX_WINDBG_trace();
-
+{      
     IDirectDrawImpl *This = (IDirectDrawImpl *)iface;
 
+       DX_WINDBG_trace();
+
     if (freq == NULL)
     {
         return DD_FALSE;
@@ -1068,11 +1077,10 @@ Main_DirectDraw_GetMonitorFrequency(LPDIRECTDRAW7 iface,LPDWORD freq)
  */
 HRESULT WINAPI 
 Main_DirectDraw_GetScanLine(LPDIRECTDRAW7 iface, LPDWORD lpdwScanLine)
-{    
+{              
+    IDirectDrawImpl* This = (IDirectDrawImpl*)iface;
 
        DX_WINDBG_trace();
-       
-    IDirectDrawImpl* This = (IDirectDrawImpl*)iface;
 
     *lpdwScanLine = 0;
 
@@ -1111,10 +1119,10 @@ Main_DirectDraw_GetVerticalBlankStatus(LPDIRECTDRAW7 iface, LPBOOL status)
 HRESULT 
 WINAPI 
 Main_DirectDraw_Initialize (LPDIRECTDRAW7 iface, LPGUID lpGUID)
-{       
-    DX_WINDBG_trace();
-
+{          
     IDirectDrawImpl* This = (IDirectDrawImpl*)iface;
+
+       DX_WINDBG_trace();
        
        if (iface==NULL) 
        {
@@ -1158,10 +1166,12 @@ Main_DirectDraw_SetCooperativeLevel (LPDIRECTDRAW7 iface, HWND hwnd, DWORD coopl
     //   for now we always asume it is the active dirver that should be use.
     // - allow more Flags
 
-    DX_WINDBG_trace();
+    
 
     IDirectDrawImpl* This = (IDirectDrawImpl*)iface;
     DDHAL_SETEXCLUSIVEMODEDATA SetExclusiveMode;
+
+       DX_WINDBG_trace();
     
     // check the parameters
     if ((This->cooperative_level == cooplevel) && ((HWND)This->mDDrawGlobal.lpExclusiveOwner->hWnd  == hwnd))
@@ -1217,7 +1227,7 @@ HRESULT WINAPI
 Main_DirectDraw_SetDisplayMode (LPDIRECTDRAW7 iface, DWORD dwWidth, DWORD dwHeight, 
                                                                 DWORD dwBPP, DWORD dwRefreshRate, DWORD dwFlags)
 {
-    DX_WINDBG_trace();
+   
 
     IDirectDrawImpl* This = (IDirectDrawImpl*)iface;
        BOOL dummy = TRUE;
@@ -1226,6 +1236,8 @@ Main_DirectDraw_SetDisplayMode (LPDIRECTDRAW7 iface, DWORD dwWidth, DWORD dwHeig
     int Width=0;
     int Height=0;
     int BPP=0;
+
+        DX_WINDBG_trace();
        
        /* FIXME check the refresrate if it same if it not same do the mode switch */
        if ((This->mDDrawGlobal.vmiData.dwDisplayHeight == dwHeight) && 
@@ -1289,9 +1301,9 @@ HRESULT WINAPI
 Main_DirectDraw_WaitForVerticalBlank(LPDIRECTDRAW7 iface, DWORD dwFlags,
                                                    HANDLE h)
 {
-    DX_WINDBG_trace();
-       
+       
     IDirectDrawImpl* This = (IDirectDrawImpl*)iface;
+       DX_WINDBG_trace();
     
        if (This->mDdWaitForVerticalBlank.WaitForVerticalBlank == NULL)
        {
@@ -1317,11 +1329,12 @@ Main_DirectDraw_WaitForVerticalBlank(LPDIRECTDRAW7 iface, DWORD dwFlags,
 HRESULT WINAPI 
 Main_DirectDraw_GetAvailableVidMem(LPDIRECTDRAW7 iface, LPDDSCAPS2 ddscaps,
                    LPDWORD total, LPDWORD free)                                               
-{    
-    DX_WINDBG_trace();
+{        
        DDHAL_GETAVAILDRIVERMEMORYDATA  mem;
 
     IDirectDrawImpl* This = (IDirectDrawImpl*)iface;
+
+       DX_WINDBG_trace();
     
        /* Only Hal version exists acodring msdn */
        if (!(This->mDDrawGlobal.lpDDCBtmp->HALDDMiscellaneous.dwFlags & DDHAL_MISCCB32_GETAVAILDRIVERMEMORY))
index 245dfe2..5defc75 100644 (file)
@@ -8,7 +8,7 @@
  *
  */
 
-#include "rosdraw.h"
+#include "../rosdraw.h"
 
 
 /* FIXME adding hal and hel stub 
@@ -60,10 +60,10 @@ Main_DDrawSurface_QueryInterface(LPDIRECTDRAWSURFACE7 iface, REFIID riid,
 
 HRESULT WINAPI Main_DDrawSurface_Blt(LPDIRECTDRAWSURFACE7 iface, LPRECT rdst,
                          LPDIRECTDRAWSURFACE7 src, LPRECT rsrc, DWORD dwFlags, LPDDBLTFX lpbltfx)
-{
-     DX_WINDBG_trace();
-
+{     
         IDirectDrawSurfaceImpl* This = (IDirectDrawSurfaceImpl*)iface;
+
+        DX_WINDBG_trace();
        
 
        if (This->Owner->mCallbacks.HALDDSurface.dwFlags & DDHAL_SURFCB32_BLT) 
@@ -77,11 +77,11 @@ HRESULT WINAPI Main_DDrawSurface_Blt(LPDIRECTDRAWSURFACE7 iface, LPRECT rdst,
 
 HRESULT WINAPI Main_DDrawSurface_Lock (LPDIRECTDRAWSURFACE7 iface, LPRECT prect,
                                LPDDSURFACEDESC2 pDDSD, DWORD flags, HANDLE event)
-{   
-    DX_WINDBG_trace();
-
+{      
        IDirectDrawSurfaceImpl* This = (IDirectDrawSurfaceImpl*)iface;
 
+       DX_WINDBG_trace();
+
     if (event != NULL)
     {
         return DDERR_INVALIDPARAMS; 
@@ -96,11 +96,11 @@ HRESULT WINAPI Main_DDrawSurface_Lock (LPDIRECTDRAWSURFACE7 iface, LPRECT prect,
 }
 
 HRESULT WINAPI Main_DDrawSurface_Unlock (LPDIRECTDRAWSURFACE7 iface, LPRECT pRect)
-{
-    DX_WINDBG_trace();
-
+{    
        IDirectDrawSurfaceImpl* This = (IDirectDrawSurfaceImpl*)iface;
 
+       DX_WINDBG_trace();
+
        if (This->Owner->mCallbacks.HALDDSurface.dwFlags & DDHAL_SURFCB32_LOCK) 
        {
                return Hal_DDrawSurface_Unlock( iface,  pRect);
@@ -113,12 +113,12 @@ HRESULT WINAPI
 Main_DDrawSurface_AddAttachedSurface(LPDIRECTDRAWSURFACE7 iface,
                                          LPDIRECTDRAWSURFACE7 pAttach)
 {
-   DWORD ret;
-   DX_WINDBG_trace();
-
+   DWORD ret;   
    IDirectDrawSurfaceImpl* This = (IDirectDrawSurfaceImpl*)iface;           
    IDirectDrawSurfaceImpl* That = (IDirectDrawSurfaceImpl*)pAttach;
 
+   DX_WINDBG_trace();
+
    if (pAttach==NULL)
    {
       return DDERR_CANNOTATTACHSURFACE;     
@@ -273,11 +273,11 @@ Main_DDrawSurface_EnumOverlayZOrders(LPDIRECTDRAWSURFACE7 iface,
 HRESULT WINAPI
 Main_DDrawSurface_Flip(LPDIRECTDRAWSURFACE7 iface,
                            LPDIRECTDRAWSURFACE7 override, DWORD dwFlags)
-{
-    DX_WINDBG_trace();
-    
+{        
     IDirectDrawSurfaceImpl* This = (IDirectDrawSurfaceImpl*)iface;
 
+       DX_WINDBG_trace();
+
        if (This->Owner->mCallbacks.HALDDSurface.dwFlags & DDHAL_SURFCB32_FLIP) 
        {
                return Hal_DDrawSurface_Flip(iface, override,  dwFlags);
@@ -362,11 +362,11 @@ Main_DDrawSurface_GetAttachedSurface(LPDIRECTDRAWSURFACE7 iface,
 
 HRESULT WINAPI
 Main_DDrawSurface_GetBltStatus(LPDIRECTDRAWSURFACE7 iface, DWORD dwFlags)
-{
-     DX_WINDBG_trace();
-    
+{         
     IDirectDrawSurfaceImpl* This = (IDirectDrawSurfaceImpl*)iface;
 
+       DX_WINDBG_trace();
+
        if (This->Owner->mCallbacks.HALDDSurface.dwFlags & DDHAL_SURFCB32_FLIP) 
        {
                return Hal_DDrawSurface_GetBltStatus( iface,  dwFlags);
@@ -377,11 +377,11 @@ Main_DDrawSurface_GetBltStatus(LPDIRECTDRAWSURFACE7 iface, DWORD dwFlags)
 
 HRESULT WINAPI
 Main_DDrawSurface_GetCaps(LPDIRECTDRAWSURFACE7 iface, LPDDSCAPS2 pCaps)
-{
-    DX_WINDBG_trace();
-
+{    
     IDirectDrawSurfaceImpl* This;
 
+       DX_WINDBG_trace();
+
     if (iface == NULL)
     {
        return DDERR_INVALIDOBJECT;  
@@ -421,10 +421,10 @@ Main_DDrawSurface_GetColorKey(LPDIRECTDRAWSURFACE7 iface, DWORD dwFlags,
 HRESULT WINAPI
 Main_DDrawSurface_GetDC(LPDIRECTDRAWSURFACE7 iface, HDC *phDC)
 {
-    DX_WINDBG_trace();
-
     IDirectDrawSurfaceImpl* This;
 
+       DX_WINDBG_trace();
+
     if (iface == NULL)
     {
        return DDERR_INVALIDOBJECT;  
@@ -527,10 +527,9 @@ HRESULT WINAPI
 Main_DDrawSurface_GetSurfaceDesc(LPDIRECTDRAWSURFACE7 iface,
                                      LPDDSURFACEDESC2 pDDSD)
 {
-    DWORD dwSize;
-    DX_WINDBG_trace();
-
+    DWORD dwSize;    
     IDirectDrawSurfaceImpl *This = (IDirectDrawSurfaceImpl *)iface;
+       DX_WINDBG_trace();
 
     dwSize =  pDDSD->dwSize;
   
@@ -584,10 +583,9 @@ Main_DDrawSurface_PageUnlock(LPDIRECTDRAWSURFACE7 iface, DWORD dwFlags)
 
 HRESULT WINAPI
 Main_DDrawSurface_ReleaseDC(LPDIRECTDRAWSURFACE7 iface, HDC hDC)
-{
-    DX_WINDBG_trace();
-
-     IDirectDrawSurfaceImpl* This;
+{    
+    IDirectDrawSurfaceImpl* This;
+       DX_WINDBG_trace();
 
     if (iface == NULL)
     {
@@ -625,11 +623,11 @@ Main_DDrawSurface_SetClipper (LPDIRECTDRAWSURFACE7 iface,
 HRESULT WINAPI
 Main_DDrawSurface_SetColorKey (LPDIRECTDRAWSURFACE7 iface,
                                   DWORD dwFlags, LPDDCOLORKEY pCKey)
-{
-    DX_WINDBG_trace();
-
+{    
     IDirectDrawSurfaceImpl* This = (IDirectDrawSurfaceImpl*)iface;
 
+       DX_WINDBG_trace();
+
        if (This->Owner->mCallbacks.HALDDSurface.dwFlags & DDHAL_SURFCB32_SETCOLORKEY) 
        {
                return Hal_DDrawSurface_SetColorKey (iface, dwFlags, pCKey);
@@ -693,11 +691,11 @@ Main_DDrawSurface_UpdateOverlay (LPDIRECTDRAWSURFACE7 iface,
 HRESULT WINAPI
 Main_DDrawSurface_UpdateOverlayDisplay (LPDIRECTDRAWSURFACE7 iface,
                                            DWORD dwFlags)
-{
-    DX_WINDBG_trace();
-
+{    
     IDirectDrawSurfaceImpl* This = (IDirectDrawSurfaceImpl*)iface;
 
+       DX_WINDBG_trace();
+
        if (This->Owner->mCallbacks.HALDDSurface.dwFlags & DDHAL_SURFCB32_UPDATEOVERLAY) 
        {
                return Hal_DDrawSurface_UpdateOverlayDisplay ( iface,  dwFlags);
index badab40..5a40619 100644 (file)
 
 ULONG WINAPI
 DirectDrawPalette_Release( LPDIRECTDRAWPALETTE iface)
-{
-    DX_WINDBG_trace();
-
+{    
     IDirectDrawPaletteImpl* This = (IDirectDrawPaletteImpl*)iface;
        ULONG ref=0;
 
+       DX_WINDBG_trace();
+
        if (iface!=NULL)
        {               
                ref = InterlockedDecrement( (PLONG) &This->DDPalette.dwRefCnt);
@@ -39,12 +39,11 @@ DirectDrawPalette_Release( LPDIRECTDRAWPALETTE iface)
 
 ULONG WINAPI 
 DirectDrawPalette_AddRef( LPDIRECTDRAWPALETTE iface) 
-{
-   DX_WINDBG_trace();
-      
-   IDirectDrawPaletteImpl * This = (IDirectDrawPaletteImpl*)iface;
-   
+{         
+   IDirectDrawPaletteImpl * This = (IDirectDrawPaletteImpl*)iface;   
    ULONG ref=0;
+
+   DX_WINDBG_trace();
     
    if (iface!=NULL)
    {
index c919662..15964b7 100644 (file)
@@ -25,6 +25,9 @@ VOID Cleanup(LPDIRECTDRAW7 iface);
 /******** Main Object ********/
 
 /* Public interface */
+VOID WINAPI AcquireDDThreadLock();
+VOID WINAPI ReleaseDDThreadLock();
+
 HRESULT WINAPI  Main_DirectDraw_QueryInterface (LPDIRECTDRAW7 iface, REFIID id, LPVOID *obj);
 ULONG   WINAPI  Main_DirectDraw_AddRef        (LPDIRECTDRAW7 iface);
 ULONG   WINAPI  Main_DirectDraw_Release       (LPDIRECTDRAW7 iface);
@@ -317,6 +320,7 @@ DWORD CALLBACK  HelDdFlipToGDISurface(LPDDHAL_FLIPTOGDISURFACEDATA lpFlipToGDISu
 /*********** Macros ***********/
 
 #define DX_STUB \
+{ \
        static BOOL firstcall = TRUE; \
        if (firstcall) \
        { \
@@ -325,9 +329,11 @@ DWORD CALLBACK  HelDdFlipToGDISurface(LPDDHAL_FLIPTOGDISURFACEDATA lpFlipToGDISu
                OutputDebugStringA(buffer); \
                firstcall = FALSE; \
        } \
+} \
        return DDERR_UNSUPPORTED; 
        
 #define DX_STUB_DD_OK \
+{ \
        static BOOL firstcall = TRUE; \
        if (firstcall) \
        { \
@@ -336,6 +342,7 @@ DWORD CALLBACK  HelDdFlipToGDISurface(LPDDHAL_FLIPTOGDISURFACEDATA lpFlipToGDISu
                OutputDebugStringA(buffer); \
                firstcall = FALSE; \
        } \
+} \
        return DD_OK;   
        
 
index 1538d00..774deb2 100644 (file)
@@ -8,7 +8,7 @@
  *\r
  */\r
 \r
-#include "rosdraw.h"\r
+#include "../rosdraw.h"\r
 \r
 \r
 extern  DDPIXELFORMAT pixelformats[];\r
index fdb860f..ed36a20 100644 (file)
@@ -53,7 +53,19 @@ StartDirectDraw(LPDIRECTDRAW* iface)
     This->mpModeInfos[0].lPitch       = (devmode.dmPelsWidth*devmode.dmBitsPerPel)/8;
     This->mpModeInfos[0].wRefreshRate = (WORD)devmode.dmDisplayFrequency;
    
-    This->hdc = CreateDCW(L"DISPLAY",L"DISPLAY",NULL,NULL);    
+       if ( This->devicetype <3 )
+       {   
+                /* Create HDC for default, hal and hel driver */
+         This->hdc = CreateDCW(L"DISPLAY",L"DISPLAY",NULL,NULL);    
+       }
+       else
+       {
+               /* FIXME : need getting driver from the GUID that have been pass in from
+                          the register. we do not support that yet 
+           */
+               This->hdc = NULL ;
+       }
+
 
     if (This->hdc == NULL)
     {
@@ -222,6 +234,7 @@ HRESULT WINAPI
 StartDirectDrawHal(LPDIRECTDRAW* iface)
 {
     IDirectDrawImpl* This = (IDirectDrawImpl*)iface;
+       DDHAL_GETDRIVERINFODATA DriverInfo;
 
        /* HAL Startup process */
     BOOL newmode = FALSE;      
@@ -354,7 +367,7 @@ StartDirectDrawHal(LPDIRECTDRAW* iface)
   
   //DeleteDC(This->hdc);
 
-   DDHAL_GETDRIVERINFODATA DriverInfo;
+   
    memset(&DriverInfo,0, sizeof(DDHAL_GETDRIVERINFODATA));
    DriverInfo.dwSize = sizeof(DDHAL_GETDRIVERINFODATA);
    DriverInfo.dwContext = This->mDDrawGlobal.hDD; 
@@ -425,15 +438,22 @@ Create_DirectDraw (LPGUID pGUID,
                                   REFIID id, 
                                   BOOL ex)
 {   
-    IDirectDrawImpl* This = (IDirectDrawImpl*)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectDrawImpl));
+    IDirectDrawImpl* This;
 
        DX_WINDBG_trace();
+               
+       //AcquireDDThreadLock();
+
+       This = (IDirectDrawImpl*)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectDrawImpl));
+
 
        if (This == NULL) 
        {
+               ReleaseDDThreadLock();
                return E_OUTOFMEMORY;
        }
 
+
        ZeroMemory(This,sizeof(IDirectDrawImpl));
 
        This->lpVtbl = &DirectDraw7_Vtable;
@@ -442,29 +462,39 @@ Create_DirectDraw (LPGUID pGUID,
        This->lpVtbl_v4 = &DDRAW_IDirectDraw4_VTable;
        
        *pIface = (LPDIRECTDRAW)This;
-
-       This->devicetype = 0;
-
-       if (pGUID == (LPGUID) DDCREATE_HARDWAREONLY)
+                       
+       if (pGUID == 0)
+       {
+               This->devicetype = 0; /* both hal and hel default driver "DISPLAY" */
+       }
+       else if (pGUID == (LPGUID) DDCREATE_HARDWAREONLY)
        {
-               This->devicetype = 1; /* hal only */
+               This->devicetype = 1; /* hal only default driver "DISPLAY" */
        }
 
-       if (pGUID == (LPGUID) DDCREATE_EMULATIONONLY)
+       else if (pGUID == (LPGUID) DDCREATE_EMULATIONONLY)
        {
-           This->devicetype = 2; /* hel only */
+           This->devicetype = 2; /* hel only default driver "DISPLAY" */
        }
+       else
+       {
+               This->devicetype = 3; /* Read from the register which driver it should be */
+       }
+       
         
        if(This->lpVtbl->QueryInterface ((LPDIRECTDRAW7)This, id, (void**)&pIface) != S_OK)
        {
+               ReleaseDDThreadLock();
                return DDERR_INVALIDPARAMS;
        }
 
        if (StartDirectDraw((LPDIRECTDRAW*)This) == DD_OK);
     {
+               //ReleaseDDThreadLock();
                return This->lpVtbl->Initialize ((LPDIRECTDRAW7)This, pGUID);
        }
 
+       //ReleaseDDThreadLock();
        return DDERR_INVALIDPARAMS;
 }
 
index a779f38..576ac59 100644 (file)
@@ -22,7 +22,7 @@
  *
  */
 
-#include "winedraw.h"
+#include "../winedraw.h"
 
 
 static HRESULT WINAPI
index fb8022c..bf7abde 100644 (file)
@@ -22,7 +22,7 @@
  *
  */
 
-#include "winedraw.h"
+#include "../winedraw.h"
 
 #define CONVERT(pdds) COM_INTERFACE_CAST(IDirectDrawSurfaceImpl,       \
                                         IDirectDrawSurface3,           \