split up CreateSurface to hal and hel interface
Modified: trunk/reactos/lib/ddraw/hal/surface_hal.c
Modified: trunk/reactos/lib/ddraw/main/surface_main.c
Modified: trunk/reactos/lib/ddraw/rosdraw.h
Modified: trunk/reactos/lib/ddraw/soft/surface_hel.c
_____
Modified: trunk/reactos/lib/ddraw/hal/surface_hal.c
--- trunk/reactos/lib/ddraw/hal/surface_hal.c 2005-11-01 17:01:36 UTC
(rev 18933)
+++ trunk/reactos/lib/ddraw/hal/surface_hal.c 2005-11-01 18:27:09 UTC
(rev 18934)
@@ -10,6 +10,112 @@
#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(Th
is->ddsd.ddckCKDestBlt));
+
RtlCopyMemory(&This->ddsd.ddckCKDestOverlay,&pDDSD2->ddckCKDestOverlay,s
izeof(This->ddsd.ddckCKDestOverlay));
+
RtlCopyMemory(&This->ddsd.ddckCKSrcBlt,&pDDSD2->ddckCKSrcBlt,sizeof(This
->ddsd.ddckCKSrcBlt));
+
RtlCopyMemory(&This->ddsd.ddckCKSrcOverlay,&pDDSD2->ddckCKSrcOverlay,siz
eof(This->ddsd.ddckCKSrcOverlay));
+
RtlCopyMemory(&This->ddsd.ddpfPixelFormat,&pDDSD2->ddpfPixelFormat,sizeo
f(This->ddsd.ddpfPixelFormat));
+
RtlCopyMemory(&This->ddsd.ddsCaps,&pDDSD2->ddsCaps,sizeof(This->ddsd.dds
Caps));
+
+ 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->DirectDrawGlobal.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->DirectDrawGlobal;
+ CanCreateData.lpDDSurfaceDesc =
(LPDDSURFACEDESC)&This->ddsd;
+
+ if
(This->owner->DirectDrawGlobal.lpDDCBtmp->HALDD.CanCreateSurface(&CanCre
ateData) == DDHAL_DRIVER_NOTHANDLED)
+ return DDERR_INVALIDPARAMS;
+
+ if(CanCreateData.ddRVal != DD_OK)
+ return CanCreateData.ddRVal;
+ }
+
+ /************ Create Surface ***********************/
+
+ /* FIXME we are skipping filling in some data, I do not care for
now */
+
+ LPDDRAWI_DIRECTDRAW_GBL pDirectDrawGlobal =
&This->owner->DirectDrawGlobal;
+ This->ddsd.dwFlags = DDSD_CAPS;
+ This->ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE;
+
+ /* surface global struct */
+ memset(&This->Global, 0, sizeof(DDRAWI_DDRAWSURFACE_GBL));
+ This->Global.lpDD = &This->owner->DirectDrawGlobal;
+ This->Global.wHeight =
This->owner->DirectDrawGlobal.vmiData.dwDisplayHeight;
+ This->Global.wWidth =
This->owner->DirectDrawGlobal.vmiData.dwDisplayWidth;
+ This->Global.dwLinearSize =
This->owner->DirectDrawGlobal.vmiData.lDisplayPitch;
+
+
+ /* surface more struct */
+ memset(&This->More, 0, sizeof(DDRAWI_DDRAWSURFACE_MORE));
+ This->More.dwSize = sizeof(DDRAWI_DDRAWSURFACE_MORE);
+
+ /* surface local struct */
+
+ memset(&This->Local, 0, sizeof(DDRAWI_DDRAWSURFACE_LCL));
+ This->Local.lpGbl = &This->Global;
+ This->Local.lpSurfMore = &This->More;
+
+ /* FIXME do a memcopy */
+ This->Local.ddsCaps = *(DDSCAPS*)&This->ddsd.ddsCaps;
+
+ /* for the double pointer below */
+ DDRAWI_DDRAWSURFACE_LCL *pLocal[2];
+ pLocal[0] = &This->Local;
+ pLocal[1] = NULL;
+
+ /* the parameter struct */
+ DDHAL_CREATESURFACEDATA CreateData;
+ memset(&CreateData, 0, sizeof(DDHAL_CREATESURFACEDATA));
+ CreateData.lpDD = pDirectDrawGlobal;
+ CreateData.lpDDSurfaceDesc = (LPDDSURFACEDESC) &This->ddsd;
+ CreateData.dwSCnt = 1;
+ CreateData.lplpSList = pLocal;
+ CreateData.ddRVal = DD_FALSE;
+
+ /* this is the call we were waiting for */
+
if(This->owner->DirectDrawGlobal.lpDDCBtmp->HALDD.CreateSurface(&CreateD
ata) == DDHAL_DRIVER_NOTHANDLED)
+ return DDERR_INVALIDPARAMS;
+
+ /* 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)
{
_____
Modified: trunk/reactos/lib/ddraw/main/surface_main.c
--- trunk/reactos/lib/ddraw/main/surface_main.c 2005-11-01 17:01:36 UTC
(rev 18933)
+++ trunk/reactos/lib/ddraw/main/surface_main.c 2005-11-01 18:27:09 UTC
(rev 18934)
@@ -13,107 +13,16 @@
HRESULT WINAPI Main_DDrawSurface_Initialize (LPDIRECTDRAWSURFACE7
iface, LPDIRECTDRAW pDD, LPDDSURFACEDESC2 pDDSD2)
{
- IDirectDrawSurfaceImpl* This = (IDirectDrawSurfaceImpl*)iface;
+ IDirectDrawSurfaceImpl* This = (IDirectDrawSurfaceImpl*)iface;
- if(sizeof(DDSURFACEDESC2) != pDDSD2->dwSize)
- return DDERR_UNSUPPORTED;
+ /* Call the Hal CreateSurface */
+ if (This->owner->DirectDrawGlobal.lpDDCBtmp->HALDD.dwFlags &
DDHAL_CB32_CREATESURFACE)
+ {
+ return Hal_DDrawSurface_Initialize (iface, pDD, pDDSD2);
+ }
- 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(Th
is->ddsd.ddckCKDestBlt));
-
RtlCopyMemory(&This->ddsd.ddckCKDestOverlay,&pDDSD2->ddckCKDestOverlay,s
izeof(This->ddsd.ddckCKDestOverlay));
-
RtlCopyMemory(&This->ddsd.ddckCKSrcBlt,&pDDSD2->ddckCKSrcBlt,sizeof(This
->ddsd.ddckCKSrcBlt));
-
RtlCopyMemory(&This->ddsd.ddckCKSrcOverlay,&pDDSD2->ddckCKSrcOverlay,siz
eof(This->ddsd.ddckCKSrcOverlay));
-
RtlCopyMemory(&This->ddsd.ddpfPixelFormat,&pDDSD2->ddpfPixelFormat,sizeo
f(This->ddsd.ddpfPixelFormat));
-
RtlCopyMemory(&This->ddsd.ddsCaps,&pDDSD2->ddsCaps,sizeof(This->ddsd.dds
Caps));
-
- 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->DirectDrawGlobal.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->DirectDrawGlobal;
- CanCreateData.lpDDSurfaceDesc =
(LPDDSURFACEDESC)&This->ddsd;
-
- if
(This->owner->DirectDrawGlobal.lpDDCBtmp->HALDD.CanCreateSurface(&CanCre
ateData) == DDHAL_DRIVER_NOTHANDLED)
- return DDERR_INVALIDPARAMS;
-
- if(CanCreateData.ddRVal != DD_OK)
- return CanCreateData.ddRVal;
- }
-
- /************ Create Surface ***********************/
-
- /* FIXME we are skipping filling in some data, I do not care for
now */
-
- LPDDRAWI_DIRECTDRAW_GBL pDirectDrawGlobal =
&This->owner->DirectDrawGlobal;
- This->ddsd.dwFlags = DDSD_CAPS;
- This->ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE;
-
- /* surface global struct */
- memset(&This->Global, 0, sizeof(DDRAWI_DDRAWSURFACE_GBL));
- This->Global.lpDD = &This->owner->DirectDrawGlobal;
- This->Global.wHeight =
This->owner->DirectDrawGlobal.vmiData.dwDisplayHeight;
- This->Global.wWidth =
This->owner->DirectDrawGlobal.vmiData.dwDisplayWidth;
- This->Global.dwLinearSize =
This->owner->DirectDrawGlobal.vmiData.lDisplayPitch;
-
-
- /* surface more struct */
- memset(&This->More, 0, sizeof(DDRAWI_DDRAWSURFACE_MORE));
- This->More.dwSize = sizeof(DDRAWI_DDRAWSURFACE_MORE);
-
- /* surface local struct */
-
- memset(&This->Local, 0, sizeof(DDRAWI_DDRAWSURFACE_LCL));
- This->Local.lpGbl = &This->Global;
- This->Local.lpSurfMore = &This->More;
-
- /* FIXME do a memcopy */
- This->Local.ddsCaps = *(DDSCAPS*)&This->ddsd.ddsCaps;
-
- /* for the double pointer below */
- DDRAWI_DDRAWSURFACE_LCL *pLocal[2];
- pLocal[0] = &This->Local;
- pLocal[1] = NULL;
-
- /* the parameter struct */
- DDHAL_CREATESURFACEDATA CreateData;
- memset(&CreateData, 0, sizeof(DDHAL_CREATESURFACEDATA));
- CreateData.lpDD = pDirectDrawGlobal;
- CreateData.lpDDSurfaceDesc = (LPDDSURFACEDESC) &This->ddsd;
- CreateData.dwSCnt = 1;
- CreateData.lplpSList = pLocal;
- CreateData.ddRVal = DD_FALSE;
-
- /* this is the call we were waiting for */
-
if(This->owner->DirectDrawGlobal.lpDDCBtmp->HALDD.CreateSurface(&CreateD
ata) == DDHAL_DRIVER_NOTHANDLED)
- return DDERR_INVALIDPARAMS;
-
- /* 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;
+ /* Call Hel if Hal of CreateSurface is not supported */
+ return Hel_DDrawSurface_Initialize (iface, pDD, pDDSD2);
}
ULONG WINAPI Main_DDrawSurface_AddRef(LPDIRECTDRAWSURFACE7 iface)
_____
Modified: trunk/reactos/lib/ddraw/rosdraw.h
--- trunk/reactos/lib/ddraw/rosdraw.h 2005-11-01 17:01:36 UTC (rev
18933)
+++ trunk/reactos/lib/ddraw/rosdraw.h 2005-11-01 18:27:09 UTC (rev
18934)
@@ -97,6 +97,7 @@
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 );
@@ -108,6 +109,7 @@
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 ***********/
_____
Modified: trunk/reactos/lib/ddraw/soft/surface_hel.c
--- trunk/reactos/lib/ddraw/soft/surface_hel.c 2005-11-01 17:01:36 UTC
(rev 18933)
+++ trunk/reactos/lib/ddraw/soft/surface_hel.c 2005-11-01 18:27:09 UTC
(rev 18934)
@@ -10,6 +10,11 @@
#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)
{