implemented DdCreateD3DBuffer callbacks and some cleanup

svn path=/trunk/; revision=32550
This commit is contained in:
Magnus Olsen 2008-03-03 20:54:18 +00:00
parent e8678dcf3a
commit 5a081cfc0a

View file

@ -312,10 +312,10 @@ DdCreateSurface(LPDDHAL_CREATESURFACEDATA pCreateSurface)
* we create the size activate this IF when you start doing the optimze and please also * we create the size activate this IF when you start doing the optimze and please also
* take report from user which value they got here * take report from user which value they got here
*/ */
#if 0 #if 1
{ {
char buffer[1024]; \ char buffer[1024]; \
sprintf ( buffer, "Function %s : Optimze max to %d Surface ? (%s:%d)\n", __FUNCTION__,SurfaceCount,__FILE__,__LINE__ ); sprintf ( buffer, "Function %s : Optimze max to %d Surface ? (%s:%d)\n", __FUNCTION__, (int)SurfaceCount,__FILE__,__LINE__ );
OutputDebugStringA(buffer); OutputDebugStringA(buffer);
} }
#endif #endif
@ -761,7 +761,6 @@ DvpGetVideoPortInputFormats(LPDDHAL_GETVPORTINPUTFORMATDATA pDvdGetVideoPortInpu
return NtGdiDvpGetVideoPortInputFormats(pDvdGetVideoPortInputFormat->lpVideoPort->hDDVideoPort, (PDD_GETVPORTINPUTFORMATDATA) pDvdGetVideoPortInputFormat); return NtGdiDvpGetVideoPortInputFormats(pDvdGetVideoPortInputFormat->lpVideoPort->hDDVideoPort, (PDD_GETVPORTINPUTFORMATDATA) pDvdGetVideoPortInputFormat);
} }
/* /*
* @implemented * @implemented
* *
@ -786,7 +785,6 @@ DvpGetVideoPortOutputFormats(LPDDHAL_GETVPORTLINEDATA pDvdGetVideoPortOutputForm
return NtGdiDvpGetVideoPortLine(pDvdGetVideoPortOutputFormat->lpVideoPort->hDDVideoPort, (PDD_GETVPORTLINEDATA)pDvdGetVideoPortOutputFormat); return NtGdiDvpGetVideoPortLine(pDvdGetVideoPortOutputFormat->lpVideoPort->hDDVideoPort, (PDD_GETVPORTLINEDATA)pDvdGetVideoPortOutputFormat);
} }
/* /*
* @implemented * @implemented
* *
@ -857,7 +855,6 @@ DdColorControl(LPDDHAL_COLORCONTROLDATA pDdColorControl)
return NtGdiDdColorControl( (HANDLE) pDdColorControl->lpDDSurface->hDDSurface, (PDD_COLORCONTROLDATA) &pDdColorControl); return NtGdiDdColorControl( (HANDLE) pDdColorControl->lpDDSurface->hDDSurface, (PDD_COLORCONTROLDATA) &pDdColorControl);
} }
/* /*
* @implemented * @implemented
* *
@ -882,9 +879,6 @@ DdFlipToGDISurface(LPDDHAL_FLIPTOGDISURFACEDATA pDdFlipToGDISurface)
return NtGdiDdFlipToGDISurface( GetDdHandle(pDdFlipToGDISurface->lpDD->hDD), (PDD_FLIPTOGDISURFACEDATA) &pDdFlipToGDISurface); return NtGdiDdFlipToGDISurface( GetDdHandle(pDdFlipToGDISurface->lpDD->hDD), (PDD_FLIPTOGDISURFACEDATA) &pDdFlipToGDISurface);
} }
/* TODO */ /* TODO */
DWORD DWORD
WINAPI WINAPI
@ -1239,7 +1233,6 @@ D3dContextCreate(LPD3DHAL_CONTEXTCREATEDATA pdcci)
(D3DNTHAL_CONTEXTCREATEI *)pdcci); (D3DNTHAL_CONTEXTCREATEI *)pdcci);
} }
/* /*
* @implemented * @implemented
* *
@ -1262,24 +1255,73 @@ DdCanCreateD3DBuffer(LPDDHAL_CANCREATESURFACEDATA CanCreateD3DBuffer)
} }
/* TODO : finish all fixme */ /*
* @implemented
*
* DdCreateD3DBuffer
*/
DWORD DWORD
WINAPI WINAPI
DdCreateD3DBuffer(LPDDHAL_CREATESURFACEDATA pCreateSurface) DdCreateD3DBuffer(LPDDHAL_CREATESURFACEDATA pCreateSurface)
{ {
HANDLE puhSurface = 0;
DDRAWI_DDRAWSURFACE_GBL *pSurfGBL;
DDRAWI_DDRAWSURFACE_LCL *pSurfLcl;
DD_SURFACE_GLOBAL puSurfaceGlobalData; DD_SURFACE_GLOBAL puSurfaceGlobalData;
DD_SURFACE_MORE puSurfaceMoreData; DD_SURFACE_MORE puSurfaceMoreData;
DD_SURFACE_LOCAL puSurfaceLocalData; DD_SURFACE_LOCAL puSurfaceLocalData;
DWORD retValue;
memset(&puSurfaceGlobalData, 0, sizeof(DD_SURFACE_GLOBAL) ); /* Zero all local memory pointer */
memset(&puSurfaceMoreData, 0, sizeof(DD_SURFACE_MORE) ) ; RtlZeroMemory(&puSurfaceGlobalData, sizeof(DD_SURFACE_GLOBAL) );
memset(&puSurfaceLocalData, 0, sizeof(DD_SURFACE_LOCAL) ); RtlZeroMemory(&puSurfaceMoreData, sizeof(DD_SURFACE_MORE) ) ;
RtlZeroMemory(&puSurfaceLocalData, sizeof(DD_SURFACE_LOCAL) );
/* FIXME convert the struct to right ones and setup for syscall, then retranslated the info back to pCreateSurface */ pCreateSurface->dwSCnt = 1;
pSurfLcl = pCreateSurface->lplpSList[0];
pSurfGBL = pSurfLcl->lpGbl;
/* FIXME not supported yet */ /* Convert DDRAWI_DDRAWSURFACE_GBL to DD_SURFACE_GLOBAL */
return 0; puSurfaceGlobalData.wWidth = pSurfGBL->wWidth;
puSurfaceGlobalData.wHeight = pSurfGBL->wHeight;
puSurfaceGlobalData.dwLinearSize = pSurfGBL->dwLinearSize;
puSurfaceGlobalData.fpVidMem = pSurfGBL->fpVidMem;
puSurfaceGlobalData.dwBlockSizeX = pSurfGBL->dwBlockSizeX;
puSurfaceGlobalData.dwBlockSizeY = pSurfGBL->dwBlockSizeY;
/* Convert DDRAWI_DDRAWSURFACE_MORE to DD_SURFACE_MORE */
puSurfaceMoreData.dwSurfaceHandle = pSurfLcl->lpSurfMore->dwSurfaceHandle;
puSurfaceMoreData.ddsCapsEx.dwCaps2 = pSurfLcl->lpSurfMore->ddsCapsEx.dwCaps2;
puSurfaceMoreData.ddsCapsEx.dwCaps3 = pSurfLcl->lpSurfMore->ddsCapsEx.dwCaps3;
puSurfaceMoreData.ddsCapsEx.dwCaps4 = pSurfLcl->lpSurfMore->ddsCapsEx.dwCaps4;
/* Convert DDRAWI_DDRAWSURFACE_LCL to DD_SURFACE_LOCAL */
puSurfaceLocalData.dwFlags = pSurfLcl->dwFlags;
puSurfaceLocalData.ddsCaps.dwCaps = pSurfLcl->ddsCaps.dwCaps;
/* Call win32k */
retValue = NtGdiDdCreateD3DBuffer( GetDdHandle(pCreateSurface->lpDD->hDD),
(HANDLE*)&pSurfLcl->hDDSurface,
pCreateSurface->lpDDSurfaceDesc,
&puSurfaceGlobalData,
&puSurfaceLocalData,
&puSurfaceMoreData,
(DD_CREATESURFACEDATA *) pCreateSurface,
&puhSurface);
/* Setup surface handle if we got one back */
if ( puhSurface != NULL )
{
pCreateSurface->lplpSList[0]->hDDSurface = (ULONG_PTR)puhSurface;
}
/* Convert DD_SURFACE_GLOBAL to DDRAWI_DDRAWSURFACE_GBL */
pSurfGBL->dwLinearSize = puSurfaceGlobalData.dwLinearSize;
pSurfGBL->fpVidMem = puSurfaceGlobalData.fpVidMem;
pSurfGBL->dwBlockSizeX = puSurfaceGlobalData.dwBlockSizeX;
pSurfGBL->dwBlockSizeY = puSurfaceGlobalData.dwBlockSizeY;
return retValue;
} }
/* /*
@ -1294,6 +1336,7 @@ DdDestroyD3DBuffer(LPDDHAL_DESTROYSURFACEDATA pDestroySurface)
DWORD retValue = 0; DWORD retValue = 0;
if ( pDestroySurface->lpDDSurface->hDDSurface) if ( pDestroySurface->lpDDSurface->hDDSurface)
{ {
/* Call win32k */
retValue = NtGdiDdDestroyD3DBuffer((HANDLE)pDestroySurface->lpDDSurface->hDDSurface); retValue = NtGdiDdDestroyD3DBuffer((HANDLE)pDestroySurface->lpDDSurface->hDDSurface);
} }