[ros-diffs] [greatlrd] 24690: 1. Fixed some vc warings and fault 2. Implement AcquireDDThreadLock, ReleaseDDThreadLock (does not working as it should yet) 3. Start making ddraw thread safe 4. Fixed some mirors bugs

greatlrd at svn.reactos.org greatlrd at svn.reactos.org
Sun Nov 5 22:19:54 CET 2006


Author: greatlrd
Date: Mon Nov  6 00:19:53 2006
New Revision: 24690

URL: http://svn.reactos.org/svn/reactos?rev=24690&view=rev
Log:
1. Fixed some vc warings and fault
2. Implement AcquireDDThreadLock, ReleaseDDThreadLock (does not working as it should yet)
3. Start making ddraw thread safe
4. Fixed some mirors bugs

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

Modified: trunk/reactos/dll/directx/ddraw/clipper.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/directx/ddraw/clipper.c?rev=24690&r1=24689&r2=24690&view=diff
==============================================================================
--- trunk/reactos/dll/directx/ddraw/clipper.c (original)
+++ trunk/reactos/dll/directx/ddraw/clipper.c Mon Nov  6 00:19:53 2006
@@ -13,11 +13,12 @@
 
 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 @@
 
 ULONG WINAPI 
 DirectDrawClipper_AddRef (LPDIRECTDRAWCLIPPER iface)
-{    
+{            
+   IDirectDrawClipperImpl * This = (IDirectDrawClipperImpl*)iface;   
+   ULONG ref=0;
+
    DX_WINDBG_trace();
-      
-   IDirectDrawClipperImpl * This = (IDirectDrawClipperImpl*)iface;
-   
-   ULONG ref=0;
     
    if (iface!=NULL)
    {

Modified: trunk/reactos/dll/directx/ddraw/color.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/directx/ddraw/color.c?rev=24690&r1=24689&r2=24690&view=diff
==============================================================================
--- trunk/reactos/dll/directx/ddraw/color.c (original)
+++ trunk/reactos/dll/directx/ddraw/color.c Mon Nov  6 00:19:53 2006
@@ -12,12 +12,11 @@
 
 ULONG WINAPI
 DirectDrawColorControl_AddRef( LPDIRECTDRAWCOLORCONTROL iface)
-{   
+{           
+   IDirectDrawColorImpl * This = (IDirectDrawColorImpl*)iface;   
+   ULONG ref=0;
+
    DX_WINDBG_trace();
-      
-   IDirectDrawColorImpl * This = (IDirectDrawColorImpl*)iface;
-   
-   ULONG ref=0;
     
    if (iface!=NULL)
    {
@@ -28,11 +27,11 @@
 
 ULONG WINAPI
 DirectDrawColorControl_Release( LPDIRECTDRAWCOLORCONTROL iface)
-{
-    DX_WINDBG_trace();
-
+{    
     IDirectDrawColorImpl* This = (IDirectDrawColorImpl*)iface;
 	ULONG ref=0;
+
+	DX_WINDBG_trace();
 
 	if (iface!=NULL)
 	{	  	

Modified: trunk/reactos/dll/directx/ddraw/ddraw.def
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/directx/ddraw/ddraw.def?rev=24690&r1=24689&r2=24690&view=diff
==============================================================================
--- trunk/reactos/dll/directx/ddraw/ddraw.def (original)
+++ trunk/reactos/dll/directx/ddraw/ddraw.def Mon Nov  6 00:19:53 2006
@@ -1,7 +1,9 @@
 EXPORTS
-;AcquireDDThreadLock
+AcquireDDThreadLock at 0
+D3DParseUnknownCommand at 8
+ReleaseDDThreadLock at 0
+
 ;CompleteCreateSysmemSurface
-D3DParseUnknownCommand at 8
 ;DDGetAttachedSurfaceLcl
 ;DDInternalLock
 ;DDInternalUnlock
@@ -19,4 +21,4 @@
 ;GetOLEThunkData
 ;GetSurfaceFromDC
 ;RegisterSpecialCase
-;ReleaseDDThreadLock
+

Modified: trunk/reactos/dll/directx/ddraw/gamma.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/directx/ddraw/gamma.c?rev=24690&r1=24689&r2=24690&view=diff
==============================================================================
--- trunk/reactos/dll/directx/ddraw/gamma.c (original)
+++ trunk/reactos/dll/directx/ddraw/gamma.c Mon Nov  6 00:19:53 2006
@@ -12,12 +12,12 @@
 
 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 @@
 
 ULONG WINAPI
 DirectDrawGammaControl_Release( LPDIRECTDRAWGAMMACONTROL iface)
-{
-    DX_WINDBG_trace();
-
+{    
     IDirectDrawGammaImpl* This = (IDirectDrawGammaImpl*)iface;
 	ULONG ref=0;
+	DX_WINDBG_trace();
 
 	if (iface!=NULL)
 	{	  	

Modified: trunk/reactos/dll/directx/ddraw/hal/surface_hal.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/directx/ddraw/hal/surface_hal.c?rev=24690&r1=24689&r2=24690&view=diff
==============================================================================
--- trunk/reactos/dll/directx/ddraw/hal/surface_hal.c (original)
+++ trunk/reactos/dll/directx/ddraw/hal/surface_hal.c Mon Nov  6 00:19:53 2006
@@ -8,7 +8,7 @@
  *
  */
 
-#include "rosdraw.h"
+#include "../rosdraw.h"
 
 
 

Modified: trunk/reactos/dll/directx/ddraw/kernel.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/directx/ddraw/kernel.c?rev=24690&r1=24689&r2=24690&view=diff
==============================================================================
--- trunk/reactos/dll/directx/ddraw/kernel.c (original)
+++ trunk/reactos/dll/directx/ddraw/kernel.c Mon Nov  6 00:19:53 2006
@@ -15,12 +15,13 @@
 
 ULONG WINAPI 
 DirectDrawKernel_AddRef ( LPDIRECTDRAWKERNEL iface)
-{
-   DX_WINDBG_trace();
+{   
       
    IDirectDrawKernelImpl * This = (IDirectDrawKernelImpl*)iface;
    
    ULONG ref=0;
+
+   DX_WINDBG_trace();
     
    if (iface!=NULL)
    {
@@ -31,11 +32,11 @@
 
 ULONG WINAPI 
 DirectDrawKernel_Release ( LPDIRECTDRAWKERNEL iface)
-{
-    DX_WINDBG_trace();
-
+{    
     IDirectDrawKernelImpl* This = (IDirectDrawKernelImpl*)iface;
 	ULONG ref=0;
+
+	DX_WINDBG_trace();
 
 	if (iface!=NULL)
 	{	  	
@@ -83,12 +84,11 @@
 
 ULONG WINAPI 
 DDSurfaceKernel_AddRef ( LPDIRECTDRAWSURFACEKERNEL iface)
-{
-   DX_WINDBG_trace();
-      
+{         
    IDirectDrawSurfaceKernelImpl * This = (IDirectDrawSurfaceKernelImpl*)iface;
    
    ULONG ref=0;
+   DX_WINDBG_trace();
     
    if (iface!=NULL)
    {
@@ -99,11 +99,11 @@
 
 ULONG WINAPI 
 DDSurfaceKernel_Release ( LPDIRECTDRAWSURFACEKERNEL iface)
-{
-    DX_WINDBG_trace();
-
+{    
     IDirectDrawSurfaceKernelImpl* This = (IDirectDrawSurfaceKernelImpl*)iface;
 	ULONG ref=0;
+
+	DX_WINDBG_trace();
 
 	if (iface!=NULL)
 	{	  	

Modified: trunk/reactos/dll/directx/ddraw/main.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/directx/ddraw/main.c?rev=24690&r1=24689&r2=24690&view=diff
==============================================================================
--- trunk/reactos/dll/directx/ddraw/main.c (original)
+++ trunk/reactos/dll/directx/ddraw/main.c Mon Nov  6 00:19:53 2006
@@ -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 @@
 				  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 @@
 				   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 @@
     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;
+
+}

Modified: trunk/reactos/dll/directx/ddraw/main/ddraw_main.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/directx/ddraw/main/ddraw_main.c?rev=24690&r1=24689&r2=24690&view=diff
==============================================================================
--- trunk/reactos/dll/directx/ddraw/main/ddraw_main.c (original)
+++ trunk/reactos/dll/directx/ddraw/main/ddraw_main.c Mon Nov  6 00:19:53 2006
@@ -13,17 +13,17 @@
  * 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 @@
 ULONG
 WINAPI 
 Main_DirectDraw_AddRef (LPDIRECTDRAW7 iface) 
-{
-    DX_WINDBG_trace();
-
+{    
     IDirectDrawImpl* This = (IDirectDrawImpl*)iface;
+
+	DX_WINDBG_trace();
 	   
 	if (iface!=NULL)
 	{
@@ -82,10 +82,10 @@
 ULONG 
 WINAPI 
 Main_DirectDraw_Release (LPDIRECTDRAW7 iface) 
-{
-    DX_WINDBG_trace();
-
+{    
     IDirectDrawImpl* This = (IDirectDrawImpl*)iface;
+
+	DX_WINDBG_trace();
 	
 	if (iface!=NULL)
 	{	  	
@@ -139,12 +139,14 @@
                               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,13 +280,15 @@
 HRESULT WINAPI Main_DirectDraw_CreateSurface (LPDIRECTDRAW7 iface, LPDDSURFACEDESC2 pDDSD,
                                             LPDIRECTDRAWSURFACE7 *ppSurf, IUnknown *pUnkOuter) 
 {
-    DX_WINDBG_trace();
+    
 
     DxSurf *surf;
 	IDirectDrawImpl* This = (IDirectDrawImpl*)iface;
     IDirectDrawSurfaceImpl* That; 
 	DEVMODE DevMode; 
 	LONG extra_surfaces = 0;
+
+	DX_WINDBG_trace();
 
     if (pUnkOuter!=NULL) 
 	{
@@ -548,7 +552,10 @@
     }
         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 @@
             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 @@
             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 @@
      
 	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 @@
 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,10 +993,10 @@
  * Status ok
  */
 HRESULT WINAPI Main_DirectDraw_GetDisplayMode(LPDIRECTDRAW7 iface, LPDDSURFACEDESC2 pDDSD) 
-{   
-    DX_WINDBG_trace();
-
+{       
     IDirectDrawImpl *This = (IDirectDrawImpl *)iface;
+
+	DX_WINDBG_trace();
 
     if (pDDSD == NULL)
     {
@@ -1048,10 +1057,10 @@
  */
 HRESULT WINAPI 
 Main_DirectDraw_GetMonitorFrequency(LPDIRECTDRAW7 iface,LPDWORD freq)
-{  
-    DX_WINDBG_trace();
-
+{      
     IDirectDrawImpl *This = (IDirectDrawImpl *)iface;
+
+	DX_WINDBG_trace();
 
     if (freq == NULL)
     {
@@ -1068,11 +1077,10 @@
  */
 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 @@
 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 @@
     //   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 @@
 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 @@
     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 @@
 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 @@
 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))

Modified: trunk/reactos/dll/directx/ddraw/main/surface_main.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/directx/ddraw/main/surface_main.c?rev=24690&r1=24689&r2=24690&view=diff
==============================================================================
--- trunk/reactos/dll/directx/ddraw/main/surface_main.c (original)
+++ trunk/reactos/dll/directx/ddraw/main/surface_main.c Mon Nov  6 00:19:53 2006
@@ -8,7 +8,7 @@
  *
  */
 
-#include "rosdraw.h"
+#include "../rosdraw.h"
 
 
 /* FIXME adding hal and hel stub 
@@ -60,10 +60,10 @@
 
 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_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,10 +96,10 @@
 }
 
 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) 
 	{
@@ -113,11 +113,11 @@
 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)
    {
@@ -273,10 +273,10 @@
 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) 
 	{
@@ -362,11 +362,11 @@
 
 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,10 +377,10 @@
 
 HRESULT WINAPI
 Main_DDrawSurface_GetCaps(LPDIRECTDRAWSURFACE7 iface, LPDDSCAPS2 pCaps)
-{
-    DX_WINDBG_trace();
-
+{    
     IDirectDrawSurfaceImpl* This;
+
+	DX_WINDBG_trace();
 
     if (iface == NULL)
     {
@@ -421,9 +421,9 @@
 HRESULT WINAPI
 Main_DDrawSurface_GetDC(LPDIRECTDRAWSURFACE7 iface, HDC *phDC)
 {
-    DX_WINDBG_trace();
-
     IDirectDrawSurfaceImpl* This;
+
+	DX_WINDBG_trace();
 
     if (iface == NULL)
     {
@@ -527,10 +527,9 @@
 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 @@
 
 HRESULT WINAPI
 Main_DDrawSurface_ReleaseDC(LPDIRECTDRAWSURFACE7 iface, HDC hDC)
-{
-    DX_WINDBG_trace();
-
-     IDirectDrawSurfaceImpl* This;
+{    
+    IDirectDrawSurfaceImpl* This;
+	DX_WINDBG_trace();
 
     if (iface == NULL)
     {
@@ -625,10 +623,10 @@
 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) 
 	{
@@ -693,10 +691,10 @@
 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) 
 	{

Modified: trunk/reactos/dll/directx/ddraw/palette.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/directx/ddraw/palette.c?rev=24690&r1=24689&r2=24690&view=diff
==============================================================================
--- trunk/reactos/dll/directx/ddraw/palette.c (original)
+++ trunk/reactos/dll/directx/ddraw/palette.c Mon Nov  6 00:19:53 2006
@@ -12,11 +12,11 @@
 
 ULONG WINAPI
 DirectDrawPalette_Release( LPDIRECTDRAWPALETTE iface)
-{
-    DX_WINDBG_trace();
-
+{    
     IDirectDrawPaletteImpl* This = (IDirectDrawPaletteImpl*)iface;
 	ULONG ref=0;
+
+	DX_WINDBG_trace();
 
 	if (iface!=NULL)
 	{	  	
@@ -39,12 +39,11 @@
 
 ULONG WINAPI 
 DirectDrawPalette_AddRef( LPDIRECTDRAWPALETTE iface) 
-{
+{         
+   IDirectDrawPaletteImpl * This = (IDirectDrawPaletteImpl*)iface;   
+   ULONG ref=0;
+
    DX_WINDBG_trace();
-      
-   IDirectDrawPaletteImpl * This = (IDirectDrawPaletteImpl*)iface;
-   
-   ULONG ref=0;
     
    if (iface!=NULL)
    {

Modified: trunk/reactos/dll/directx/ddraw/rosdraw.h
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/directx/ddraw/rosdraw.h?rev=24690&r1=24689&r2=24690&view=diff
==============================================================================
--- trunk/reactos/dll/directx/ddraw/rosdraw.h (original)
+++ trunk/reactos/dll/directx/ddraw/rosdraw.h Mon Nov  6 00:19:53 2006
@@ -25,6 +25,9 @@
 /******** 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 @@
 /*********** Macros ***********/
 
 #define DX_STUB \
+{ \
 	static BOOL firstcall = TRUE; \
 	if (firstcall) \
 	{ \
@@ -325,9 +329,11 @@
 		OutputDebugStringA(buffer); \
 		firstcall = FALSE; \
 	} \
+} \
 	return DDERR_UNSUPPORTED; 
 	
 #define DX_STUB_DD_OK \
+{ \
 	static BOOL firstcall = TRUE; \
 	if (firstcall) \
 	{ \
@@ -336,6 +342,7 @@
 		OutputDebugStringA(buffer); \
 		firstcall = FALSE; \
 	} \
+} \
 	return DD_OK; 	
 	
 

Modified: trunk/reactos/dll/directx/ddraw/soft/surface_callbacks_hel.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/directx/ddraw/soft/surface_callbacks_hel.c?rev=24690&r1=24689&r2=24690&view=diff
==============================================================================
--- trunk/reactos/dll/directx/ddraw/soft/surface_callbacks_hel.c (original)
+++ trunk/reactos/dll/directx/ddraw/soft/surface_callbacks_hel.c Mon Nov  6 00:19:53 2006
@@ -8,7 +8,7 @@
  *
  */
 
-#include "rosdraw.h"
+#include "../rosdraw.h"
 
 
 extern  DDPIXELFORMAT pixelformats[];

Modified: trunk/reactos/dll/directx/ddraw/soft/surface_hel.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/directx/ddraw/soft/surface_hel.c?rev=24690&r1=24689&r2=24690&view=diff
==============================================================================
--- trunk/reactos/dll/directx/ddraw/soft/surface_hel.c (original)
+++ trunk/reactos/dll/directx/ddraw/soft/surface_hel.c Mon Nov  6 00:19:53 2006
@@ -8,7 +8,7 @@
  *
  */
 
-#include "rosdraw.h"
+#include "../rosdraw.h"
 
 
 

Modified: trunk/reactos/dll/directx/ddraw/startup.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/directx/ddraw/startup.c?rev=24690&r1=24689&r2=24690&view=diff
==============================================================================
--- trunk/reactos/dll/directx/ddraw/startup.c (original)
+++ trunk/reactos/dll/directx/ddraw/startup.c Mon Nov  6 00:19:53 2006
@@ -53,7 +53,19 @@
     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 @@
 StartDirectDrawHal(LPDIRECTDRAW* iface)
 {
     IDirectDrawImpl* This = (IDirectDrawImpl*)iface;
+	DDHAL_GETDRIVERINFODATA DriverInfo;
 
 	/* HAL Startup process */
     BOOL newmode = FALSE;	
@@ -354,7 +367,7 @@
   
   //DeleteDC(This->hdc);
 
-   DDHAL_GETDRIVERINFODATA DriverInfo;
+   
    memset(&DriverInfo,0, sizeof(DDHAL_GETDRIVERINFODATA));
    DriverInfo.dwSize = sizeof(DDHAL_GETDRIVERINFODATA);
    DriverInfo.dwContext = This->mDDrawGlobal.hDD; 
@@ -425,14 +438,21 @@
 				   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));
 
@@ -442,29 +462,39 @@
 	This->lpVtbl_v4 = &DDRAW_IDirectDraw4_VTable;
 	
 	*pIface = (LPDIRECTDRAW)This;
-
-	This->devicetype = 0;
-
-	if (pGUID == (LPGUID) DDCREATE_HARDWAREONLY)
-	{
-		This->devicetype = 1; /* hal only */
-	}
-
-	if (pGUID == (LPGUID) DDCREATE_EMULATIONONLY)
-	{
-	    This->devicetype = 2; /* hel only */
-	}
+			
+	if (pGUID == 0)
+	{
+		This->devicetype = 0; /* both hal and hel default driver "DISPLAY" */
+	}
+	else if (pGUID == (LPGUID) DDCREATE_HARDWAREONLY)
+	{
+		This->devicetype = 1; /* hal only default driver "DISPLAY" */
+	}
+
+	else if (pGUID == (LPGUID) DDCREATE_EMULATIONONLY)
+	{
+	    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;
 }
 

Modified: trunk/reactos/dll/directx/ddraw/thunks/ddraw_thunk.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/directx/ddraw/thunks/ddraw_thunk.c?rev=24690&r1=24689&r2=24690&view=diff
==============================================================================
--- trunk/reactos/dll/directx/ddraw/thunks/ddraw_thunk.c (original)
+++ trunk/reactos/dll/directx/ddraw/thunks/ddraw_thunk.c Mon Nov  6 00:19:53 2006
@@ -22,7 +22,7 @@
  *
  */
 
-#include "winedraw.h"
+#include "../winedraw.h"
 
 
 static HRESULT WINAPI

Modified: trunk/reactos/dll/directx/ddraw/thunks/surface_thunk.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/directx/ddraw/thunks/surface_thunk.c?rev=24690&r1=24689&r2=24690&view=diff
==============================================================================
--- trunk/reactos/dll/directx/ddraw/thunks/surface_thunk.c (original)
+++ trunk/reactos/dll/directx/ddraw/thunks/surface_thunk.c Mon Nov  6 00:19:53 2006
@@ -22,7 +22,7 @@
  *
  */
 
-#include "winedraw.h"
+#include "../winedraw.h"
 
 #define CONVERT(pdds) COM_INTERFACE_CAST(IDirectDrawSurfaceImpl,	\
 					 IDirectDrawSurface3,		\




More information about the Ros-diffs mailing list