From 3bddf8756852f6c1d583e899a9b116fe549e2250 Mon Sep 17 00:00:00 2001 From: Magnus Olsen Date: Sun, 2 Apr 2006 19:08:31 +0000 Subject: [PATCH] Fix regress in GetCaps Thx Christoph_vW seding me the test apps left todo implement Hel Getmemoryavil then we will getting a opengl drv for diablo2 working svn path=/trunk/; revision=21447 --- reactos/dll/directx/ddraw/hal/ddraw_hal.c | 19 +++-- reactos/dll/directx/ddraw/main/ddraw_main.c | 77 ++++++++++++++++++--- reactos/dll/directx/ddraw/rosdraw.h | 2 + 3 files changed, 86 insertions(+), 12 deletions(-) diff --git a/reactos/dll/directx/ddraw/hal/ddraw_hal.c b/reactos/dll/directx/ddraw/hal/ddraw_hal.c index 4840876dbbf..98a016ba7f7 100644 --- a/reactos/dll/directx/ddraw/hal/ddraw_hal.c +++ b/reactos/dll/directx/ddraw/hal/ddraw_hal.c @@ -260,6 +260,17 @@ HRESULT Hal_DirectDraw_Initialize (LPDIRECTDRAW7 iface) DeleteObject(hbmp); //DeleteDC(This->hdc); + DDHAL_GETDRIVERINFODATA DriverInfo; + memset(&DriverInfo,0, sizeof(DDHAL_GETDRIVERINFODATA)); + DriverInfo.dwSize = sizeof(DDHAL_GETDRIVERINFODATA); + DriverInfo.dwContext = This->mDDrawGlobal.hDD; + + /* Get the MiscellaneousCallbacks */ + DriverInfo.guidInfo = GUID_MiscellaneousCallbacks; + DriverInfo.lpvData = &This->mDDrawGlobal.lpDDCBtmp->HALDDMiscellaneous; + DriverInfo.dwExpectedSize = sizeof(DDHAL_DDMISCELLANEOUSCALLBACKS); + This->mHALInfo.GetDriverInfo(&DriverInfo); + return DD_OK; } @@ -337,16 +348,16 @@ Hal_DirectDraw_GetAvailableVidMem(LPDIRECTDRAW7 iface, LPDDSCAPS2 ddscaps, DDHAL_GETAVAILDRIVERMEMORYDATA mem; if (!(This->mDDrawGlobal.lpDDCBtmp->HALDDMiscellaneous.dwFlags & DDHAL_MISCCB32_GETAVAILDRIVERMEMORY)) - { - return DDERR_NODRIVERSUPPORT; + { + return DDERR_NODRIVERSUPPORT; } mem.lpDD = &This->mDDrawGlobal; mem.ddRVal = DDERR_NOTPALETTIZED; if (This->mDDrawGlobal.lpDDCBtmp->HALDDMiscellaneous.GetAvailDriverMemory(&mem) != DDHAL_DRIVER_HANDLED) - { - return DDERR_NODRIVERSUPPORT; + { + return DDERR_NODRIVERSUPPORT; } ddscaps->dwCaps = mem.DDSCaps.dwCaps; diff --git a/reactos/dll/directx/ddraw/main/ddraw_main.c b/reactos/dll/directx/ddraw/main/ddraw_main.c index 1d4f549d9bd..03df22ad623 100644 --- a/reactos/dll/directx/ddraw/main/ddraw_main.c +++ b/reactos/dll/directx/ddraw/main/ddraw_main.c @@ -272,13 +272,63 @@ HRESULT WINAPI Main_DirectDraw_CreateSurface (LPDIRECTDRAW7 iface, LPDDSURFACEDE /* start alloc memory */ if ((pDDSD->ddsCaps.dwCaps & DDSCAPS_VIDEOMEMORY)) { - // Do not alloc system memmory + ///* HAL Code */ + //DDHAL_CANCREATESURFACEDATA CanCreateData; + // memset(&CanCreateData, 0, sizeof(DDHAL_CANCREATESURFACEDATA)); + // CanCreateData.lpDD = &This->mDDrawGlobal; + // CanCreateData.lpDDSurfaceDesc = &mddsdPrimary; + // + // if (mDDrawGlobal.lpDDCBtmp->HALDD.CanCreateSurface(&CanCreateData) == DDHAL_DRIVER_NOTHANDLED) + // { + // return DDERR_INVALIDPARAMS; + // } + + //memset(&mPrimaryGlobal, 0, sizeof(DDRAWI_DDRAWSURFACE_GBL)); + // mPrimaryGlobal.dwGlobalFlags = DDRAWISURFGBL_ISGDISURFACE; + // mPrimaryGlobal.lpDD = &mDDrawGlobal; + // mPrimaryGlobal.lpDDHandle = &mDDrawGlobal; + // mPrimaryGlobal.wWidth = (WORD)mpModeInfos[0].dwWidth; + // mPrimaryGlobal.wHeight = (WORD)mpModeInfos[0].dwHeight; + // mPrimaryGlobal.lPitch = mpModeInfos[0].lPitch; + + //memset(&mPrimaryMore, 0, sizeof(DDRAWI_DDRAWSURFACE_MORE)); + // mPrimaryMore.dwSize = sizeof(DDRAWI_DDRAWSURFACE_MORE); + + // memset(&mPrimaryLocal, 0, sizeof(DDRAWI_DDRAWSURFACE_LCL)); + // mPrimaryLocal.lpGbl = &mPrimaryGlobal; + // mPrimaryLocal.lpSurfMore = &mPrimaryMore; + // mPrimaryLocal.dwProcessId = GetCurrentProcessId(); + // // mPrimaryLocal.dwFlags = DDRAWISURF_PARTOFPRIMARYCHAIN|DDRAWISURF_HASOVERLAYDATA; + // + // mPrimaryLocal.ddsCaps.dwCaps = mddsdPrimary.ddsCaps.dwCaps; + + // mpPrimaryLocals[0] = &mPrimaryLocal; + // + // DDHAL_CREATESURFACEDATA CreateData; + // memset(&CreateData, 0, sizeof(DDHAL_CREATESURFACEDATA)); + // CreateData.lpDD = &mDDrawGlobal; + // CreateData.lpDDSurfaceDesc = &mddsdPrimary; + // CreateData.dwSCnt = 1; + // CreateData.lplpSList = mpPrimaryLocals; + // CreateData.ddRVal = DD_FALSE; + // + // if (mDDrawGlobal.lpDDCBtmp->HALDD.CreateSurface(&CreateData)==DDHAL_DRIVER_NOTHANDLED) + // { + // return DD_FALSE; + // } + + // if(CreateData.ddRVal != DD_OK) + // { + // return CreateData.ddRVal; + // } + // return DD_OK; } else { // Create system mmeory //DDSCAPS_SYSTEMMEMORY + return DD_FALSE; } @@ -295,7 +345,6 @@ HRESULT WINAPI Main_DirectDraw_CreateSurface (LPDIRECTDRAW7 iface, LPDDSURFACEDE // DDSCAPS_OVERLAY create overlay surface // DDSCAPS_TEXTURE - // DDSCAPS_SYSTEMMEMORY // return That->lpVtbl->Initialize (*ppSurf, (LPDIRECTDRAW)iface, pDDSD); return DD_OK; @@ -364,19 +413,30 @@ HRESULT WINAPI Main_DirectDraw_FlipToGDISurface(LPDIRECTDRAW7 iface) HRESULT WINAPI Main_DirectDraw_GetCaps(LPDIRECTDRAW7 iface, LPDDCAPS pDriverCaps, LPDDCAPS pHELCaps) -{ - DWORD status = DD_FALSE; +{ + DDSCAPS2 ddscaps; + DWORD status = DD_FALSE; IDirectDrawImpl *This = (IDirectDrawImpl *)iface; if (pDriverCaps != NULL) - { - RtlCopyMemory(pDriverCaps,&This->mDDrawGlobal.ddCaps,sizeof(DDCORECAPS)); + { + Main_DirectDraw_GetAvailableVidMem(iface, + &ddscaps, + &This->mDDrawGlobal.ddCaps.dwVidMemTotal, + &This->mDDrawGlobal.ddCaps.dwVidMemFree); + + RtlCopyMemory(pDriverCaps,&This->mDDrawGlobal.ddCaps,sizeof(DDCORECAPS)); status = DD_OK; } if (pHELCaps != NULL) - { - RtlCopyMemory(pDriverCaps,&This->mDDrawGlobal.ddHELCaps,sizeof(DDCORECAPS)); + { + Main_DirectDraw_GetAvailableVidMem(iface, + &ddscaps, + &This->mDDrawGlobal.ddHELCaps.dwVidMemTotal, + &This->mDDrawGlobal.ddHELCaps.dwVidMemFree); + + RtlCopyMemory(pDriverCaps,&This->mDDrawGlobal.ddHELCaps,sizeof(DDCORECAPS)); status = DD_OK; } @@ -438,6 +498,7 @@ HRESULT WINAPI Main_DirectDraw_GetAvailableVidMem(LPDIRECTDRAW7 iface, LPDDSCAPS { IDirectDrawImpl* This = (IDirectDrawImpl*)iface; + if (This->mDDrawGlobal.lpDDCBtmp->HALDDMiscellaneous.dwFlags & DDHAL_MISCCB32_GETAVAILDRIVERMEMORY) { return Hal_DirectDraw_GetAvailableVidMem (iface,ddscaps,total,free); diff --git a/reactos/dll/directx/ddraw/rosdraw.h b/reactos/dll/directx/ddraw/rosdraw.h index a9c7dac9e41..4062fde80ce 100644 --- a/reactos/dll/directx/ddraw/rosdraw.h +++ b/reactos/dll/directx/ddraw/rosdraw.h @@ -112,6 +112,8 @@ extern IDirectDrawGammaControlVtbl DirectDrawGammaControl_Vtable; /********* Prototypes **********/ +HRESULT WINAPI Main_DirectDraw_GetAvailableVidMem(LPDIRECTDRAW7 iface, LPDDSCAPS2 ddscaps, LPDWORD total, LPDWORD free); + HRESULT Hal_DirectDraw_Initialize (LPDIRECTDRAW7 ); HRESULT Hal_DirectDraw_SetCooperativeLevel (LPDIRECTDRAW7 ); VOID Hal_DirectDraw_Release (LPDIRECTDRAW7 );