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... ============================================================================== --- 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?r... ============================================================================== --- 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... ============================================================================== --- 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@0 +D3DParseUnknownCommand@8 +ReleaseDDThreadLock@0 + ;CompleteCreateSysmemSurface -D3DParseUnknownCommand@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?r... ============================================================================== --- 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/surfa... ============================================================================== --- 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?... ============================================================================== --- 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?re... ============================================================================== --- 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/ddra... ============================================================================== --- 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/surf... ============================================================================== --- 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... ============================================================================== --- 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... ============================================================================== --- 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/surf... ============================================================================== --- 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/surf... ============================================================================== --- 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... ============================================================================== --- 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/dd... ============================================================================== --- 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/su... ============================================================================== --- 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, \