#include <d3dhal.h>
#include <ddrawgdi.h>
+
+/* this sturct are not longer in DDK
+ I did recrate it by looking diffent betwin DD_xx struct and _DDHAL strucrt
+ only diffent I found was the global pointer have been change from LPDDRAWI_DDRAWSURFACE_GBL
+ to DD_DIRECTDRAW_GLOBAL
+*/
+
+typedef struct _DDHAL_MAPMEMORYDATA
+{
+ LPDDRAWI_DDRAWSURFACE_GBL lpDD;
+ BOOL bMap;
+ HANDLE hProcess;
+ FLATPTR fpProcess;
+ HRESULT ddRVal;
+} DDHAL_MAPMEMORYDATA;
+
/* own macro to alloc memmory */
#define DxHeapMemAlloc(m) HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, m)
#define DxHeapMemFree(p) HeapFree(GetProcessHeap(), 0, p);
/* HEL stuff */
DWORD HELMemoryAvilable;
-} IDirectDrawImpl;
+ /* internal counter */
+ ULONG ref;
+
+ /* Callbacks info */
+ DDHAL_CREATESURFACEDATA mDdCreateSurface;
+ DDHAL_CANCREATESURFACEDATA mDdCanCreateSurface;
-/******** Surface Object ********/
-typedef struct
-{
+ /* Primarey surface we must reach it from every where */
DDRAWI_DDRAWSURFACE_GBL mPrimaryGlobal;
DDRAWI_DDRAWSURFACE_MORE mPrimaryMore;
DDRAWI_DDRAWSURFACE_LCL mPrimaryLocal;
DDRAWI_DDRAWSURFACE_LCL *mpPrimaryLocals[1];
-
DDRAWI_DDRAWCLIPPER_LCL mPrimaryClipperLocal;
DDRAWI_DDRAWCLIPPER_GBL mPrimaryClipperGlobal;
DDSURFACEDESC mddsdPrimary;
+
+} IDirectDrawImpl;
+
+/******** Surface Object ********/
+typedef struct
+{
+
+ DDRAWI_DDRAWSURFACE_LCL *mpInUseSurfaceLocals[1];
+
+ DDRAWI_DDRAWSURFACE_GBL mSurfGlobal;
+ DDRAWI_DDRAWSURFACE_MORE mSurfMore;
+ DDRAWI_DDRAWSURFACE_LCL mSurfLocal;
+ DDRAWI_DDRAWSURFACE_LCL *mpSurfLocals[1];
+ DDRAWI_DDRAWCLIPPER_LCL mSurfClipperLocal;
+ DDRAWI_DDRAWCLIPPER_GBL mSurfClipperGlobal;
+
+ DDRAWI_DDRAWSURFACE_GBL mOverlayGlobal;
+ DDRAWI_DDRAWSURFACE_LCL mOverlayLocal[6];
+ DDRAWI_DDRAWSURFACE_LCL *mpOverlayLocals[6];
+ DDRAWI_DDRAWSURFACE_MORE mOverlayMore[6];
+
+ DDSURFACEDESC mddsdOverlay;
+
} DxSurf;
typedef struct
IDirectDrawSurface7Vtbl* lpVtbl;
IDirectDrawSurface3Vtbl* lpVtbl_v3;
- IDirectDrawImpl* owner;
+ IDirectDrawImpl* Owner;
DDRAWI_DDRAWSURFACE_GBL Global;
DDRAWI_DDRAWSURFACE_MORE More;
} IDirectDrawPaletteImpl;
+/******** Gamma Object ********/
+
+typedef struct
+{
+ IDirectDrawGammaControlVtbl* lpVtbl;
+ LONG ref;
+ IDirectDrawImpl* Owner;
+ IDirectDrawSurfaceImpl* Surf;
+
+
+} IDirectDrawGammaImpl;
+
+/******** Color Object ********/
+
+typedef struct
+{
+ IDirectDrawColorControlVtbl* lpVtbl;
+ LONG ref;
+ IDirectDrawImpl* Owner;
+ IDirectDrawSurfaceImpl* Surf;
+
+
+} IDirectDrawColorImpl;
+
+/******** Kernel Object ********/
+
+typedef struct
+{
+ IDirectDrawKernelVtbl* lpVtbl;
+ LONG ref;
+ IDirectDrawImpl* Owner;
+ IDirectDrawSurfaceImpl* Surf;
+
+} IDirectDrawKernelImpl;
+
+/******** SurfaceKernel Object ********/
+
+typedef struct
+{
+ IDirectDrawSurfaceKernelVtbl* lpVtbl;
+ LONG ref;
+ IDirectDrawImpl* Owner;
+ IDirectDrawSurfaceImpl* Surf;
+ IDirectDrawKernelImpl * Kernl;
+
+} IDirectDrawSurfaceKernelImpl;
+
+
/*********** VTables ************/
extern IDirectDraw7Vtbl DirectDraw7_Vtable;
extern IDirectDrawClipperVtbl DirectDrawClipper_Vtable;
extern IDirectDrawColorControlVtbl DirectDrawColorControl_Vtable;
extern IDirectDrawGammaControlVtbl DirectDrawGammaControl_Vtable;
+extern IDirectDrawKernelVtbl DirectDrawKernel_Vtable;
+extern IDirectDrawSurfaceKernelVtbl DirectDrawSurfaceKernel_Vtable;
/********* Prototypes **********/
HRESULT Hal_DirectDraw_FlipToGDISurface(LPDIRECTDRAW7 );
HRESULT Hal_DirectDraw_SetDisplayMode (LPDIRECTDRAW7, DWORD, DWORD, DWORD, DWORD, DWORD );
HRESULT Hal_DDrawSurface_Blt(LPDIRECTDRAWSURFACE7, LPRECT, LPDIRECTDRAWSURFACE7, LPRECT, DWORD, LPDDBLTFX );
-HRESULT Hal_DirectDraw_CreateSurface (LPDIRECTDRAW7 iface, LPDDSURFACEDESC2 pDDSD, IDirectDrawSurfaceImpl *ppSurf, IUnknown *pUnkOuter);
HRESULT Hal_DDrawSurface_Lock(LPDIRECTDRAWSURFACE7 iface, LPRECT prect, LPDDSURFACEDESC2 pDDSD, DWORD flags, HANDLE event);
HRESULT Hal_DDrawSurface_Flip(LPDIRECTDRAWSURFACE7 iface, LPDIRECTDRAWSURFACE7 override, DWORD dwFlags);
HRESULT Hal_DDrawSurface_SetColorKey (LPDIRECTDRAWSURFACE7 iface, DWORD dwFlags, LPDDCOLORKEY pCKey);
HRESULT Hel_DirectDraw_FlipToGDISurface(LPDIRECTDRAW7 );
HRESULT Hel_DirectDraw_SetDisplayMode (LPDIRECTDRAW7 , DWORD , DWORD ,DWORD , DWORD , DWORD );
HRESULT Hel_DDrawSurface_Blt(LPDIRECTDRAWSURFACE7, LPRECT, LPDIRECTDRAWSURFACE7, LPRECT, DWORD, LPDDBLTFX );
-HRESULT Hel_DirectDraw_CreateSurface (LPDIRECTDRAW7 iface, LPDDSURFACEDESC2 pDDSD, LPDIRECTDRAWSURFACE7 *ppSurf, IUnknown *pUnkOuter);
HRESULT Hel_DDrawSurface_Lock(LPDIRECTDRAWSURFACE7 iface, LPRECT prect, LPDDSURFACEDESC2 pDDSD, DWORD flags, HANDLE event);
HRESULT Hel_DDrawSurface_SetColorKey (LPDIRECTDRAWSURFACE7 iface, DWORD dwFlags, LPDDCOLORKEY pCKey);
HRESULT Hel_DDrawSurface_Unlock(LPDIRECTDRAWSURFACE7 iface, LPRECT pRect);
HRESULT Hel_DDrawSurface_Flip(LPDIRECTDRAWSURFACE7 iface, LPDIRECTDRAWSURFACE7 override, DWORD dwFlags);
HRESULT Hel_DDrawSurface_UpdateOverlayDisplay (LPDIRECTDRAWSURFACE7 iface, DWORD dwFlags);
+/* HEL CALLBACK */
+DWORD CALLBACK HelDdDestroyDriver(LPDDHAL_DESTROYDRIVERDATA lpDestroyDriver);
+DWORD CALLBACK HelDdCreateSurface(LPDDHAL_CREATESURFACEDATA lpCreateSurface);
+DWORD CALLBACK HelDdSetColorKey(LPDDHAL_SETCOLORKEYDATA lpSetColorKey);
+DWORD CALLBACK HelDdSetMode(LPDDHAL_SETMODEDATA SetMode);
+DWORD CALLBACK HelDdWaitForVerticalBlank(LPDDHAL_WAITFORVERTICALBLANKDATA lpWaitForVerticalBlank);
+DWORD CALLBACK HelDdCanCreateSurface(LPDDHAL_CANCREATESURFACEDATA lpCanCreateSurface);
+DWORD CALLBACK HelDdCreatePalette(LPDDHAL_CREATEPALETTEDATA lpCreatePalette);
+DWORD CALLBACK HelDdGetScanLine(LPDDHAL_GETSCANLINEDATA lpGetScanLine);
+DWORD CALLBACK HelDdSetExclusiveMode(LPDDHAL_SETEXCLUSIVEMODEDATA lpSetExclusiveMode);
+DWORD CALLBACK HelDdFlipToGDISurface(LPDDHAL_FLIPTOGDISURFACEDATA lpFlipToGDISurface);
+
+
/* Setting for HEL should be move to ros special reg key ? */
/* setup how much graphic memory should hel be limit, set it now to 64MB */
firstcall = FALSE; \
} \
return DDERR_UNSUPPORTED;
-
-#define DX_STUB_str(x) \
+
+#define DX_STUB_DD_OK \
static BOOL firstcall = TRUE; \
if (firstcall) \
{ \
char buffer[1024]; \
- sprintf ( buffer, "Function %s %s (%s:%d)\n", __FUNCTION__,x,__FILE__,__LINE__ ); \
+ sprintf ( buffer, "Function %s is not implemented yet (%s:%d)\n", __FUNCTION__,__FILE__,__LINE__ ); \
OutputDebugStringA(buffer); \
firstcall = FALSE; \
- }
+ } \
+ return DD_OK;
+
+
+#define DX_STUB_str(x) \
+ { \
+ char buffer[1024]; \
+ sprintf ( buffer, "Function %s %s (%s:%d)\n", __FUNCTION__,x,__FILE__,__LINE__ ); \
+ OutputDebugStringA(buffer); \
+ }
+
+
+//#define DX_WINDBG_trace()
+
#define DX_WINDBG_trace() \
static BOOL firstcallx = TRUE; \
char buffer[1024]; \
sprintf ( buffer, "Enter Function %s (%s:%d)\n", __FUNCTION__,__FILE__,__LINE__ ); \
OutputDebugStringA(buffer); \
- firstcallx = FALSE; \
+ firstcallx = TRUE; \
}
+
#define DX_WINDBG_trace_res(width,height,bpp) \
static BOOL firstcallxx = TRUE; \
if (firstcallxx) \