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

svn path=/trunk/; revision=24690
This commit is contained in:
Magnus Olsen 2006-11-05 21:19:53 +00:00
parent 556dd785d7
commit 5b6863ed96
16 changed files with 361 additions and 260 deletions

View file

@ -13,11 +13,12 @@
ULONG WINAPI ULONG WINAPI
DirectDrawClipper_Release(LPDIRECTDRAWCLIPPER iface) DirectDrawClipper_Release(LPDIRECTDRAWCLIPPER iface)
{ {
DX_WINDBG_trace();
IDirectDrawClipperImpl* This = (IDirectDrawClipperImpl*)iface; IDirectDrawClipperImpl* This = (IDirectDrawClipperImpl*)iface;
ULONG ref=0; ULONG ref=0;
DX_WINDBG_trace();
if (iface!=NULL) if (iface!=NULL)
{ {
@ -40,12 +41,11 @@ DirectDrawClipper_Release(LPDIRECTDRAWCLIPPER iface)
ULONG WINAPI ULONG WINAPI
DirectDrawClipper_AddRef (LPDIRECTDRAWCLIPPER iface) DirectDrawClipper_AddRef (LPDIRECTDRAWCLIPPER iface)
{ {
DX_WINDBG_trace(); IDirectDrawClipperImpl * This = (IDirectDrawClipperImpl*)iface;
IDirectDrawClipperImpl * This = (IDirectDrawClipperImpl*)iface;
ULONG ref=0; ULONG ref=0;
DX_WINDBG_trace();
if (iface!=NULL) if (iface!=NULL)
{ {

View file

@ -12,12 +12,11 @@
ULONG WINAPI ULONG WINAPI
DirectDrawColorControl_AddRef( LPDIRECTDRAWCOLORCONTROL iface) DirectDrawColorControl_AddRef( LPDIRECTDRAWCOLORCONTROL iface)
{ {
DX_WINDBG_trace(); IDirectDrawColorImpl * This = (IDirectDrawColorImpl*)iface;
IDirectDrawColorImpl * This = (IDirectDrawColorImpl*)iface;
ULONG ref=0; ULONG ref=0;
DX_WINDBG_trace();
if (iface!=NULL) if (iface!=NULL)
{ {
@ -28,12 +27,12 @@ DirectDrawColorControl_AddRef( LPDIRECTDRAWCOLORCONTROL iface)
ULONG WINAPI ULONG WINAPI
DirectDrawColorControl_Release( LPDIRECTDRAWCOLORCONTROL iface) DirectDrawColorControl_Release( LPDIRECTDRAWCOLORCONTROL iface)
{ {
DX_WINDBG_trace();
IDirectDrawColorImpl* This = (IDirectDrawColorImpl*)iface; IDirectDrawColorImpl* This = (IDirectDrawColorImpl*)iface;
ULONG ref=0; ULONG ref=0;
DX_WINDBG_trace();
if (iface!=NULL) if (iface!=NULL)
{ {
ref = InterlockedDecrement( (PLONG) &This->ref); ref = InterlockedDecrement( (PLONG) &This->ref);

View file

@ -1,7 +1,9 @@
EXPORTS EXPORTS
;AcquireDDThreadLock AcquireDDThreadLock@0
;CompleteCreateSysmemSurface
D3DParseUnknownCommand@8 D3DParseUnknownCommand@8
ReleaseDDThreadLock@0
;CompleteCreateSysmemSurface
;DDGetAttachedSurfaceLcl ;DDGetAttachedSurfaceLcl
;DDInternalLock ;DDInternalLock
;DDInternalUnlock ;DDInternalUnlock
@ -19,4 +21,4 @@ DirectDrawEnumerateW@8
;GetOLEThunkData ;GetOLEThunkData
;GetSurfaceFromDC ;GetSurfaceFromDC
;RegisterSpecialCase ;RegisterSpecialCase
;ReleaseDDThreadLock

View file

@ -12,12 +12,12 @@
ULONG WINAPI ULONG WINAPI
DirectDrawGammaControl_AddRef( LPDIRECTDRAWGAMMACONTROL iface) DirectDrawGammaControl_AddRef( LPDIRECTDRAWGAMMACONTROL iface)
{ {
DX_WINDBG_trace();
IDirectDrawGammaImpl * This = (IDirectDrawGammaImpl*)iface; IDirectDrawGammaImpl * This = (IDirectDrawGammaImpl*)iface;
ULONG ref=0; ULONG ref=0;
DX_WINDBG_trace();
if (iface!=NULL) if (iface!=NULL)
{ {
@ -28,11 +28,10 @@ DirectDrawGammaControl_AddRef( LPDIRECTDRAWGAMMACONTROL iface)
ULONG WINAPI ULONG WINAPI
DirectDrawGammaControl_Release( LPDIRECTDRAWGAMMACONTROL iface) DirectDrawGammaControl_Release( LPDIRECTDRAWGAMMACONTROL iface)
{ {
DX_WINDBG_trace();
IDirectDrawGammaImpl* This = (IDirectDrawGammaImpl*)iface; IDirectDrawGammaImpl* This = (IDirectDrawGammaImpl*)iface;
ULONG ref=0; ULONG ref=0;
DX_WINDBG_trace();
if (iface!=NULL) if (iface!=NULL)
{ {

View file

@ -8,7 +8,7 @@
* *
*/ */
#include "rosdraw.h" #include "../rosdraw.h"

View file

@ -15,12 +15,13 @@
ULONG WINAPI ULONG WINAPI
DirectDrawKernel_AddRef ( LPDIRECTDRAWKERNEL iface) DirectDrawKernel_AddRef ( LPDIRECTDRAWKERNEL iface)
{ {
DX_WINDBG_trace();
IDirectDrawKernelImpl * This = (IDirectDrawKernelImpl*)iface; IDirectDrawKernelImpl * This = (IDirectDrawKernelImpl*)iface;
ULONG ref=0; ULONG ref=0;
DX_WINDBG_trace();
if (iface!=NULL) if (iface!=NULL)
{ {
@ -31,12 +32,12 @@ DirectDrawKernel_AddRef ( LPDIRECTDRAWKERNEL iface)
ULONG WINAPI ULONG WINAPI
DirectDrawKernel_Release ( LPDIRECTDRAWKERNEL iface) DirectDrawKernel_Release ( LPDIRECTDRAWKERNEL iface)
{ {
DX_WINDBG_trace();
IDirectDrawKernelImpl* This = (IDirectDrawKernelImpl*)iface; IDirectDrawKernelImpl* This = (IDirectDrawKernelImpl*)iface;
ULONG ref=0; ULONG ref=0;
DX_WINDBG_trace();
if (iface!=NULL) if (iface!=NULL)
{ {
ref = InterlockedDecrement( (PLONG) &This->ref); ref = InterlockedDecrement( (PLONG) &This->ref);
@ -83,12 +84,11 @@ DirectDrawKernel_ReleaseKernelHandle ( LPDIRECTDRAWKERNEL iface)
ULONG WINAPI ULONG WINAPI
DDSurfaceKernel_AddRef ( LPDIRECTDRAWSURFACEKERNEL iface) DDSurfaceKernel_AddRef ( LPDIRECTDRAWSURFACEKERNEL iface)
{ {
DX_WINDBG_trace();
IDirectDrawSurfaceKernelImpl * This = (IDirectDrawSurfaceKernelImpl*)iface; IDirectDrawSurfaceKernelImpl * This = (IDirectDrawSurfaceKernelImpl*)iface;
ULONG ref=0; ULONG ref=0;
DX_WINDBG_trace();
if (iface!=NULL) if (iface!=NULL)
{ {
@ -99,12 +99,12 @@ DDSurfaceKernel_AddRef ( LPDIRECTDRAWSURFACEKERNEL iface)
ULONG WINAPI ULONG WINAPI
DDSurfaceKernel_Release ( LPDIRECTDRAWSURFACEKERNEL iface) DDSurfaceKernel_Release ( LPDIRECTDRAWSURFACEKERNEL iface)
{ {
DX_WINDBG_trace();
IDirectDrawSurfaceKernelImpl* This = (IDirectDrawSurfaceKernelImpl*)iface; IDirectDrawSurfaceKernelImpl* This = (IDirectDrawSurfaceKernelImpl*)iface;
ULONG ref=0; ULONG ref=0;
DX_WINDBG_trace();
if (iface!=NULL) if (iface!=NULL)
{ {
ref = InterlockedDecrement( (PLONG) &This->ref); ref = InterlockedDecrement( (PLONG) &This->ref);

View file

@ -13,6 +13,7 @@
#include "rosdraw.h" #include "rosdraw.h"
#include "d3dhal.h" #include "d3dhal.h"
CRITICAL_SECTION ddcs;
// This function is exported by the dll // This function is exported by the dll
HRESULT WINAPI DirectDrawCreateClipper (DWORD dwFlags, HRESULT WINAPI DirectDrawCreateClipper (DWORD dwFlags,
@ -34,6 +35,13 @@ DirectDrawCreate (LPGUID lpGUID,
LPDIRECTDRAW* lplpDD, LPDIRECTDRAW* lplpDD,
LPUNKNOWN pUnkOuter) LPUNKNOWN pUnkOuter)
{ {
DX_WINDBG_trace();
if (IsBadWritePtr( lplpDD, sizeof( LPVOID )) )
{
return DDERR_INVALIDPARAMS;
}
/* check see if pUnkOuter is null or not */ /* check see if pUnkOuter is null or not */
if (pUnkOuter) if (pUnkOuter)
{ {
@ -55,7 +63,14 @@ DirectDrawCreateEx(LPGUID lpGUID,
LPVOID* lplpDD, LPVOID* lplpDD,
REFIID id, REFIID id,
LPUNKNOWN pUnkOuter) LPUNKNOWN pUnkOuter)
{ {
DX_WINDBG_trace();
if (IsBadWritePtr( lplpDD, sizeof( LPVOID )) )
{
return DDERR_INVALIDPARAMS;
}
/* check see if pUnkOuter is null or not */ /* check see if pUnkOuter is null or not */
if (pUnkOuter) if (pUnkOuter)
{ {
@ -202,5 +217,44 @@ D3DParseUnknownCommand( LPVOID lpCmd,
return retCode; 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;
}

View file

@ -13,17 +13,17 @@
* Status ok * Status ok
*/ */
#include "rosdraw.h" #include "../rosdraw.h"
HRESULT HRESULT
WINAPI WINAPI
Main_DirectDraw_QueryInterface (LPDIRECTDRAW7 iface, Main_DirectDraw_QueryInterface (LPDIRECTDRAW7 iface,
REFIID id, REFIID id,
LPVOID *obj) LPVOID *obj)
{ {
DX_WINDBG_trace();
IDirectDrawImpl* This = (IDirectDrawImpl*)iface; IDirectDrawImpl* This = (IDirectDrawImpl*)iface;
DX_WINDBG_trace();
if (IsEqualGUID(&IID_IDirectDraw7, id)) if (IsEqualGUID(&IID_IDirectDraw7, id))
{ {
@ -57,10 +57,10 @@ Main_DirectDraw_QueryInterface (LPDIRECTDRAW7 iface,
ULONG ULONG
WINAPI WINAPI
Main_DirectDraw_AddRef (LPDIRECTDRAW7 iface) Main_DirectDraw_AddRef (LPDIRECTDRAW7 iface)
{ {
DX_WINDBG_trace();
IDirectDrawImpl* This = (IDirectDrawImpl*)iface; IDirectDrawImpl* This = (IDirectDrawImpl*)iface;
DX_WINDBG_trace();
if (iface!=NULL) if (iface!=NULL)
{ {
@ -82,10 +82,10 @@ Main_DirectDraw_AddRef (LPDIRECTDRAW7 iface)
ULONG ULONG
WINAPI WINAPI
Main_DirectDraw_Release (LPDIRECTDRAW7 iface) Main_DirectDraw_Release (LPDIRECTDRAW7 iface)
{ {
DX_WINDBG_trace();
IDirectDrawImpl* This = (IDirectDrawImpl*)iface; IDirectDrawImpl* This = (IDirectDrawImpl*)iface;
DX_WINDBG_trace();
if (iface!=NULL) if (iface!=NULL)
{ {
@ -139,12 +139,14 @@ Main_DirectDraw_CreateClipper(LPDIRECTDRAW7 iface,
LPDIRECTDRAWCLIPPER *ppClipper, LPDIRECTDRAWCLIPPER *ppClipper,
IUnknown *pUnkOuter) IUnknown *pUnkOuter)
{ {
IDirectDrawClipperImpl* That;
DX_WINDBG_trace(); DX_WINDBG_trace();
if (pUnkOuter!=NULL) if (pUnkOuter!=NULL)
return CLASS_E_NOAGGREGATION; return CLASS_E_NOAGGREGATION;
IDirectDrawClipperImpl* That;
That = (IDirectDrawClipperImpl*)HeapAlloc(GetProcessHeap(), 0, sizeof(IDirectDrawClipperImpl)); That = (IDirectDrawClipperImpl*)HeapAlloc(GetProcessHeap(), 0, sizeof(IDirectDrawClipperImpl));
if (That == NULL) if (That == NULL)
@ -278,7 +280,7 @@ HRESULT internal_CreateNewSurface(IDirectDrawImpl* This, IDirectDrawSurfaceImpl*
HRESULT WINAPI Main_DirectDraw_CreateSurface (LPDIRECTDRAW7 iface, LPDDSURFACEDESC2 pDDSD, HRESULT WINAPI Main_DirectDraw_CreateSurface (LPDIRECTDRAW7 iface, LPDDSURFACEDESC2 pDDSD,
LPDIRECTDRAWSURFACE7 *ppSurf, IUnknown *pUnkOuter) LPDIRECTDRAWSURFACE7 *ppSurf, IUnknown *pUnkOuter)
{ {
DX_WINDBG_trace();
DxSurf *surf; DxSurf *surf;
IDirectDrawImpl* This = (IDirectDrawImpl*)iface; IDirectDrawImpl* This = (IDirectDrawImpl*)iface;
@ -286,6 +288,8 @@ HRESULT WINAPI Main_DirectDraw_CreateSurface (LPDIRECTDRAW7 iface, LPDDSURFACEDE
DEVMODE DevMode; DEVMODE DevMode;
LONG extra_surfaces = 0; LONG extra_surfaces = 0;
DX_WINDBG_trace();
if (pUnkOuter!=NULL) if (pUnkOuter!=NULL)
{ {
return CLASS_E_NOAGGREGATION; return CLASS_E_NOAGGREGATION;
@ -548,7 +552,10 @@ HRESULT WINAPI Main_DirectDraw_CreateSurface (LPDIRECTDRAW7 iface, LPDDSURFACEDE
} }
else if (pDDSD->ddsCaps.dwCaps & DDSCAPS_OVERLAY) 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)); memset(&That->Surf->mddsdOverlay, 0, sizeof(DDSURFACEDESC));
memcpy(&That->Surf->mddsdOverlay, pDDSD, 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.dwFlags = pDDSD->ddpfPixelFormat.dwFlags;
That->Surf->mddsdOverlay.ddpfPixelFormat.dwRGBBitCount = pDDSD->ddpfPixelFormat.dwRGBBitCount; That->Surf->mddsdOverlay.ddpfPixelFormat.dwRGBBitCount = pDDSD->ddpfPixelFormat.dwRGBBitCount;
DDHAL_CANCREATESURFACEDATA mDdCanCreateSurface;
mDdCanCreateSurface.lpDD = &This->mDDrawGlobal; mDdCanCreateSurface.lpDD = &This->mDDrawGlobal;
mDdCanCreateSurface.CanCreateSurface = This->mCallbacks.HALDD.CanCreateSurface; mDdCanCreateSurface.CanCreateSurface = This->mCallbacks.HALDD.CanCreateSurface;
mDdCanCreateSurface.bIsDifferentPixelFormat = TRUE; //isDifferentPixelFormat; mDdCanCreateSurface.bIsDifferentPixelFormat = TRUE; //isDifferentPixelFormat;
@ -608,7 +615,7 @@ HRESULT WINAPI Main_DirectDraw_CreateSurface (LPDIRECTDRAW7 iface, LPDDSURFACEDE
That->Surf->mpOverlayLocals[0] = &That->Surf->mOverlayLocal[0]; That->Surf->mpOverlayLocals[0] = &That->Surf->mOverlayLocal[0];
DDHAL_CREATESURFACEDATA mDdCreateSurface;
mDdCreateSurface.lpDD = &This->mDDrawGlobal; mDdCreateSurface.lpDD = &This->mDDrawGlobal;
mDdCreateSurface.CreateSurface = This->mCallbacks.HALDD.CreateSurface; mDdCreateSurface.CreateSurface = This->mCallbacks.HALDD.CreateSurface;
mDdCreateSurface.lpDDSurfaceDesc = &That->Surf->mddsdOverlay;//pDDSD; mDdCreateSurface.lpDDSurfaceDesc = &That->Surf->mddsdOverlay;//pDDSD;
@ -755,148 +762,148 @@ HRESULT WINAPI Main_DirectDraw_EnumDisplayModes(LPDIRECTDRAW7 iface, DWORD dwFla
DX_STUB_DD_OK; DX_STUB_DD_OK;
IDirectDrawImpl* This = (IDirectDrawImpl*)iface; // IDirectDrawImpl* This = (IDirectDrawImpl*)iface;
DDSURFACEDESC2 desc_callback; // DDSURFACEDESC2 desc_callback;
DEVMODE DevMode; // DEVMODE DevMode;
int iMode=0; // int iMode=0;
//
RtlZeroMemory(&desc_callback, sizeof(DDSURFACEDESC2)); //RtlZeroMemory(&desc_callback, sizeof(DDSURFACEDESC2));
//
desc_callback.dwSize = sizeof(DDSURFACEDESC2); // desc_callback.dwSize = sizeof(DDSURFACEDESC2);
desc_callback.dwFlags = DDSD_HEIGHT|DDSD_WIDTH|DDSD_PIXELFORMAT|DDSD_PITCH; // desc_callback.dwFlags = DDSD_HEIGHT|DDSD_WIDTH|DDSD_PIXELFORMAT|DDSD_PITCH;
if (dwFlags & DDEDM_REFRESHRATES) // if (dwFlags & DDEDM_REFRESHRATES)
{ // {
desc_callback.dwFlags |= DDSD_REFRESHRATE; // desc_callback.dwFlags |= DDSD_REFRESHRATE;
desc_callback.dwRefreshRate = This->mDDrawGlobal.dwMonitorFrequency; // desc_callback.dwRefreshRate = This->mDDrawGlobal.dwMonitorFrequency;
} // }
//
/* FIXME check if the mode are suppretd before sending it back */ // /* FIXME check if the mode are suppretd before sending it back */
memset(&DevMode,0,sizeof(DEVMODE)); //memset(&DevMode,0,sizeof(DEVMODE));
DevMode.dmSize = (WORD)sizeof(DEVMODE); //DevMode.dmSize = (WORD)sizeof(DEVMODE);
DevMode.dmDriverExtra = 0; //DevMode.dmDriverExtra = 0;
while (EnumDisplaySettingsEx(NULL, iMode, &DevMode, 0)) // while (EnumDisplaySettingsEx(NULL, iMode, &DevMode, 0))
{ // {
//
if (pDDSD) // if (pDDSD)
{ // {
if ((pDDSD->dwFlags & DDSD_WIDTH) && (pDDSD->dwWidth != DevMode.dmPelsWidth)) // if ((pDDSD->dwFlags & DDSD_WIDTH) && (pDDSD->dwWidth != DevMode.dmPelsWidth))
continue; // continue;
if ((pDDSD->dwFlags & DDSD_HEIGHT) && (pDDSD->dwHeight != DevMode.dmPelsHeight)) // if ((pDDSD->dwFlags & DDSD_HEIGHT) && (pDDSD->dwHeight != DevMode.dmPelsHeight))
continue; // continue;
if ((pDDSD->dwFlags & DDSD_PIXELFORMAT) && (pDDSD->ddpfPixelFormat.dwFlags & DDPF_RGB) && // if ((pDDSD->dwFlags & DDSD_PIXELFORMAT) && (pDDSD->ddpfPixelFormat.dwFlags & DDPF_RGB) &&
(pDDSD->ddpfPixelFormat.dwRGBBitCount != DevMode.dmBitsPerPel)) // (pDDSD->ddpfPixelFormat.dwRGBBitCount != DevMode.dmBitsPerPel))
continue; // continue;
} // }
//
desc_callback.dwHeight = DevMode.dmPelsHeight; // desc_callback.dwHeight = DevMode.dmPelsHeight;
desc_callback.dwWidth = DevMode.dmPelsWidth; // desc_callback.dwWidth = DevMode.dmPelsWidth;
//
if (DevMode.dmFields & DM_DISPLAYFREQUENCY) // if (DevMode.dmFields & DM_DISPLAYFREQUENCY)
{ // {
desc_callback.dwRefreshRate = DevMode.dmDisplayFrequency; // desc_callback.dwRefreshRate = DevMode.dmDisplayFrequency;
} // }
if (desc_callback.dwRefreshRate == 0) // if (desc_callback.dwRefreshRate == 0)
{ // {
DX_STUB_str("dwRefreshRate = 0, we hard code it to value 60"); // DX_STUB_str("dwRefreshRate = 0, we hard code it to value 60");
desc_callback.dwRefreshRate = 60; /* Maybe the valye should be biger */ // desc_callback.dwRefreshRate = 60; /* Maybe the valye should be biger */
} // }
/* above same as wine */ // /* above same as wine */
if ((pDDSD->dwFlags & DDSD_PIXELFORMAT) && (pDDSD->ddpfPixelFormat.dwFlags & DDPF_RGB) ) // if ((pDDSD->dwFlags & DDSD_PIXELFORMAT) && (pDDSD->ddpfPixelFormat.dwFlags & DDPF_RGB) )
{ // {
switch(DevMode.dmBitsPerPel) // switch(DevMode.dmBitsPerPel)
{ // {
case 8: // case 8:
desc_callback.ddpfPixelFormat.dwSize = sizeof(DDPIXELFORMAT); // desc_callback.ddpfPixelFormat.dwSize = sizeof(DDPIXELFORMAT);
desc_callback.ddpfPixelFormat.dwFlags = DDPF_RGB; // desc_callback.ddpfPixelFormat.dwFlags = DDPF_RGB;
desc_callback.ddpfPixelFormat.dwFourCC = 0; // desc_callback.ddpfPixelFormat.dwFourCC = 0;
desc_callback.ddpfPixelFormat.dwRGBBitCount=8; // desc_callback.ddpfPixelFormat.dwRGBBitCount=8;
/* FIXME right value */ // /* FIXME right value */
desc_callback.ddpfPixelFormat.dwRBitMask = 0xFF0000; /* red bitmask */ // desc_callback.ddpfPixelFormat.dwRBitMask = 0xFF0000; /* red bitmask */
desc_callback.ddpfPixelFormat.dwGBitMask = 0; /* Green bitmask */ // desc_callback.ddpfPixelFormat.dwGBitMask = 0; /* Green bitmask */
desc_callback.ddpfPixelFormat.dwBBitMask = 0; /* Blue bitmask */ // desc_callback.ddpfPixelFormat.dwBBitMask = 0; /* Blue bitmask */
break; // break;
case 15: // case 15:
desc_callback.ddpfPixelFormat.dwSize = sizeof(DDPIXELFORMAT); // desc_callback.ddpfPixelFormat.dwSize = sizeof(DDPIXELFORMAT);
desc_callback.ddpfPixelFormat.dwFlags = DDPF_RGB; // desc_callback.ddpfPixelFormat.dwFlags = DDPF_RGB;
desc_callback.ddpfPixelFormat.dwFourCC = 0; // desc_callback.ddpfPixelFormat.dwFourCC = 0;
desc_callback.ddpfPixelFormat.dwRGBBitCount=15; // desc_callback.ddpfPixelFormat.dwRGBBitCount=15;
/* FIXME right value */ // /* FIXME right value */
desc_callback.ddpfPixelFormat.dwRBitMask = 0x7C00; /* red bitmask */ // desc_callback.ddpfPixelFormat.dwRBitMask = 0x7C00; /* red bitmask */
desc_callback.ddpfPixelFormat.dwGBitMask = 0x3E0; /* Green bitmask */ // desc_callback.ddpfPixelFormat.dwGBitMask = 0x3E0; /* Green bitmask */
desc_callback.ddpfPixelFormat.dwBBitMask = 0x1F; /* Blue bitmask */ // desc_callback.ddpfPixelFormat.dwBBitMask = 0x1F; /* Blue bitmask */
break; // break;
case 16: // case 16:
desc_callback.ddpfPixelFormat.dwSize = sizeof(DDPIXELFORMAT); // desc_callback.ddpfPixelFormat.dwSize = sizeof(DDPIXELFORMAT);
desc_callback.ddpfPixelFormat.dwFlags = DDPF_RGB; // desc_callback.ddpfPixelFormat.dwFlags = DDPF_RGB;
desc_callback.ddpfPixelFormat.dwFourCC = 0; // desc_callback.ddpfPixelFormat.dwFourCC = 0;
desc_callback.ddpfPixelFormat.dwRGBBitCount=16; // desc_callback.ddpfPixelFormat.dwRGBBitCount=16;
/* FIXME right value */ // /* FIXME right value */
desc_callback.ddpfPixelFormat.dwRBitMask = 0xF800; /* red bitmask */ // desc_callback.ddpfPixelFormat.dwRBitMask = 0xF800; /* red bitmask */
desc_callback.ddpfPixelFormat.dwGBitMask = 0x7E0; /* Green bitmask */ // desc_callback.ddpfPixelFormat.dwGBitMask = 0x7E0; /* Green bitmask */
desc_callback.ddpfPixelFormat.dwBBitMask = 0x1F; /* Blue bitmask */ // desc_callback.ddpfPixelFormat.dwBBitMask = 0x1F; /* Blue bitmask */
break; // break;
case 24: // case 24:
desc_callback.ddpfPixelFormat.dwSize = sizeof(DDPIXELFORMAT); // desc_callback.ddpfPixelFormat.dwSize = sizeof(DDPIXELFORMAT);
desc_callback.ddpfPixelFormat.dwFlags = DDPF_RGB; // desc_callback.ddpfPixelFormat.dwFlags = DDPF_RGB;
desc_callback.ddpfPixelFormat.dwFourCC = 0; // desc_callback.ddpfPixelFormat.dwFourCC = 0;
desc_callback.ddpfPixelFormat.dwRGBBitCount=24; // desc_callback.ddpfPixelFormat.dwRGBBitCount=24;
/* FIXME right value */ // /* FIXME right value */
desc_callback.ddpfPixelFormat.dwRBitMask = 0xFF0000; /* red bitmask */ // desc_callback.ddpfPixelFormat.dwRBitMask = 0xFF0000; /* red bitmask */
desc_callback.ddpfPixelFormat.dwGBitMask = 0x00FF00; /* Green bitmask */ // desc_callback.ddpfPixelFormat.dwGBitMask = 0x00FF00; /* Green bitmask */
desc_callback.ddpfPixelFormat.dwBBitMask = 0x0000FF; /* Blue bitmask */ // desc_callback.ddpfPixelFormat.dwBBitMask = 0x0000FF; /* Blue bitmask */
break; // break;
case 32: // case 32:
desc_callback.ddpfPixelFormat.dwSize = sizeof(DDPIXELFORMAT); // desc_callback.ddpfPixelFormat.dwSize = sizeof(DDPIXELFORMAT);
desc_callback.ddpfPixelFormat.dwFlags = DDPF_RGB; // desc_callback.ddpfPixelFormat.dwFlags = DDPF_RGB;
desc_callback.ddpfPixelFormat.dwFourCC = 0; // desc_callback.ddpfPixelFormat.dwFourCC = 0;
desc_callback.ddpfPixelFormat.dwRGBBitCount=8; // desc_callback.ddpfPixelFormat.dwRGBBitCount=8;
/* FIXME right value */ // /* FIXME right value */
desc_callback.ddpfPixelFormat.dwRBitMask = 0xFF0000; /* red bitmask */ // desc_callback.ddpfPixelFormat.dwRBitMask = 0xFF0000; /* red bitmask */
desc_callback.ddpfPixelFormat.dwGBitMask = 0x00FF00; /* Green bitmask */ // desc_callback.ddpfPixelFormat.dwGBitMask = 0x00FF00; /* Green bitmask */
desc_callback.ddpfPixelFormat.dwBBitMask = 0x0000FF; /* Blue bitmask */ // desc_callback.ddpfPixelFormat.dwBBitMask = 0x0000FF; /* Blue bitmask */
break; // break;
default: // default:
break; // break;
} // }
desc_callback.ddsCaps.dwCaps = 0; // desc_callback.ddsCaps.dwCaps = 0;
if (desc_callback.ddpfPixelFormat.dwFlags & DDPF_PALETTEINDEXED8) // if (desc_callback.ddpfPixelFormat.dwFlags & DDPF_PALETTEINDEXED8)
{ // {
/* FIXME srt DDCS Caps flag */ // /* FIXME srt DDCS Caps flag */
desc_callback.ddsCaps.dwCaps |= DDSCAPS_PALETTE; // desc_callback.ddsCaps.dwCaps |= DDSCAPS_PALETTE;
} // }
} // }
//
if (DevMode.dmBitsPerPel==15) // if (DevMode.dmBitsPerPel==15)
{ // {
desc_callback.lPitch = DevMode.dmPelsWidth + (8 - ( DevMode.dmPelsWidth % 8)) % 8; // desc_callback.lPitch = DevMode.dmPelsWidth + (8 - ( DevMode.dmPelsWidth % 8)) % 8;
} // }
else // else
{ // {
desc_callback.lPitch = DevMode.dmPelsWidth * (DevMode.dmBitsPerPel / 8); // desc_callback.lPitch = DevMode.dmPelsWidth * (DevMode.dmBitsPerPel / 8);
desc_callback.lPitch = desc_callback.lPitch + (8 - (desc_callback.lPitch % 8)) % 8; // desc_callback.lPitch = desc_callback.lPitch + (8 - (desc_callback.lPitch % 8)) % 8;
} // }
//
if (callback(&desc_callback, context) == DDENUMRET_CANCEL) // if (callback(&desc_callback, context) == DDENUMRET_CANCEL)
{ // {
return DD_OK; // return DD_OK;
} // }
//
iMode++; // iMode++;
} // }
return DD_OK; // return DD_OK;
} }
/* /*
@ -945,11 +952,13 @@ HRESULT WINAPI
Main_DirectDraw_GetCaps(LPDIRECTDRAW7 iface, LPDDCAPS pDriverCaps, Main_DirectDraw_GetCaps(LPDIRECTDRAW7 iface, LPDDCAPS pDriverCaps,
LPDDCAPS pHELCaps) LPDDCAPS pHELCaps)
{ {
DX_WINDBG_trace();
DDSCAPS2 ddscaps = {0}; DDSCAPS2 ddscaps = {0};
DWORD status = DD_FALSE; DWORD status = DD_FALSE;
IDirectDrawImpl *This = (IDirectDrawImpl *)iface; IDirectDrawImpl *This = (IDirectDrawImpl *)iface;
DX_WINDBG_trace();
if (pDriverCaps != NULL) if (pDriverCaps != NULL)
{ {
@ -984,11 +993,11 @@ Main_DirectDraw_GetCaps(LPDIRECTDRAW7 iface, LPDDCAPS pDriverCaps,
* Status ok * Status ok
*/ */
HRESULT WINAPI Main_DirectDraw_GetDisplayMode(LPDIRECTDRAW7 iface, LPDDSURFACEDESC2 pDDSD) HRESULT WINAPI Main_DirectDraw_GetDisplayMode(LPDIRECTDRAW7 iface, LPDDSURFACEDESC2 pDDSD)
{ {
DX_WINDBG_trace();
IDirectDrawImpl *This = (IDirectDrawImpl *)iface; IDirectDrawImpl *This = (IDirectDrawImpl *)iface;
DX_WINDBG_trace();
if (pDDSD == NULL) if (pDDSD == NULL)
{ {
return DD_FALSE; return DD_FALSE;
@ -1048,11 +1057,11 @@ Main_DirectDraw_GetGDISurface(LPDIRECTDRAW7 iface,
*/ */
HRESULT WINAPI HRESULT WINAPI
Main_DirectDraw_GetMonitorFrequency(LPDIRECTDRAW7 iface,LPDWORD freq) Main_DirectDraw_GetMonitorFrequency(LPDIRECTDRAW7 iface,LPDWORD freq)
{ {
DX_WINDBG_trace();
IDirectDrawImpl *This = (IDirectDrawImpl *)iface; IDirectDrawImpl *This = (IDirectDrawImpl *)iface;
DX_WINDBG_trace();
if (freq == NULL) if (freq == NULL)
{ {
return DD_FALSE; return DD_FALSE;
@ -1068,11 +1077,10 @@ Main_DirectDraw_GetMonitorFrequency(LPDIRECTDRAW7 iface,LPDWORD freq)
*/ */
HRESULT WINAPI HRESULT WINAPI
Main_DirectDraw_GetScanLine(LPDIRECTDRAW7 iface, LPDWORD lpdwScanLine) Main_DirectDraw_GetScanLine(LPDIRECTDRAW7 iface, LPDWORD lpdwScanLine)
{ {
IDirectDrawImpl* This = (IDirectDrawImpl*)iface;
DX_WINDBG_trace(); DX_WINDBG_trace();
IDirectDrawImpl* This = (IDirectDrawImpl*)iface;
*lpdwScanLine = 0; *lpdwScanLine = 0;
@ -1111,10 +1119,10 @@ Main_DirectDraw_GetVerticalBlankStatus(LPDIRECTDRAW7 iface, LPBOOL status)
HRESULT HRESULT
WINAPI WINAPI
Main_DirectDraw_Initialize (LPDIRECTDRAW7 iface, LPGUID lpGUID) Main_DirectDraw_Initialize (LPDIRECTDRAW7 iface, LPGUID lpGUID)
{ {
DX_WINDBG_trace();
IDirectDrawImpl* This = (IDirectDrawImpl*)iface; IDirectDrawImpl* This = (IDirectDrawImpl*)iface;
DX_WINDBG_trace();
if (iface==NULL) 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. // for now we always asume it is the active dirver that should be use.
// - allow more Flags // - allow more Flags
DX_WINDBG_trace();
IDirectDrawImpl* This = (IDirectDrawImpl*)iface; IDirectDrawImpl* This = (IDirectDrawImpl*)iface;
DDHAL_SETEXCLUSIVEMODEDATA SetExclusiveMode; DDHAL_SETEXCLUSIVEMODEDATA SetExclusiveMode;
DX_WINDBG_trace();
// check the parameters // check the parameters
if ((This->cooperative_level == cooplevel) && ((HWND)This->mDDrawGlobal.lpExclusiveOwner->hWnd == hwnd)) 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, Main_DirectDraw_SetDisplayMode (LPDIRECTDRAW7 iface, DWORD dwWidth, DWORD dwHeight,
DWORD dwBPP, DWORD dwRefreshRate, DWORD dwFlags) DWORD dwBPP, DWORD dwRefreshRate, DWORD dwFlags)
{ {
DX_WINDBG_trace();
IDirectDrawImpl* This = (IDirectDrawImpl*)iface; IDirectDrawImpl* This = (IDirectDrawImpl*)iface;
BOOL dummy = TRUE; BOOL dummy = TRUE;
@ -1226,6 +1236,8 @@ Main_DirectDraw_SetDisplayMode (LPDIRECTDRAW7 iface, DWORD dwWidth, DWORD dwHeig
int Width=0; int Width=0;
int Height=0; int Height=0;
int BPP=0; int BPP=0;
DX_WINDBG_trace();
/* FIXME check the refresrate if it same if it not same do the mode switch */ /* FIXME check the refresrate if it same if it not same do the mode switch */
if ((This->mDDrawGlobal.vmiData.dwDisplayHeight == dwHeight) && if ((This->mDDrawGlobal.vmiData.dwDisplayHeight == dwHeight) &&
@ -1289,9 +1301,9 @@ HRESULT WINAPI
Main_DirectDraw_WaitForVerticalBlank(LPDIRECTDRAW7 iface, DWORD dwFlags, Main_DirectDraw_WaitForVerticalBlank(LPDIRECTDRAW7 iface, DWORD dwFlags,
HANDLE h) HANDLE h)
{ {
DX_WINDBG_trace();
IDirectDrawImpl* This = (IDirectDrawImpl*)iface; IDirectDrawImpl* This = (IDirectDrawImpl*)iface;
DX_WINDBG_trace();
if (This->mDdWaitForVerticalBlank.WaitForVerticalBlank == NULL) if (This->mDdWaitForVerticalBlank.WaitForVerticalBlank == NULL)
{ {
@ -1317,11 +1329,12 @@ Main_DirectDraw_WaitForVerticalBlank(LPDIRECTDRAW7 iface, DWORD dwFlags,
HRESULT WINAPI HRESULT WINAPI
Main_DirectDraw_GetAvailableVidMem(LPDIRECTDRAW7 iface, LPDDSCAPS2 ddscaps, Main_DirectDraw_GetAvailableVidMem(LPDIRECTDRAW7 iface, LPDDSCAPS2 ddscaps,
LPDWORD total, LPDWORD free) LPDWORD total, LPDWORD free)
{ {
DX_WINDBG_trace();
DDHAL_GETAVAILDRIVERMEMORYDATA mem; DDHAL_GETAVAILDRIVERMEMORYDATA mem;
IDirectDrawImpl* This = (IDirectDrawImpl*)iface; IDirectDrawImpl* This = (IDirectDrawImpl*)iface;
DX_WINDBG_trace();
/* Only Hal version exists acodring msdn */ /* Only Hal version exists acodring msdn */
if (!(This->mDDrawGlobal.lpDDCBtmp->HALDDMiscellaneous.dwFlags & DDHAL_MISCCB32_GETAVAILDRIVERMEMORY)) if (!(This->mDDrawGlobal.lpDDCBtmp->HALDDMiscellaneous.dwFlags & DDHAL_MISCCB32_GETAVAILDRIVERMEMORY))

View file

@ -8,7 +8,7 @@
* *
*/ */
#include "rosdraw.h" #include "../rosdraw.h"
/* FIXME adding hal and hel stub /* 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, HRESULT WINAPI Main_DDrawSurface_Blt(LPDIRECTDRAWSURFACE7 iface, LPRECT rdst,
LPDIRECTDRAWSURFACE7 src, LPRECT rsrc, DWORD dwFlags, LPDDBLTFX lpbltfx) LPDIRECTDRAWSURFACE7 src, LPRECT rsrc, DWORD dwFlags, LPDDBLTFX lpbltfx)
{ {
DX_WINDBG_trace();
IDirectDrawSurfaceImpl* This = (IDirectDrawSurfaceImpl*)iface; IDirectDrawSurfaceImpl* This = (IDirectDrawSurfaceImpl*)iface;
DX_WINDBG_trace();
if (This->Owner->mCallbacks.HALDDSurface.dwFlags & DDHAL_SURFCB32_BLT) 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, HRESULT WINAPI Main_DDrawSurface_Lock (LPDIRECTDRAWSURFACE7 iface, LPRECT prect,
LPDDSURFACEDESC2 pDDSD, DWORD flags, HANDLE event) LPDDSURFACEDESC2 pDDSD, DWORD flags, HANDLE event)
{ {
DX_WINDBG_trace();
IDirectDrawSurfaceImpl* This = (IDirectDrawSurfaceImpl*)iface; IDirectDrawSurfaceImpl* This = (IDirectDrawSurfaceImpl*)iface;
DX_WINDBG_trace();
if (event != NULL) if (event != NULL)
{ {
return DDERR_INVALIDPARAMS; 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) HRESULT WINAPI Main_DDrawSurface_Unlock (LPDIRECTDRAWSURFACE7 iface, LPRECT pRect)
{ {
DX_WINDBG_trace();
IDirectDrawSurfaceImpl* This = (IDirectDrawSurfaceImpl*)iface; IDirectDrawSurfaceImpl* This = (IDirectDrawSurfaceImpl*)iface;
DX_WINDBG_trace();
if (This->Owner->mCallbacks.HALDDSurface.dwFlags & DDHAL_SURFCB32_LOCK) if (This->Owner->mCallbacks.HALDDSurface.dwFlags & DDHAL_SURFCB32_LOCK)
{ {
return Hal_DDrawSurface_Unlock( iface, pRect); return Hal_DDrawSurface_Unlock( iface, pRect);
@ -113,12 +113,12 @@ HRESULT WINAPI
Main_DDrawSurface_AddAttachedSurface(LPDIRECTDRAWSURFACE7 iface, Main_DDrawSurface_AddAttachedSurface(LPDIRECTDRAWSURFACE7 iface,
LPDIRECTDRAWSURFACE7 pAttach) LPDIRECTDRAWSURFACE7 pAttach)
{ {
DWORD ret; DWORD ret;
DX_WINDBG_trace();
IDirectDrawSurfaceImpl* This = (IDirectDrawSurfaceImpl*)iface; IDirectDrawSurfaceImpl* This = (IDirectDrawSurfaceImpl*)iface;
IDirectDrawSurfaceImpl* That = (IDirectDrawSurfaceImpl*)pAttach; IDirectDrawSurfaceImpl* That = (IDirectDrawSurfaceImpl*)pAttach;
DX_WINDBG_trace();
if (pAttach==NULL) if (pAttach==NULL)
{ {
return DDERR_CANNOTATTACHSURFACE; return DDERR_CANNOTATTACHSURFACE;
@ -273,11 +273,11 @@ Main_DDrawSurface_EnumOverlayZOrders(LPDIRECTDRAWSURFACE7 iface,
HRESULT WINAPI HRESULT WINAPI
Main_DDrawSurface_Flip(LPDIRECTDRAWSURFACE7 iface, Main_DDrawSurface_Flip(LPDIRECTDRAWSURFACE7 iface,
LPDIRECTDRAWSURFACE7 override, DWORD dwFlags) LPDIRECTDRAWSURFACE7 override, DWORD dwFlags)
{ {
DX_WINDBG_trace();
IDirectDrawSurfaceImpl* This = (IDirectDrawSurfaceImpl*)iface; IDirectDrawSurfaceImpl* This = (IDirectDrawSurfaceImpl*)iface;
DX_WINDBG_trace();
if (This->Owner->mCallbacks.HALDDSurface.dwFlags & DDHAL_SURFCB32_FLIP) if (This->Owner->mCallbacks.HALDDSurface.dwFlags & DDHAL_SURFCB32_FLIP)
{ {
return Hal_DDrawSurface_Flip(iface, override, dwFlags); return Hal_DDrawSurface_Flip(iface, override, dwFlags);
@ -362,11 +362,11 @@ Main_DDrawSurface_GetAttachedSurface(LPDIRECTDRAWSURFACE7 iface,
HRESULT WINAPI HRESULT WINAPI
Main_DDrawSurface_GetBltStatus(LPDIRECTDRAWSURFACE7 iface, DWORD dwFlags) Main_DDrawSurface_GetBltStatus(LPDIRECTDRAWSURFACE7 iface, DWORD dwFlags)
{ {
DX_WINDBG_trace();
IDirectDrawSurfaceImpl* This = (IDirectDrawSurfaceImpl*)iface; IDirectDrawSurfaceImpl* This = (IDirectDrawSurfaceImpl*)iface;
DX_WINDBG_trace();
if (This->Owner->mCallbacks.HALDDSurface.dwFlags & DDHAL_SURFCB32_FLIP) if (This->Owner->mCallbacks.HALDDSurface.dwFlags & DDHAL_SURFCB32_FLIP)
{ {
return Hal_DDrawSurface_GetBltStatus( iface, dwFlags); return Hal_DDrawSurface_GetBltStatus( iface, dwFlags);
@ -377,11 +377,11 @@ Main_DDrawSurface_GetBltStatus(LPDIRECTDRAWSURFACE7 iface, DWORD dwFlags)
HRESULT WINAPI HRESULT WINAPI
Main_DDrawSurface_GetCaps(LPDIRECTDRAWSURFACE7 iface, LPDDSCAPS2 pCaps) Main_DDrawSurface_GetCaps(LPDIRECTDRAWSURFACE7 iface, LPDDSCAPS2 pCaps)
{ {
DX_WINDBG_trace();
IDirectDrawSurfaceImpl* This; IDirectDrawSurfaceImpl* This;
DX_WINDBG_trace();
if (iface == NULL) if (iface == NULL)
{ {
return DDERR_INVALIDOBJECT; return DDERR_INVALIDOBJECT;
@ -421,10 +421,10 @@ Main_DDrawSurface_GetColorKey(LPDIRECTDRAWSURFACE7 iface, DWORD dwFlags,
HRESULT WINAPI HRESULT WINAPI
Main_DDrawSurface_GetDC(LPDIRECTDRAWSURFACE7 iface, HDC *phDC) Main_DDrawSurface_GetDC(LPDIRECTDRAWSURFACE7 iface, HDC *phDC)
{ {
DX_WINDBG_trace();
IDirectDrawSurfaceImpl* This; IDirectDrawSurfaceImpl* This;
DX_WINDBG_trace();
if (iface == NULL) if (iface == NULL)
{ {
return DDERR_INVALIDOBJECT; return DDERR_INVALIDOBJECT;
@ -527,10 +527,9 @@ HRESULT WINAPI
Main_DDrawSurface_GetSurfaceDesc(LPDIRECTDRAWSURFACE7 iface, Main_DDrawSurface_GetSurfaceDesc(LPDIRECTDRAWSURFACE7 iface,
LPDDSURFACEDESC2 pDDSD) LPDDSURFACEDESC2 pDDSD)
{ {
DWORD dwSize; DWORD dwSize;
DX_WINDBG_trace();
IDirectDrawSurfaceImpl *This = (IDirectDrawSurfaceImpl *)iface; IDirectDrawSurfaceImpl *This = (IDirectDrawSurfaceImpl *)iface;
DX_WINDBG_trace();
dwSize = pDDSD->dwSize; dwSize = pDDSD->dwSize;
@ -584,10 +583,9 @@ Main_DDrawSurface_PageUnlock(LPDIRECTDRAWSURFACE7 iface, DWORD dwFlags)
HRESULT WINAPI HRESULT WINAPI
Main_DDrawSurface_ReleaseDC(LPDIRECTDRAWSURFACE7 iface, HDC hDC) Main_DDrawSurface_ReleaseDC(LPDIRECTDRAWSURFACE7 iface, HDC hDC)
{ {
DX_WINDBG_trace(); IDirectDrawSurfaceImpl* This;
DX_WINDBG_trace();
IDirectDrawSurfaceImpl* This;
if (iface == NULL) if (iface == NULL)
{ {
@ -625,11 +623,11 @@ Main_DDrawSurface_SetClipper (LPDIRECTDRAWSURFACE7 iface,
HRESULT WINAPI HRESULT WINAPI
Main_DDrawSurface_SetColorKey (LPDIRECTDRAWSURFACE7 iface, Main_DDrawSurface_SetColorKey (LPDIRECTDRAWSURFACE7 iface,
DWORD dwFlags, LPDDCOLORKEY pCKey) DWORD dwFlags, LPDDCOLORKEY pCKey)
{ {
DX_WINDBG_trace();
IDirectDrawSurfaceImpl* This = (IDirectDrawSurfaceImpl*)iface; IDirectDrawSurfaceImpl* This = (IDirectDrawSurfaceImpl*)iface;
DX_WINDBG_trace();
if (This->Owner->mCallbacks.HALDDSurface.dwFlags & DDHAL_SURFCB32_SETCOLORKEY) if (This->Owner->mCallbacks.HALDDSurface.dwFlags & DDHAL_SURFCB32_SETCOLORKEY)
{ {
return Hal_DDrawSurface_SetColorKey (iface, dwFlags, pCKey); return Hal_DDrawSurface_SetColorKey (iface, dwFlags, pCKey);
@ -693,11 +691,11 @@ Main_DDrawSurface_UpdateOverlay (LPDIRECTDRAWSURFACE7 iface,
HRESULT WINAPI HRESULT WINAPI
Main_DDrawSurface_UpdateOverlayDisplay (LPDIRECTDRAWSURFACE7 iface, Main_DDrawSurface_UpdateOverlayDisplay (LPDIRECTDRAWSURFACE7 iface,
DWORD dwFlags) DWORD dwFlags)
{ {
DX_WINDBG_trace();
IDirectDrawSurfaceImpl* This = (IDirectDrawSurfaceImpl*)iface; IDirectDrawSurfaceImpl* This = (IDirectDrawSurfaceImpl*)iface;
DX_WINDBG_trace();
if (This->Owner->mCallbacks.HALDDSurface.dwFlags & DDHAL_SURFCB32_UPDATEOVERLAY) if (This->Owner->mCallbacks.HALDDSurface.dwFlags & DDHAL_SURFCB32_UPDATEOVERLAY)
{ {
return Hal_DDrawSurface_UpdateOverlayDisplay ( iface, dwFlags); return Hal_DDrawSurface_UpdateOverlayDisplay ( iface, dwFlags);

View file

@ -12,12 +12,12 @@
ULONG WINAPI ULONG WINAPI
DirectDrawPalette_Release( LPDIRECTDRAWPALETTE iface) DirectDrawPalette_Release( LPDIRECTDRAWPALETTE iface)
{ {
DX_WINDBG_trace();
IDirectDrawPaletteImpl* This = (IDirectDrawPaletteImpl*)iface; IDirectDrawPaletteImpl* This = (IDirectDrawPaletteImpl*)iface;
ULONG ref=0; ULONG ref=0;
DX_WINDBG_trace();
if (iface!=NULL) if (iface!=NULL)
{ {
ref = InterlockedDecrement( (PLONG) &This->DDPalette.dwRefCnt); ref = InterlockedDecrement( (PLONG) &This->DDPalette.dwRefCnt);
@ -39,12 +39,11 @@ DirectDrawPalette_Release( LPDIRECTDRAWPALETTE iface)
ULONG WINAPI ULONG WINAPI
DirectDrawPalette_AddRef( LPDIRECTDRAWPALETTE iface) DirectDrawPalette_AddRef( LPDIRECTDRAWPALETTE iface)
{ {
DX_WINDBG_trace(); IDirectDrawPaletteImpl * This = (IDirectDrawPaletteImpl*)iface;
IDirectDrawPaletteImpl * This = (IDirectDrawPaletteImpl*)iface;
ULONG ref=0; ULONG ref=0;
DX_WINDBG_trace();
if (iface!=NULL) if (iface!=NULL)
{ {

View file

@ -25,6 +25,9 @@ VOID Cleanup(LPDIRECTDRAW7 iface);
/******** Main Object ********/ /******** Main Object ********/
/* Public interface */ /* Public interface */
VOID WINAPI AcquireDDThreadLock();
VOID WINAPI ReleaseDDThreadLock();
HRESULT WINAPI Main_DirectDraw_QueryInterface (LPDIRECTDRAW7 iface, REFIID id, LPVOID *obj); HRESULT WINAPI Main_DirectDraw_QueryInterface (LPDIRECTDRAW7 iface, REFIID id, LPVOID *obj);
ULONG WINAPI Main_DirectDraw_AddRef (LPDIRECTDRAW7 iface); ULONG WINAPI Main_DirectDraw_AddRef (LPDIRECTDRAW7 iface);
ULONG WINAPI Main_DirectDraw_Release (LPDIRECTDRAW7 iface); ULONG WINAPI Main_DirectDraw_Release (LPDIRECTDRAW7 iface);
@ -317,6 +320,7 @@ DWORD CALLBACK HelDdFlipToGDISurface(LPDDHAL_FLIPTOGDISURFACEDATA lpFlipToGDISu
/*********** Macros ***********/ /*********** Macros ***********/
#define DX_STUB \ #define DX_STUB \
{ \
static BOOL firstcall = TRUE; \ static BOOL firstcall = TRUE; \
if (firstcall) \ if (firstcall) \
{ \ { \
@ -325,9 +329,11 @@ DWORD CALLBACK HelDdFlipToGDISurface(LPDDHAL_FLIPTOGDISURFACEDATA lpFlipToGDISu
OutputDebugStringA(buffer); \ OutputDebugStringA(buffer); \
firstcall = FALSE; \ firstcall = FALSE; \
} \ } \
} \
return DDERR_UNSUPPORTED; return DDERR_UNSUPPORTED;
#define DX_STUB_DD_OK \ #define DX_STUB_DD_OK \
{ \
static BOOL firstcall = TRUE; \ static BOOL firstcall = TRUE; \
if (firstcall) \ if (firstcall) \
{ \ { \
@ -336,6 +342,7 @@ DWORD CALLBACK HelDdFlipToGDISurface(LPDDHAL_FLIPTOGDISURFACEDATA lpFlipToGDISu
OutputDebugStringA(buffer); \ OutputDebugStringA(buffer); \
firstcall = FALSE; \ firstcall = FALSE; \
} \ } \
} \
return DD_OK; return DD_OK;

View file

@ -8,7 +8,7 @@
* *
*/ */
#include "rosdraw.h" #include "../rosdraw.h"
extern DDPIXELFORMAT pixelformats[]; extern DDPIXELFORMAT pixelformats[];

View file

@ -8,7 +8,7 @@
* *
*/ */
#include "rosdraw.h" #include "../rosdraw.h"

View file

@ -53,7 +53,19 @@ StartDirectDraw(LPDIRECTDRAW* iface)
This->mpModeInfos[0].lPitch = (devmode.dmPelsWidth*devmode.dmBitsPerPel)/8; This->mpModeInfos[0].lPitch = (devmode.dmPelsWidth*devmode.dmBitsPerPel)/8;
This->mpModeInfos[0].wRefreshRate = (WORD)devmode.dmDisplayFrequency; 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) if (This->hdc == NULL)
{ {
@ -222,6 +234,7 @@ HRESULT WINAPI
StartDirectDrawHal(LPDIRECTDRAW* iface) StartDirectDrawHal(LPDIRECTDRAW* iface)
{ {
IDirectDrawImpl* This = (IDirectDrawImpl*)iface; IDirectDrawImpl* This = (IDirectDrawImpl*)iface;
DDHAL_GETDRIVERINFODATA DriverInfo;
/* HAL Startup process */ /* HAL Startup process */
BOOL newmode = FALSE; BOOL newmode = FALSE;
@ -354,7 +367,7 @@ StartDirectDrawHal(LPDIRECTDRAW* iface)
//DeleteDC(This->hdc); //DeleteDC(This->hdc);
DDHAL_GETDRIVERINFODATA DriverInfo;
memset(&DriverInfo,0, sizeof(DDHAL_GETDRIVERINFODATA)); memset(&DriverInfo,0, sizeof(DDHAL_GETDRIVERINFODATA));
DriverInfo.dwSize = sizeof(DDHAL_GETDRIVERINFODATA); DriverInfo.dwSize = sizeof(DDHAL_GETDRIVERINFODATA);
DriverInfo.dwContext = This->mDDrawGlobal.hDD; DriverInfo.dwContext = This->mDDrawGlobal.hDD;
@ -425,15 +438,22 @@ Create_DirectDraw (LPGUID pGUID,
REFIID id, REFIID id,
BOOL ex) BOOL ex)
{ {
IDirectDrawImpl* This = (IDirectDrawImpl*)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectDrawImpl)); IDirectDrawImpl* This;
DX_WINDBG_trace(); DX_WINDBG_trace();
//AcquireDDThreadLock();
This = (IDirectDrawImpl*)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectDrawImpl));
if (This == NULL) if (This == NULL)
{ {
ReleaseDDThreadLock();
return E_OUTOFMEMORY; return E_OUTOFMEMORY;
} }
ZeroMemory(This,sizeof(IDirectDrawImpl)); ZeroMemory(This,sizeof(IDirectDrawImpl));
This->lpVtbl = &DirectDraw7_Vtable; This->lpVtbl = &DirectDraw7_Vtable;
@ -442,29 +462,39 @@ Create_DirectDraw (LPGUID pGUID,
This->lpVtbl_v4 = &DDRAW_IDirectDraw4_VTable; This->lpVtbl_v4 = &DDRAW_IDirectDraw4_VTable;
*pIface = (LPDIRECTDRAW)This; *pIface = (LPDIRECTDRAW)This;
This->devicetype = 0; if (pGUID == 0)
if (pGUID == (LPGUID) DDCREATE_HARDWAREONLY)
{ {
This->devicetype = 1; /* hal only */ This->devicetype = 0; /* both hal and hel default driver "DISPLAY" */
}
else if (pGUID == (LPGUID) DDCREATE_HARDWAREONLY)
{
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) if(This->lpVtbl->QueryInterface ((LPDIRECTDRAW7)This, id, (void**)&pIface) != S_OK)
{ {
ReleaseDDThreadLock();
return DDERR_INVALIDPARAMS; return DDERR_INVALIDPARAMS;
} }
if (StartDirectDraw((LPDIRECTDRAW*)This) == DD_OK); if (StartDirectDraw((LPDIRECTDRAW*)This) == DD_OK);
{ {
//ReleaseDDThreadLock();
return This->lpVtbl->Initialize ((LPDIRECTDRAW7)This, pGUID); return This->lpVtbl->Initialize ((LPDIRECTDRAW7)This, pGUID);
} }
//ReleaseDDThreadLock();
return DDERR_INVALIDPARAMS; return DDERR_INVALIDPARAMS;
} }

View file

@ -22,7 +22,7 @@
* *
*/ */
#include "winedraw.h" #include "../winedraw.h"
static HRESULT WINAPI static HRESULT WINAPI

View file

@ -22,7 +22,7 @@
* *
*/ */
#include "winedraw.h" #include "../winedraw.h"
#define CONVERT(pdds) COM_INTERFACE_CAST(IDirectDrawSurfaceImpl, \ #define CONVERT(pdds) COM_INTERFACE_CAST(IDirectDrawSurfaceImpl, \
IDirectDrawSurface3, \ IDirectDrawSurface3, \