Thank CodeMercenary (CodeMercenary at hotmail dot com) that provide ms ddk example driver code is wrong for how to write a graphice driver with dx support. he gave me input and provide the ddk example code is wrong.

Now I change the desgin after correct infomations
so it lead to even less overhead of code. 
 
 

svn path=/trunk/; revision=26157
This commit is contained in:
Magnus Olsen 2007-03-23 12:47:19 +00:00
parent b7763201df
commit b54c8f6b9b

View file

@ -206,66 +206,37 @@ DWORD STDCALL NtGdiDdCreateSurface(
pLocal = &phsurface->Local;
pMore = &phsurface->More;
pGlobal = &phsurface->Global;
/* FIXME we only support one surface for now */
phsurface->CreateSurfaceData.dwSCnt = 1;
phsurface->lcllist[0] = 0;
phsurface->lcllist[1] = 0;
phsurface->CreateSurfaceData.lplpSList = (PDD_SURFACE_LOCAL *) &phsurface->lcllist;
for (i = 0; i < phsurface->CreateSurfaceData.dwSCnt; i++)
{
phsurface->lcllist[i] = (PDD_SURFACE_LOCAL)pLocal;
pLocal->lpGbl = pGlobal;
pLocal->lpSurfMore = pMore;
i = 0;
// for (i = 0; i < phsurface->CreateSurfaceData.dwSCnt; i++)
//{
phsurface->lcl.hDDSurface = (ULONG_PTR)myhSurface[i];
phsurface->lcl.ddsCaps.dwCaps = pLocal->ddsCaps.dwCaps;
phsurface->lcl.dwFlags =pLocal->dwFlags;
/* FIXME ?
pLocal->lpAttachList;
pLocal->lpAttachListFrom;
*/
/* FIXME a countup to next pLocal, pMore, pGlobal */
phsurface->gpl.wWidth = pGlobal->wWidth;
phsurface->gpl.wHeight = pGlobal->wHeight;
phsurface->gpl.lPitch = pGlobal->lPitch;
phsurface->gpl.fpVidMem = pGlobal->fpVidMem;
phsurface->gpl.dwBlockSizeX = pGlobal->dwBlockSizeX;
phsurface->gpl.dwBlockSizeY = pGlobal->dwBlockSizeY;
RtlCopyMemory( &phsurface->gpl.ddpfSurface , &pGlobal->ddpfSurface, sizeof(DDPIXELFORMAT));
/* FIXME more ?? */
if (pMore)
{
phsurface->more.ddsCapsEx.dwCaps2 = pMore->ddsCapsEx.dwCaps2;
phsurface->more.ddsCapsEx.dwCaps3 = pMore->ddsCapsEx.dwCaps3;
phsurface->more.ddsCapsEx.dwCaps4 = pMore->ddsCapsEx.dwCaps4;
phsurface->lcl.dbnOverlayNode.object_int = (LPDDRAWI_DDRAWSURFACE_INT)pMore->dwSurfaceHandle;
}
phsurface->lcllist[0] = (PDD_SURFACE_LOCAL)&phsurface->lcl;
/* FIXME count up everthing to next position */
// }
}
/* FIXME support for more that one surface */
DPRINT1("setup CreateSurfaceData \n");
/* setup DD_CREATESURFACEDATA CreateSurfaceData for the driver */
phsurface->lcl.lpGbl = &phsurface->gpl;
phsurface->lcl.lpSurfMore = &phsurface->more;
/* FIXME all phsurface->lcl should be in a array then add to lplpSList */
//phsurface->CreateSurfaceData.lplpSList = (PDD_SURFACE_LOCAL *)&phsurface->lcl;
phsurface->CreateSurfaceData.lplpSList = (PDD_SURFACE_LOCAL *) &phsurface->lcllist;
phsurface->CreateSurfaceData.lpDDSurfaceDesc = &phsurface->desc;
phsurface->CreateSurfaceData.CreateSurface = NULL;
phsurface->CreateSurfaceData.ddRVal = DDERR_GENERIC;
phsurface->CreateSurfaceData.lpDD = &pDirectDraw->Global;
/* is this correct the 3d drv whant this data */
// phsurface->lcl.lpGbl->lpDD = &pDirectDraw->Global;
/* the CreateSurface crash with lcl convering */
DPRINT1("DDHAL_CB32_CREATESURFACE\n");
if ((pDirectDraw->DD.dwFlags & DDHAL_CB32_CREATESURFACE))
{
DPRINT1("0x%04x",pDirectDraw->DD.CreateSurface);