mirror of
https://github.com/ApfelTeeSaft/reactos.git
synced 2026-09-01 19:26:16 +00:00
Remove Hal_DDrawSurface_Initialize, Hel_DDrawSurface_Initialize and make sure DDrawSurface_Initialize act as windows ddraw.dll and wine ddraw.dll
Under devlopin with small changes in Main_DirectDraw_CreateSurface this interface shall split now into one hel and one hal part svn path=/trunk/; revision=21444
This commit is contained in:
@@ -10,115 +10,6 @@
|
||||
|
||||
#include "rosdraw.h"
|
||||
|
||||
HRESULT Hal_DDrawSurface_Initialize (LPDIRECTDRAWSURFACE7 iface, LPDIRECTDRAW pDD, LPDDSURFACEDESC2 pDDSD2)
|
||||
{
|
||||
IDirectDrawSurfaceImpl* This = (IDirectDrawSurfaceImpl*)iface;
|
||||
|
||||
if(sizeof(DDSURFACEDESC2) != pDDSD2->dwSize)
|
||||
return DDERR_UNSUPPORTED;
|
||||
|
||||
This->owner = (IDirectDrawImpl*)pDD;
|
||||
|
||||
/************ fill the discription of our primary surface ***********************/
|
||||
|
||||
memset (&This->ddsd, 0, sizeof(DDSURFACEDESC));
|
||||
This->ddsd.dwSize = sizeof(DDSURFACEDESC);
|
||||
|
||||
RtlCopyMemory(&This->ddsd.ddckCKDestBlt,&pDDSD2->ddckCKDestBlt,sizeof(This->ddsd.ddckCKDestBlt));
|
||||
RtlCopyMemory(&This->ddsd.ddckCKDestOverlay,&pDDSD2->ddckCKDestOverlay,sizeof(This->ddsd.ddckCKDestOverlay));
|
||||
RtlCopyMemory(&This->ddsd.ddckCKSrcBlt,&pDDSD2->ddckCKSrcBlt,sizeof(This->ddsd.ddckCKSrcBlt));
|
||||
RtlCopyMemory(&This->ddsd.ddckCKSrcOverlay,&pDDSD2->ddckCKSrcOverlay,sizeof(This->ddsd.ddckCKSrcOverlay));
|
||||
RtlCopyMemory(&This->ddsd.ddpfPixelFormat,&pDDSD2->ddpfPixelFormat,sizeof(This->ddsd.ddpfPixelFormat));
|
||||
RtlCopyMemory(&This->ddsd.ddsCaps,&pDDSD2->ddsCaps,sizeof(This->ddsd.ddsCaps));
|
||||
|
||||
This->ddsd.dwAlphaBitDepth = pDDSD2->dwAlphaBitDepth;
|
||||
This->ddsd.dwBackBufferCount = pDDSD2->dwBackBufferCount;
|
||||
This->ddsd.dwFlags = pDDSD2->dwFlags;
|
||||
This->ddsd.dwHeight = pDDSD2->dwHeight;
|
||||
This->ddsd.dwLinearSize = pDDSD2->dwLinearSize;
|
||||
This->ddsd.dwMipMapCount = pDDSD2->dwMipMapCount;
|
||||
This->ddsd.dwRefreshRate = pDDSD2->dwRefreshRate;
|
||||
This->ddsd.dwReserved = pDDSD2->dwReserved;
|
||||
This->ddsd.dwWidth = pDDSD2->dwWidth;
|
||||
This->ddsd.lPitch = pDDSD2->lPitch;
|
||||
This->ddsd.lpSurface = pDDSD2->lpSurface;
|
||||
|
||||
/************ Test see if we can Create Surface ***********************/
|
||||
|
||||
if (This->owner->mDDrawGlobal.lpDDCBtmp->HALDD.dwFlags & DDHAL_CB32_CANCREATESURFACE)
|
||||
{
|
||||
/* can the driver create the surface */
|
||||
DDHAL_CANCREATESURFACEDATA CanCreateData;
|
||||
memset(&CanCreateData, 0, sizeof(DDHAL_CANCREATESURFACEDATA));
|
||||
CanCreateData.lpDD = &This->owner->mDDrawGlobal;
|
||||
CanCreateData.lpDDSurfaceDesc = (LPDDSURFACEDESC)&This->ddsd;
|
||||
|
||||
if (This->owner->mDDrawGlobal.lpDDCBtmp->HALDD.CanCreateSurface(&CanCreateData) == DDHAL_DRIVER_NOTHANDLED)
|
||||
return DDERR_INVALIDPARAMS;
|
||||
|
||||
if(CanCreateData.ddRVal != DD_OK)
|
||||
return CanCreateData.ddRVal;
|
||||
}
|
||||
|
||||
/************ Create Surface ***********************/
|
||||
|
||||
/* surface global struct */
|
||||
memset(&This->Global, 0, sizeof(DDRAWI_DDRAWSURFACE_GBL));
|
||||
This->Global.lpDD = &This->owner->mDDrawGlobal;
|
||||
This->Global.wHeight = This->owner->mDDrawGlobal.vmiData.dwDisplayHeight;
|
||||
This->Global.wWidth = This->owner->mDDrawGlobal.vmiData.dwDisplayWidth;
|
||||
This->Global.dwLinearSize = This->owner->mDDrawGlobal.vmiData.lDisplayPitch;
|
||||
if(pDDSD2->ddsCaps.dwCaps & DDSCAPS_PRIMARYSURFACE)
|
||||
This->Global.dwGlobalFlags = DDRAWISURFGBL_ISGDISURFACE;
|
||||
|
||||
/* surface more struct */
|
||||
memset(&This->More, 0, sizeof(DDRAWI_DDRAWSURFACE_MORE));
|
||||
This->More.dwSize = sizeof(DDRAWI_DDRAWSURFACE_MORE);
|
||||
This->More.dmiDDrawReserved7.wWidth = This->Global.wWidth;
|
||||
This->More.dmiDDrawReserved7.wHeight = This->Global.wHeight;
|
||||
//This->More.dmiDDrawReserved7.wBPP = This->owner->Bpp;
|
||||
This->More.dmiDDrawReserved7.wBPP = This->Global.dwLinearSize;
|
||||
|
||||
This->More.dmiDDrawReserved7.wRefreshRate = This->owner->mDDrawGlobal.dwMonitorFrequency;
|
||||
//This->More.dmiDDrawReserved7.wMonitorsAttachedToDesktop = 2;
|
||||
/* ToDo: fill ddsCapsEx */
|
||||
|
||||
/* surface local struct */
|
||||
memset(&This->Local, 0, sizeof(DDRAWI_DDRAWSURFACE_LCL));
|
||||
This->Local.lpGbl = &This->Global;
|
||||
This->Local.lpSurfMore = &This->More;
|
||||
This->Local.ddsCaps.dwCaps = pDDSD2->ddsCaps.dwCaps;
|
||||
This->Local.dwProcessId = This->owner->ExclusiveOwner.dwProcessId;
|
||||
|
||||
/* for the double pointer below */
|
||||
This->pLocal[0] = &This->Local;
|
||||
This->pLocal[1] = NULL;
|
||||
|
||||
/* the parameter struct */
|
||||
DDHAL_CREATESURFACEDATA CreateData;
|
||||
memset(&CreateData, 0, sizeof(DDHAL_CREATESURFACEDATA));
|
||||
CreateData.lpDD = &This->owner->mDDrawGlobal;
|
||||
CreateData.lpDDSurfaceDesc = (LPDDSURFACEDESC)&This->ddsd;
|
||||
CreateData.dwSCnt = 1;
|
||||
CreateData.lplpSList = This->pLocal;
|
||||
asm("int3");
|
||||
CreateData.ddRVal = 1;
|
||||
|
||||
/* this is the call we were waiting for */
|
||||
if(This->owner->mDDrawGlobal.lpDDCBtmp->HALDD.CreateSurface(&CreateData) == DDHAL_DRIVER_NOTHANDLED)
|
||||
return DDERR_INVALIDPARAMS;
|
||||
asm("int3");
|
||||
|
||||
/* FIXME remove the if and debug string*/
|
||||
if(CreateData.ddRVal != DD_OK)
|
||||
return CreateData.ddRVal;
|
||||
|
||||
OutputDebugString(L"This does hit By Ati Readon but not for nvida :( ");
|
||||
OutputDebugString(L"Yet ;)");
|
||||
|
||||
return DD_OK;
|
||||
}
|
||||
|
||||
|
||||
HRESULT Hal_DDrawSurface_Blt(LPDIRECTDRAWSURFACE7 iface, LPRECT rDest,
|
||||
LPDIRECTDRAWSURFACE7 src, LPRECT rSrc, DWORD dwFlags, LPDDBLTFX lpbltfx)
|
||||
|
||||
@@ -43,12 +43,6 @@ Main_DirectDraw_Initialize (LPDIRECTDRAW7 iface, LPGUID lpGUID)
|
||||
RtlCopyMemory(&This->mDDrawGlobal.cObsolete,&"DISPLAY",7);
|
||||
RtlCopyMemory(&This->mDDrawGlobal.cDriverName,&"DISPLAY",7);
|
||||
|
||||
/* Setup the lpExclusiveOwner struct in msdn this struct member is undoc
|
||||
I am using there name to figout which info it should be fild with
|
||||
My hardware drv does not support call to SetExusive so I can not
|
||||
debug it see how it should be fild
|
||||
this part have been move to HAL
|
||||
*/
|
||||
|
||||
|
||||
// call software first
|
||||
@@ -254,8 +248,9 @@ HRESULT WINAPI Main_DirectDraw_CreateSurface (LPDIRECTDRAW7 iface, LPDDSURFACEDE
|
||||
That = (IDirectDrawSurfaceImpl*)HeapAlloc(GetProcessHeap(), 0, sizeof(IDirectDrawSurfaceImpl));
|
||||
|
||||
if (That == NULL)
|
||||
{
|
||||
return E_OUTOFMEMORY;
|
||||
|
||||
}
|
||||
ZeroMemory(That, sizeof(IDirectDrawSurfaceImpl));
|
||||
|
||||
That->lpVtbl = &DirectDrawSurface7_Vtable;
|
||||
@@ -272,7 +267,9 @@ HRESULT WINAPI Main_DirectDraw_CreateSurface (LPDIRECTDRAW7 iface, LPDDSURFACEDE
|
||||
*ppSurf = (LPDIRECTDRAWSURFACE7)That;
|
||||
|
||||
// the real surface object creation
|
||||
return That->lpVtbl->Initialize (*ppSurf, (LPDIRECTDRAW)iface, pDDSD);
|
||||
//return That->lpVtbl->Initialize (*ppSurf, (LPDIRECTDRAW)iface, pDDSD);
|
||||
|
||||
return DD_OK;
|
||||
}
|
||||
|
||||
HRESULT WINAPI Main_DirectDraw_CreateClipper(LPDIRECTDRAW7 iface, DWORD dwFlags,
|
||||
|
||||
@@ -11,18 +11,10 @@
|
||||
#include "rosdraw.h"
|
||||
|
||||
|
||||
|
||||
HRESULT WINAPI Main_DDrawSurface_Initialize (LPDIRECTDRAWSURFACE7 iface, LPDIRECTDRAW pDD, LPDDSURFACEDESC2 pDDSD2)
|
||||
{
|
||||
IDirectDrawSurfaceImpl* This = (IDirectDrawSurfaceImpl*)iface;
|
||||
|
||||
/* Call the Hal CreateSurface */
|
||||
if (This->owner->mDDrawGlobal.lpDDCBtmp->HALDD.dwFlags & DDHAL_CB32_CREATESURFACE)
|
||||
{
|
||||
return Hal_DDrawSurface_Initialize (iface, pDD, pDDSD2);
|
||||
}
|
||||
|
||||
/* Call Hel if Hal of CreateSurface is not supported */
|
||||
return Hel_DDrawSurface_Initialize (iface, pDD, pDDSD2);
|
||||
return DDERR_ALREADYINITIALIZED;
|
||||
}
|
||||
|
||||
ULONG WINAPI Main_DDrawSurface_AddRef(LPDIRECTDRAWSURFACE7 iface)
|
||||
@@ -55,10 +47,10 @@ Main_DDrawSurface_QueryInterface(LPDIRECTDRAWSURFACE7 iface, REFIID riid,
|
||||
HRESULT WINAPI Main_DDrawSurface_Blt(LPDIRECTDRAWSURFACE7 iface, LPRECT rdst,
|
||||
LPDIRECTDRAWSURFACE7 src, LPRECT rsrc, DWORD dwFlags, LPDDBLTFX lpbltfx)
|
||||
{
|
||||
IDirectDrawImpl* This = (IDirectDrawImpl*)iface;
|
||||
IDirectDrawSurfaceImpl* This = (IDirectDrawSurfaceImpl*)iface;
|
||||
|
||||
|
||||
if (This->mDDrawGlobal.lpDDCBtmp->HALDD.dwFlags & DDHAL_CB32_FLIPTOGDISURFACE)
|
||||
if (This->owner->mDDrawGlobal.lpDDCBtmp->HALDD.dwFlags & DDHAL_SURFCB32_BLT)
|
||||
{
|
||||
return Hal_DDrawSurface_Blt( iface, rdst, src, rsrc, dwFlags, lpbltfx);
|
||||
}
|
||||
@@ -69,7 +61,15 @@ HRESULT WINAPI Main_DDrawSurface_Blt(LPDIRECTDRAWSURFACE7 iface, LPRECT rdst,
|
||||
|
||||
HRESULT WINAPI Main_DDrawSurface_Lock (LPDIRECTDRAWSURFACE7 iface, LPRECT prect,
|
||||
LPDDSURFACEDESC2 pDDSD, DWORD flags, HANDLE event)
|
||||
{
|
||||
{ /*
|
||||
IDirectDrawSurfaceImpl* That = (IDirectDrawSurfaceImpl*)iface;
|
||||
|
||||
if (This->mDDrawGlobal.lpDDCBtmp->HALDD.dwFlags & DDHAL_CB32_CREATESURFACE)
|
||||
{
|
||||
return Hal_DDrawSurface_Lock( iiface, LPRECT prect, pDDSD, flags, event);
|
||||
}
|
||||
|
||||
return Hel_DDrawSurface_Lock( iiface, LPRECT prect, pDDSD, flags, event);*/
|
||||
DX_STUB;
|
||||
}
|
||||
|
||||
|
||||
@@ -121,7 +121,7 @@ HRESULT Hal_DirectDraw_GetScanLine(LPDIRECTDRAW7 , LPDWORD );
|
||||
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_DDrawSurface_Initialize (LPDIRECTDRAWSURFACE7 , LPDIRECTDRAW , LPDDSURFACEDESC2 );
|
||||
|
||||
|
||||
|
||||
HRESULT Hel_DirectDraw_Initialize (LPDIRECTDRAW7 );
|
||||
@@ -133,7 +133,7 @@ HRESULT Hel_DirectDraw_GetScanLine(LPDIRECTDRAW7 , LPDWORD );
|
||||
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_DDrawSurface_Initialize (LPDIRECTDRAWSURFACE7 , LPDIRECTDRAW , LPDDSURFACEDESC2 );
|
||||
|
||||
|
||||
/*********** Macros ***********/
|
||||
|
||||
|
||||
@@ -10,10 +10,7 @@
|
||||
|
||||
#include "rosdraw.h"
|
||||
|
||||
HRESULT Hel_DDrawSurface_Initialize (LPDIRECTDRAWSURFACE7 iface, LPDIRECTDRAW pDD, LPDDSURFACEDESC2 pDDSD2)
|
||||
{
|
||||
DX_STUB;
|
||||
}
|
||||
|
||||
|
||||
HRESULT Hel_DDrawSurface_Blt(LPDIRECTDRAWSURFACE7 iface, LPRECT rdst,
|
||||
LPDIRECTDRAWSURFACE7 src, LPRECT rsrc, DWORD dwFlags, LPDDBLTFX lpbltfx)
|
||||
|
||||
Reference in New Issue
Block a user