mirror of
https://github.com/reactos/reactos.git
synced 2025-08-05 02:15:43 +00:00
implemented DdCreateD3DBuffer callbacks and some cleanup
svn path=/trunk/; revision=32550
This commit is contained in:
parent
e8678dcf3a
commit
5a081cfc0a
1 changed files with 98 additions and 55 deletions
|
@ -139,7 +139,7 @@ DdLock(LPDDHAL_LOCKDATA Lock)
|
||||||
/* Call win32k */
|
/* Call win32k */
|
||||||
return NtGdiDdLock((HANDLE)Lock->lpDDSurface->hDDSurface,
|
return NtGdiDdLock((HANDLE)Lock->lpDDSurface->hDDSurface,
|
||||||
(PDD_LOCKDATA)Lock,
|
(PDD_LOCKDATA)Lock,
|
||||||
(HANDLE)Lock->lpDDSurface->hDC);
|
(HANDLE)Lock->lpDDSurface->hDC);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -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
|
||||||
|
@ -691,7 +691,7 @@ DvpUpdateVideoPort(LPDDHAL_UPDATEVPORTDATA pDvdUpdateVideoPort)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
HANDLE phSurfaceVideo[10];
|
HANDLE phSurfaceVideo[10];
|
||||||
HANDLE phSurfaceVbi[10];
|
HANDLE phSurfaceVbi[10];
|
||||||
|
|
||||||
if (pDvdUpdateVideoPort->dwFlags != DDRAWI_VPORTSTOP)
|
if (pDvdUpdateVideoPort->dwFlags != DDRAWI_VPORTSTOP)
|
||||||
{
|
{
|
||||||
|
@ -729,7 +729,7 @@ DvpUpdateVideoPort(LPDDHAL_UPDATEVPORTDATA pDvdUpdateVideoPort)
|
||||||
{
|
{
|
||||||
dwNumVBIAutoflip = 10;
|
dwNumVBIAutoflip = 10;
|
||||||
}
|
}
|
||||||
memcpy(phSurfaceVbi,pDvdUpdateVideoPort->lplpDDVBISurface,dwNumVBIAutoflip*sizeof(HANDLE));
|
memcpy(phSurfaceVbi,pDvdUpdateVideoPort->lplpDDVBISurface,dwNumVBIAutoflip*sizeof(HANDLE));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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
|
||||||
*
|
*
|
||||||
|
@ -824,7 +822,7 @@ DdAlphaBlt(LPDDHAL_BLTDATA pDdAlphaBlt)
|
||||||
|
|
||||||
if (pDdAlphaBlt->lpDDSrcSurface != 0)
|
if (pDdAlphaBlt->lpDDSrcSurface != 0)
|
||||||
{
|
{
|
||||||
hDDSrcSurface = (HANDLE) pDdAlphaBlt->lpDDSrcSurface->hDDSurface;
|
hDDSrcSurface = (HANDLE) pDdAlphaBlt->lpDDSrcSurface->hDDSurface;
|
||||||
}
|
}
|
||||||
|
|
||||||
return NtGdiDdAlphaBlt((HANDLE)pDdAlphaBlt->lpDDDestSurface->hDDSurface, hDDSrcSurface, (PDD_BLTDATA)&pDdAlphaBlt);
|
return NtGdiDdAlphaBlt((HANDLE)pDdAlphaBlt->lpDDDestSurface->hDDSurface, hDDSrcSurface, (PDD_BLTDATA)&pDdAlphaBlt);
|
||||||
|
@ -841,7 +839,7 @@ DdCreateSurfaceEx(LPDDHAL_CREATESURFACEEXDATA pDdCreateSurfaceEx)
|
||||||
{
|
{
|
||||||
pDdCreateSurfaceEx->ddRVal = NtGdiDdCreateSurfaceEx( GetDdHandle(pDdCreateSurfaceEx->lpDDLcl->lpGbl->hDD),
|
pDdCreateSurfaceEx->ddRVal = NtGdiDdCreateSurfaceEx( GetDdHandle(pDdCreateSurfaceEx->lpDDLcl->lpGbl->hDD),
|
||||||
(HANDLE)pDdCreateSurfaceEx->lpDDSLcl->hDDSurface,
|
(HANDLE)pDdCreateSurfaceEx->lpDDSLcl->hDDSurface,
|
||||||
pDdCreateSurfaceEx->lpDDSLcl->lpSurfMore->dwSurfaceHandle);
|
pDdCreateSurfaceEx->lpDDSLcl->lpSurfMore->dwSurfaceHandle);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
@ -896,7 +890,7 @@ DdGetDriverInfo(LPDDHAL_GETDRIVERINFODATA pData)
|
||||||
|
|
||||||
/* FIXME add SEH around this functions */
|
/* FIXME add SEH around this functions */
|
||||||
|
|
||||||
RtlZeroMemory(&pDrvInfoData, sizeof (DDHAL_GETDRIVERINFODATA));
|
RtlZeroMemory(&pDrvInfoData, sizeof (DDHAL_GETDRIVERINFODATA));
|
||||||
RtlCopyMemory(&pDrvInfoData.guidInfo, &pData->guidInfo, sizeof(GUID));
|
RtlCopyMemory(&pDrvInfoData.guidInfo, &pData->guidInfo, sizeof(GUID));
|
||||||
|
|
||||||
hDD = GetDdHandle(pData->dwContext);
|
hDD = GetDdHandle(pData->dwContext);
|
||||||
|
@ -910,15 +904,15 @@ DdGetDriverInfo(LPDDHAL_GETDRIVERINFODATA pData)
|
||||||
if (IsEqualGUID(&pData->guidInfo, &GUID_VideoPortCallbacks))
|
if (IsEqualGUID(&pData->guidInfo, &GUID_VideoPortCallbacks))
|
||||||
{
|
{
|
||||||
DDHAL_DDVIDEOPORTCALLBACKS pDvdPort;
|
DDHAL_DDVIDEOPORTCALLBACKS pDvdPort;
|
||||||
DDHAL_DDVIDEOPORTCALLBACKS* pUserDvdPort = (DDHAL_DDVIDEOPORTCALLBACKS *)pData->lpvData;
|
DDHAL_DDVIDEOPORTCALLBACKS* pUserDvdPort = (DDHAL_DDVIDEOPORTCALLBACKS *)pData->lpvData;
|
||||||
|
|
||||||
/* Clear internal out buffer and set it up*/
|
/* Clear internal out buffer and set it up*/
|
||||||
RtlZeroMemory(&pDvdPort, DDVIDEOPORTCALLBACKSSIZE);
|
RtlZeroMemory(&pDvdPort, DDVIDEOPORTCALLBACKSSIZE);
|
||||||
pDvdPort.dwSize = DDVIDEOPORTCALLBACKSSIZE;
|
pDvdPort.dwSize = DDVIDEOPORTCALLBACKSSIZE;
|
||||||
|
|
||||||
/* set up internal buffer */
|
/* set up internal buffer */
|
||||||
pDrvInfoData.lpvData = (PVOID)&pDvdPort;
|
pDrvInfoData.lpvData = (PVOID)&pDvdPort;
|
||||||
pDrvInfoData.dwExpectedSize = DDVIDEOPORTCALLBACKSSIZE ;
|
pDrvInfoData.dwExpectedSize = DDVIDEOPORTCALLBACKSSIZE ;
|
||||||
|
|
||||||
/* Call win32k */
|
/* Call win32k */
|
||||||
retValue = NtGdiDdGetDriverInfo(hDD, (PDD_GETDRIVERINFODATA)&pDrvInfoData);
|
retValue = NtGdiDdGetDriverInfo(hDD, (PDD_GETDRIVERINFODATA)&pDrvInfoData);
|
||||||
|
@ -1011,19 +1005,19 @@ DdGetDriverInfo(LPDDHAL_GETDRIVERINFODATA pData)
|
||||||
RtlZeroMemory(&pColorControl, DDCOLORCONTROLCALLBACKSSIZE);
|
RtlZeroMemory(&pColorControl, DDCOLORCONTROLCALLBACKSSIZE);
|
||||||
pColorControl.dwSize = DDCOLORCONTROLCALLBACKSSIZE;
|
pColorControl.dwSize = DDCOLORCONTROLCALLBACKSSIZE;
|
||||||
|
|
||||||
/* set up internal buffer */
|
/* set up internal buffer */
|
||||||
pDrvInfoData.lpvData = (PVOID)&pColorControl;
|
pDrvInfoData.lpvData = (PVOID)&pColorControl;
|
||||||
pDrvInfoData.dwExpectedSize = DDCOLORCONTROLCALLBACKSSIZE ;
|
pDrvInfoData.dwExpectedSize = DDCOLORCONTROLCALLBACKSSIZE ;
|
||||||
|
|
||||||
/* Call win32k */
|
/* Call win32k */
|
||||||
retValue = NtGdiDdGetDriverInfo(hDD, (PDD_GETDRIVERINFODATA)&pDrvInfoData);
|
retValue = NtGdiDdGetDriverInfo(hDD, (PDD_GETDRIVERINFODATA)&pDrvInfoData);
|
||||||
|
|
||||||
pData->dwActualSize = DDCOLORCONTROLCALLBACKSSIZE;
|
pData->dwActualSize = DDCOLORCONTROLCALLBACKSSIZE;
|
||||||
pData->dwFlags = pDrvInfoData.dwFlags;
|
pData->dwFlags = pDrvInfoData.dwFlags;
|
||||||
|
|
||||||
pUserColorControl->dwSize = DDCOLORCONTROLCALLBACKSSIZE;
|
pUserColorControl->dwSize = DDCOLORCONTROLCALLBACKSSIZE;
|
||||||
pUserColorControl->dwFlags = pUserColorControl->dwFlags;
|
pUserColorControl->dwFlags = pUserColorControl->dwFlags;
|
||||||
|
|
||||||
if (pColorControl.ColorControl != NULL)
|
if (pColorControl.ColorControl != NULL)
|
||||||
{
|
{
|
||||||
pUserColorControl->ColorControl = (LPDDHALCOLORCB_COLORCONTROL) DdColorControl;
|
pUserColorControl->ColorControl = (LPDDHALCOLORCB_COLORCONTROL) DdColorControl;
|
||||||
|
@ -1042,15 +1036,15 @@ DdGetDriverInfo(LPDDHAL_GETDRIVERINFODATA pData)
|
||||||
{
|
{
|
||||||
DDHAL_DDMISCELLANEOUSCALLBACKS pMisc;
|
DDHAL_DDMISCELLANEOUSCALLBACKS pMisc;
|
||||||
DDHAL_DDMISCELLANEOUSCALLBACKS* pUserMisc = (DDHAL_DDMISCELLANEOUSCALLBACKS *)pData->lpvData;
|
DDHAL_DDMISCELLANEOUSCALLBACKS* pUserMisc = (DDHAL_DDMISCELLANEOUSCALLBACKS *)pData->lpvData;
|
||||||
|
|
||||||
/* Clear internal out buffer and set it up*/
|
/* Clear internal out buffer and set it up*/
|
||||||
RtlZeroMemory(&pMisc, DDMISCELLANEOUSCALLBACKSSIZE);
|
RtlZeroMemory(&pMisc, DDMISCELLANEOUSCALLBACKSSIZE);
|
||||||
pMisc.dwSize = DDMISCELLANEOUSCALLBACKSSIZE;
|
pMisc.dwSize = DDMISCELLANEOUSCALLBACKSSIZE;
|
||||||
|
|
||||||
/* set up internal buffer */
|
/* set up internal buffer */
|
||||||
pDrvInfoData.lpvData = (PVOID)&pMisc;
|
pDrvInfoData.lpvData = (PVOID)&pMisc;
|
||||||
pDrvInfoData.dwExpectedSize = DDMISCELLANEOUSCALLBACKSSIZE ;
|
pDrvInfoData.dwExpectedSize = DDMISCELLANEOUSCALLBACKSSIZE ;
|
||||||
|
|
||||||
/* Call win32k */
|
/* Call win32k */
|
||||||
retValue = NtGdiDdGetDriverInfo(hDD, (PDD_GETDRIVERINFODATA)&pDrvInfoData);
|
retValue = NtGdiDdGetDriverInfo(hDD, (PDD_GETDRIVERINFODATA)&pDrvInfoData);
|
||||||
|
|
||||||
|
@ -1083,9 +1077,9 @@ DdGetDriverInfo(LPDDHAL_GETDRIVERINFODATA pData)
|
||||||
RtlZeroMemory(&pMisc, DDMISCELLANEOUS2CALLBACKSSIZE);
|
RtlZeroMemory(&pMisc, DDMISCELLANEOUS2CALLBACKSSIZE);
|
||||||
pMisc.dwSize = DDMISCELLANEOUS2CALLBACKSSIZE;
|
pMisc.dwSize = DDMISCELLANEOUS2CALLBACKSSIZE;
|
||||||
|
|
||||||
/* set up internal buffer */
|
/* set up internal buffer */
|
||||||
pDrvInfoData.lpvData = (PVOID)&pMisc;
|
pDrvInfoData.lpvData = (PVOID)&pMisc;
|
||||||
pDrvInfoData.dwExpectedSize = DDMISCELLANEOUS2CALLBACKSSIZE ;
|
pDrvInfoData.dwExpectedSize = DDMISCELLANEOUS2CALLBACKSSIZE ;
|
||||||
|
|
||||||
/* Call win32k */
|
/* Call win32k */
|
||||||
retValue = NtGdiDdGetDriverInfo(hDD, (PDD_GETDRIVERINFODATA)&pDrvInfoData);
|
retValue = NtGdiDdGetDriverInfo(hDD, (PDD_GETDRIVERINFODATA)&pDrvInfoData);
|
||||||
|
@ -1133,9 +1127,9 @@ DdGetDriverInfo(LPDDHAL_GETDRIVERINFODATA pData)
|
||||||
RtlZeroMemory(&pNtKernel, sizeof(DD_NTCALLBACKS));
|
RtlZeroMemory(&pNtKernel, sizeof(DD_NTCALLBACKS));
|
||||||
pNtKernel.dwSize = sizeof(DD_NTCALLBACKS);
|
pNtKernel.dwSize = sizeof(DD_NTCALLBACKS);
|
||||||
|
|
||||||
/* set up internal buffer */
|
/* set up internal buffer */
|
||||||
pDrvInfoData.lpvData = (PVOID)&pNtKernel;
|
pDrvInfoData.lpvData = (PVOID)&pNtKernel;
|
||||||
pDrvInfoData.dwExpectedSize = sizeof(DD_NTCALLBACKS) ;
|
pDrvInfoData.dwExpectedSize = sizeof(DD_NTCALLBACKS) ;
|
||||||
|
|
||||||
/* Call win32k */
|
/* Call win32k */
|
||||||
retValue = NtGdiDdGetDriverInfo(hDD, (PDD_GETDRIVERINFODATA)&pDrvInfoData);
|
retValue = NtGdiDdGetDriverInfo(hDD, (PDD_GETDRIVERINFODATA)&pDrvInfoData);
|
||||||
|
@ -1143,11 +1137,11 @@ DdGetDriverInfo(LPDDHAL_GETDRIVERINFODATA pData)
|
||||||
pData->dwActualSize = sizeof(DD_NTCALLBACKS);
|
pData->dwActualSize = sizeof(DD_NTCALLBACKS);
|
||||||
|
|
||||||
pUserNtKernel->dwSize = sizeof(DD_NTCALLBACKS);
|
pUserNtKernel->dwSize = sizeof(DD_NTCALLBACKS);
|
||||||
pUserNtKernel->dwFlags = pNtKernel.dwFlags;
|
pUserNtKernel->dwFlags = pNtKernel.dwFlags;
|
||||||
pUserNtKernel->FreeDriverMemory = 0;
|
pUserNtKernel->FreeDriverMemory = 0;
|
||||||
|
|
||||||
if (pNtKernel.SetExclusiveMode)
|
if (pNtKernel.SetExclusiveMode)
|
||||||
{
|
{
|
||||||
pUserNtKernel->SetExclusiveMode = (PDD_SETEXCLUSIVEMODE) DdSetExclusiveMode;
|
pUserNtKernel->SetExclusiveMode = (PDD_SETEXCLUSIVEMODE) DdSetExclusiveMode;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1161,7 +1155,7 @@ DdGetDriverInfo(LPDDHAL_GETDRIVERINFODATA pData)
|
||||||
* ReactOS keep this behoir to be compatible with
|
* ReactOS keep this behoir to be compatible with
|
||||||
* Windows XP
|
* Windows XP
|
||||||
*/
|
*/
|
||||||
pData->ddRVal = retValue;
|
pData->ddRVal = retValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* D3D Callbacks version 2 check and setup for DirectX/ ReactX */
|
/* D3D Callbacks version 2 check and setup for DirectX/ ReactX */
|
||||||
|
@ -1196,15 +1190,15 @@ DdGetDriverInfo(LPDDHAL_GETDRIVERINFODATA pData)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* set up internal buffer */
|
/* set up internal buffer */
|
||||||
pDrvInfoData.dwExpectedSize = pData->dwExpectedSize;
|
pDrvInfoData.dwExpectedSize = pData->dwExpectedSize;
|
||||||
pDrvInfoData.lpvData = pData->lpvData;
|
pDrvInfoData.lpvData = pData->lpvData;
|
||||||
|
|
||||||
/* We do not cover all callbacks for user mode, they are only cover by kmode */
|
/* We do not cover all callbacks for user mode, they are only cover by kmode */
|
||||||
retValue = NtGdiDdGetDriverInfo(hDD, (PDD_GETDRIVERINFODATA)&pDrvInfoData);
|
retValue = NtGdiDdGetDriverInfo(hDD, (PDD_GETDRIVERINFODATA)&pDrvInfoData);
|
||||||
|
|
||||||
/* Setup return data */
|
/* Setup return data */
|
||||||
pData->dwActualSize = pDrvInfoData.dwActualSize;
|
pData->dwActualSize = pDrvInfoData.dwActualSize;
|
||||||
pData->lpvData = pDrvInfoData.lpvData;
|
pData->lpvData = pDrvInfoData.lpvData;
|
||||||
/* Windows XP never repot back the true return value,
|
/* Windows XP never repot back the true return value,
|
||||||
* it only report back if we have a driver or not
|
* it only report back if we have a driver or not
|
||||||
* ReactOS keep this behoir to be compatible with
|
* ReactOS keep this behoir to be compatible with
|
||||||
|
@ -1235,11 +1229,10 @@ D3dContextCreate(LPD3DHAL_CONTEXTCREATEDATA pdcci)
|
||||||
|
|
||||||
return NtGdiD3dContextCreate(GetDdHandle(pdcci->lpDDLcl->hDD),
|
return NtGdiD3dContextCreate(GetDdHandle(pdcci->lpDDLcl->hDD),
|
||||||
(HANDLE)pdcci->lpDDSLcl->hDDSurface,
|
(HANDLE)pdcci->lpDDSLcl->hDDSurface,
|
||||||
hSurfZ,
|
hSurfZ,
|
||||||
(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) );
|
|
||||||
memset(&puSurfaceMoreData, 0, sizeof(DD_SURFACE_MORE) ) ;
|
|
||||||
memset(&puSurfaceLocalData, 0, sizeof(DD_SURFACE_LOCAL) );
|
|
||||||
|
|
||||||
/* FIXME convert the struct to right ones and setup for syscall, then retranslated the info back to pCreateSurface */
|
|
||||||
|
|
||||||
/* FIXME not supported yet */
|
/* Zero all local memory pointer */
|
||||||
return 0;
|
RtlZeroMemory(&puSurfaceGlobalData, sizeof(DD_SURFACE_GLOBAL) );
|
||||||
|
RtlZeroMemory(&puSurfaceMoreData, sizeof(DD_SURFACE_MORE) ) ;
|
||||||
|
RtlZeroMemory(&puSurfaceLocalData, sizeof(DD_SURFACE_LOCAL) );
|
||||||
|
|
||||||
|
pCreateSurface->dwSCnt = 1;
|
||||||
|
pSurfLcl = pCreateSurface->lplpSList[0];
|
||||||
|
pSurfGBL = pSurfLcl->lpGbl;
|
||||||
|
|
||||||
|
/* Convert DDRAWI_DDRAWSURFACE_GBL to DD_SURFACE_GLOBAL */
|
||||||
|
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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue